diff --git a/.gitignore b/.gitignore index 7064089..7a1d56d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ .DS_Store build/ .vscode/ -tmp/ -doc/html -doc/man +data/ installer \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c3af13..62edbe9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,10 +7,13 @@ include(CMakePackageConfigHelpers) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# ExprTK库在macOS 15.4中编译会有错误 添加以下命令对应检查项 -add_compile_options(-Wno-missing-template-arg-list-after-template-kw) +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + # ExprTK库在macOS 15.4中编译会有错误 添加以下命令对应检查项 + add_compile_options(-Wno-missing-template-arg-list-after-template-kw) +endif() # 添加编译选项 +option(GCTL_DOCKER "Compile the docker image" OFF) option(GCTL_OPENMP "Use the OpenMP library" ON) option(GCTL_NETCDF "Use the NetCDF library" ON) option(GCTL_FFTW3 "Use the FFTW3 library" ON) @@ -27,6 +30,7 @@ set(DIR_VAR ${CMAKE_INSTALL_PREFIX}) message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) message(STATUS "Install prefix: " ${CMAKE_INSTALL_PREFIX}) message(STATUS "Processor: " ${CMAKE_HOST_SYSTEM_PROCESSOR}) +message(STATUS "[GCTL] Compile the docker image: " ${GCTL_DOCKER}) message(STATUS "[GCTL] Use the OpenMP library: " ${GCTL_OPENMP}) message(STATUS "[GCTL] Use the NetCDF library: " ${GCTL_NETCDF}) message(STATUS "[GCTL] Use the FFTW3 library: " ${GCTL_FFTW3}) @@ -102,5 +106,7 @@ configure_file( # 添加库源文件地址 add_subdirectory(lib) -add_subdirectory(example) -add_subdirectory(tool) \ No newline at end of file +if(NOT GCTL_DOCKER) + add_subdirectory(example) + add_subdirectory(tool) +endif() \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e6acf83 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,41 @@ +# 编译平台 +FROM ubuntu:20.04 AS builder +# 安装编译工具 +RUN apt-get update && apt-get install -y g++ make cmake +# 安装依赖库 +RUN apt-get install -y libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev +# 创建工作目录 +WORKDIR /gctl + +# 1. 编译安装EEMD +# 拷贝libeemd相关内容 +COPY dep/libeemd /gctl/dep/libeemd +# 编译安装libeemd +RUN mkdir /gctl/dep/libeemd/build && cd /gctl/dep/libeemd/build && cmake .. && make && make install + +# 2. 编译安装netcdfcxx_legacy +# 拷贝netcdfcxx_legacy相关内容 +COPY dep/netcdfcxx_legacy /gctl/dep/netcdfcxx_legacy +# 编译安装netcdfcxx_legacy +RUN mkdir /gctl/dep/netcdfcxx_legacy/build && cd /gctl/dep/netcdfcxx_legacy/build && cmake .. && make && make install + +# 3. 拷贝partow模版文件 +COPY dep/partow/include /usr/local/include + +# 将gctl源代码 +COPY lib /gctl/lib +COPY CMakeLists.txt . +COPY config.h.in . +COPY GCTLConfig.cmake.in . +# 将CMake配置文件拷贝到系统路径 +COPY dep/cmake /usr/local/lib/cmake +# 编译gctl动态库 +RUN mkdir build && cd build && cmake .. -DGCTL_DOCKER=ON && make && make install + +# 运行平台 +FROM ubuntu:20.04 +# 安装运行时必要依赖 +RUN apt-get update && apt-get install -y libstdc++6 +# 从构建阶段复制编译后的库和头文件 +COPY --from=builder /usr/local/lib /usr/local/lib +COPY --from=builder /usr/local/include /usr/local/include \ No newline at end of file diff --git a/doc/FFTW3/FFTW3Config.cmake b/dep/cmake/FFTW3/FFTW3Config.cmake similarity index 64% rename from doc/FFTW3/FFTW3Config.cmake rename to dep/cmake/FFTW3/FFTW3Config.cmake index 165061a..a71e3b5 100644 --- a/doc/FFTW3/FFTW3Config.cmake +++ b/dep/cmake/FFTW3/FFTW3Config.cmake @@ -6,18 +6,16 @@ macro(set_and_check _var _file) endmacro() # change the following options as needed -set(FFTW3_VERSION "3.5.8") - if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") - set_and_check(FFTW3_INC_DIR "/opt/homebrew/include") - set_and_check(FFTW3_LIB_DIR "/opt/homebrew/lib") + set_and_check(FFTW3_INCLUDE_DIRS "/opt/homebrew/include") + set_and_check(FFTW3_LIBRARY_DIRS "/opt/homebrew/lib") elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - set_and_check(FFTW3_INC_DIR "/usr/include") - set_and_check(FFTW3_LIB_DIR "/usr/lib/x86_64-linux-gnu") + set_and_check(FFTW3_INCLUDE_DIRS "/usr/include") + set_and_check(FFTW3_LIBRARY_DIRS "/usr/lib") else() message(FATAL_ERROR "Unset operation system for FFTW3. Please edit the FFTW3Config.cmake file.") endif() -set(FFTW3_LIB fftw3) \ No newline at end of file +set(FFTW3_LIBRARIES fftw3) \ No newline at end of file diff --git a/dep/cmake/GMT/GMTConfig.cmake b/dep/cmake/GMT/GMTConfig.cmake new file mode 100644 index 0000000..d785c6f --- /dev/null +++ b/dep/cmake/GMT/GMTConfig.cmake @@ -0,0 +1,21 @@ +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +# change the following options as needed +if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") + set_and_check(GMT_INC_DIR "/opt/homebrew/include") + set_and_check(GMT_LIB_DIR "/opt/homebrew/lib") + +elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") + set_and_check(GMT_INC_DIR "/usr/include") + set_and_check(GMT_LIB_DIR "/usr/lib") + +else() + message(FATAL_ERROR "Unset operation system for GMT. Please edit the GMTConfig.cmake file.") +endif() + +set(GMT_LIB gmt) \ No newline at end of file diff --git a/doc/OpenBLAS/OpenBLASConfig.cmake b/dep/cmake/OpenBLAS/OpenBLASConfig.cmake similarity index 100% rename from doc/OpenBLAS/OpenBLASConfig.cmake rename to dep/cmake/OpenBLAS/OpenBLASConfig.cmake diff --git a/dep/libeemd b/dep/libeemd new file mode 160000 index 0000000..bd7acef --- /dev/null +++ b/dep/libeemd @@ -0,0 +1 @@ +Subproject commit bd7aceff23f8722c6c102b5dd72d94b22a0be1d6 diff --git a/dep/magnetic_tesseroids/CMakeLists.txt b/dep/magnetic_tesseroids/CMakeLists.txt deleted file mode 100644 index b90f300..0000000 --- a/dep/magnetic_tesseroids/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.15.2) -# 设置项目名称与语言 -project(LibMagTess VERSION 1.0) -# 添加配置配件编写的函数 -include(CMakePackageConfigHelpers) - -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") - set(CMAKE_INSTALL_PREFIX D:/Library) -else() - set(CMAKE_INSTALL_PREFIX /opt/stow/magtess) -endif() - -message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) -message(STATUS "Install prefix: " ${CMAKE_INSTALL_PREFIX}) -message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) - -# 添加库源文件地址 -add_subdirectory(lib) -add_subdirectory(toolkits) \ No newline at end of file diff --git a/dep/magnetic_tesseroids/LICENSE.txt b/dep/magnetic_tesseroids/LICENSE.txt deleted file mode 100644 index fa9e309..0000000 --- a/dep/magnetic_tesseroids/LICENSE.txt +++ /dev/null @@ -1,33 +0,0 @@ -BSD 2-Clause License - -Copyright (c) 2012-2015, Leonardo Uieda -Copyright (c) 2017-2020, Eldar Baykiev -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of Leonardo Uieda nor the names of any contributors* - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -* Contributors to the original tesseroids source and binary forms, which are -under BSD 3-Clause License diff --git a/dep/magnetic_tesseroids/LibMagTessConfig.cmake.in b/dep/magnetic_tesseroids/LibMagTessConfig.cmake.in deleted file mode 100644 index 3f777c0..0000000 --- a/dep/magnetic_tesseroids/LibMagTessConfig.cmake.in +++ /dev/null @@ -1,15 +0,0 @@ -@PACKAGE_INIT@ - -set(@PROJECT_NAME@_Version "@PROJECT_VERSION@") -set_and_check(@PROJECT_NAME@_INSTALL_PREFIX "${PACKAGE_PREFIX_DIR}") -set_and_check(@PROJECT_NAME@_INC_DIR "${PACKAGE_PREFIX_DIR}/include") -set_and_check(@PROJECT_NAME@_INCULDE_DIR "${PACKAGE_PREFIX_DIR}/include") -set_and_check(@PROJECT_NAME@_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib") -set_and_check(@PROJECT_NAME@_LIBRARY_DIR "${PACKAGE_PREFIX_DIR}/lib") - -set(@PROJECT_NAME@_LIB magtess) -set(@PROJECT_NAME@_LIBRARY magtess) -set(@PROJECT_NAME@_FOUND 1) - -# include target information -include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") \ No newline at end of file diff --git a/dep/magnetic_tesseroids/README.md b/dep/magnetic_tesseroids/README.md deleted file mode 100644 index 60bd43a..0000000 --- a/dep/magnetic_tesseroids/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Forward modeling of magnetic field in spherical coordinates - -Magnetic tesseroids is a collection of command-line tools for modelling of the magnetic field with spherical prisms (tesseroids) used as magnetic sources. - -To cite _magnetic tesseroids_ in publications, please use our paper published in Computers & Geosciences: - ->**Eldar Baykiev**, **Jörg Ebbing**, **Marco Brönner**, **Karl Fabian**, Forward modeling magnetic fields of induced and remanent magnetization in the lithosphere using tesseroids, _Computers & Geosciences_, Volume 96, November 2016, Pages 124-135, ISSN 0098-3004, http://dx.doi.org/10.1016/j.cageo.2016.08.004. - -Article can also be found here http://goo.gl/x9g7gi (researchgate). - -## Usage of _magnetic tesseroids_ -_Magnetic tesseroids_ are based on the existing program of Leonardo Uieda called tesseroids (Uieda, 2013) of version 1.1 (https://github.com/leouieda/tesseroids/releases/tag/v1.1). It inherits the interface of tesseroids-1.1 but with several changes. Present appendix describes constants and units used be the program, as well as input and output format. -### Constants -1. Geocentric mean Earth's radius _R_E_ = 6378.137 km. -1. Magnetic permeability of a free space _µ_0_ = 4π × 10^-7 H·m^-1 - -### List of programs -The tessbx, tessby, tessbz are programs that calculate the corresponding components (x - north, y - east, **z - up**) of the magnetic field of the tesseroid model on the computational grid. - -### Input: tesseroid model -The input model file should be a text file where each line describe one tesseroid in such space separated format: -> `W E S N HEIGHT_OF_TOP HEIGHT_OF_BOTTOM DENSITY SUSCEPTIBILITY BX BY BZ` - -`W`, `E`, `S`, `N` correspond to the western, eastern, southern and northern edges of a tesseroid (_λ_1_, _λ_2_, _ϕ_1_, _ϕ_2_ respectively) expressed in decimal degrees [°]. -`HEIGHT_OF_TOP` and `HEIGHT_OF_BOTTOM` define the top and the bottom of tesseroid (_r_2_ and _r_1_ respectively). Both are counted from geocentric mean Earth's radius in meters [m]. If a tesseroid should be placed beneath the mean surface, than the values of these parameters should be negative. Note that `HEIGHT_OF_TOP` > `HEIGHT_OF_BOTTOM`. -`DENSITY` is the density _ρ_ of tesseroid in kilogram per cubic meter [kg/m^3] -`SUSCEPTIBILITY` is the susceptibility _χ_ of tesseroid in SI units. -`BX`, `BY` and `BZ` are the components of the magnetizing field in the local North-East-Up Cartesian coordinate system of a tesseroids' geometric center. They can be taken from any core field's model. Values are given in nanotesla [nT]. -In case of remanent magnetic field modeling, susceptibility must be set 1 SI and `BX`, `BY` and `BZ` values than would define the direction of remanent magnetization vector. -This example shows a model made of 3 neighboring tesseroids near the North Pole: -> `-74 -73 89 90 -1000.000000 -11650.000000 1.000000 1.000000 334.9504973176 -1969.9308033594 -56572.6324041700` - -> `-73 -72 89 90 -1000.000000 -11650.000000 1.000000 1.000000 370.1879538142 -1968.1093976826 -56571.2826313492` - -> `-72 -71 89 90 -1000.000000 -11650.000000 1.000000 1.000000 405.4388222633 -1965.6409379187 -56569.9502088641` - -### Input: computation grid -Computation grid can be regular or irregular and should be also a text file where each line describe the position of one computation point in such space separated format: ->`LON LAT ALT` - -`LON` and `LAT` correspond to the longitude and latitude of the point in decimal degrees [°]. -`ALT` corresponds to the altitude of the point above the mean surface in meters [m]. -Note that the program tessgrd from original tesseroids-1.1 can be used to create a regular computation grid (see Uieda, 2013). -This example shows a grid made of 6 points with the same latitude and the altitude of 400 km: -> `-6 51 400000 ` - -> `-5.8 51 400000 ` - -> `-5.6 51 400000 ` - -> `-5.4 51 400000 ` - -> `-5.2 51 400000 ` - -> `-5 51 400000` - -### Performing calculations -Example: to calculate the vertical component of the magnetic field of a model in file modelfile.txt on a grid from file gridpoints.txt one can simply use a console command: -``` -tessbz modelfile.txt < gridpoints.txt > gz_output.txt -``` - -The result would be written in the file gz_output.txt. -### Output format -The programs' output is a modified grid file where in the end of each line the calculated value of a corresponding magnetic field component would be written. Values are given in nanotesla [nT] in the local North-East-Up coordinate system of a computational point. -### Additional features -Magnetic tesseroids support features like piping and integration accuracy adjustment from tesseroids-1.1. Please, check sections in the tesseroids-1.1 manual (Uieda, 2013) relative to the gravity calculation programs to get more information. - -## Utilities -### tessutil_magnetize_model -This program is made to 'magnetize' any existing tesseroid model by any given main field spherical harmonic model. -Usage: -``` -tessutil_magnetize_model [SH coeff file] [input tesseroid model file] [day] [month] [year] [output tesseroid model file] -``` - -### tessutil_gradient_calculator -Gradient calculator (Baykiev et al., in press). -Usage: -``` -tessutil_gradient_calculator -bx[Bx grid file] -by[By grid file] -bz[Bx grid file] -o[output component] -c2 >> output_file.dat -``` - -All grid files should be in tessgrd format. With option `-c1` program reads input grid bz as its direction is upward, with option `-c2` - downward, just as in magnetic tesseroids output. Output of gradient calculator is always in North-East-Down coordinate system. - -Known issue: rounding error when processing grids with spacing equal or less than 0.2 degrees. - -### tessutil_combine_grids -Sums calculated grids. -Usage: -``` -tessutil_combine_grids [grid file1] [factor1] ... [grid fileN] [factorN] >> output_file.dat -``` - -Each grid is multiplied by factor (susceptibility) and then the sum of all grids is calculated. - -## Installation (version 1.1) -1. Download source code from [GitHub](https://github.com/eldarbaykiev/magnetic-tesseroids): - -``` -git clone https://github.com/eldarbaykiev/magnetic-tesseroids.git -``` - -2. On **Linux**, install [OpenBLAS](https://www.openblas.net/) library: - -``` -sudo apt-get install libopenblas-base libopenblas-dev -``` - -On **macOS**, make sure that [Xcode](https://developer.apple.com/xcode/) is installed and [Accelerate framework](https://developer.apple.com/documentation/accelerate) is available. - -3. Run **make** - -``` -make -``` - -To compile all utilities, run - -``` -make tools -``` diff --git a/dep/magnetic_tesseroids/lib/CMakeLists.txt b/dep/magnetic_tesseroids/lib/CMakeLists.txt deleted file mode 100644 index 70886f7..0000000 --- a/dep/magnetic_tesseroids/lib/CMakeLists.txt +++ /dev/null @@ -1,74 +0,0 @@ -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") - # set OpenBLAS directory manually - set(OpenBLAS_DIR D:/Library/lib/cmake/openblas) - find_library(OpenBLAS REQUIRED) - include_directories(${OpenBLAS_INCLUDE_DIRS}) -elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") - # set OpenBLAS directory manually - set(OpenBLAS_DIR /opt/homebrew/Cellar/openblas/0.3.24/lib/cmake/openblas) - find_package(OpenBLAS REQUIRED) - include_directories(${OpenBLAS_INCLUDE_DIRS}) -elseif(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lm") -endif() - -# 设置库文件的输出地址 -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) - -# 设定库源文件 -aux_source_directory(. LIBMAGTESS_SRC) - -# 以下部分为库的编译 -# 注意目标名必须唯一 所以不能直接生成相同名称的动态库与静态库 -# 注意此处不必为目标名称添加lib前缀和相应后缀,cmake会自行添加 -add_library(magtess SHARED ${LIBMAGTESS_SRC}) -# 首先添加静态库的生成命令 -add_library(magtess_static STATIC ${LIBMAGTESS_SRC}) -# 设置静态库的输出名称从而获得与动态库名称相同的静态库 -set_target_properties(magtess_static PROPERTIES OUTPUT_NAME "magtess") -# 设置输出目标属性以同时输出动态库与静态库 -set_target_properties(magtess PROPERTIES CLEAN_DIRECT_OUTPUT 1) -set_target_properties(magtess_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) -# 设置动态库的版本号 -set_target_properties(magtess PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) - -target_link_libraries(magtess PUBLIC ${OpenBLAS_LIBRARIES}) -target_link_libraries(magtess_static ${OpenBLAS_LIBRARIES}) -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - target_link_libraries(magtess PUBLIC m) - target_link_libraries(magtess PUBLIC openblas) -endif() - -set(CONFIG_FILE_PATH lib/cmake/${PROJECT_NAME}) - -configure_package_config_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${CONFIG_FILE_PATH} - NO_CHECK_REQUIRED_COMPONENTS_MACRO) - -write_basic_package_version_file(${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion) - -# 库的安装命令 -if(WIN32) - install(TARGETS magtess DESTINATION lib) - install(TARGETS magtess_static DESTINATION lib) -else() - install(TARGETS magtess magtess_static - EXPORT ${PROJECT_NAME}Targets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - install(EXPORT ${PROJECT_NAME}Targets - DESTINATION ${CONFIG_FILE_PATH}) - install(FILES - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${CONFIG_FILE_PATH}) -endif() - -file(GLOB LIBMEGTESS_HEAD *.h) -install(FILES ${LIBMEGTESS_HEAD} DESTINATION include/magtess) diff --git a/dep/magnetic_tesseroids/lib/constants.h b/dep/magnetic_tesseroids/lib/constants.h deleted file mode 100755 index cf04504..0000000 --- a/dep/magnetic_tesseroids/lib/constants.h +++ /dev/null @@ -1,60 +0,0 @@ -/* -Define constants used, like the gravitational constant and unit conversions. - -Values are assigned in file constants.c - -All values are in SI units! -*/ - -#ifndef _TESSEROIDS_CONSTANTS_H_ -#define _TESSEROIDS_CONSTANTS_H_ - -/* Mean Earth radius [\f$ m \f$] */ -const double MEAN_EARTH_RADIUS = 6378137.0; -const double EARTH_RADIUS_IGRF_KM = 6371.2; - -/* The gravitational constant [\f$ m^3*kg^{-1}*s^{-1} \f$] */ -const double G = 0.00000000006673; - - - -/* Conversion factor from SI units to Eotvos -[\f$ \frac{1}{s^2} = 10^9\ Eotvos \f$] */ -const double SI2EOTVOS = 1000000000.0; -const double EOTVOS2SI = 0.000000001; - -/* Conversion factor from SI units to mGal -[\f$ 1 \frac{m}{s^2} = 10^5\ mGal \f$] */ -const double SI2MGAL = 100000.0; - -/* Pi */ -#ifdef __cplusplus -const double PI = 3.1415926535897932384626433832795; -#else -#define PI 3.1415926535897932384626433832795 -#endif - -/* minimum distance-to-size ratio for potential computations to be accurate */ -const double TESSEROID_POT_SIZE_RATIO = 1.5; -/* Minimum distance-to-size ratio for gravity computations to be accurate */ -const double TESSEROID_GX_SIZE_RATIO = 3; -const double TESSEROID_GY_SIZE_RATIO = 3; -const double TESSEROID_GZ_SIZE_RATIO = 2; -/* Minimum distance-to-size ratio for gravity gradient computations to be -accurate */ -const double TESSEROID_GXX_SIZE_RATIO = 3; -const double TESSEROID_GXY_SIZE_RATIO = 4.5; -const double TESSEROID_GXZ_SIZE_RATIO = 4; -const double TESSEROID_GYY_SIZE_RATIO = 3; -const double TESSEROID_GYZ_SIZE_RATIO = 4; -const double TESSEROID_GZZ_SIZE_RATIO = 3; - -const double M_0 = 4 * (PI) * 0.0000001; - -const double DEG2RAD = (PI)/180.0; - - -#define FALSE 0 -#define TRUE 1 - -#endif diff --git a/dep/magnetic_tesseroids/lib/geometry.cpp b/dep/magnetic_tesseroids/lib/geometry.cpp deleted file mode 100755 index ec29414..0000000 --- a/dep/magnetic_tesseroids/lib/geometry.cpp +++ /dev/null @@ -1,48 +0,0 @@ -/* -Data structures for geometric elements and functions that operate on them. -Defines the TESSEROID, SPHERE, and PRISM structures. -*/ - - -#include -#include -#include -#include -#include "constants.h" -#include "logger.h" -#include "geometry.h" - - -/* Split a tesseroid into 8. */ -void split_tess(MAG_TESSEROID tess, MAG_TESSEROID *split) -{ - double dlon = 0.5*(tess.e - tess.w), - dlat = 0.5*(tess.n - tess.s), - dr = 0.5*(tess.r2 - tess.r1), - ws[2], ss[2], r1s[2]; - int i, j, k, t = 0; - - ws[0] = tess.w; - ws[1] = tess.w + dlon; - ss[0] = tess.s; - ss[1] = tess.s + dlat; - r1s[0] = tess.r1; - r1s[1] = tess.r1 + dr; - for(k = 0; k < 2; k++) - { - for(j = 0; j < 2; j++) - { - for(i = 0; i < 2; i++) - { - split[t].w = ws[i]; - split[t].e = ws[i] + dlon; - split[t].s = ss[j]; - split[t].n = ss[j] + dlat; - split[t].r1 = r1s[k]; - split[t].r2 = r1s[k] + dr; - split[t].density = tess.density; - t++; - } - } - } -} diff --git a/dep/magnetic_tesseroids/lib/geometry.h b/dep/magnetic_tesseroids/lib/geometry.h deleted file mode 100755 index af133ad..0000000 --- a/dep/magnetic_tesseroids/lib/geometry.h +++ /dev/null @@ -1,37 +0,0 @@ -/* -Data structures for geometric elements and functions that operate on them. -Defines the TESSEROID, SPHERE, and PRISM structures. -*/ - -#ifndef _MAG_TESSEROIDS_GEOMETRY_H_ -#define _MAG_TESSEROIDS_GEOMETRY_H_ - - -/* Store information on a tesseroid */ -typedef struct magtess_struct { - /* s, n, w, e in degrees. r1 and r2 are the smaller and larger radius */ - double density; /* in SI units */ - double w; /* western longitude border in degrees */ - double e; /* eastern longitude border in degrees */ - double s; /* southern latitude border in degrees */ - double n; /* northern latitude border in degrees */ - double r1; /* smallest radius border in SI units */ - double r2; /* largest radius border in SI units */ - double suscept; /* magnetic susceptibility */ - double Bx; /* x-component of ambient magnetic field */ - double By; /* y-component of ambient magnetic field */ - double Bz; /* z-component of ambient magnetic field */ - - double cos_a1; - double sin_a1; - double cos_b1; - double sin_b1; - //double Rx; - //double Ry; - //double Rz; -} MAG_TESSEROID; - - -void split_tess(MAG_TESSEROID tess, MAG_TESSEROID *split); - -#endif diff --git a/dep/magnetic_tesseroids/lib/glq.cpp b/dep/magnetic_tesseroids/lib/glq.cpp deleted file mode 100755 index d95f3f7..0000000 --- a/dep/magnetic_tesseroids/lib/glq.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/* -Functions for implementing a Gauss-Legendre Quadrature numerical integration. -*/ - - -#include -#include -#include "constants.h" -#include "logger.h" -#include "glq.h" - - -/* Make a new GLQ structure and set all the parameters needed */ -GLQ * glq_new(int order, double lower, double upper) -{ - GLQ *glq; - int rc; - - glq = (GLQ *)malloc(sizeof(GLQ)); - if(glq == NULL) - { - return NULL; - } - glq->order = order; - glq->nodes = (double *)malloc(sizeof(double)*order); - if(glq->nodes == NULL) - { - free(glq); - return NULL; - } - glq->nodes_unscaled = (double *)malloc(sizeof(double)*order); - if(glq->nodes_unscaled == NULL) - { - free(glq); - free(glq->nodes); - return NULL; - } - glq->weights = (double *)malloc(sizeof(double)*order); - if(glq->weights == NULL) - { - free(glq); - free(glq->nodes); - free(glq->nodes_unscaled); - return NULL; - } - rc = glq_nodes(order, glq->nodes_unscaled); - if(rc != 0 && rc != 3) - { - switch(rc) - { - case 1: - log_error("glq_nodes invalid GLQ order %d. Should be >= 2.", - order); - break; - case 2: - log_error("glq_nodes NULL pointer for nodes"); - break; - default: - log_error("glq_nodes unknown error code %g", rc); - break; - } - glq_free(glq); - return NULL; - } - else if(rc == 3) - { - log_warning("glq_nodes max iterations reached in root finder"); - log_warning("nodes might not have desired accuracy %g", GLQ_MAXERROR); - } - rc = glq_weights(order, glq->nodes_unscaled, glq->weights); - if(rc != 0) - { - switch(rc) - { - case 1: - log_error("glq_weights invalid GLQ order %d. Should be >= 2.", - order); - break; - case 2: - log_error("glq_weights NULL pointer for nodes"); - break; - case 3: - log_error("glq_weights NULL pointer for weights"); - break; - default: - log_error("glq_weights unknown error code %d\n", rc); - break; - } - glq_free(glq); - return NULL; - } - if(glq_set_limits(lower, upper, glq) != 0) - { - glq_free(glq); - return NULL; - } - return glq; -} - - -/* Free the memory allocated to make a GLQ structure */ -void glq_free(GLQ *glq) -{ - free(glq->nodes); - - free(glq->nodes_unscaled); - free(glq->weights); - free(glq); -} - - -/* Calculates the GLQ nodes using glq_next_root. */ -int glq_nodes(int order, double *nodes) -{ - register int i; - int rc = 0; - double initial; - - if(order < 2) - { - return 1; - } - if(nodes == NULL) - { - return 2; - } - for(i = 0; i < order; i++) - { - initial = cos(PI*(order - i - 0.25)/(order + 0.5)); - if(glq_next_root(initial, i, order, nodes) == 3) - { - rc = 3; - } - } - return rc; -} - - -/* Put the GLQ nodes to the integration limits IN PLACE. */ -int glq_set_limits(double lower, double upper, GLQ *glq) -{ - /* Only calculate once to optimize the code */ - double tmpplus = 0.5*(upper + lower), tmpminus = 0.5*(upper - lower); - register int i; - - if(glq->order < 2) - { - return 1; - } - if(glq->nodes == NULL) - { - return 2; - } - if(glq->nodes_unscaled == NULL) - { - return 2; - } - for(i = 0; i < glq->order; i++) - { - glq->nodes[i] = tmpminus*glq->nodes_unscaled[i] + tmpplus; - - } - return 0; -} - -/* Calculate the next Legendre polynomial root given the previous root found. */ -int glq_next_root(double initial, int root_index, int order, double *roots) -{ - double x1, x0, pn, pn_2, pn_1, pn_line, sum; - int it = 0; - register int n; - - if(order < 2) - { - return 1; - } - if(root_index < 0 || root_index >= order) - { - return 2; - } - x1 = initial; - do - { - x0 = x1; - - /* Calculate Pn(x0) */ - /* Starting from P0(x) and P1(x), */ - /* find the others using the recursive relation: */ - /* Pn(x)=(2n-1)xPn_1(x)/n - (n-1)Pn_2(x)/n */ - pn_1 = 1.; /* This is Po(x) */ - pn = x0; /* and this P1(x) */ - for(n = 2; n <= order; n++) - { - pn_2 = pn_1; - pn_1 = pn; - pn = ( ((2*n - 1)*x0*pn_1) - ((n - 1)*pn_2) )/n; - } - /* Now calculate Pn'(x0) using another recursive relation: */ - /* Pn'(x)=n(xPn(x)-Pn_1(x))/(x*x-1) */ - pn_line = order*(x0*pn - pn_1)/(x0*x0 - 1); - /* Sum the roots found so far */ - for(n = 0, sum = 0; n < root_index; n++) - { - sum += 1./(x0 - roots[n]); - } - /* Update the estimate for the root */ - x1 = x0 - (double)pn/(pn_line - pn*sum); - - /** Compute the absolute value of x */ - #define GLQ_ABS(x) ((x) < 0 ? -1*(x) : (x)) - } while(GLQ_ABS(x1 - x0) > GLQ_MAXERROR && ++it <= GLQ_MAXIT); - #undef GLQ_ABS - - roots[root_index] = x1; - - /* Tell the user if stagnation occurred */ - if(it > GLQ_MAXIT) - { - return 3; - } - return 0; -} - - -/* Calculates the weighting coefficients for the GLQ integration. */ -int glq_weights(int order, double *nodes, double *weights) -{ - register int i, n; - double xi, pn, pn_2, pn_1, pn_line; - - if(order < 2) - { - return 1; - } - if(nodes == NULL) - { - return 2; - } - if(weights == NULL) - { - return 3; - } - for(i = 0; i < order; i++){ - - xi = nodes[i]; - - /* Find Pn'(xi) with the recursive relation to find Pn and Pn-1: */ - /* Pn(x)=(2n-1)xPn_1(x)/n - (n-1)Pn_2(x)/n */ - /* Then use: Pn'(x)=n(xPn(x)-Pn_1(x))/(x*x-1) */ - - /* Find Pn and Pn-1 stating from P0 and P1 */ - pn_1 = 1; /* This is Po(x) */ - pn = xi; /* and this P1(x) */ - for(n = 2; n <= order; n++) - { - pn_2 = pn_1; - pn_1 = pn; - pn = ((2*n - 1)*xi*pn_1 - (n - 1)*pn_2)/n; - } - pn_line = order*(xi*pn - pn_1)/(xi*xi - 1.); - /* ith weight is: wi = 2/(1 - xi^2)(Pn'(xi)^2) */ - weights[i] = 2./((1 - xi*xi)*pn_line*pn_line); - } - return 0; -} diff --git a/dep/magnetic_tesseroids/lib/glq.h b/dep/magnetic_tesseroids/lib/glq.h deleted file mode 100755 index 84cb04a..0000000 --- a/dep/magnetic_tesseroids/lib/glq.h +++ /dev/null @@ -1,182 +0,0 @@ -/* -Functions for implementing a Gauss-Legendre Quadrature numerical integration -(Hildebrand, 1987). - -Usage example -------------- - -To integrate the cossine function from 0 to 90 degrees: - - #include - #include - #include - #include "src/c/glq.h" - - int main(){ - // Create a new glq structure - GLQ *glq; - double result = 0, a = 0, b = 0.5*3.14; - int i; - - glq = glq_new(5, a, b); - - if(glq == NULL){ - printf("malloc error"); - return 1; - } - - // Calculate the integral - for(i = 0; i < glq->order; i++) - result += glq->weights[i]*cos(glq->nodes[i]); - - // Need to multiply by a scale factor of the integration limits - result *= 0.5*(b - a); - - printf("Integral of cossine from 0 to 90 degrees = %lf\n", result); - - // Free allocated memory - glq_free(glq); - - return 0; - } - -References ----------- - -* Hildebrand, F.B (1987): Introduction to numerical analysis. - Courier Dover Publications, 2. ed. -*/ - -#ifndef _TESSEROIDS_GLQ_H_ -#define _TESSEROIDS_GLQ_H_ - - -/** \var GLQ_MAXIT -Max iterations of the root-finder algorithm */ -const int GLQ_MAXIT = 1000; - - -/** \var GLQ_MAXERROR -Max error allowed for the root-finder algorithm */ -const double GLQ_MAXERROR = 0.000000000000001; - - -/** Store the nodes and weights needed for a GLQ integration */ -typedef struct glq_struct -{ - int order; /**< order of the quadrature, ie number of nodes */ - double *nodes; /**< abscissas or discretization points of the quadrature */ - double *weights; /**< weighting coefficients of the quadrature */ - double *nodes_unscaled; /**< nodes in [-1,1] interval */ -} GLQ; - - -/** Make a new GLQ structure and set all the parameters needed - -WARNING: Don't forget to free the memory malloced by this function using -glq_free()! - -Prints error and warning messages using the logging.h module. - -@param order order of the quadrature, ie number of nodes -@param lower lower integration limit -@param upper upper integration limit - -@return GLQ data structure with the nodes and weights calculated. NULL if there - was an error with allocation. -*/ -GLQ * glq_new(int order, double lower, double upper); - - -/** Free the memory allocated to make a GLQ structure - -@param glq pointer to the allocated memory -*/ -void glq_free(GLQ *glq); - - -/** Put the GLQ nodes to the integration limits IN PLACE. - -Will replace the values of glq.nodes with ones in the specified integration -limits. - -In case the GLQ structure was created with glq_new(), the integration limits can -be reset using this function. - -@param lower lower integration limit -@param upper upper integration limit -@param glq pointer to a GLQ structure created with glq_new() and with all - necessary memory allocated - -@return Return code: - - 0: if everything went OK - - 1: if invalid order - - 2: if NULL pointer for nodes or nodes_unscaled -*/ -int glq_set_limits(double lower, double upper, GLQ *glq); -/** Calculates the GLQ nodes using glq_next_root. - -Nodes will be in the [-1,1] interval. To convert them to the integration limits -use glq_scale_nodes - -@param order order of the quadrature, ie how many nodes. Must be >= 2. -@param nodes pre-allocated array to return the nodes. - -@return Return code: - - 0: if everything went OK - - 1: if invalid order - - 2: if NULL pointer for nodes - - 3: if number of maximum iterations was reached when calculating the root. - This usually means that the desired accuracy was not achieved. Default - desired accuracy is GLQ_MAXERROR. Default maximum iterations is - GLQ_MAXIT. -*/ -int glq_nodes(int order, double *nodes); - - -/** Calculate the next Legendre polynomial root given the previous root found. - -Uses the root-finder algorithm of: - - Barrera-Figueroa, V., Sosa-Pedroza, J. and López-Bonilla, J., 2006, - "Multiple root finder algorithm for Legendre and Chebyshev polynomials via - Newton's method", 2006, Annales mathematicae et Informaticae, 33, pp 3-13 - -@param initial initial estimate of the next root. I recommend the use of - \f$ \cos\left(\pi\frac{(N - i - 0.25)}{N + 0.5}\right) \f$, - where \f$ i \f$ is the index of the desired root -@param root_index index of the desired root, starting from 0 -@param order order of the Legendre polynomial, ie number of roots. -@param roots array with the roots found so far. Will return the next root in - roots[root_index], so make sure to malloc enough space. - -@return Return code: - - 0: if everything went OK - - 1: if order is not valid - - 2: if root_index is not valid (negative) - - 3: if number of maximum iterations was reached when calculating the root. - This usually means that the desired accuracy was not achieved. Default - desired accuracy is GLQ_MAXERROR. Default maximum iterations is - GLQ_MAXIT. -*/ -int glq_next_root(double initial, int root_index, int order, - double *roots); - - -/** Calculates the weighting coefficients for the GLQ integration. - -@param order order of the quadrature, ie number of nodes and weights. -@param nodes array containing the GLQ nodes calculated by glq_nodes. - IMPORTANT: needs the nodes in [-1,1] interval! Scaled nodes - will result in wrong weights! -@param weights pre-allocated array to return the weights - -@return Return code: - - 0: if everything went OK - - 1: if order is not valid - - 2: if nodes is a NULL pointer - - 3: if weights is a NULL pointer -*/ -int glq_weights(int order, double *nodes, double *weights); - -#endif diff --git a/dep/magnetic_tesseroids/lib/grav_tess.cpp b/dep/magnetic_tesseroids/lib/grav_tess.cpp deleted file mode 100755 index eb96815..0000000 --- a/dep/magnetic_tesseroids/lib/grav_tess.cpp +++ /dev/null @@ -1,628 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the tesseroid. - -References ----------- - -* Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - - -#include -#include "logger.h" -#include "geometry.h" -#include "glq.h" -#include "constants.h" -#include "grav_tess.h" - - -/* Calculates the field of a tesseroid model at a given point. */ -double calc_tess_model(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ)) -{ - double res; - int tess; - - res = 0; - for(tess = 0; tess < size; tess++) - { - if(lonp >= model[tess].w && lonp <= model[tess].e && - latp >= model[tess].s && latp <= model[tess].n && - rp >= model[tess].r1 && rp <= model[tess].r2) - { - log_warning("Point (%g %g %g) is on tesseroid %d: %g %g %g %g %g %g %g. Can't guarantee accuracy.", - lonp, latp, rp - MEAN_EARTH_RADIUS, tess, - model[tess].w, model[tess].e, model[tess].s, - model[tess].n, model[tess].r2 - MEAN_EARTH_RADIUS, - model[tess].r1 - MEAN_EARTH_RADIUS, - model[tess].density); - } - glq_set_limits(model[tess].w, model[tess].e, glq_lon); - glq_set_limits(model[tess].s, model[tess].n, glq_lat); - glq_set_limits(model[tess].r1, model[tess].r2, glq_r); - res += field(model[tess], lonp, latp, rp, *glq_lon, *glq_lat, *glq_r); - } - return res; -} - -void calc_tess_model_triple(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, void (*field_triple)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ, double*), double *res) -{ - double r1, r2, r3, ri[3]; - int tess; - - res[0] = 0; - res[1] = 0; - res[2] = 0; - for(tess = 0; tess < size; tess++) - { - ri[0] = 0; - ri[1] = 0; - ri[2] = 0; - - if(lonp >= model[tess].w && lonp <= model[tess].e && - latp >= model[tess].s && latp <= model[tess].n && - rp >= model[tess].r1 && rp <= model[tess].r2) - { - log_warning("Point (%g %g %g) is on tesseroid %d: %g %g %g %g %g %g %g. Can't guarantee accuracy.", - lonp, latp, rp - MEAN_EARTH_RADIUS, tess, - model[tess].w, model[tess].e, model[tess].s, - model[tess].n, model[tess].r2 - MEAN_EARTH_RADIUS, - model[tess].r1 - MEAN_EARTH_RADIUS, - model[tess].density); - } - glq_set_limits(model[tess].w, model[tess].e, glq_lon); - glq_set_limits(model[tess].s, model[tess].n, glq_lat); - glq_set_limits(model[tess].r1, model[tess].r2, glq_r); - field_triple(model[tess], lonp, latp, rp, *glq_lon, *glq_lat, *glq_r, ri); - - res[0] += ri[0]; - res[1] += ri[1]; - res[2] += ri[2]; - } - return; -} - - - -/* Adaptatively calculate the field of a tesseroid model at a given point */ -double calc_tess_model_adapt(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ), double ratio) -{ - double res, dist, lont, latt, rt, d2r = PI/180.; - int tess; - MAG_TESSEROID split[8]; - - res = 0; - for(tess = 0; tess < size; tess++) - { - rt = model[tess].r2; - lont = 0.5*(model[tess].w + model[tess].e); - latt = 0.5*(model[tess].s + model[tess].n); - dist = sqrt(rp*rp + rt*rt - 2*rp*rt*(sin(d2r*latp)*sin(d2r*latt) + - cos(d2r*latp)*cos(d2r*latt)*cos(d2r*(lonp - lont)))); - - /* Would get stuck in infinite loop if dist = 0 and get wrong results if - inside de tesseroid. Still do the calculation but warn user that it's - probably wrong. */ - if(lonp >= model[tess].w && lonp <= model[tess].e && - latp >= model[tess].s && latp <= model[tess].n && - rp >= model[tess].r1 && rp <= model[tess].r2) - { - log_warning("Point (%g %g %g) is on top of tesseroid %d: %g %g %g %g %g %g %g. Can't guarantee accuracy.", - lonp, latp, rp - MEAN_EARTH_RADIUS, tess, - model[tess].w, model[tess].e, model[tess].s, - model[tess].n, model[tess].r2 - MEAN_EARTH_RADIUS, - model[tess].r1 - MEAN_EARTH_RADIUS, - model[tess].density); - glq_set_limits(model[tess].w, model[tess].e, glq_lon); - glq_set_limits(model[tess].s, model[tess].n, glq_lat); - glq_set_limits(model[tess].r1, model[tess].r2, glq_r); - res += field(model[tess], lonp, latp, rp, *glq_lon, *glq_lat, - *glq_r); - } - /* Check if the computation point is at an acceptable distance. If not - split the tesseroid using the given ratio */ - else if( - dist < ratio*MEAN_EARTH_RADIUS*d2r*(model[tess].e - model[tess].w) || - dist < ratio*MEAN_EARTH_RADIUS*d2r*(model[tess].n - model[tess].s) || - dist < ratio*(model[tess].r2 - model[tess].r1)) - { - log_debug("Splitting tesseroid %d (%g %g %g %g %g %g %g) at point (%g %g %g) using ratio %g", - tess, model[tess].w, model[tess].e, model[tess].s, - model[tess].n, model[tess].r2 - MEAN_EARTH_RADIUS, - model[tess].r1 - MEAN_EARTH_RADIUS, model[tess].density, - lonp, latp, rp - MEAN_EARTH_RADIUS, ratio); - /* Do it recursively until ratio*size is smaller than distance */ - split_tess(model[tess], split); - res += calc_tess_model_adapt(split, 8, lonp, latp, rp, glq_lon, - glq_lat, glq_r, field, ratio); - } - else - { - glq_set_limits(model[tess].w, model[tess].e, glq_lon); - glq_set_limits(model[tess].s, model[tess].n, glq_lat); - glq_set_limits(model[tess].r1, model[tess].r2, glq_r); - res += field(model[tess], lonp, latp, rp, *glq_lon, *glq_lat, - *glq_r); - } - } - return res; -} - -/* Calculates gxx caused by a tesseroid. */ -double tess_gxx(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, rc, kappa, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - - l_sqr = rp*rp + rc*rc - 2*rp*rc*(sinlatp*sinlatc + - coslatp*coslatc*coslon); - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kappa = rc*rc*coslatc; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*rc*kphi*rc*kphi - l_sqr)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - - -/* Calculates gxy caused by a tesseroid. */ -double tess_gxy(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, rc, kappa, deltax, deltay, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - - l_sqr = rp*rp + rc*rc - 2*rp*rc*(sinlatp*sinlatc + - coslatp*coslatc*coslon); - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kappa = rc*rc*coslatc; - - deltax = rc*kphi; - - deltay = rc*coslatc*sinlon; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltay)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - - -/* Calculates gxz caused by a tesseroid. */ -double tess_gxz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, cospsi, rc, kappa, deltax, deltaz, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kappa = rc*rc*coslatc; - - deltax = rc*kphi; - - deltaz = rc*cospsi - rp; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltaz)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - - -/* Calculates gyy caused by a tesseroid. */ -double tess_gyy(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, rc, kappa, deltay, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - - l_sqr = rp*rp + rc*rc - 2*rp*rc*(sinlatp*sinlatc + - coslatp*coslatc*coslon); - - kappa = rc*rc*coslatc; - - deltay = rc*coslatc*sinlon; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltay*deltay - l_sqr)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - - -/* Calculates gyz caused by a tesseroid. */ -double tess_gyz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, cospsi, rc, kappa, deltay, deltaz, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - - kappa = rc*rc*coslatc; - - deltay = rc*coslatc*sinlon; - - deltaz = rc*cospsi - rp; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltay*deltaz)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - - -/* Calculates gzz caused by a tesseroid. */ -double tess_gzz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, cospsi, rc, kappa, deltaz, res; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - - kappa = rc*rc*coslatc; - - deltaz = rc*cospsi - rp; - - res += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltaz*deltaz - l_sqr)/pow(l_sqr, 2.5); - } - } - } - - res *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - return res; -} - -/*Calculate three gravity gradient components simultaneously*/ -void tess_gxz_gyz_gzz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r, double *res) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, sinlon, - coslon, cospsi, rc, kappa, deltaz, deltax, deltay, kphi, - res_gxz, res_gyz, res_gzz; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res_gxz = 0; - res_gyz = 0; - res_gzz = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - kappa = rc*rc*coslatc; - - deltax = rc*kphi; - deltay = rc*coslatc*sinlon; - deltaz = rc*cospsi - rp; - - res_gxz += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltaz)/pow(l_sqr, 2.5); - - res_gyz += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltay*deltaz)/pow(l_sqr, 2.5); - - res_gzz += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltaz*deltaz - l_sqr)/pow(l_sqr, 2.5); - } - } - } - - res_gxz *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gyz *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gzz *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res[0] = res_gxz; - res[1] = res_gyz; - res[2] = res_gzz; - - return; -} - -void tess_gxx_gxy_gxz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r, double *res) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, sinlon, - coslon, cospsi, rc, kappa, deltaz, deltax, deltay, kphi, - res_gxx, res_gxy, res_gxz; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res_gxx = 0; - res_gxy = 0; - res_gxz = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - kappa = rc*rc*coslatc; - - deltax = rc*kphi; - deltay = rc*coslatc*sinlon; - deltaz = rc*cospsi - rp; - - res_gxx += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*rc*kphi*rc*kphi - l_sqr)/pow(l_sqr, 2.5); - - res_gxy += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltay)/pow(l_sqr, 2.5); - - res_gxz += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltaz)/pow(l_sqr, 2.5); - } - } - } - - res_gxx *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gxy *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gxz *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res[0] = res_gxx; - res[1] = res_gxy; - res[2] = res_gxz; - - return; -} - - - -void tess_gxy_gyy_gyz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r, double *res) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, sinlon, - coslon, cospsi, rc, kappa, deltaz, deltax, deltay, kphi, - res_gxy, res_gyy, res_gyz; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res_gxy = 0; - res_gyy = 0; - res_gyz = 0; - - for(k = 0; k < glq_lon.order; k++) - { - for(j = 0; j < glq_lat.order; j++) - { - for(i = 0; i < glq_r.order; i++) - { - rc = glq_r.nodes[i]; - sinlatc = sin(d2r*glq_lat.nodes[j]); - coslatc = cos(d2r*glq_lat.nodes[j]); - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - kappa = rc*rc*coslatc; - - deltax = rc*kphi; - deltay = rc*coslatc*sinlon; - deltaz = rc*cospsi - rp; - - res_gxy += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltax*deltay)/pow(l_sqr, 2.5); - - res_gyy += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltay*deltay - l_sqr)/pow(l_sqr, 2.5); - - res_gyz += glq_lon.weights[k]*glq_lat.weights[j]*glq_r.weights[i]* - kappa*(3*deltay*deltaz)/pow(l_sqr, 2.5); - - } - } - } - - res_gxy *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gyy *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res_gyz *= SI2EOTVOS*G*tess.density*d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)* - (tess.r2 - tess.r1)*0.125; - - res[0] = res_gxy; - res[1] = res_gyy; - res[2] = res_gyz; - - return; -} diff --git a/dep/magnetic_tesseroids/lib/grav_tess.h b/dep/magnetic_tesseroids/lib/grav_tess.h deleted file mode 100755 index 3e0d444..0000000 --- a/dep/magnetic_tesseroids/lib/grav_tess.h +++ /dev/null @@ -1,93 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the MAG_tesseroid. - -The gravity gradients can be calculated using the general formula of -Grombein et al. (2010). -The integrals are solved using the Gauss-Legendre Quadrature rule -(Asgharzadeh et al., 2007). - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->Up (away from center of the Earth). - -To maintain the standard convention, only for component gz the z axis is -inverted, so a positive density results in positive gz. - -Example -------- - -To calculate the gzz component due to a MAG_tesseroid on a regular grid: - - #include - #include "glq.h"r - #include "constants.h" - #include "grav_tess.h" - - int main() - { - MAG_TESSEROID tess = {1000, 44, 46, -1, 1, MEAN_EARTH_RADIUS - 100000, - MEAN_EARTH_RADIUS}; - GLQ *glqlon, *glqlat, *glqr; - double lon, lat, r = MEAN_EARTH_RADIUS + 1500000, res; - int order = 8; - - glqlon = glq_new(order, tess.w, tess.e); - glqlat = glq_new(order, tess.s, tess.n); - glqr = glq_new(order, tess.r1, tess.r2); - - for(lat = 20; lat <= 70; lat += 0.5) - { - for(lon = -25; lon <= 25; lon += 0.5) - { - res = tess_gzz(tess, lon, lat, r, *glqlon, *glqlat, *glqr); - printf("%g %g %g\n", lon, lat, res); - } - } - - glq_free(glqlon); - glq_free(glqlat); - glq_free(glqr); - - return 0; - } - -References ----------- - -Asgharzadeh, M.F., von Frese, R.R.B., Kim, H.R., Leftwich, T.E. & Kim, J.W. -(2007): Spherical prism gravity effects by Gauss-Legendre quadrature integration. -Geophysical Journal International, 169, 1-11. - -Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - -#ifndef _MAG_TESSEROIDS_GRAV_TESS_H_ -#define _MAG_TESSEROIDS_GRAV_TESS_H_ - - -/* Needed for definition of MAG_TESSEROID */ -#include "geometry.h" -/* Needed for definition of GLQ */ -#include "glq.h" - -double calc_tess_model(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ)); -void calc_tess_model_triple(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, - void (*field_triple)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ, double*), double *res); -double calc_tess_model_adapt(MAG_TESSEROID *model, int size, double lonp, double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ), double ratio); - -double tess_gxx(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); -double tess_gxy(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); -double tess_gxz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); -double tess_gyy(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); -double tess_gyz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); -double tess_gzz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -void tess_gxz_gyz_gzz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r, double *res); -void tess_gxx_gxy_gxz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r, double *res); -void tess_gxy_gyy_gyz(MAG_TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, GLQ glq_lat, GLQ glq_r, double *res); - -#endif diff --git a/dep/magnetic_tesseroids/lib/linalg.cpp b/dep/magnetic_tesseroids/lib/linalg.cpp deleted file mode 100755 index ace8134..0000000 --- a/dep/magnetic_tesseroids/lib/linalg.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/* -Functions matrix and vector multiplications. - -*/ - -#include "linalg.h" -#include "constants.h" -#include - -//macOS only! -//#include - -#ifdef __linux__ // Debian, Ubuntu, Gentoo, Fedora, openSUSE, RedHat, Centos and other - #include -#elif _WINDOWS || __WIN32__ // Added for windows by Yi Zhang on 2021-08-26 - #include -#elif defined(__APPLE__) && defined(__MACH__) - #include -#else - -#endif - -/* Calculate magnetization vector in a coordinate system of a given point */ -void conv_vect_cblas(double *vect, double lon1, double lat1, double lon2, double lat2, double *res) -{ - double a1 = DEG2RAD*lat1; - double b1 = DEG2RAD*lon1; - double a2 = DEG2RAD*lat2; - double b2 = DEG2RAD*lon2; - - double cos_a1 = cos(PI/2.0-a1); - double sin_a1 = sin(PI/2.0-a1); - double cos_a2 = cos(PI/2.0-a2); - double sin_a2 = sin(PI/2.0-a2); - - double cos_b1 = cos(b1); - double sin_b1 = sin(b1); - double cos_b2 = cos(b2); - double sin_b2 = sin(b2); - - double Z1Y1[9] = {cos_a1*cos_b1, -sin_b1, cos_b1*sin_a1, cos_a1*sin_b1, cos_b1, sin_a1*sin_b1, -sin_a1, 0, cos_a1}; - double Z2Y2t[9] = {-cos_a2*cos_b2, -cos_a2*sin_b2, sin_a2, -sin_b2, cos_b2, 0, cos_b2*sin_a2, sin_a2*sin_b2, cos_a2}; - double R[9]; - - cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 3, 3, 3, 1.0, Z1Y1, 3, Z2Y2t, 3, 0.0, R, 3); - - R[0] = -R[0]; - R[3] = -R[3]; - R[6] = -R[6]; - - cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, R, 3, vect, 1, 0.0, res, 1); - - - return; -} - - -void conv_vect_cblas_precalc(double *vect, double cos_a1, double sin_a1, double cos_b1, double sin_b1, double cos_a2, double sin_a2, double cos_b2, double sin_b2, double *res) -{ -// double a1 = DEG2RAD*lat1; -// double b1 = DEG2RAD*lon1; -// double a2 = DEG2RAD*lat2; -// double b2 = DEG2RAD*lon2; - -// double cos_a1 = cos(PI/2.0-a1); -// double sin_a1 = sin(PI/2.0-a1); -// double cos_a2 = cos(PI/2.0-a2); -// double sin_a2 = sin(PI/2.0-a2); - -// double cos_b1 = cos(b1); -// double sin_b1 = sin(b1); -// double cos_b2 = cos(b2); -// double sin_b2 = sin(b2); - - double Z1Y1[9] = {cos_a1*cos_b1, -sin_b1, cos_b1*sin_a1, cos_a1*sin_b1, cos_b1, sin_a1*sin_b1, -sin_a1, 0, cos_a1}; - double Z2Y2t[9] = {-cos_a2*cos_b2, -cos_a2*sin_b2, sin_a2, -sin_b2, cos_b2, 0, cos_b2*sin_a2, sin_a2*sin_b2, cos_a2}; - double R[9]; - - cblas_dgemm(CblasColMajor, CblasNoTrans, CblasNoTrans, 3, 3, 3, 1.0, Z1Y1, 3, Z2Y2t, 3, 0.0, R, 3); - - R[0] = -R[0]; - R[3] = -R[3]; - R[6] = -R[6]; - - cblas_dgemv(CblasRowMajor, CblasNoTrans, 3, 3, 1.0, R, 3, vect, 1, 0.0, res, 1); - - - return; -} - -void from_loc_sphr_to_cart(double* columnvect_xyzloc, double colatitude, double longitude, double* columnvect_res) -{ -/*IMPORTANT: this subroutine is in the coordinate system NED*/ - - double phi = colatitude*DEG2RAD; - double lambda = longitude*DEG2RAD; - - double cos_phi = cos(phi); - double sin_phi = sin(phi); - double cos_lambda = cos(lambda); - double sin_lambda = sin(lambda); - - double columnvect_phi_unit[3] = {-sin_phi*cos_lambda, -sin_phi*sin_lambda, cos_phi}; - double columnvect_lambda_unit[3] = {-sin_lambda, cos_lambda, 0}; - double columnvect_r_unit[3] = {cos_phi*cos_lambda, cos_phi*sin_lambda, sin_phi}; - - columnvect_res[0] = columnvect_phi_unit[0]*columnvect_xyzloc[0]+columnvect_lambda_unit[0]*columnvect_xyzloc[1]+columnvect_r_unit[0]*columnvect_xyzloc[2]; - columnvect_res[1] = columnvect_phi_unit[1]*columnvect_xyzloc[0]+columnvect_lambda_unit[1]*columnvect_xyzloc[1]+columnvect_r_unit[1]*columnvect_xyzloc[2]; - columnvect_res[2] = columnvect_phi_unit[2]*columnvect_xyzloc[0]+columnvect_lambda_unit[2]*columnvect_xyzloc[1]+columnvect_r_unit[2]*columnvect_xyzloc[2]; - - return; -} - -void from_cart_to_loc_sphr(double* columnvect_xyzglob, double colatitude, double longitude, double* columnvect_res) -{ -/*IMPORTANT: this subroutine is in the coordinate system NED*/ - - double phi = colatitude*DEG2RAD; - double lambda = longitude*DEG2RAD; - - double cos_phi = cos(phi); - double sin_phi = sin(phi); - double cos_lambda = cos(lambda); - double sin_lambda = sin(lambda); - - double rowvect_phi_unit[3] = {-sin_phi*cos_lambda, -sin_phi*sin_lambda, cos_phi}; - double rowvect_lambda_unit[3] = {-sin_lambda, cos_lambda, 0}; - double rowvect_r_unit[3] = {cos_phi*cos_lambda, cos_phi*sin_lambda, sin_phi}; - - columnvect_res[0] = rowvect_phi_unit[0]*columnvect_xyzglob[0]+rowvect_phi_unit[1]*columnvect_xyzglob[1]+rowvect_phi_unit[2]*columnvect_xyzglob[2]; - columnvect_res[1] = rowvect_lambda_unit[0]*columnvect_xyzglob[0]+rowvect_lambda_unit[1]*columnvect_xyzglob[1]+rowvect_lambda_unit[2]*columnvect_xyzglob[2]; - columnvect_res[2] = rowvect_r_unit[0]*columnvect_xyzglob[0]+rowvect_r_unit[1]*columnvect_xyzglob[1]+rowvect_r_unit[2]*columnvect_xyzglob[2]; - - return; -} - -void from_loc_sphr_to_loc_sphr(double* columnvect_xyzloc, double colatitude1, double longitude1, double colatitude2, double longitude2, double* columnvect_res) -{ - double columnvect_xyzglob[3]; - from_loc_sphr_to_cart(columnvect_xyzloc, colatitude1, longitude1, columnvect_xyzglob); - from_cart_to_loc_sphr(columnvect_xyzglob, colatitude2, longitude2, columnvect_res); - return; - -} diff --git a/dep/magnetic_tesseroids/lib/linalg.h b/dep/magnetic_tesseroids/lib/linalg.h deleted file mode 100755 index 3e5ccf6..0000000 --- a/dep/magnetic_tesseroids/lib/linalg.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef _LINALG_H_ -#define _LINALG_H_ - -void conv_vect_cblas(double *vect, double lon1, double lat1, double lon2, double lat2, double *res); -void conv_vect_cblas_precalc(double *vect, double cos_a1, double sin_a1, double cos_b1, double sin_b1, double cos_a2, double sin_a2, double cos_b2, double sin_b2, double *res); - -void from_loc_sphr_to_cart(double* columnvect_xyzloc, double colatitude, double longitude, double* columnvect_res); -void from_cart_to_loc_sphr(double* columnvect_xyzglob, double colatitude, double longitude, double* columnvect_res); -void from_loc_sphr_to_loc_sphr(double* columnvect_xyzloc, double colatitude1, double longitude1, double colatitude2, double longitude2, double* columnvect_res); - -#endif diff --git a/dep/magnetic_tesseroids/lib/logger.cpp b/dep/magnetic_tesseroids/lib/logger.cpp deleted file mode 100755 index cb1b573..0000000 --- a/dep/magnetic_tesseroids/lib/logger.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/* -Functions to set up logging. -*/ - - -#include -#include -#include -#include "logger.h" - -/* Initialize the logger so that it doesn't print by default */ -LOGGER logger = {100, 0, 100, NULL}; - - -/* Setup logging to stderr.*/ -void log_init(int level) -{ - logger.level = level; -} - - -/* Set logging to a file. */ -void log_tofile(FILE *logfile, int level) -{ - logger.filelogging = 1; - logger.logfile = logfile; - logger.file_level = level; -} - - -/* Log a message at debug level */ -void log_debug(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_DEBUG) - { - fprintf(stderr, "DEBUG: %s\n", msg); - } - - if(logger.filelogging && (logger.file_level <= LOG_DEBUG)) - { - fprintf(logger.logfile, "DEBUG: %s\n", msg); - } -} - - -/* Log a message at info level */ -void log_info(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_INFO) - { - fprintf(stderr, "%s\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_INFO) - { - fprintf(logger.logfile, "%s\n", msg); - } -} - - -/* Log a message at warning level */ -void log_warning(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_WARNING) - { - fprintf(stderr, "WARNING: %s\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_WARNING) - { - fprintf(logger.logfile, "WARNING: %s\n", msg); - } -} - - -/* Log a message at error level */ -void log_error(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_ERROR) - { - fprintf(stderr, "ERROR: %s\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_ERROR) - { - fprintf(logger.logfile, "ERROR: %s\n", msg); - } -} diff --git a/dep/magnetic_tesseroids/lib/logger.h b/dep/magnetic_tesseroids/lib/logger.h deleted file mode 100755 index 8472fee..0000000 --- a/dep/magnetic_tesseroids/lib/logger.h +++ /dev/null @@ -1,166 +0,0 @@ -/* -Functions to set up logging. - -Examples --------- - -Logging to stderr: - - #include "logger.h" - - void my_func(){ - log_info("From my_func!\n"); - } - - int main(){ - // Enable logging to stderr in debug level - // will only print messages of level DEBUG or higher - log_init(LOG_DEBUG); - log_debug("debug line. The code is %d", LOG_DEBUG); - log_info("info line. The code is %d", LOG_INFO); - log_warning("warning line. The code is %d", LOG_WARNING); - log_error("error line. The code is %d", LOG_ERROR); - my_func(); - return 0; - } - -will print: - - DEBUG: debug line. The code is 0 - info line. The code is 1 - WARNING: warning line. The code is 2 - ERROR: error line. The code is 3 - From my_func! - -If function log_init() is not called than logging to stderr is disabled and no -messages will be printed. - -Logging to a file: - - #include - #include "logger.h" - - void my_func(){ - log_info("From my_func!\n"); - log_debug("Should not appear in log file\n"); - } - - int main(){ - // Enable logging to file "log.txt" in info level - // will not print DEBUG level messages - // since log_init was not called, there is no logging to stderr - FILE *logfile = fopen("log.txt", "w"); - log_tofile(logfile, LOG_INFO); - log_debug("debug line. The code is %d", LOG_DEBUG); - log_info("info line. The code is %d", LOG_INFO); - log_warning("warning line. The code is %d", LOG_WARNING); - log_error("error line. The code is %d", LOG_ERROR); - my_func(); - return 0; - } - -File log.txt will look like: - - info line. The code is 1 - WARNING: warning line. The code is 2 - ERROR: error line. The code is 3 - From my_func! - -Note that you can combine loggin to stderr and to a file with different -levels in the same program. -*/ - -#ifndef _TESSEROIDS_LOGGER_H_ -#define _TESSEROIDS_LOGGER_H_ - -/* Needed for definition of FILE */ -#include - - -/** Logging level for debug messages */ -#define LOG_DEBUG 1 -/** Logging level for general information */ -#define LOG_INFO 2 -/** Logging level for warning messages */ -#define LOG_WARNING 3 -/** Logging level for error messages */ -#define LOG_ERROR 4 - - -/** Keep the information on the global logger */ -typedef struct logger_struct -{ - int level; /**< level of logging */ - int filelogging; /**< flag to know wether loggint to a file is enabled */ - int file_level; /**< logging level for the file */ - FILE *logfile; /**< file to log to */ - -} LOGGER; - - -/** Global logger struct. Only declare in the main program! */ -//LOGGER logger; - - -/** Setup logging to stderr. - -@param level level of logging to be made. Can be one of: - - LOG_DEBUG - - LOG_INFO - - LOG_WARNING - - LOG_ERROR -*/ -void log_init(int level); - - -/** Set logging to a file. - -@param logfile FILE pointer to the already open file to log to. -@param level level of logging to be made to the file. Can be one of: - - LOG_DEBUG - - LOG_INFO - - LOG_WARNING - - LOG_ERROR -*/ -void log_tofile(FILE *logfile, int level); - - -/** Log a message at debug level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -void log_debug(const char *fmt, ...); - - -/** Log a message at info level. - -Pass parameters in the same format as printf() - -Does not print "INFO: " in front of the message when logging - -Prints a newline at the end. -*/ -void log_info(const char *fmt, ...); - - -/** Log a message at warning level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -void log_warning(const char *fmt, ...); - - -/** Log a message at error level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -void log_error(const char *fmt, ...); - - -#endif diff --git a/dep/magnetic_tesseroids/lib/parsers.cpp b/dep/magnetic_tesseroids/lib/parsers.cpp deleted file mode 100755 index 3fac979..0000000 --- a/dep/magnetic_tesseroids/lib/parsers.cpp +++ /dev/null @@ -1,678 +0,0 @@ -/* -Input and output parsing tools. -*/ - - -#include -#include -#include -#include -#include "logger.h" -#include "version.h" -#include "parsers.h" -#include "constants.h" -#include "geometry.h" - -#include - - -/* Parse basic command line arguments for programs */ -int parse_basic_args(int argc, char **argv, const char *progname, - BASIC_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, i; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->inputfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->inputfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - return 1; - } - if(parsed_args < total_args) - { - return 3; - } - return 0; -} - - - -/* Parse command line arguments for tessh* programs */ -int parse_tessb_args(int argc, char **argv, const char *progname, - TESSB_ARGS *args, void (*print_help)(const char *)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, parsed_order = 0, - parsed_ratio1 = 0, parsed_ratio2 = 0, parsed_ratio3 = 0, i, nchar, nread; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - args->lon_order = 2; - args->lat_order = 2; - args->r_order = 2; - args->adaptative = 1; - args->ratio1 = 0; /* zero means use the default for the program */ - args->ratio2 = 0; - args->ratio3 = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(progname); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 'a': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(!args->adaptative) - { - log_error("repeated option -a"); - bad_args++; - break; - } - args->adaptative = 0; - break; - case 'o': - { - if(parsed_order) - { - log_error("repeated option -o"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%d/%d/%d%n", &(args->lon_order), - &(args->lat_order), &(args->r_order), &nchar); - if(nread != 3 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_order = 1; - break; - } - case 't': - { - //ELDAR BAYKIEV/////////////////////////////////////////////////////////////////// - switch(argv[i][2]) - { - case '1': - { - if(parsed_ratio1) - { - log_error("repeated option -t1"); - bad_args++; - break; - } - params = &argv[i][3]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->ratio1), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_ratio1 = 1; - break; - } - - case '2': - { - if(parsed_ratio2) - { - log_error("repeated option -t2"); - bad_args++; - break; - } - params = &argv[i][3]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->ratio2), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_ratio2 = 1; - break; - } - - case '3': - { - if(parsed_ratio3) - { - log_error("repeated option -t3"); - bad_args++; - break; - } - params = &argv[i][3]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->ratio3), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_ratio3 = 1; - break; - } - } - //ELDAR BAYKIEV/////////////////////////////////////////////////////////////////// - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->modelfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->modelfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(bad_args > 0 || parsed_args != total_args) - { - if(parsed_args < total_args) - { - log_error("%s: missing input file.", - progname, parsed_args, total_args); - } - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - } - return 1; - } - return 0; -} - -//parse arguments for gradient calculator -int parse_gradcalc_args(int argc, char **argv, const char *progname, GRADCALC_ARGS *args, void (*print_help)(const char *)) -{ - int bad_args = 0, parsed_args = 0, total_args = 5, i; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - - args->gridbx_set = FALSE; - args->gridby_set = FALSE; - args->gridbz_set = FALSE; - args->out_set = -1; - - args->bz_NEU_NED = -1; - args->bz_NEU_NED_set = FALSE; - - - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - //log_error("invalid argument '%s'", argv[i]); - printf("invalid argument '%s'\n", argv[i]); - bad_args++; - break; - } - print_help(progname); - return 2; - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - printf("invalid argument '%s'\n", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 'b': - params = &argv[i][2]; - if(strlen(params) <= 1) - { - printf("bad input argument -b. Missing component and filename\n"); - bad_args++; - break; - } - else - { - switch(argv[i][2]) - { - case 'x': - if(args->gridbx_set) - { - printf("invalid argument '%s', gridfile bx already set\n", argv[i]); - bad_args++; - break; - } - else - { - args->gridbx_set = 1; - args->gridbx_fn = &argv[i][3]; - } - break; - case 'y': - if(args->gridby_set) - { - printf("invalid argument '%s', gridfile by already set\n", argv[i]); - bad_args++; - break; - } - else - { - args->gridby_set = 1; - args->gridby_fn = &argv[i][3]; - } - break; - case 'z': - if(args->gridbz_set) - { - printf("invalid argument '%s', gridfile by already set\n", argv[i]); - bad_args++; - break; - } - else - { - args->gridbz_set = 1; - args->gridbz_fn = &argv[i][3]; - } - break; - default: - printf("invalid argument '%s', wrong component\n", argv[i]); - bad_args++; - break; - } - } - break; - case 'c': - params = &argv[i][2]; - - if(args->bz_NEU_NED_set) - { - printf("invalid argument '%s', coordinate system is already set\n", argv[i]); - bad_args++; - break; - } - if(strlen(params) > 1) - { - printf("invalid argument '%s', specify coordinate system in the input grids\n", argv[i]); - bad_args++; - break; - } - if(argv[i][2] == '1') - { - args->bz_NEU_NED_set = 1; - args->bz_NEU_NED = 1; - break; - } - else if(argv[i][2] == '2') - { - args->bz_NEU_NED_set = 1; - args->bz_NEU_NED = -1; - break; - } - else - { - printf("invalid argument '%s', there are only NED (1) and NEU (2, default) coordinate systems\n", argv[i]); - bad_args++; - break; - } - break; - case 'o': - params = &argv[i][2]; - - if(args->out_set>=0) - { - printf("invalid argument '%s', output format is already set\n", argv[i]); - bad_args++; - break; - } - - if(strlen(params) != 1) - { - printf("invalid argument '%s', specify output format\n", argv[i]); - bad_args++; - break; - } - //TODO Add check if it is integer - args->out_set = atoi(params); - break; - default: - printf("invalid argument '%s'\n", argv[i]); - bad_args++; - break; - } - } - } - - if(parsed_args > total_args) - { - //log_error("%s: too many input arguments. given %d, max %d.", progname, parsed_args, total_args); - } - if(bad_args > 0) - { - //log_error("%d bad input argument(s)", bad_args); - return 1; - } - if(parsed_args < total_args) - { - return 3; - } - return 0; -} - -/* Strip trailing spaces and newlines from the end of a string */ -void strstrip(char *str) -{ - int i; - for(i = strlen(str) - 1; i >= 0; i--) - { - if(str[i] != ' ' && str[i] != '\n' && str[i] != '\r' && str[i] != '\0') - break; - } - str[i + 1] = '\0'; -} - - -/* Read a single tesseroid from a string */ -int gets_mag_tess(const char *str, MAG_TESSEROID *tess) -{ - double w, e, s, n, top, bot, dens, suscept, Bx, By, Bz, Rx, Ry, Rz; - int nread, nchars; - - nread = sscanf(str, "%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf%n", &w, &e, &s, - &n, &top, &bot, &dens, &suscept, &Bx, &By, &Bz, &nchars); - if(nread != 11 || str[nchars] != '\0') - { - return 1; - } - tess->w = w; - tess->e = e; - tess->s = s; - tess->n = n; - tess->r1 = MEAN_EARTH_RADIUS + bot; - tess->r2 = MEAN_EARTH_RADIUS + top; - tess->density = dens; - tess->suscept = suscept; - tess->Bx = Bx; - tess->By = By; - tess->Bz = Bz; - - tess->cos_a1 = cos(PI/2.0-DEG2RAD*(w+e)*0.5); - tess->sin_a1 = sin(PI/2.0-DEG2RAD*(w+e)*0.5); - tess->cos_b1 = cos(DEG2RAD*(s+n)*0.5); - tess->sin_b1 = sin(DEG2RAD*(s+n)*0.5); - return 0; -} - -//ELDAR BAYKIEV//////////////////////////////// -MAG_TESSEROID * read_mag_tess_model(FILE *modelfile, int *size) -{ - MAG_TESSEROID *model, *tmp; - int buffsize = 300, line, badinput = 0, error_exit = 0; - char sbuff[10000]; - - /* Start with a single buffer allocation and expand later if necessary */ - model = (MAG_TESSEROID *)malloc(buffsize*sizeof(MAG_TESSEROID)); - if(model == NULL) - { - log_error("problem allocating initial memory to load tesseroid model."); - return NULL; - } - *size = 0; - for(line = 1; !feof(modelfile); line++) - { - if(fgets(sbuff, 10000, modelfile) == NULL) - { - if(ferror(modelfile)) - { - log_error("problem encountered reading line %d.", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(sbuff[0] == '#' || sbuff[0] == '\r' || sbuff[0] == '\n') - { - continue; - } - if(*size == buffsize) - { - buffsize += buffsize; - tmp = (MAG_TESSEROID *)realloc(model, buffsize*sizeof(MAG_TESSEROID)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem expanding memory for tesseroid model.\nModel is too big."); - return NULL; - } - model = tmp; - } - /* Remove any trailing spaces or newlines */ - strstrip(sbuff); - if(gets_mag_tess(sbuff, &model[*size])) - { - log_warning("bad/invalid tesseroid at line %d.", line); - badinput = 1; - continue; - } - (*size)++; - } - } - if(badinput || error_exit) - { - free(model); - return NULL; - } - /* Adjust the size of the model */ - if(*size != 0) - { - tmp = (MAG_TESSEROID *)realloc(model, (*size)*sizeof(MAG_TESSEROID)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem freeing excess memory for tesseroid model."); - return NULL; - } - model = tmp; - } - return model; -} - - -/* Read a single rectangular prism from a string */ diff --git a/dep/magnetic_tesseroids/lib/parsers.h b/dep/magnetic_tesseroids/lib/parsers.h deleted file mode 100755 index c8c9b25..0000000 --- a/dep/magnetic_tesseroids/lib/parsers.h +++ /dev/null @@ -1,75 +0,0 @@ -/* -Input and output parsing tools. -*/ - - -#ifndef _MAG_TESSEROIDS_PARSERS_H_ -#define _MAG_TESSEROIDS_PARSERS_H_ - -/* Needed for definition of MAG_TESSEROID and PRISM */ -#include "geometry.h" -/* Need for the definition of FILE */ -#include - -/** Store basic input arguments and option flags */ -typedef struct basic_args -{ - char *inputfname; /**< name of the input file */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ -} BASIC_ARGS; - -typedef struct tessh_args -{ - int lon_order; /**< glq order in longitude integration */ - int lat_order; /**< glq order in latitude integration */ - int r_order; /**< glq order in radial integration */ - char *modelfname; /**< name of the file with the tesseroid model */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - int adaptative; /**< flat to indicate wether to use the adaptative size - of tesseroid algorithm */ - double ratio1; /**< distance-size ratio used for recusive division */ - double ratio2; /**< distance-size ratio used for recusive division */ - double ratio3; /**< distance-size ratio used for recusive division */ -} TESSB_ARGS; - - -typedef struct gradcalc_args -{ - int gridbx_set; - int gridby_set; - int gridbz_set; - - char* gridbx_fn; - char* gridby_fn; - char* gridbz_fn; - - int out_set; - - - int bz_NEU_NED; - int bz_NEU_NED_set; - - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - - - - -} GRADCALC_ARGS; - -int parse_basic_args(int argc, char **argv, const char *progname, BASIC_ARGS *args, void (*print_help)(void)); -int parse_tessb_args(int argc, char **argv, const char *progname, TESSB_ARGS *args, void (*print_help)(const char *)); - -int parse_gradcalc_args(int argc, char **argv, const char *progname, GRADCALC_ARGS *args, void (*print_help)(const char *)); - -void strstrip(char *str); - -int gets_mag_tess(const char *str, MAG_TESSEROID *tess); -MAG_TESSEROID * read_mag_tess_model(FILE *modelfile, int *size); - - -#endif diff --git a/dep/magnetic_tesseroids/lib/tessb_main.cpp b/dep/magnetic_tesseroids/lib/tessb_main.cpp deleted file mode 100755 index 82baa4d..0000000 --- a/dep/magnetic_tesseroids/lib/tessb_main.cpp +++ /dev/null @@ -1,385 +0,0 @@ -/* -Generic main function for the tessb* programs. -*/ - - - - -#include -#include -#include -#include -#include "logger.h" -#include "version.h" -#include "grav_tess.h" -#include "glq.h" -#include "constants.h" -#include "geometry.h" -#include "parsers.h" -#include "tessb_main.h" -#include "linalg.h" - -#include - -/* Print the help message for tessh* programs */ -void print_tessb_help(const char *progname) -{ - printf("MAGNETIC MAG_TESSEROIDS\n"); - printf("Usage: %s MODELFILE [OPTIONS]\n\n", progname); - if(strcmp(progname + 4, "pot") == 0) - { - printf("Calculate the potential due to a tesseroid model on\n"); - } - else - { - printf("Calculate the %s component due to a tesseroid model on\n", - progname + 4); - } - printf("TODO\n"); -} - - -/* Run the main for a generic tessh* program */ -int run_tessb_main(int argc, char **argv, const char *progname, - double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ), - double ratio1, double ratio2, double ratio3) -{ - TESSB_ARGS args; - GLQ *glq_lon, *glq_lat, *glq_r; - MAG_TESSEROID *model; - - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0; - char buff[10000]; - - double lon, lat, height, res; - - /*variables for precalculation of trigonometrical functions for tesseroid centers*/ - double cos_a2, sin_a2, cos_b2, sin_b2; - - /*variables for precalculation of trigonometrical functions for grid points*/ - double lon_prev, lat_prev; - double cos_a2_prev, sin_a2_prev, cos_b2_prev, sin_b2_prev; - - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - double (*field1)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ); - double (*field2)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ); - double (*field3)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ); - void (*field_triple)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ, double*); - double ggt_1, ggt_2, ggt_3; - double gtt_v[3]; - int n_tesseroid; - - - log_init(LOG_INFO); - - rc = parse_tessb_args(argc, argv, progname, &args, &print_tessb_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - - return 1; - } - - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_DEBUG); - } - - /* Check if a custom distance-size ratio is given */ - if(args.ratio1 != 0) - { - ratio1 = args.ratio1; - } - if(args.ratio2 != 0) - { - ratio2 = args.ratio2; - } - if(args.ratio3 != 0) - { - ratio3 = args.ratio3; - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - log_info("Use recursive division of tesseroids: %s", - args.adaptative ? "True" : "False"); - log_info("Distance-size ratio1 for recusive division: %g", ratio1); - log_info("Distance-size ratio2 for recusive division: %g", ratio2); - log_info("Distance-size ratio3 for recusive division: %g", ratio3); - - /* Make the necessary GLQ structures */ - log_info("Using GLQ orders: %d lon / %d lat / %d r", args.lon_order, - args.lat_order, args.r_order); - glq_lon = glq_new(args.lon_order, -1, 1); - glq_lat = glq_new(args.lat_order, -1, 1); - glq_r = glq_new(args.r_order, -1, 1); - if(glq_lon == NULL || glq_lat == NULL || glq_r == NULL) - { - log_error("failed to create required GLQ structures"); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - - /* Read the tesseroid model file */ - log_info("Reading magnetic tesseroid model from file %s", args.modelfname); - modelfile = fopen(args.modelfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_mag_tess_model(modelfile, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("tesseroid file %s is empty", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d tesseroid(s) read", modelsize); - - /* Print a header on the output with provenance information */ - if(strcmp(progname + 4, "pot") == 0) - { - printf("# Potential calculated with %s %s:\n", progname, - tesseroids_version); - } - else - { - printf("# %s component calculated with %s %s:\n", progname+4, progname, - tesseroids_version); - } - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d tesseroids)\n", args.modelfname, modelsize); - printf("# GLQ order: %d lon / %d lat / %d r\n", args.lon_order, - args.lat_order, args.r_order); - printf("# Use recursive division of tesseroids: %s\n", - args.adaptative ? "True" : "False"); - printf("# Distance-size ratio1 for recusive division: %g\n", ratio1); - printf("# Distance-size ratio2 for recusive division: %g\n", ratio2); - printf("# Distance-size ratio3 for recusive division: %g\n", ratio3); - - /////////////ELDAR BAYKIEV////////////// - /* Assign pointers to functions that calculate gravity gradient tensor components */ - if (!strcmp("tessbx", progname)) - { - field1 = &tess_gxx; - field2 = &tess_gxy; - field3 = &tess_gxz; - - field_triple = &tess_gxx_gxy_gxz; - } - - if (!strcmp("tessby", progname)) - { - field1 = &tess_gxy; - field2 = &tess_gyy; - field3 = &tess_gyz; - - field_triple = &tess_gxy_gyy_gyz; - } - - if (!strcmp("tessbz", progname)) - { - field1 = &tess_gxz; - field2 = &tess_gyz; - field3 = &tess_gzz; - - field_triple = &tess_gxz_gyz_gzz; - } - /////////////ELDAR BAYKIEV////////////// - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - - /////////////// - lon_prev = 0; - lat_prev = 0; - - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - if(sscanf(buff, "%lf %lf %lf", &lon, &lat, &height) != 3) - { - log_warning("bad/invalid computation point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - - - - /////////////ELDAR BAYKIEV////////////// - res = 0; - if(args.adaptative) - { - for(n_tesseroid = 0; n_tesseroid < modelsize; n_tesseroid++) - { - gtt_v[0] = 0; - gtt_v[1] = 0; - gtt_v[2] = 0; - double B_to_H = model[n_tesseroid].suscept/(M_0);//IMPORTANT - double M_vect[3] = {model[n_tesseroid].Bx * B_to_H, model[n_tesseroid].By * B_to_H, model[n_tesseroid].Bz * B_to_H}; - double M_vect_p[3] = {0, 0, 0}; - - conv_vect_cblas(M_vect, (model[n_tesseroid].w + model[n_tesseroid].e)*0.5, (model[n_tesseroid].s + model[n_tesseroid].n)*0.5, lon, lat, M_vect_p); - - ggt_1 = calc_tess_model_adapt(&model[n_tesseroid], 1, lon, lat, height + MEAN_EARTH_RADIUS, glq_lon, glq_lat, glq_r, field1, ratio1); - ggt_2 = calc_tess_model_adapt(&model[n_tesseroid], 1, lon, lat, height + MEAN_EARTH_RADIUS, glq_lon, glq_lat, glq_r, field2, ratio2); - ggt_3 = calc_tess_model_adapt(&model[n_tesseroid], 1, lon, lat, height + MEAN_EARTH_RADIUS, glq_lon, glq_lat, glq_r, field3, ratio3); - - res = res + M_0*EOTVOS2SI*(ggt_1 * M_vect_p[0] + ggt_2 * M_vect_p[1] + ggt_3 * M_vect_p[2]) /(G*model[n_tesseroid].density*4*PI); - - //printf("res %g\n", res); - } - - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - } - else - { - //precalculate trigonometrical functions - - if(lon == lon_prev) - { - cos_b2 = cos_b2_prev; - sin_b2 = sin_b2_prev; - } - else - { - cos_b2 = cos(DEG2RAD*lon); - sin_b2 = sin(DEG2RAD*lon); - } - - if(lat == lat_prev) - { - cos_a2 = cos_a2_prev; - sin_a2 = sin_a2_prev; - } - else - { - cos_a2 = cos(PI/2.0-DEG2RAD*lat); - sin_a2 = sin(PI/2.0-DEG2RAD*lat); - } - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - for(n_tesseroid = 0; n_tesseroid < modelsize; n_tesseroid++) - { - gtt_v[0] = 0; - gtt_v[1] = 0; - gtt_v[2] = 0; - //ELDAR: TODO: PRECALCULATE SIC COSINE TABLES - double B_to_H = model[n_tesseroid].suscept/(M_0);//IMPORTANT - double M_vect[3] = {model[n_tesseroid].Bx * B_to_H, model[n_tesseroid].By * B_to_H, model[n_tesseroid].Bz * B_to_H}; - double M_vect_p[3] = {0, 0, 0}; - - //conv_vect_cblas(M_vect, (model[n_tesseroid].w + model[n_tesseroid].e)*0.5, (model[n_tesseroid].s + model[n_tesseroid].n)*0.5, lon, lat, M_vect_p); - conv_vect_cblas_precalc(M_vect, model[n_tesseroid].cos_a1, model[n_tesseroid].sin_a1, model[n_tesseroid].cos_b1, model[n_tesseroid].sin_b1, cos_a2, sin_a2, cos_b2, sin_b2, M_vect_p); - - calc_tess_model_triple(&model[n_tesseroid], 1, lon, lat, height + MEAN_EARTH_RADIUS, glq_lon, glq_lat, glq_r, field_triple, gtt_v); - - res = res + M_0*EOTVOS2SI*(gtt_v[0] * M_vect_p[0] + gtt_v[1] * M_vect_p[1] + gtt_v[2] * M_vect_p[2]) /(G*model[n_tesseroid].density*4*PI); - - } - - lon_prev = lon; - lat_prev = lat; - - cos_a2_prev = cos_a2; - sin_a2_prev = sin_a2; - - cos_b2_prev = cos_b2; - sin_b2_prev = sin_b2; - ///////////////////////////////////////////////////////////////////////////////////////////////////////// - } - printf("%s %.15g\n", buff, res); - points++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - glq_free(glq_lon); - glq_free(glq_lat); - glq_free(glq_r); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/magnetic_tesseroids/lib/tessb_main.h b/dep/magnetic_tesseroids/lib/tessb_main.h deleted file mode 100755 index 19f96de..0000000 --- a/dep/magnetic_tesseroids/lib/tessb_main.h +++ /dev/null @@ -1,14 +0,0 @@ -/* -Generic main function for the tessb* programs. -*/ - -#ifndef _MAG_TESSEROIDS_TESSH_MAIN_H_ -#define _MAG_TESSEROIDS_TESSH_MAIN_H_ - -#include "glq.h" -#include "geometry.h" - -void print_tessb_help(const char *progname); -int run_tessb_main(int argc, char **argv, const char *progname, double (*field)(MAG_TESSEROID, double, double, double, GLQ, GLQ, GLQ), double ratio1, double ratio2, double ratio3); - -#endif diff --git a/dep/magnetic_tesseroids/lib/version.cpp b/dep/magnetic_tesseroids/lib/version.cpp deleted file mode 100755 index 0f383b0..0000000 --- a/dep/magnetic_tesseroids/lib/version.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/* -Hold the version number of the project. -*/ - -#include -#include "version.h" - - -/* Print version and license information */ -void print_version(const char *progname) -{ - printf("%s (Magnetic Tesseroids) %s\n\n", progname, tesseroids_version); - printf("Copyright (C) 2015, Eldar Baykiev.\n"); - printf("This program is based on the code of Leonardo Uieda.\n"); - printf("\n"); - printf("Developed by Eldar Baykiev.\n"); -} diff --git a/dep/magnetic_tesseroids/lib/version.h b/dep/magnetic_tesseroids/lib/version.h deleted file mode 100755 index 6ab6396..0000000 --- a/dep/magnetic_tesseroids/lib/version.h +++ /dev/null @@ -1,18 +0,0 @@ -/* -Hold the version number of the project. -*/ - -#ifndef _TESSEROIDS_VERSION_H_ -#define _TESSEROIDS_VERSION_H_ - -/** Current project version number */ -const char tesseroids_version[] = "1.1"; - - -/** Print version and license information - -@param progname name of the program -*/ -void print_version(const char *progname); - -#endif diff --git a/dep/magnetic_tesseroids/stow-config.sh b/dep/magnetic_tesseroids/stow-config.sh deleted file mode 100755 index 5a08868..0000000 --- a/dep/magnetic_tesseroids/stow-config.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -sudo stow --dir=/opt/stow --target=/usr/local -S magtess \ No newline at end of file diff --git a/dep/magnetic_tesseroids/toolkits/CMakeLists.txt b/dep/magnetic_tesseroids/toolkits/CMakeLists.txt deleted file mode 100644 index cedc707..0000000 --- a/dep/magnetic_tesseroids/toolkits/CMakeLists.txt +++ /dev/null @@ -1,36 +0,0 @@ -# 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") - -# 设置可执行文件的输出地址 -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/toolkits) - -# 下面设置tools的编译命令 首先设置一个宏 -macro(add_tools name) - # 添加可执行程序名称 - add_executable(${name} ${name}.cpp) - # 设置安装后的动态库调用地址 - set_target_properties(${name} PROPERTIES INSTALL_RPATH /usr/local/lib) - # 链接动态库 - target_link_libraries(${name} PUBLIC magtess) - # 将可执行程序安装到bin - install(TARGETS ${name} RUNTIME DESTINATION sbin) -endmacro() - -# 添加tools -add_tools(tessbx) -add_tools(tessby) -add_tools(tessbz) -add_tools(tessutil_combine_grids) -add_tools(tessutil_gradient_calculator) - -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux" OR ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") - # 添加可执行程序名称 - add_executable(tessutil_magnetize_model tessutil_magnetize_model.c) - # 设置安装后的动态库调用地址 - set_target_properties(tessutil_magnetize_model PROPERTIES INSTALL_RPATH /usr/local/lib) - # 链接动态库 - target_link_libraries(tessutil_magnetize_model PUBLIC magtess) - # 将可执行程序安装到bin - install(TARGETS tessutil_magnetize_model RUNTIME DESTINATION sbin) -endif() diff --git a/dep/magnetic_tesseroids/toolkits/tessbx.cpp b/dep/magnetic_tesseroids/toolkits/tessbx.cpp deleted file mode 100755 index 8e6602a..0000000 --- a/dep/magnetic_tesseroids/toolkits/tessbx.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessb_main.h" - - -/** Main tessbx*/ -int main(int argc, char **argv) -{ - return run_tessb_main(argc, argv, "tessbx", 0, TESSEROID_GXX_SIZE_RATIO, TESSEROID_GXY_SIZE_RATIO, TESSEROID_GXZ_SIZE_RATIO); - -} diff --git a/dep/magnetic_tesseroids/toolkits/tessby.cpp b/dep/magnetic_tesseroids/toolkits/tessby.cpp deleted file mode 100755 index 7d1115e..0000000 --- a/dep/magnetic_tesseroids/toolkits/tessby.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessb_main.h" - - -/** Main tessby*/ -int main(int argc, char **argv) -{ - return run_tessb_main(argc, argv, "tessby", 0, TESSEROID_GXX_SIZE_RATIO, TESSEROID_GXY_SIZE_RATIO, TESSEROID_GXZ_SIZE_RATIO); - -} diff --git a/dep/magnetic_tesseroids/toolkits/tessbz.cpp b/dep/magnetic_tesseroids/toolkits/tessbz.cpp deleted file mode 100755 index b398b26..0000000 --- a/dep/magnetic_tesseroids/toolkits/tessbz.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessb_main.h" - - -/** Main tessbz*/ -int main(int argc, char **argv) -{ - return run_tessb_main(argc, argv, "tessbz", 0, TESSEROID_GXX_SIZE_RATIO, TESSEROID_GXY_SIZE_RATIO, TESSEROID_GXZ_SIZE_RATIO); - -} diff --git a/dep/magnetic_tesseroids/toolkits/tessutil_combine_grids.cpp b/dep/magnetic_tesseroids/toolkits/tessutil_combine_grids.cpp deleted file mode 100755 index a6c7ac7..0000000 --- a/dep/magnetic_tesseroids/toolkits/tessutil_combine_grids.cpp +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include -#include // Added by Zhang Yi on 2021-08-26 -#include - -#define MAX_GRID_POINTS 16000 - -#define GRID_FORMAT "%lf %lf %f %lf" - -#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ -#include -typedef SSIZE_T ssize_t; -#endif - -void printresult_withalt(double* longitudes, double* latitudes, float* altitudes, double* values, int n_values) -{ - - - for (int h = 0; h < n_values; h++) - printf( "%lf %lf %f %lf\n", longitudes[h], latitudes[h], altitudes[h], values[h]); - - return; -} - -void printresult(double* longitudes, double* latitudes, double* values, int n_values) -{ - - - for (int h = 0; h < n_values; h++) - printf( "%lf %lf %lf\n", longitudes[h], latitudes[h], values[h]); - - return; -} - - -int main(int argc, char**argv) -{ - int n_files = (argc-1)/2; - - double lons[MAX_GRID_POINTS]; - double lats[MAX_GRID_POINTS]; - float alts[MAX_GRID_POINTS]; - - double vals[MAX_GRID_POINTS]; - - double factor = 1; - - //char * line = NULL; - std::string line; - size_t len = 0; - ssize_t read; - - int n_lines = 0; - - for (int i = 0; i < n_files; i++) - { - //FILE * fp = fopen(argv[1+2*i], "r"); - std::ifstream fp(argv[1+2*i], std::ios::in); - sscanf(argv[1+2*i+1], "%lf", &factor); - - //if (fp == NULL) - if (!fp) - { - printf("ERROR: Can not open file with grid values.\n"); - exit(EXIT_FAILURE); - } - - n_lines = 0; - //while ((read = getline(&line, &len, fp )) != -1) - while (std::getline(fp, line)) - { - - //if ((line[0] != '#') && (strlen(line) > 2)) - if ((line[0] != '#') && (line.length() > 2)) - { - n_lines++; - if (n_lines>MAX_GRID_POINTS) - { - printf("ERROR: Too many grid points (> %d) in the input. Recompile program with a bigger value of MAX_GRID_POINTS.\n", n_lines); - exit(EXIT_FAILURE); - } - double value; - - sscanf(line.c_str(), GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &value); - vals[n_lines-1] = vals[n_lines-1] + value*factor; - - } - } - //fclose(fp); - fp.close(); - } - - int no_alt = 0; - - if (no_alt) - printresult(lons, lats, vals, n_lines); - else - printresult_withalt(lons, lats, alts, vals, n_lines); - -} diff --git a/dep/magnetic_tesseroids/toolkits/tessutil_gradient_calculator.cpp b/dep/magnetic_tesseroids/toolkits/tessutil_gradient_calculator.cpp deleted file mode 100755 index 706ee6e..0000000 --- a/dep/magnetic_tesseroids/toolkits/tessutil_gradient_calculator.cpp +++ /dev/null @@ -1,366 +0,0 @@ -#include -#include -#include -#include -#include // Added by Zhang Yi on 2021-08-26 -#include - -#include "../lib/constants.h" -#include "../lib/parsers.h" -#include "../lib/linalg.h" - -#define MAX_GRID_POINTS 50000 - -#define GRID_FORMAT "%lf %lf %f %lf" - -#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ -#include -typedef SSIZE_T ssize_t; -#endif - - -// TODO conversion of input/output units nT/km pT/km nT/m pT/m - - -void printcomp(double* longitudes, double* latitudes, double* values, int n_values) -{ - - - for (int h = 0; h < n_values; h++) - printf("%lf %lf %lf\n", longitudes[h], latitudes[h], values[h]); - - return; -} - -void printall(double* longitudes, double* latitudes, int n_values, double* values1, double* values2, double* values3, double* values4, double* values5, double* values6, double* values7) -{ - - - for (int h = 0; h < n_values; h++) - printf("%lf %lf %lf %lf %lf %lf %lf %lf %lf\n", longitudes[h], latitudes[h], values1[h], values2[h], values3[h], values4[h], values5[h], values6[h], values7[h]); - - return; -} - - -void print_gradcalc_help(const char *progname) -{ - printf("MAGNETIC TESSEROIDS: Gradient Calculator\n"); - printf("Usage: %s [OPTIONS]\n\n", progname); - printf("Options:\n"); - printf("\t-h\t\t\t Help\n\n"); - - printf("\t-bx[GRID FILENAME]\t Grid filename with Bx component\n"); - printf("\t-by[GRID FILENAME]\t Grid filename with By component\n"); - printf("\t-bz[GRID FILENAME]\t Grid filename with Bz component\n"); - printf("\tNOTE:\tall grids must be in format LON LAT ALT B*,\n\t\tstart from West-South corner and longitudes must increment first.\n\t\tLON, LAT in [deg], B* in [nT] and ALT in [m].\n\n"); - - printf("\t-c[COORD SYSTEM]\t Coordinate system in input grids. 1 - North-East-Down, 2 - North-East-Up\n"); - printf("\t-o[COMPONENT]\t\t If 0, then output format is LON LAT BXX BYX BZX BXY BYY BZY BZZ, if 1-7, then \n"); - printf("\tonly corresponding component would be printed with format LON LAT B**.\n"); - printf("\tNOTE: output is always in North-East-Down coordinate system.\n\t\tLON, LAT in [deg], B** in [nT/km].\n"); - - - - - //printf("TODO\n"); -} - - - - -int main(int argc, char**argv) -{ - const char * progname = "tessutil_gradient_calculator"; - GRADCALC_ARGS args; - int rc; - - - //log_init(LOG_INFO); - - rc = parse_gradcalc_args(argc, argv, progname, &args, &print_gradcalc_help); - if(rc == 2) //help - { - return 0; - } - if(rc == 1) - { - printf("Terminating due to bad input\n"); - printf("Try '%s -h' for instructions\n", progname); - - return 1; - } - - if ((args.gridbx_set == 0) || (args.gridbx_set == 0) || (args.gridbx_set == 0)) - { - printf("no input grids\n"); - exit(EXIT_FAILURE); - } - - if (args.bz_NEU_NED == 1) - printf("#Coordinate system in input grids: North-East-Down\n"); - else - printf("#Coordinate system in input grids: North-East-Up\n"); - printf("#Coordinate system in output grid: North-East-Down\n"); - - - double lons[MAX_GRID_POINTS]; - double lats[MAX_GRID_POINTS]; - float alts[MAX_GRID_POINTS]; - - double bx[MAX_GRID_POINTS]; - double by[MAX_GRID_POINTS]; - double bz[MAX_GRID_POINTS]; - //read file with bx - - //char * line = NULL; - std::string line; - size_t len = 0; - ssize_t read; - - - - //FILE * bxfp = fopen(args.gridbx_fn, "r"); - //if (bxfp == NULL) - std::ifstream bxfp(args.gridbx_fn, std::ios::in); // Updated by Yi Zhang on 2021-08-26 - if (!bxfp) - { - printf("ERROR: Can not open file with Bx values.\n"); - exit(EXIT_FAILURE); - } - - int n_lines = 0; - - - - //while ((read = getline(&line, &len, bxfp )) != -1) - while (getline(bxfp, line)) - { - - //if ((line[0] != '#') && (strlen(line) > 2)) - if ((line[0] != '#') && (line.length() > 2)) - { - n_lines++; - if (n_lines>MAX_GRID_POINTS) - { - printf("ERROR: Too many grid points (> %d) in the input. Recompile program with a bigger value of MAX_GRID_POINTS.\n", n_lines); - exit(EXIT_FAILURE); - } - - sscanf(line.c_str(), GRID_FORMAT, &lons[n_lines-1], &lats[n_lines-1], &alts[n_lines-1], &bx[n_lines-1]); - - } - } - //fclose(bxfp); - bxfp.close(); - - - /*number of grid points*/ - printf("#Number of grid points: %d\n", n_lines); - - /*grid spacing*/ - - double lon_min = lons[0]; - double lon_max = lons[n_lines-1]; - - double lon_step = lons[1]-lons[0]; - if ((lon_step == 0) || (lon_step <= 0) || (lon_max < lon_min)) - { - printf("ERROR: Wrong grid format. Longitudes must increment first. Use the format of tessgrd.\n"); - exit(EXIT_FAILURE); - } - - int lon_n = 1; - while ((lats[lon_n] == lats[0]) && (lon_n < n_lines)) - { - lon_n++; - } - double lat_step = lats[lon_n]-lats[0]; - - int lat_n = n_lines / lon_n; - - double lat_min = lats[0]; - double lat_max = lats[n_lines-1]; - - - - if ((lat_step <= 0) || (lat_step <= 0) || (lat_max < lat_min)) - { - printf("ERROR: Wrong grid format. Latitudes must increment. Use the format of tessgrd.\n"); - exit(EXIT_FAILURE); - } - - printf("#Longitudinal step: %lf, latitudinal step: %lf \n", lon_step, lat_step); - printf("#Longitudinal points: %d, latitudinal points: %d \n", lon_n, lat_n); - printf("#Edges: W %lf, E %lf, S %lf, N %lf \n", lon_min, lon_max, lat_min, lat_max); - - /* read other grids */ - // By - //FILE * byfp = fopen(args.gridby_fn, "r"); - //if (byfp == NULL) - - std::ifstream byfp(args.gridby_fn, std::ios::in); - if (!byfp) - { - printf("ERROR: Can not open file with Bx values.\n"); - exit(EXIT_FAILURE); - } - - int n_lines2 = 0; - //while ((read = getline(&line, &len, byfp )) != -1) - while (getline(byfp, line)) - { - - //if ((line[0] != '#') && (strlen(line) > 2)) - if ((line[0] != '#') && (line.length() > 2)) - { - n_lines2++; - //printf("%s", line); - double dummy1, dummy2; - float dummy3; - sscanf(line.c_str(), GRID_FORMAT , &dummy1, &dummy2, &dummy3, &by[n_lines2-1]); - } - } - //fclose(byfp); - byfp.close(); - - if (n_lines2 != n_lines) - { - printf("ERROR: Grid points of Bx and By do not coincide.\n"); - exit(EXIT_FAILURE); - } - - // Bz - //FILE * bzfp = fopen(args.gridbz_fn, "r"); - //if (bzfp == NULL) - std::ifstream bzfp(args.gridbz_fn, std::ios::in); - if (!bzfp) - { - printf("ERROR: Can not open file with Bx values.\n"); - exit(EXIT_FAILURE); - } - - n_lines2 = 0; - //while ((read = getline(&line, &len, bzfp )) != -1) - while (getline(bzfp, line)) - { - if ((line[0] != '#') && (line.length() > 2)) - { - n_lines2++; - //printf("%s", line); - double dummy1, dummy2; - float dummy3; - double bz_curr; - sscanf(line.c_str(), GRID_FORMAT, &dummy1, &dummy2, &dummy3,&bz_curr); - - bz[n_lines2-1] = args.bz_NEU_NED* bz_curr; //COORDINATE SYSTEM NEU or NED - } - } - //fclose(byfp); - byfp.close(); - - if (n_lines2 != n_lines) - { - printf("ERROR: Grid points of Bx and Bz do not coincide.\n"); - exit(EXIT_FAILURE); - } - - - /* calculate gradients */ - - - double bxx[MAX_GRID_POINTS]; - double byx[MAX_GRID_POINTS]; - double bzx[MAX_GRID_POINTS]; - - double bxy[MAX_GRID_POINTS]; - double byy[MAX_GRID_POINTS]; - double bzy[MAX_GRID_POINTS]; - - double bzz[MAX_GRID_POINTS]; - - int cent_ind, west_ind, east_ind, south_ind, north_ind; - - for (int i = 1; i -#include -#include -#include -#include - -#include "../lib/constants.h" - -int my_isnan(double d) -{ - return (d != d); /* IEEE: only NaN is not equal to itself */ -} - -#if defined(_MSC_VER) /* Added for windows by Yi Zhang on 2021-08-26*/ -#include -typedef SSIZE_T ssize_t; -#endif - -#define NaN log(-1.0) -#define FT2KM (1.0/0.0003048) -#define RAD2DEG (180.0/PI) - -#ifndef SEEK_SET -#define SEEK_SET 0 -#define SEEK_CUR 1 -#define SEEK_END 2 -#endif - -#define IEXT 0 -#define FALSE 0 -#define TRUE 1 /* constants */ -#define RECL 81 - -#define MAXINBUFF RECL+14 -/** Max size of in buffer **/ - -#define MAXREAD MAXINBUFF-2 -/** Max to read 2 less than total size (just to be safe) **/ - -#define MAXMOD 30 -/** Max number of models in a file **/ - -#define PATH MAXREAD -/** Max path and filename length **/ - -#define EXT_COEFF1 (double)0 -#define EXT_COEFF2 (double)0 -#define EXT_COEFF3 (double)0 - -#define MAXDEG 13 -#define MAXCOEFF (MAXDEG*(MAXDEG+2)+1) /* index starts with 1!, (from old Fortran?) */ -double gh1[MAXCOEFF]; -double gh2[MAXCOEFF]; -double gha[MAXCOEFF]; /* Geomag global variables */ -double ghb[MAXCOEFF]; -double d=0,f=0,h=0,i=0; -double dtemp,ftemp,htemp,itemp; -double x=0,y=0,z=0; -double xtemp,ytemp,ztemp; - -FILE *stream = NULL; /* Pointer to specified model data file */ - - -int main(int argc, char**argv) -{ - /* Variable declaration */ - - /* Variables related to tesseroids */ - FILE * tessfp; - FILE * tessoutfp; - char * line = NULL; - size_t len = 0; - ssize_t read; - - float W, E, S, N; - float HOT, HOB; - float DENSITY; - float SUSCEPT, OBX, OBY, OBZ; - float lon_c, lat_c, alt_c; - - int i, count; - - char tessfilename[PATH]; - char tessoutfilename[PATH]; - - - /* Control variables */ - int again = 1; - int decyears = 3; - int units = 4; - int decdeg = 3; - int range = -1; - int counter = 0; - int warn_H, warn_H_strong, warn_P; - - int modelI; /* Which model (Index) */ - int nmodel; /* Number of models in file */ - int max1[MAXMOD]; - int max2[MAXMOD]; - int max3[MAXMOD]; - int nmax; - int igdgc=3; - int isyear=-1; - int ismonth=-1; - int isday=-1; - int ieyear=-1; - int iemonth=-1; - int ieday=-1; - int ilat_deg=200; - int ilat_min=200; - int ilat_sec=200; - int ilon_deg=200; - int ilon_min=200; - int ilon_sec=200; - int fileline; - long irec_pos[MAXMOD]; - - int coords_from_file = 0; - int arg_err = 0; - int need_to_read_model = 1; - - char mdfile[PATH]; - char inbuff[MAXINBUFF]; - char model[MAXMOD][9]; - char *begin; - char *rest; - char args[7][MAXREAD]; - int iarg; - - char coord_fname[PATH]; - char out_fname[PATH]; - FILE *coordfile,*outfile; - int iline=0; - int read_flag; - - double epoch[MAXMOD]; - double yrmin[MAXMOD]; - double yrmax[MAXMOD]; - double minyr; - double maxyr; - double altmin[MAXMOD]; - double altmax[MAXMOD]; - double minalt; - double maxalt; - double alt=-999999; - double sdate=-1; - double step=-1; - double syr; - double edate=-1; - double latitude=200; - double longitude=200; - double ddot; - double fdot; - double hdot; - double idot; - double xdot; - double ydot; - double zdot; - double warn_H_val, warn_H_strong_val; - - /* Subroutines used */ - - - double degrees_to_decimal(); - double julday(); - int interpsh(); - int extrapsh(); - int shval3(); - int dihf(); - int safegets(char *buffer,int n); - int getshc(); - - - /* Initializations. */ - - inbuff[MAXREAD+1]='\0'; /* Just to protect mem. */ - inbuff[MAXINBUFF-1]='\0'; /* Just to protect mem. */ - - for (iarg=0; iarg MAXMOD) /* If too many headers */ - { - printf("ERROR: Too many models in file %s on line %d.", mdfile, fileline); - fclose(stream); - exit(6); - } - - irec_pos[modelI]=ftell(stream); - /* Get fields from buffer into individual vars. */ - sscanf(inbuff, "%s%lg%d%d%d%lg%lg%lg%lg", model[modelI], &epoch[modelI], &max1[modelI], &max2[modelI], &max3[modelI], &yrmin[modelI], &yrmax[modelI], &altmin[modelI], &altmax[modelI]); - - /* Compute date range for all models */ - if (modelI == 0) /*If first model */ - { - minyr=yrmin[0]; - maxyr=yrmax[0]; - } - else - { - if (yrmin[modelI]maxyr){ - maxyr=yrmax[modelI]; - } - } /* if modelI != 0 */ - - } /* If 1st 3 chars are spaces */ - - } /* While not end of model file */ - - nmodel = modelI + 1; - fclose(stream); - - decdeg=1; - decyears=2; - range=1; - igdgc=1; - units = 1; - - - sdate = julday(ismonth,isday,isyear); - - - /* Pick model */ - for (modelI=0; modelI 2 ? leap_year : 0)); - - return ((double)year + (day_in_year / (365.0 + leap_year))); -} - - -/****************************************************************************/ -/* */ -/* Subroutine getshc */ -/* */ -/****************************************************************************/ -/* */ -/* Reads spherical harmonic coefficients from the specified */ -/* model into an array. */ -/* */ -/* Input: */ -/* stream - Logical unit number */ -/* iflag - Flag for SV equal to ) or not equal to 0 */ -/* for designated read statements */ -/* strec - Starting record number to read from model */ -/* nmax_of_gh - Maximum degree and order of model */ -/* */ -/* Output: */ -/* gh1 or 2 - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients */ -/* */ -/* FORTRAN */ -/* Bill Flanagan */ -/* NOAA CORPS, DESDIS, NGDC, 325 Broadway, Boulder CO. 80301 */ -/* */ -/* C */ -/* C. H. Shaffer */ -/* Lockheed Missiles and Space Company, Sunnyvale CA */ -/* August 15, 1988 */ -/* */ -/****************************************************************************/ - - -int getshc(file, iflag, strec, nmax_of_gh, gh) -char file[PATH]; -int iflag; -long int strec; -int nmax_of_gh; -int gh; -{ - char inbuff[MAXINBUFF]; - char irat[9]; - int ii,m,n,mm,nn; - int ios; - int line_num; - double g,hh; - double trash; - - stream = fopen(file, "rt"); - if (stream == NULL) - { - printf("\nError on opening file %s", file); - } - else - { - ii = 0; - ios = 0; - fseek(stream,strec,SEEK_SET); - for ( nn = 1; nn <= nmax_of_gh; ++nn) - { - for (mm = 0; mm <= nn; ++mm) - { - if (iflag == 1) - { - fgets(inbuff, MAXREAD, stream); - sscanf(inbuff, "%d%d%lg%lg%lg%lg%s%d", - &n, &m, &g, &hh, &trash, &trash, irat, &line_num); - } - else - { - fgets(inbuff, MAXREAD, stream); - sscanf(inbuff, "%d%d%lg%lg%lg%lg%s%d", - &n, &m, &trash, &trash, &g, &hh, irat, &line_num); - } - if ((nn != n) || (mm != m)) - { - ios = -2; - fclose(stream); - return(ios); - } - ii = ii + 1; - switch(gh) - { - case 1: gh1[ii] = g; - break; - case 2: gh2[ii] = g; - break; - default: printf("\nError in subroutine getshc"); - break; - } - if (m != 0) - { - ii = ii+ 1; - switch(gh) - { - case 1: gh1[ii] = hh; - break; - case 2: gh2[ii] = hh; - break; - default: printf("\nError in subroutine getshc"); - break; - } - } - } - } - } - fclose(stream); - return(ios); -} - - -/****************************************************************************/ -/* */ -/* Subroutine extrapsh */ -/* */ -/****************************************************************************/ -/* */ -/* Extrapolates linearly a spherical harmonic model with a */ -/* rate-of-change model. */ -/* */ -/* Input: */ -/* date - date of resulting model (in decimal year) */ -/* dte1 - date of base model */ -/* nmax1 - maximum degree and order of base model */ -/* gh1 - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients of base model */ -/* nmax2 - maximum degree and order of rate-of-change model */ -/* gh2 - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients of rate-of-change model */ -/* */ -/* Output: */ -/* gha or b - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients */ -/* nmax - maximum degree and order of resulting model */ -/* */ -/* FORTRAN */ -/* A. Zunde */ -/* USGS, MS 964, box 25046 Federal Center, Denver, CO. 80225 */ -/* */ -/* C */ -/* C. H. Shaffer */ -/* Lockheed Missiles and Space Company, Sunnyvale CA */ -/* August 16, 1988 */ -/* */ -/****************************************************************************/ - - -int extrapsh(date, dte1, nmax1, nmax2, gh) -double date; -double dte1; -int nmax1; -int nmax2; -int gh; -{ - int nmax; - int k, l; - int ii; - double factor; - - factor = date - dte1; - if (nmax1 == nmax2) - { - k = nmax1 * (nmax1 + 2); - nmax = nmax1; - } - else - { - if (nmax1 > nmax2) - { - k = nmax2 * (nmax2 + 2); - l = nmax1 * (nmax1 + 2); - switch(gh) - { - case 3: for ( ii = k + 1; ii <= l; ++ii) - { - gha[ii] = gh1[ii]; - } - break; - case 4: for ( ii = k + 1; ii <= l; ++ii) - { - ghb[ii] = gh1[ii]; - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - nmax = nmax1; - } - else - { - k = nmax1 * (nmax1 + 2); - l = nmax2 * (nmax2 + 2); - switch(gh) - { - case 3: for ( ii = k + 1; ii <= l; ++ii) - { - gha[ii] = factor * gh2[ii]; - } - break; - case 4: for ( ii = k + 1; ii <= l; ++ii) - { - ghb[ii] = factor * gh2[ii]; - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - nmax = nmax2; - } - } - switch(gh) - { - case 3: for ( ii = 1; ii <= k; ++ii) - { - gha[ii] = gh1[ii] + factor * gh2[ii]; - } - break; - case 4: for ( ii = 1; ii <= k; ++ii) - { - ghb[ii] = gh1[ii] + factor * gh2[ii]; - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - return(nmax); -} - -/****************************************************************************/ -/* */ -/* Subroutine interpsh */ -/* */ -/****************************************************************************/ -/* */ -/* Interpolates linearly, in time, between two spherical harmonic */ -/* models. */ -/* */ -/* Input: */ -/* date - date of resulting model (in decimal year) */ -/* dte1 - date of earlier model */ -/* nmax1 - maximum degree and order of earlier model */ -/* gh1 - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients of earlier model */ -/* dte2 - date of later model */ -/* nmax2 - maximum degree and order of later model */ -/* gh2 - Schmidt quasi-normal internal spherical */ -/* harmonic coefficients of internal model */ -/* */ -/* Output: */ -/* gha or b - coefficients of resulting model */ -/* nmax - maximum degree and order of resulting model */ -/* */ -/* FORTRAN */ -/* A. Zunde */ -/* USGS, MS 964, box 25046 Federal Center, Denver, CO. 80225 */ -/* */ -/* C */ -/* C. H. Shaffer */ -/* Lockheed Missiles and Space Company, Sunnyvale CA */ -/* August 17, 1988 */ -/* */ -/****************************************************************************/ - - -int interpsh(date, dte1, nmax1, dte2, nmax2, gh) - double date; - double dte1; - int nmax1; - double dte2; - int nmax2; - int gh; -{ - int nmax; - int k, l; - int ii; - double factor; - - factor = (date - dte1) / (dte2 - dte1); - if (nmax1 == nmax2) - { - k = nmax1 * (nmax1 + 2); - nmax = nmax1; - } - else - { - if (nmax1 > nmax2) - { - k = nmax2 * (nmax2 + 2); - l = nmax1 * (nmax1 + 2); - switch(gh) - { - case 3: for ( ii = k + 1; ii <= l; ++ii) - { - gha[ii] = gh1[ii] + factor * (-gh1[ii]); - } - break; - case 4: for ( ii = k + 1; ii <= l; ++ii) - { - ghb[ii] = gh1[ii] + factor * (-gh1[ii]); - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - nmax = nmax1; - } - else - { - k = nmax1 * (nmax1 + 2); - l = nmax2 * (nmax2 + 2); - switch(gh) - { - case 3: for ( ii = k + 1; ii <= l; ++ii) - { - gha[ii] = factor * gh2[ii]; - } - break; - case 4: for ( ii = k + 1; ii <= l; ++ii) - { - ghb[ii] = factor * gh2[ii]; - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - nmax = nmax2; - } - } - switch(gh) - { - case 3: for ( ii = 1; ii <= k; ++ii) - { - gha[ii] = gh1[ii] + factor * (gh2[ii] - gh1[ii]); - } - break; - case 4: for ( ii = 1; ii <= k; ++ii) - { - ghb[ii] = gh1[ii] + factor * (gh2[ii] - gh1[ii]); - } - break; - default: printf("\nError in subroutine extrapsh"); - break; - } - return(nmax); -} - - - - - -/****************************************************************************/ -/* */ -/* Subroutine shval3 */ -/* */ -/****************************************************************************/ -/* */ -/* Calculates field components from spherical harmonic (sh) */ -/* models. */ -/* */ -/* Input: */ -/* igdgc - indicates coordinate system used; set equal */ -/* to 1 if geodetic, 2 if geocentric */ -/* latitude - north latitude, in degrees */ -/* longitude - east longitude, in degrees */ -/* elev - WGS84 altitude above ellipsoid (igdgc=1), or */ -/* radial distance from earth's center (igdgc=2) */ -/* a2,b2 - squares of semi-major and semi-minor axes of */ -/* the reference spheroid used for transforming */ -/* between geodetic and geocentric coordinates */ -/* or components */ -/* nmax - maximum degree and order of coefficients */ -/* iext - external coefficients flag (=0 if none) */ -/* ext1,2,3 - the three 1st-degree external coefficients */ -/* (not used if iext = 0) */ -/* */ -/* Output: */ -/* x - northward component */ -/* y - eastward component */ -/* z - vertically-downward component */ -/* */ -/* based on subroutine 'igrf' by D. R. Barraclough and S. R. C. Malin, */ -/* report no. 71/1, institute of geological sciences, U.K. */ -/* */ -/* FORTRAN */ -/* Norman W. Peddie */ -/* USGS, MS 964, box 25046 Federal Center, Denver, CO. 80225 */ -/* */ -/* C */ -/* C. H. Shaffer */ -/* Lockheed Missiles and Space Company, Sunnyvale CA */ -/* August 17, 1988 */ -/* */ -/****************************************************************************/ - - -int shval3(igdgc, flat, flon, elev, nmax, gh, iext, ext1, ext2, ext3) - int igdgc; - double flat; - double flon; - double elev; - int nmax; - int gh; - int iext; - double ext1; - double ext2; - double ext3; -{ - double earths_radius = 6371.2; - double dtr = 0.01745329; - double slat; - double clat; - double ratio; - double aa, bb, cc, dd; - double sd; - double cd; - double r; - double a2; - double b2; - double rr; - double fm,fn; - double sl[14]; - double cl[14]; - double p[119]; - double q[119]; - int ii,j,k,l,m,n; - int npq; - int ios; - double argument; - double power; - a2 = 40680631.59; /* WGS84 */ - b2 = 40408299.98; /* WGS84 */ - ios = 0; - r = elev; - argument = flat * dtr; - slat = sin( argument ); - if ((90.0 - flat) < 0.001) - { - aa = 89.999; /* 300 ft. from North pole */ - } - else - { - if ((90.0 + flat) < 0.001) - { - aa = -89.999; /* 300 ft. from South pole */ - } - else - { - aa = flat; - } - } - argument = aa * dtr; - clat = cos( argument ); - argument = flon * dtr; - sl[1] = sin( argument ); - cl[1] = cos( argument ); - switch(gh) - { - case 3: x = 0; - y = 0; - z = 0; - break; - case 4: xtemp = 0; - ytemp = 0; - ztemp = 0; - break; - default: printf("\nError in subroutine shval3"); - break; - } - sd = 0.0; - cd = 1.0; - l = 1; - n = 0; - m = 1; - npq = (nmax * (nmax + 3)) / 2; - if (igdgc == 1) - { - aa = a2 * clat * clat; - bb = b2 * slat * slat; - cc = aa + bb; - argument = cc; - dd = sqrt( argument ); - argument = elev * (elev + 2.0 * dd) + (a2 * aa + b2 * bb) / cc; - r = sqrt( argument ); - cd = (elev + dd) / r; - sd = (a2 - b2) / dd * slat * clat / r; - aa = slat; - slat = slat * cd - clat * sd; - clat = clat * cd + aa * sd; - } - ratio = earths_radius / r; - argument = 3.0; - aa = sqrt( argument ); - p[1] = 2.0 * slat; - p[2] = 2.0 * clat; - p[3] = 4.5 * slat * slat - 1.5; - p[4] = 3.0 * aa * clat * slat; - q[1] = -clat; - q[2] = slat; - q[3] = -3.0 * clat * slat; - q[4] = aa * (slat * slat - clat * clat); - for ( k = 1; k <= npq; ++k) - { - if (n < m) - { - m = 0; - n = n + 1; - argument = ratio; - power = n + 2; - rr = pow(argument,power); - fn = n; - } - fm = m; - if (k >= 5) - { - if (m == n) - { - argument = (1.0 - 0.5/fm); - aa = sqrt( argument ); - j = k - n - 1; - p[k] = (1.0 + 1.0/fm) * aa * clat * p[j]; - q[k] = aa * (clat * q[j] + slat/fm * p[j]); - sl[m] = sl[m-1] * cl[1] + cl[m-1] * sl[1]; - cl[m] = cl[m-1] * cl[1] - sl[m-1] * sl[1]; - } - else - { - argument = fn*fn - fm*fm; - aa = sqrt( argument ); - argument = ((fn - 1.0)*(fn-1.0)) - (fm * fm); - bb = sqrt( argument )/aa; - cc = (2.0 * fn - 1.0)/aa; - ii = k - n; - j = k - 2 * n + 1; - p[k] = (fn + 1.0) * (cc * slat/fn * p[ii] - bb/(fn - 1.0) * p[j]); - q[k] = cc * (slat * q[ii] - clat/fn * p[ii]) - bb * q[j]; - } - } - switch(gh) - { - case 3: aa = rr * gha[l]; - break; - case 4: aa = rr * ghb[l]; - break; - default: printf("\nError in subroutine shval3"); - break; - } - if (m == 0) - { - switch(gh) - { - case 3: x = x + aa * q[k]; - z = z - aa * p[k]; - break; - case 4: xtemp = xtemp + aa * q[k]; - ztemp = ztemp - aa * p[k]; - break; - default: printf("\nError in subroutine shval3"); - break; - } - l = l + 1; - } - else - { - switch(gh) - { - case 3: bb = rr * gha[l+1]; - cc = aa * cl[m] + bb * sl[m]; - x = x + cc * q[k]; - z = z - cc * p[k]; - if (clat > 0) - { - y = y + (aa * sl[m] - bb * cl[m]) * - fm * p[k]/((fn + 1.0) * clat); - } - else - { - y = y + (aa * sl[m] - bb * cl[m]) * q[k] * slat; - } - l = l + 2; - break; - case 4: bb = rr * ghb[l+1]; - cc = aa * cl[m] + bb * sl[m]; - xtemp = xtemp + cc * q[k]; - ztemp = ztemp - cc * p[k]; - if (clat > 0) - { - ytemp = ytemp + (aa * sl[m] - bb * cl[m]) * - fm * p[k]/((fn + 1.0) * clat); - } - else - { - ytemp = ytemp + (aa * sl[m] - bb * cl[m]) * - q[k] * slat; - } - l = l + 2; - break; - default: printf("\nError in subroutine shval3"); - break; - } - } - m = m + 1; - } - if (iext != 0) - { - aa = ext2 * cl[1] + ext3 * sl[1]; - switch(gh) - { - case 3: x = x - ext1 * clat + aa * slat; - y = y + ext2 * sl[1] - ext3 * cl[1]; - z = z + ext1 * slat + aa * clat; - break; - case 4: xtemp = xtemp - ext1 * clat + aa * slat; - ytemp = ytemp + ext2 * sl[1] - ext3 * cl[1]; - ztemp = ztemp + ext1 * slat + aa * clat; - break; - default: printf("\nError in subroutine shval3"); - break; - } - } - switch(gh) - { - case 3: aa = x; - x = x * cd + z * sd; - z = z * cd - aa * sd; - break; - case 4: aa = xtemp; - xtemp = xtemp * cd + ztemp * sd; - ztemp = ztemp * cd - aa * sd; - break; - default: printf("\nError in subroutine shval3"); - break; - } - return(ios); -} - - -/****************************************************************************/ -/* */ -/* Subroutine dihf */ -/* */ -/****************************************************************************/ -/* */ -/* Computes the geomagnetic d, i, h, and f from x, y, and z. */ -/* */ -/* Input: */ -/* x - northward component */ -/* y - eastward component */ -/* z - vertically-downward component */ -/* */ -/* Output: */ -/* d - declination */ -/* i - inclination */ -/* h - horizontal intensity */ -/* f - total intensity */ -/* */ -/* FORTRAN */ -/* A. Zunde */ -/* USGS, MS 964, box 25046 Federal Center, Denver, CO. 80225 */ -/* */ -/* C */ -/* C. H. Shaffer */ -/* Lockheed Missiles and Space Company, Sunnyvale CA */ -/* August 22, 1988 */ -/* */ -/****************************************************************************/ - -int dihf (gh) - int gh; -{ - int ios; - int j; - double sn; - double h2; - double hpx; - double argument, argument2; - - ios = gh; - sn = 0.0001; - - switch(gh) - { - case 3: for (j = 1; j <= 1; ++j) - { - h2 = x*x + y*y; - argument = h2; - h = sqrt(argument); /* calculate horizontal intensity */ - argument = h2 + z*z; - f = sqrt(argument); /* calculate total intensity */ - if (f < sn) - { - d = NaN; /* If d and i cannot be determined, */ - i = NaN; /* set equal to NaN */ - } - else - { - argument = z; - argument2 = h; - i = atan2(argument,argument2); - if (h < sn) - { - d = NaN; - } - else - { - hpx = h + x; - if (hpx < sn) - { - d = PI; - } - else - { - argument = y; - argument2 = hpx; - d = 2.0 * atan2(argument,argument2); - } - } - } - } - break; - case 4: for (j = 1; j <= 1; ++j) - { - h2 = xtemp*xtemp + ytemp*ytemp; - argument = h2; - htemp = sqrt(argument); - argument = h2 + ztemp*ztemp; - ftemp = sqrt(argument); - if (ftemp < sn) - { - dtemp = NaN; /* If d and i cannot be determined, */ - itemp = NaN; /* set equal to 999.0 */ - } - else - { - argument = ztemp; - argument2 = htemp; - itemp = atan2(argument,argument2); - if (htemp < sn) - { - dtemp = NaN; - } - else - { - hpx = htemp + xtemp; - if (hpx < sn) - { - dtemp = PI; - } - else - { - argument = ytemp; - argument2 = hpx; - dtemp = 2.0 * atan2(argument,argument2); - } - } - } - } - break; - default: printf("\nError in subroutine dihf"); - break; - } - return(ios); -} diff --git a/dep/netcdfcxx_legacy/README.en.md b/dep/netcdfcxx_legacy/README.en.md deleted file mode 100644 index 9dcc1ce..0000000 --- a/dep/netcdfcxx_legacy/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# netcdfcxx_win - -#### Description -一个windows下netcdf c++接口的编译项目,注意使用的是4.2版本的老接口。 - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/dep/netcdfcxx_legacy/README.md b/dep/netcdfcxx_legacy/README.md deleted file mode 100644 index 0618c20..0000000 --- a/dep/netcdfcxx_legacy/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# netcdfcxx_legacy - -#### 介绍 -一个windows下netcdf c++接口的编译项目,注意使用的是4.2版本的老接口。 - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/dep/netcdfcxx_legacy/config.sh b/dep/netcdfcxx_legacy/config.sh deleted file mode 100755 index d8477d6..0000000 --- a/dep/netcdfcxx_legacy/config.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -cmd=${1} -package=netcdfcxx_legacy -address=/opt/stow -targetdir=/usr/local - -if [[ ${cmd} == "configure" && ! -d "build/" ]]; then - mkdir build && cd build && cmake .. -DCMAKE_INSTALL_PREFIX=${address}/${package} -DCMAKE_BUILD_TYPE=Release -elif [[ ${cmd} == "configure" ]]; then - cd build && rm -rf * && cmake .. -DCMAKE_INSTALL_PREFIX=${address}/${package} -DCMAKE_BUILD_TYPE=Release -elif [[ ${cmd} == "build" ]]; then - cd build && make -elif [[ ${cmd} == "install" ]]; then - cd build && sudo make install - sudo stow --dir=${address} --target=${targetdir} ${package} -fi \ No newline at end of file diff --git a/dep/netcdfcxx_legacy/netCDF_CXX_LEGACYConfig.cmake.in b/dep/netcdfcxx_legacy/netCDF_CXX_LEGACYConfig.cmake.in index 02782fa..7bd94f6 100644 --- a/dep/netcdfcxx_legacy/netCDF_CXX_LEGACYConfig.cmake.in +++ b/dep/netcdfcxx_legacy/netCDF_CXX_LEGACYConfig.cmake.in @@ -11,8 +11,5 @@ set(@PROJECT_NAME@_LIB netcdfcxx_legacy) set(@PROJECT_NAME@_LIBRARY netcdfcxx_legacy) set(@PROJECT_NAME@_FOUND 1) -set(@PROJECT_NAME@_OPENMP @LibLCG_OPENMP@) -set(@PROJECT_NAME@_EIGEN @LibLCG_EIGEN@) - # include target information include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") \ No newline at end of file diff --git a/dep/netcdfcxx_legacy/src/CMakeLists.txt b/dep/netcdfcxx_legacy/src/CMakeLists.txt index 49f3e0c..f25c6df 100644 --- a/dep/netcdfcxx_legacy/src/CMakeLists.txt +++ b/dep/netcdfcxx_legacy/src/CMakeLists.txt @@ -1,6 +1,8 @@ # 设定源文件文件夹 aux_source_directory(lib/ NETCDF_SRC) +find_package(HDF5 REQUIRED) + # 寻找netCDF库地址 find_package(netCDF REQUIRED) if(netCDF_FOUND) @@ -26,10 +28,18 @@ set_target_properties(netcdfcxx_legacy PROPERTIES CLEAN_DIRECT_OUTPUT 1) set_target_properties(netcdfcxx_legacy_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) # 设置动态库的版本号 set_target_properties(netcdfcxx_legacy PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) +# 设置动态库的运行搜索地址 +set_target_properties(netcdfcxx_legacy PROPERTIES INSTALL_RPATH /usr/local/lib) +set_target_properties(netcdfcxx_legacy_static PROPERTIES INSTALL_RPATH /usr/local/lib) -find_library(NETCDF_LIBRARY netcdf ${netCDF_LIB_DIR}) -target_link_libraries(netcdfcxx_legacy PUBLIC ${NETCDF_LIBRARY}) -target_link_libraries(netcdfcxx_legacy_static ${NETCDF_LIBRARY}) +#find_library(NETCDF_LIBRARY netcdf ${netCDF_LIB_DIR}) +target_link_libraries(netcdfcxx_legacy PUBLIC ${netCDF_LIBRARIES}) +target_link_libraries(netcdfcxx_legacy_static ${netCDF_LIBRARIES}) +target_link_libraries(netcdfcxx_legacy PUBLIC ${HDF5_LIBRARIES}) +target_link_libraries(netcdfcxx_legacy_static ${HDF5_LIBRARIES}) + +# 设置库文件的输出地址 +set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) set(CONFIG_FILE_PATH lib/cmake/${PROJECT_NAME}) diff --git a/dep/partow/include/dsv_filter.hpp b/dep/partow/include/dsv_filter.hpp new file mode 100644 index 0000000..fbd9ebe --- /dev/null +++ b/dep/partow/include/dsv_filter.hpp @@ -0,0 +1,340 @@ +/* + ****************************************************************** + * Delimiter Seperated Values Filter Library * + * * + * Author: Arash Partow (2004) * + * URL: http://www.partow.net/programming/dsvfilter/index.html * + * * + * Copyright notice: * + * Free use of the Delimiter Seperated Values Filter Library is * + * permitted under the guidelines of the MIT License. * + * http://www.opensource.org/licenses/MIT * + * * + ****************************************************************** +*/ + + +#ifndef INCLUDE_DSV_FILTER_HPP +#define INCLUDE_DSV_FILTER_HPP + + +#include +#include +#include + +#define strtk_no_tr1_or_boost + +#include "exprtk.hpp" +#include "strtk.hpp" + + +#ifdef dsv_filter_use_mmap + #include +#endif + + +class dsv_filter +{ +public: + + struct column_properties + { + enum column_type + { + e_none = 0, + e_string = 1, + e_number = 2 + }; + + column_properties() + : type(e_none), + name (""), + value_s(""), + value_n(0.0), + process(false) + {} + + column_type type; + std::string name; + std::string value_s; + double value_n; + strtk::util::value value; + bool process; + }; + + dsv_filter() + : file_name_ ("" ), + input_delimiter_ (","), + output_delimiter_("|") + { + symbol_table_.add_constants(); + expression_.register_symbol_table(symbol_table_); + } + + inline std::string file_name() const + { + return file_name_; + } + + inline void set_input_delimiter(const std::string& input_delimiter) + { + input_delimiter_ = input_delimiter; + } + + inline void set_output_delimiter(const std::string& output_delimiter) + { + output_delimiter_ = output_delimiter; + } + + inline std::string input_delimiter() const + { + return input_delimiter_; + } + + inline std::string output_delimiter() const + { + return output_delimiter_; + } + + inline std::size_t column_count() const + { + return column_.size(); + } + + inline std::size_t row_count() const + { + return grid_.row_count(); + } + + inline const column_properties& column(const std::size_t& index) const + { + return column_[index]; + } + + inline bool load(const std::string& file_name) + { + if (!strtk::fileio::file_exists(file_name)) + return false; + + file_name_ = file_name; + strtk::token_grid::options options; + options.column_delimiters = input_delimiter_; + + #ifdef dsv_filter_use_mmap + input_source.close(); + input_source.open(file_name_); + + unsigned char* data = reinterpret_cast(const_cast(input_source.data())); + + if (!grid_.load(data,input_source.size(),options)) + return false; + #else + if (!grid_.load(file_name_,options)) + return false; + #endif + + if (0 == grid_.row_count()) + return false; + else if (grid_.row_count() < 2) + return false; + else if (!process_column_header()) + return false; + + return true; + } + + inline bool add_filter(const std::string& filter_expression) + { + error_ = ""; + parser_.dec().collect_variables() = true; + + if (!parser_.compile(filter_expression,expression_)) + { + error_ = "Error: " + parser_.error() + "\tFilter: " + filter_expression; + + return false; + } + + // Only extract for processing, the column values + // that are being used in the current expression. + typedef exprtk::parser parser_t; + typedef parser_t::dependent_entity_collector::symbol_t symbol_t; + + std::deque symbol_list; + + parser_.dec().symbols(symbol_list); + + for (std::size_t i = 0; i < column_.size(); ++i) + { + if (column_[i].name.empty()) + continue; + + column_[i].process = false; + + for (std::size_t j = 0; j < symbol_list.size(); ++j) + { + if (strtk::imatch(symbol_list[j].first,column_[i].name)) + { + column_[i].process = true; + break; + } + } + } + + return true; + } + + template class Sequence> + inline bool row(const std::size_t& r, + const Sequence& selected_column, + std::string& row_result) + { + if (selected_column.size() != column_.size()) + { + error_ = "Error: number of selected columns larger than number of columns"; + return false; + } + + if (r >= grid_.row_count()) + { + strtk::build_string s; + s << "Error: row[" << r << "] out of bounds."; + error_ = s.to_str(); + + return false; + } + + if (row_.index() != r) + { + row_ = grid_.row(r); + } + + bool append_delimeter = false; + + for (std::size_t c = 0; c < column_.size(); ++c) + { + if (selected_column[c]) + { + if (append_delimeter) + row_result.append(output_delimiter_); + else + append_delimeter = true; + + strtk::token_grid::range_t token = row_.token(c); + row_result.append(token.first,token.second); + } + } + + return true; + } + + inline std::string error() + { + return error_; + } + + enum filter_result + { + e_error, + e_match, + e_mismatch + }; + + inline filter_result operator[](const std::size_t& r) + { + row_ = grid_.row(r); + + for (std::size_t c = 0; c < column_.size(); ++c) + { + if (!column_[c].process) + continue; + else if (!row_.parse_with_index(c,column_[c].value)) + { + strtk::build_string s; + s << "Error: Failed to process element at row/col["<< r << "," << c << "] value:" << row_.get(c); + error_ = s.to_str(); + + return e_error; + } + } + + return (1.0 == expression_.value()) ? e_match : e_mismatch; + } + + const strtk::token_grid& grid() const + { + return grid_; + } + +private: + + inline bool process_column_header() + { + static const std::string string_id ("_s"); + static const std::string number_id ("_n"); + + expression_.get_symbol_table().clear(); + column_.clear(); + column_.resize(grid_.row(0).size()); + + strtk::token_grid::row_type row = grid_.row(0); + std::string col_name = ""; + std::string col_suffix = ""; + + for (std::size_t i = 0; i < row.size(); ++i) + { + column_properties& column = column_[i]; + + column.process = false; + + col_name = row.get(i); + col_suffix = (col_name.size() >= 2) ? strtk::text::remaining_string(col_name.size() - 2,col_name) : ""; + col_name = col_name.substr(0,col_name.size() - 2); + + if (symbol_table_.symbol_exists(col_name)) + { + error_ = "Error: Redefinition of column " + col_name; + return false; + } + else if (strtk::iends_with("_s",col_suffix)) + { + column.type = dsv_filter::column_properties::e_string; + column.name = col_name; + column.value = strtk::util::value(column.value_s); + column.process = true; + + symbol_table_.add_stringvar(col_name,column.value_s); + } + else if (strtk::iends_with("_n",col_suffix)) + { + column.type = dsv_filter::column_properties::e_number; + column.name = col_name; + column.process = true; + column.value = strtk::util::value(column.value_n); + + symbol_table_.add_variable(col_name,column.value_n); + } + } + + return true; + } + + std::string file_name_; + std::string input_delimiter_; + std::string output_delimiter_; + std::string error_; + std::vector column_; + strtk::token_grid grid_; + exprtk::symbol_table symbol_table_; + exprtk::parser parser_; + exprtk::expression expression_; + strtk::token_grid::row_type row_; + + #ifdef dsv_filter_use_mmap + boost::iostreams::mapped_file_source input_source; + #endif + +}; + +#endif diff --git a/dep/partow/include/exprtk.hpp b/dep/partow/include/exprtk.hpp new file mode 100644 index 0000000..95ca623 --- /dev/null +++ b/dep/partow/include/exprtk.hpp @@ -0,0 +1,44311 @@ +/* + ****************************************************************** + * C++ Mathematical Expression Toolkit Library * + * * + * Author: Arash Partow (1999-2024) * + * URL: https://www.partow.net/programming/exprtk/index.html * + * * + * Copyright notice: * + * Free use of the C++ Mathematical Expression Toolkit Library is * + * permitted under the guidelines and in accordance with the most * + * current version of the MIT License. * + * https://www.opensource.org/licenses/MIT * + * SPDX-License-Identifier: MIT * + * * + * Example expressions: * + * (00) (y + x / y) * (x - y / x) * + * (01) (x^2 / sin(2 * pi / y)) - x / 2 * + * (02) sqrt(1 - (x^2)) * + * (03) 1 - sin(2 * x) + cos(pi / y) * + * (04) a * exp(2 * t) + c * + * (05) if(((x + 2) == 3) and ((y + 5) <= 9), 1 + w, 2 / z) * + * (06) (avg(x,y) <= x + y ? x - y : x * y) + 2 * pi / x * + * (07) z := x + sin(2 * pi / y) * + * (08) u := 2 * (pi * z) / (w := x + cos(y / pi)) * + * (09) clamp(-1, sin(2 * pi * x) + cos(y / 2 * pi), +1) * + * (10) inrange(-2, m, +2) == if(({-2 <= m} and [m <= +2]), 1, 0) * + * (11) (2sin(x)cos(2y)7 + 1) == (2 * sin(x) * cos(2*y) * 7 + 1) * + * (12) (x ilike 's*ri?g') and [y < (3 z^7 + w)] * + * * + ****************************************************************** +*/ + + +#ifndef INCLUDE_EXPRTK_HPP +#define INCLUDE_EXPRTK_HPP + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace exprtk +{ + #ifdef exprtk_enable_debugging + #define exprtk_debug(params) printf params + #else + #define exprtk_debug(params) (void)0 + #endif + + #define exprtk_error_location \ + "exprtk.hpp:" + details::to_str(__LINE__) \ + + #if __cplusplus >= 201103L + #define exprtk_override override + #define exprtk_final final + #define exprtk_delete = delete + #else + #define exprtk_override + #define exprtk_final + #define exprtk_delete + #endif + + #if __cplusplus >= 201603L + #define exprtk_fallthrough [[fallthrough]]; + #else + #define exprtk_fallthrough + #endif + + namespace details + { + typedef char char_t; + typedef char_t* char_ptr; + typedef char_t const* char_cptr; + typedef unsigned char uchar_t; + typedef uchar_t* uchar_ptr; + typedef uchar_t const* uchar_cptr; + typedef unsigned long long int _uint64_t; + typedef long long int _int64_t; + + inline bool is_whitespace(const char_t c) + { + return (' ' == c) || ('\n' == c) || + ('\r' == c) || ('\t' == c) || + ('\b' == c) || ('\v' == c) || + ('\f' == c) ; + } + + inline bool is_operator_char(const char_t c) + { + return ('+' == c) || ('-' == c) || + ('*' == c) || ('/' == c) || + ('^' == c) || ('<' == c) || + ('>' == c) || ('=' == c) || + (',' == c) || ('!' == c) || + ('(' == c) || (')' == c) || + ('[' == c) || (']' == c) || + ('{' == c) || ('}' == c) || + ('%' == c) || (':' == c) || + ('?' == c) || ('&' == c) || + ('|' == c) || (';' == c) ; + } + + inline bool is_letter(const char_t c) + { + return (('a' <= c) && (c <= 'z')) || + (('A' <= c) && (c <= 'Z')) ; + } + + inline bool is_digit(const char_t c) + { + return ('0' <= c) && (c <= '9'); + } + + inline bool is_letter_or_digit(const char_t c) + { + return is_letter(c) || is_digit(c); + } + + inline bool is_left_bracket(const char_t c) + { + return ('(' == c) || ('[' == c) || ('{' == c); + } + + inline bool is_right_bracket(const char_t c) + { + return (')' == c) || (']' == c) || ('}' == c); + } + + inline bool is_bracket(const char_t c) + { + return is_left_bracket(c) || is_right_bracket(c); + } + + inline bool is_sign(const char_t c) + { + return ('+' == c) || ('-' == c); + } + + inline bool is_invalid(const char_t c) + { + return !is_whitespace (c) && + !is_operator_char(c) && + !is_letter (c) && + !is_digit (c) && + ('.' != c) && + ('_' != c) && + ('$' != c) && + ('~' != c) && + ('\'' != c); + } + + inline bool is_valid_string_char(const char_t c) + { + return std::isprint(static_cast(c)) || + is_whitespace(c); + } + + #ifndef exprtk_disable_caseinsensitivity + inline void case_normalise(std::string& s) + { + for (std::size_t i = 0; i < s.size(); ++i) + { + s[i] = static_cast(std::tolower(s[i])); + } + } + + inline bool imatch(const char_t c1, const char_t c2) + { + return std::tolower(c1) == std::tolower(c2); + } + + inline bool imatch(const std::string& s1, const std::string& s2) + { + if (s1.size() == s2.size()) + { + for (std::size_t i = 0; i < s1.size(); ++i) + { + if (std::tolower(s1[i]) != std::tolower(s2[i])) + { + return false; + } + } + + return true; + } + + return false; + } + + struct ilesscompare + { + inline bool operator() (const std::string& s1, const std::string& s2) const + { + const std::size_t length = std::min(s1.size(),s2.size()); + + for (std::size_t i = 0; i < length; ++i) + { + const char_t c1 = static_cast(std::tolower(s1[i])); + const char_t c2 = static_cast(std::tolower(s2[i])); + + if (c1 < c2) + return true; + else if (c2 < c1) + return false; + } + + return s1.size() < s2.size(); + } + }; + + #else + inline void case_normalise(std::string&) + {} + + inline bool imatch(const char_t c1, const char_t c2) + { + return c1 == c2; + } + + inline bool imatch(const std::string& s1, const std::string& s2) + { + return s1 == s2; + } + + struct ilesscompare + { + inline bool operator() (const std::string& s1, const std::string& s2) const + { + return s1 < s2; + } + }; + #endif + + inline bool is_valid_sf_symbol(const std::string& symbol) + { + // Special function: $f12 or $F34 + return (4 == symbol.size()) && + ('$' == symbol[0]) && + imatch('f',symbol[1]) && + is_digit(symbol[2]) && + is_digit(symbol[3]); + } + + inline const char_t& front(const std::string& s) + { + return s[0]; + } + + inline const char_t& back(const std::string& s) + { + return s[s.size() - 1]; + } + + inline std::string to_str(int i) + { + if (0 == i) + return std::string("0"); + + std::string result; + + const int sign = (i < 0) ? -1 : 1; + + for ( ; i; i /= 10) + { + result += '0' + static_cast(sign * (i % 10)); + } + + if (sign < 0) + { + result += '-'; + } + + std::reverse(result.begin(), result.end()); + + return result; + } + + inline std::string to_str(std::size_t i) + { + return to_str(static_cast(i)); + } + + inline bool is_hex_digit(const uchar_t digit) + { + return (('0' <= digit) && (digit <= '9')) || + (('A' <= digit) && (digit <= 'F')) || + (('a' <= digit) && (digit <= 'f')) ; + } + + inline uchar_t hex_to_bin(uchar_t h) + { + if (('0' <= h) && (h <= '9')) + return (h - '0'); + else + return static_cast(std::toupper(h) - 'A'); + } + + template + inline bool parse_hex(Iterator& itr, Iterator end, + char_t& result) + { + if ( + (end == (itr )) || + (end == (itr + 1)) || + (end == (itr + 2)) || + (end == (itr + 3)) || + ('0' != *(itr )) || + ('X' != std::toupper(*(itr + 1))) || + (!is_hex_digit(*(itr + 2))) || + (!is_hex_digit(*(itr + 3))) + ) + { + return false; + } + + result = hex_to_bin(static_cast(*(itr + 2))) << 4 | + hex_to_bin(static_cast(*(itr + 3))) ; + + return true; + } + + inline bool cleanup_escapes(std::string& s) + { + typedef std::string::iterator str_itr_t; + + str_itr_t itr1 = s.begin(); + str_itr_t itr2 = s.begin(); + str_itr_t end = s.end (); + + std::size_t removal_count = 0; + + while (end != itr1) + { + if ('\\' == (*itr1)) + { + if (end == ++itr1) + { + return false; + } + else if (parse_hex(itr1, end, *itr2)) + { + itr1 += 4; + itr2 += 1; + removal_count += 4; + } + else if ('a' == (*itr1)) { (*itr2++) = '\a'; ++itr1; ++removal_count; } + else if ('b' == (*itr1)) { (*itr2++) = '\b'; ++itr1; ++removal_count; } + else if ('f' == (*itr1)) { (*itr2++) = '\f'; ++itr1; ++removal_count; } + else if ('n' == (*itr1)) { (*itr2++) = '\n'; ++itr1; ++removal_count; } + else if ('r' == (*itr1)) { (*itr2++) = '\r'; ++itr1; ++removal_count; } + else if ('t' == (*itr1)) { (*itr2++) = '\t'; ++itr1; ++removal_count; } + else if ('v' == (*itr1)) { (*itr2++) = '\v'; ++itr1; ++removal_count; } + else if ('0' == (*itr1)) { (*itr2++) = '\0'; ++itr1; ++removal_count; } + else + { + (*itr2++) = (*itr1++); + ++removal_count; + } + + continue; + } + else + (*itr2++) = (*itr1++); + } + + if ((removal_count > s.size()) || (0 == removal_count)) + return false; + + s.resize(s.size() - removal_count); + + return true; + } + + class build_string + { + public: + + explicit build_string(const std::size_t& initial_size = 64) + { + data_.reserve(initial_size); + } + + inline build_string& operator << (const std::string& s) + { + data_ += s; + return (*this); + } + + inline build_string& operator << (char_cptr s) + { + data_ += std::string(s); + return (*this); + } + + inline operator std::string () const + { + return data_; + } + + inline std::string as_string() const + { + return data_; + } + + private: + + std::string data_; + }; + + static const std::string reserved_words[] = + { + "break", "case", "continue", "default", "false", "for", + "if", "else", "ilike", "in", "like", "and", "nand", "nor", + "not", "null", "or", "repeat", "return", "shl", "shr", + "swap", "switch", "true", "until", "var", "while", "xnor", + "xor", "&", "|" + }; + + static const std::size_t reserved_words_size = sizeof(reserved_words) / sizeof(std::string); + + static const std::string reserved_symbols[] = + { + "abs", "acos", "acosh", "and", "asin", "asinh", "atan", + "atanh", "atan2", "avg", "break", "case", "ceil", "clamp", + "continue", "cos", "cosh", "cot", "csc", "default", + "deg2grad", "deg2rad", "equal", "erf", "erfc", "exp", + "expm1", "false", "floor", "for", "frac", "grad2deg", + "hypot", "iclamp", "if", "else", "ilike", "in", "inrange", + "like", "log", "log10", "log2", "logn", "log1p", "mand", + "max", "min", "mod", "mor", "mul", "ncdf", "nand", "nor", + "not", "not_equal", "null", "or", "pow", "rad2deg", + "repeat", "return", "root", "round", "roundn", "sec", "sgn", + "shl", "shr", "sin", "sinc", "sinh", "sqrt", "sum", "swap", + "switch", "tan", "tanh", "true", "trunc", "until", "var", + "while", "xnor", "xor", "&", "|" + }; + + static const std::size_t reserved_symbols_size = sizeof(reserved_symbols) / sizeof(std::string); + + static const std::string base_function_list[] = + { + "abs", "acos", "acosh", "asin", "asinh", "atan", "atanh", + "atan2", "avg", "ceil", "clamp", "cos", "cosh", "cot", + "csc", "equal", "erf", "erfc", "exp", "expm1", "floor", + "frac", "hypot", "iclamp", "like", "log", "log10", "log2", + "logn", "log1p", "mand", "max", "min", "mod", "mor", "mul", + "ncdf", "pow", "root", "round", "roundn", "sec", "sgn", + "sin", "sinc", "sinh", "sqrt", "sum", "swap", "tan", "tanh", + "trunc", "not_equal", "inrange", "deg2grad", "deg2rad", + "rad2deg", "grad2deg" + }; + + static const std::size_t base_function_list_size = sizeof(base_function_list) / sizeof(std::string); + + static const std::string logic_ops_list[] = + { + "and", "nand", "nor", "not", "or", "xnor", "xor", "&", "|" + }; + + static const std::size_t logic_ops_list_size = sizeof(logic_ops_list) / sizeof(std::string); + + static const std::string cntrl_struct_list[] = + { + "if", "switch", "for", "while", "repeat", "return" + }; + + static const std::size_t cntrl_struct_list_size = sizeof(cntrl_struct_list) / sizeof(std::string); + + static const std::string arithmetic_ops_list[] = + { + "+", "-", "*", "/", "%", "^" + }; + + static const std::size_t arithmetic_ops_list_size = sizeof(arithmetic_ops_list) / sizeof(std::string); + + static const std::string assignment_ops_list[] = + { + ":=", "+=", "-=", + "*=", "/=", "%=" + }; + + static const std::size_t assignment_ops_list_size = sizeof(assignment_ops_list) / sizeof(std::string); + + static const std::string inequality_ops_list[] = + { + "<", "<=", "==", + "=", "!=", "<>", + ">=", ">" + }; + + static const std::size_t inequality_ops_list_size = sizeof(inequality_ops_list) / sizeof(std::string); + + inline bool is_reserved_word(const std::string& symbol) + { + for (std::size_t i = 0; i < reserved_words_size; ++i) + { + if (imatch(symbol, reserved_words[i])) + { + return true; + } + } + + return false; + } + + inline bool is_reserved_symbol(const std::string& symbol) + { + for (std::size_t i = 0; i < reserved_symbols_size; ++i) + { + if (imatch(symbol, reserved_symbols[i])) + { + return true; + } + } + + return false; + } + + inline bool is_base_function(const std::string& function_name) + { + for (std::size_t i = 0; i < base_function_list_size; ++i) + { + if (imatch(function_name, base_function_list[i])) + { + return true; + } + } + + return false; + } + + inline bool is_control_struct(const std::string& cntrl_strct) + { + for (std::size_t i = 0; i < cntrl_struct_list_size; ++i) + { + if (imatch(cntrl_strct, cntrl_struct_list[i])) + { + return true; + } + } + + return false; + } + + inline bool is_logic_opr(const std::string& lgc_opr) + { + for (std::size_t i = 0; i < logic_ops_list_size; ++i) + { + if (imatch(lgc_opr, logic_ops_list[i])) + { + return true; + } + } + + return false; + } + + struct cs_match + { + static inline bool cmp(const char_t c0, const char_t c1) + { + return (c0 == c1); + } + }; + + struct cis_match + { + static inline bool cmp(const char_t c0, const char_t c1) + { + return (std::tolower(c0) == std::tolower(c1)); + } + }; + + template + inline bool match_impl(const Iterator pattern_begin, + const Iterator pattern_end , + const Iterator data_begin , + const Iterator data_end , + const typename std::iterator_traits::value_type& zero_or_more, + const typename std::iterator_traits::value_type& exactly_one ) + { + typedef typename std::iterator_traits::value_type type; + + const Iterator null_itr(0); + + Iterator p_itr = pattern_begin; + Iterator d_itr = data_begin; + Iterator np_itr = null_itr; + Iterator nd_itr = null_itr; + + for ( ; ; ) + { + if (p_itr != pattern_end) + { + const type c = *(p_itr); + + if ((data_end != d_itr) && (Compare::cmp(c,*(d_itr)) || (exactly_one == c))) + { + ++d_itr; + ++p_itr; + continue; + } + else if (zero_or_more == c) + { + while ((pattern_end != p_itr) && (zero_or_more == *(p_itr))) + { + ++p_itr; + } + + const type d = *(p_itr); + + while ((data_end != d_itr) && !(Compare::cmp(d,*(d_itr)) || (exactly_one == d))) + { + ++d_itr; + } + + // set backtrack iterators + np_itr = p_itr - 1; + nd_itr = d_itr + 1; + + continue; + } + } + else if (data_end == d_itr) + break; + + if ((data_end == d_itr) || (null_itr == nd_itr)) + return false; + + p_itr = np_itr; + d_itr = nd_itr; + } + + return true; + } + + inline bool wc_match(const std::string& wild_card, + const std::string& str) + { + return match_impl + ( + wild_card.data(), + wild_card.data() + wild_card.size(), + str.data(), + str.data() + str.size(), + '*', '?' + ); + } + + inline bool wc_imatch(const std::string& wild_card, + const std::string& str) + { + return match_impl + ( + wild_card.data(), + wild_card.data() + wild_card.size(), + str.data(), + str.data() + str.size(), + '*', '?' + ); + } + + inline bool sequence_match(const std::string& pattern, + const std::string& str, + std::size_t& diff_index, + char_t& diff_value) + { + if (str.empty()) + { + return ("Z" == pattern); + } + else if ('*' == pattern[0]) + return false; + + typedef std::string::const_iterator itr_t; + + itr_t p_itr = pattern.begin(); + itr_t s_itr = str .begin(); + + const itr_t p_end = pattern.end(); + const itr_t s_end = str .end(); + + while ((s_end != s_itr) && (p_end != p_itr)) + { + if ('*' == (*p_itr)) + { + const char_t target = static_cast(std::toupper(*(p_itr - 1))); + + if ('*' == target) + { + diff_index = static_cast(std::distance(str.begin(),s_itr)); + diff_value = static_cast(std::toupper(*p_itr)); + + return false; + } + else + ++p_itr; + + while (s_itr != s_end) + { + if (target != std::toupper(*s_itr)) + break; + else + ++s_itr; + } + + continue; + } + else if ( + ('?' != *p_itr) && + std::toupper(*p_itr) != std::toupper(*s_itr) + ) + { + diff_index = static_cast(std::distance(str.begin(),s_itr)); + diff_value = static_cast(std::toupper(*p_itr)); + + return false; + } + + ++p_itr; + ++s_itr; + } + + return ( + (s_end == s_itr) && + ( + (p_end == p_itr) || + ('*' == *p_itr) + ) + ); + } + + template + struct set_zero_value_impl + { + static inline void process(T* base_ptr, const std::size_t size) + { + const T zero = T(0); + for (std::size_t i = 0; i < size; ++i) + { + base_ptr[i] = zero; + } + } + }; + + #define pod_set_zero_value(T) \ + template <> \ + struct set_zero_value_impl \ + { \ + static inline void process(T* base_ptr, const std::size_t size) \ + { std::memset(base_ptr, 0x00, size * sizeof(T)); } \ + }; \ + + pod_set_zero_value(float ) + pod_set_zero_value(double ) + pod_set_zero_value(long double) + + #ifdef pod_set_zero_value + #undef pod_set_zero_value + #endif + + template + inline void set_zero_value(T* data, const std::size_t size) + { + set_zero_value_impl::process(data,size); + } + + template + inline void set_zero_value(std::vector& v) + { + set_zero_value(v.data(),v.size()); + } + + static const double pow10[] = + { + 1.0, + 1.0E+001, 1.0E+002, 1.0E+003, 1.0E+004, + 1.0E+005, 1.0E+006, 1.0E+007, 1.0E+008, + 1.0E+009, 1.0E+010, 1.0E+011, 1.0E+012, + 1.0E+013, 1.0E+014, 1.0E+015, 1.0E+016 + }; + + static const std::size_t pow10_size = sizeof(pow10) / sizeof(double); + + namespace numeric + { + namespace constant + { + static const double e = 2.71828182845904523536028747135266249775724709369996; + static const double pi = 3.14159265358979323846264338327950288419716939937510; + static const double pi_2 = 1.57079632679489661923132169163975144209858469968755; + static const double pi_4 = 0.78539816339744830961566084581987572104929234984378; + static const double pi_180 = 0.01745329251994329576923690768488612713442871888542; + static const double _1_pi = 0.31830988618379067153776752674502872406891929148091; + static const double _2_pi = 0.63661977236758134307553505349005744813783858296183; + static const double _180_pi = 57.29577951308232087679815481410517033240547246656443; + static const double log2 = 0.69314718055994530941723212145817656807550013436026; + static const double sqrt2 = 1.41421356237309504880168872420969807856967187537695; + } + + namespace details + { + struct unknown_type_tag { unknown_type_tag() {} }; + struct real_type_tag { real_type_tag () {} }; + struct int_type_tag { int_type_tag () {} }; + + template + struct number_type + { + typedef unknown_type_tag type; + number_type() {} + }; + + #define exprtk_register_real_type_tag(T) \ + template <> struct number_type \ + { typedef real_type_tag type; number_type() {} }; \ + + #define exprtk_register_int_type_tag(T) \ + template <> struct number_type \ + { typedef int_type_tag type; number_type() {} }; \ + + exprtk_register_real_type_tag(float ) + exprtk_register_real_type_tag(double ) + exprtk_register_real_type_tag(long double) + + exprtk_register_int_type_tag(short ) + exprtk_register_int_type_tag(int ) + exprtk_register_int_type_tag(_int64_t ) + exprtk_register_int_type_tag(unsigned short) + exprtk_register_int_type_tag(unsigned int ) + exprtk_register_int_type_tag(_uint64_t ) + + #undef exprtk_register_real_type_tag + #undef exprtk_register_int_type_tag + + template + struct epsilon_type {}; + + #define exprtk_define_epsilon_type(Type, Epsilon) \ + template <> struct epsilon_type \ + { \ + static inline Type value() \ + { \ + const Type epsilon = static_cast(Epsilon); \ + return epsilon; \ + } \ + }; \ + + exprtk_define_epsilon_type(float , 0.00000100000f) + exprtk_define_epsilon_type(double , 0.000000000100) + exprtk_define_epsilon_type(long double, 0.000000000001) + + #undef exprtk_define_epsilon_type + + template + inline bool is_nan_impl(const T v, real_type_tag) + { + return std::not_equal_to()(v,v); + } + + template + inline int to_int32_impl(const T v, real_type_tag) + { + return static_cast(v); + } + + template + inline _int64_t to_int64_impl(const T v, real_type_tag) + { + return static_cast<_int64_t>(v); + } + + template + inline _uint64_t to_uint64_impl(const T v, real_type_tag) + { + return static_cast<_uint64_t>(v); + } + + template + inline bool is_true_impl(const T v) + { + return std::not_equal_to()(T(0),v); + } + + template + inline bool is_false_impl(const T v) + { + return std::equal_to()(T(0),v); + } + + template + inline T abs_impl(const T v, real_type_tag) + { + return ((v < T(0)) ? -v : v); + } + + template + inline T min_impl(const T v0, const T v1, real_type_tag) + { + return std::min(v0,v1); + } + + template + inline T max_impl(const T v0, const T v1, real_type_tag) + { + return std::max(v0,v1); + } + + template + inline T equal_impl(const T v0, const T v1, real_type_tag) + { + const T epsilon = epsilon_type::value(); + return (abs_impl(v0 - v1,real_type_tag()) <= (std::max(T(1),std::max(abs_impl(v0,real_type_tag()),abs_impl(v1,real_type_tag()))) * epsilon)) ? T(1) : T(0); + } + + inline float equal_impl(const float v0, const float v1, real_type_tag) + { + const float epsilon = epsilon_type::value(); + return (abs_impl(v0 - v1,real_type_tag()) <= (std::max(1.0f,std::max(abs_impl(v0,real_type_tag()),abs_impl(v1,real_type_tag()))) * epsilon)) ? 1.0f : 0.0f; + } + + template + inline T equal_impl(const T v0, const T v1, int_type_tag) + { + return (v0 == v1) ? 1 : 0; + } + + template + inline T expm1_impl(const T v, real_type_tag) + { + // return std::expm1(v); + if (abs_impl(v,real_type_tag()) < T(0.00001)) + return v + (T(0.5) * v * v); + else + return std::exp(v) - T(1); + } + + template + inline T expm1_impl(const T v, int_type_tag) + { + return T(std::exp(v)) - T(1); + } + + template + inline T nequal_impl(const T v0, const T v1, real_type_tag) + { + typedef real_type_tag rtg; + const T epsilon = epsilon_type::value(); + return (abs_impl(v0 - v1,rtg()) > (std::max(T(1),std::max(abs_impl(v0,rtg()),abs_impl(v1,rtg()))) * epsilon)) ? T(1) : T(0); + } + + inline float nequal_impl(const float v0, const float v1, real_type_tag) + { + typedef real_type_tag rtg; + const float epsilon = epsilon_type::value(); + return (abs_impl(v0 - v1,rtg()) > (std::max(1.0f,std::max(abs_impl(v0,rtg()),abs_impl(v1,rtg()))) * epsilon)) ? 1.0f : 0.0f; + } + + template + inline T nequal_impl(const T v0, const T v1, int_type_tag) + { + return (v0 != v1) ? 1 : 0; + } + + template + inline T modulus_impl(const T v0, const T v1, real_type_tag) + { + return std::fmod(v0,v1); + } + + template + inline T modulus_impl(const T v0, const T v1, int_type_tag) + { + return v0 % v1; + } + + template + inline T pow_impl(const T v0, const T v1, real_type_tag) + { + return std::pow(v0,v1); + } + + template + inline T pow_impl(const T v0, const T v1, int_type_tag) + { + return std::pow(static_cast(v0),static_cast(v1)); + } + + template + inline T logn_impl(const T v0, const T v1, real_type_tag) + { + return std::log(v0) / std::log(v1); + } + + template + inline T logn_impl(const T v0, const T v1, int_type_tag) + { + return static_cast(logn_impl(static_cast(v0),static_cast(v1),real_type_tag())); + } + + template + inline T log1p_impl(const T v, real_type_tag) + { + if (v > T(-1)) + { + if (abs_impl(v,real_type_tag()) > T(0.0001)) + { + return std::log(T(1) + v); + } + else + return (T(-0.5) * v + T(1)) * v; + } + + return std::numeric_limits::quiet_NaN(); + } + + template + inline T log1p_impl(const T v, int_type_tag) + { + if (v > T(-1)) + { + return std::log(T(1) + v); + } + + return std::numeric_limits::quiet_NaN(); + } + + template + inline T root_impl(const T v0, const T v1, real_type_tag) + { + if (v1 < T(0)) + return std::numeric_limits::quiet_NaN(); + + const std::size_t n = static_cast(v1); + + if ((v0 < T(0)) && (0 == (n % 2))) + return std::numeric_limits::quiet_NaN(); + + return std::pow(v0, T(1) / n); + } + + template + inline T root_impl(const T v0, const T v1, int_type_tag) + { + return root_impl(static_cast(v0),static_cast(v1),real_type_tag()); + } + + template + inline T round_impl(const T v, real_type_tag) + { + return ((v < T(0)) ? std::ceil(v - T(0.5)) : std::floor(v + T(0.5))); + } + + template + inline T roundn_impl(const T v0, const T v1, real_type_tag) + { + const int index = std::max(0, std::min(pow10_size - 1, static_cast(std::floor(v1)))); + const T p10 = T(pow10[index]); + + if (v0 < T(0)) + return T(std::ceil ((v0 * p10) - T(0.5)) / p10); + else + return T(std::floor((v0 * p10) + T(0.5)) / p10); + } + + template + inline T roundn_impl(const T v0, const T, int_type_tag) + { + return v0; + } + + template + inline T hypot_impl(const T v0, const T v1, real_type_tag) + { + return std::sqrt((v0 * v0) + (v1 * v1)); + } + + template + inline T hypot_impl(const T v0, const T v1, int_type_tag) + { + return static_cast(std::sqrt(static_cast((v0 * v0) + (v1 * v1)))); + } + + template + inline T atan2_impl(const T v0, const T v1, real_type_tag) + { + return std::atan2(v0,v1); + } + + template + inline T atan2_impl(const T, const T, int_type_tag) + { + return 0; + } + + template + inline T shr_impl(const T v0, const T v1, real_type_tag) + { + return v0 * (T(1) / std::pow(T(2),static_cast(static_cast(v1)))); + } + + template + inline T shr_impl(const T v0, const T v1, int_type_tag) + { + return v0 >> v1; + } + + template + inline T shl_impl(const T v0, const T v1, real_type_tag) + { + return v0 * std::pow(T(2),static_cast(static_cast(v1))); + } + + template + inline T shl_impl(const T v0, const T v1, int_type_tag) + { + return v0 << v1; + } + + template + inline T sgn_impl(const T v, real_type_tag) + { + if (v > T(0)) return T(+1); + else if (v < T(0)) return T(-1); + else return T( 0); + } + + template + inline T sgn_impl(const T v, int_type_tag) + { + if (v > T(0)) return T(+1); + else if (v < T(0)) return T(-1); + else return T( 0); + } + + template + inline T and_impl(const T v0, const T v1, real_type_tag) + { + return (is_true_impl(v0) && is_true_impl(v1)) ? T(1) : T(0); + } + + template + inline T and_impl(const T v0, const T v1, int_type_tag) + { + return v0 && v1; + } + + template + inline T nand_impl(const T v0, const T v1, real_type_tag) + { + return (is_false_impl(v0) || is_false_impl(v1)) ? T(1) : T(0); + } + + template + inline T nand_impl(const T v0, const T v1, int_type_tag) + { + return !(v0 && v1); + } + + template + inline T or_impl(const T v0, const T v1, real_type_tag) + { + return (is_true_impl(v0) || is_true_impl(v1)) ? T(1) : T(0); + } + + template + inline T or_impl(const T v0, const T v1, int_type_tag) + { + return (v0 || v1); + } + + template + inline T nor_impl(const T v0, const T v1, real_type_tag) + { + return (is_false_impl(v0) && is_false_impl(v1)) ? T(1) : T(0); + } + + template + inline T nor_impl(const T v0, const T v1, int_type_tag) + { + return !(v0 || v1); + } + + template + inline T xor_impl(const T v0, const T v1, real_type_tag) + { + return (is_false_impl(v0) != is_false_impl(v1)) ? T(1) : T(0); + } + + template + inline T xor_impl(const T v0, const T v1, int_type_tag) + { + return v0 ^ v1; + } + + template + inline T xnor_impl(const T v0, const T v1, real_type_tag) + { + const bool v0_true = is_true_impl(v0); + const bool v1_true = is_true_impl(v1); + + if ((v0_true && v1_true) || (!v0_true && !v1_true)) + return T(1); + else + return T(0); + } + + template + inline T xnor_impl(const T v0, const T v1, int_type_tag) + { + const bool v0_true = is_true_impl(v0); + const bool v1_true = is_true_impl(v1); + + if ((v0_true && v1_true) || (!v0_true && !v1_true)) + return T(1); + else + return T(0); + } + + #if (defined(_MSC_VER) && (_MSC_VER >= 1900)) || !defined(_MSC_VER) + #define exprtk_define_erf(TT, impl) \ + inline TT erf_impl(const TT v) { return impl(v); } \ + + exprtk_define_erf(float , ::erff) + exprtk_define_erf(double , ::erf ) + exprtk_define_erf(long double, ::erfl) + #undef exprtk_define_erf + #endif + + template + inline T erf_impl(const T v, real_type_tag) + { + #if defined(_MSC_VER) && (_MSC_VER < 1900) + // Credits: Abramowitz & Stegun Equations 7.1.25-28 + static const T c[] = + { + T( 1.26551223), T(1.00002368), + T( 0.37409196), T(0.09678418), + T(-0.18628806), T(0.27886807), + T(-1.13520398), T(1.48851587), + T(-0.82215223), T(0.17087277) + }; + + const T t = T(1) / (T(1) + T(0.5) * abs_impl(v,real_type_tag())); + + const T result = T(1) - t * std::exp((-v * v) - + c[0] + t * (c[1] + t * + (c[2] + t * (c[3] + t * + (c[4] + t * (c[5] + t * + (c[6] + t * (c[7] + t * + (c[8] + t * (c[9])))))))))); + + return (v >= T(0)) ? result : -result; + #else + return erf_impl(v); + #endif + } + + template + inline T erf_impl(const T v, int_type_tag) + { + return erf_impl(static_cast(v),real_type_tag()); + } + + #if (defined(_MSC_VER) && (_MSC_VER >= 1900)) || !defined(_MSC_VER) + #define exprtk_define_erfc(TT, impl) \ + inline TT erfc_impl(const TT v) { return impl(v); } \ + + exprtk_define_erfc(float ,::erfcf) + exprtk_define_erfc(double ,::erfc ) + exprtk_define_erfc(long double,::erfcl) + #undef exprtk_define_erfc + #endif + + template + inline T erfc_impl(const T v, real_type_tag) + { + #if defined(_MSC_VER) && (_MSC_VER < 1900) + return T(1) - erf_impl(v,real_type_tag()); + #else + return erfc_impl(v); + #endif + } + + template + inline T erfc_impl(const T v, int_type_tag) + { + return erfc_impl(static_cast(v),real_type_tag()); + } + + template + inline T ncdf_impl(const T v, real_type_tag) + { + const T cnd = T(0.5) * (T(1) + + erf_impl(abs_impl(v,real_type_tag()) / + T(numeric::constant::sqrt2),real_type_tag())); + return (v < T(0)) ? (T(1) - cnd) : cnd; + } + + template + inline T ncdf_impl(const T v, int_type_tag) + { + return ncdf_impl(static_cast(v),real_type_tag()); + } + + template + inline T sinc_impl(const T v, real_type_tag) + { + if (std::abs(v) >= std::numeric_limits::epsilon()) + return(std::sin(v) / v); + else + return T(1); + } + + template + inline T sinc_impl(const T v, int_type_tag) + { + return sinc_impl(static_cast(v),real_type_tag()); + } + + #if __cplusplus >= 201103L + template + inline T acosh_impl(const T v, real_type_tag) + { + return std::acosh(v); + } + + template + inline T asinh_impl(const T v, real_type_tag) + { + return std::asinh(v); + } + + template + inline T atanh_impl(const T v, real_type_tag) + { + return std::atanh(v); + } + #else + template + inline T acosh_impl(const T v, real_type_tag) + { + return std::log(v + std::sqrt((v * v) - T(1))); + } + + template + inline T asinh_impl(const T v, real_type_tag) + { + return std::log(v + std::sqrt((v * v) + T(1))); + } + + template + inline T atanh_impl(const T v, real_type_tag) + { + return (std::log(T(1) + v) - std::log(T(1) - v)) / T(2); + } + #endif + + template inline T acos_impl(const T v, real_type_tag) { return std::acos (v); } + template inline T asin_impl(const T v, real_type_tag) { return std::asin (v); } + template inline T atan_impl(const T v, real_type_tag) { return std::atan (v); } + template inline T ceil_impl(const T v, real_type_tag) { return std::ceil (v); } + template inline T cos_impl(const T v, real_type_tag) { return std::cos (v); } + template inline T cosh_impl(const T v, real_type_tag) { return std::cosh (v); } + template inline T exp_impl(const T v, real_type_tag) { return std::exp (v); } + template inline T floor_impl(const T v, real_type_tag) { return std::floor(v); } + template inline T log_impl(const T v, real_type_tag) { return std::log (v); } + template inline T log10_impl(const T v, real_type_tag) { return std::log10(v); } + template inline T log2_impl(const T v, real_type_tag) { return std::log(v)/T(numeric::constant::log2); } + template inline T neg_impl(const T v, real_type_tag) { return -v; } + template inline T pos_impl(const T v, real_type_tag) { return +v; } + template inline T sin_impl(const T v, real_type_tag) { return std::sin (v); } + template inline T sinh_impl(const T v, real_type_tag) { return std::sinh (v); } + template inline T sqrt_impl(const T v, real_type_tag) { return std::sqrt (v); } + template inline T tan_impl(const T v, real_type_tag) { return std::tan (v); } + template inline T tanh_impl(const T v, real_type_tag) { return std::tanh (v); } + template inline T cot_impl(const T v, real_type_tag) { return T(1) / std::tan(v); } + template inline T sec_impl(const T v, real_type_tag) { return T(1) / std::cos(v); } + template inline T csc_impl(const T v, real_type_tag) { return T(1) / std::sin(v); } + template inline T r2d_impl(const T v, real_type_tag) { return (v * T(numeric::constant::_180_pi)); } + template inline T d2r_impl(const T v, real_type_tag) { return (v * T(numeric::constant::pi_180)); } + template inline T d2g_impl(const T v, real_type_tag) { return (v * T(10.0/9.0)); } + template inline T g2d_impl(const T v, real_type_tag) { return (v * T(9.0/10.0)); } + template inline T notl_impl(const T v, real_type_tag) { return (std::not_equal_to()(T(0),v) ? T(0) : T(1)); } + template inline T frac_impl(const T v, real_type_tag) { return (v - static_cast(v)); } + template inline T trunc_impl(const T v, real_type_tag) { return T(static_cast(v)); } + + template inline T const_pi_impl(real_type_tag) { return T(numeric::constant::pi); } + template inline T const_e_impl(real_type_tag) { return T(numeric::constant::e); } + template inline T const_qnan_impl(real_type_tag) { return std::numeric_limits::quiet_NaN(); } + + template inline T abs_impl(const T v, int_type_tag) { return ((v >= T(0)) ? v : -v); } + template inline T exp_impl(const T v, int_type_tag) { return std::exp (v); } + template inline T log_impl(const T v, int_type_tag) { return std::log (v); } + template inline T log10_impl(const T v, int_type_tag) { return std::log10(v); } + template inline T log2_impl(const T v, int_type_tag) { return std::log(v)/T(numeric::constant::log2); } + template inline T neg_impl(const T v, int_type_tag) { return -v; } + template inline T pos_impl(const T v, int_type_tag) { return +v; } + template inline T ceil_impl(const T v, int_type_tag) { return v; } + template inline T floor_impl(const T v, int_type_tag) { return v; } + template inline T round_impl(const T v, int_type_tag) { return v; } + template inline T notl_impl(const T v, int_type_tag) { return !v; } + template inline T sqrt_impl(const T v, int_type_tag) { return std::sqrt (v); } + template inline T frac_impl(const T , int_type_tag) { return T(0); } + template inline T trunc_impl(const T v, int_type_tag) { return v; } + template inline T acos_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T acosh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T asin_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T asinh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T atan_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T atanh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T cos_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T cosh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T sin_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T sinh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T tan_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T tanh_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T cot_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T sec_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + template inline T csc_impl(const T , int_type_tag) { return std::numeric_limits::quiet_NaN(); } + + template + inline bool is_integer_impl(const T& v, real_type_tag) + { + return std::equal_to()(T(0),std::fmod(v,T(1))); + } + + template + inline bool is_integer_impl(const T&, int_type_tag) + { + return true; + } + } + + template + struct numeric_info { enum { length = 0, size = 32, bound_length = 0, min_exp = 0, max_exp = 0 }; }; + + template <> struct numeric_info { enum { length = 10, size = 16, bound_length = 9 }; }; + template <> struct numeric_info { enum { min_exp = -38, max_exp = +38 }; }; + template <> struct numeric_info { enum { min_exp = -308, max_exp = +308 }; }; + template <> struct numeric_info { enum { min_exp = -308, max_exp = +308 }; }; + + template + inline int to_int32(const T v) + { + const typename details::number_type::type num_type; + return to_int32_impl(v, num_type); + } + + template + inline _int64_t to_int64(const T v) + { + const typename details::number_type::type num_type; + return to_int64_impl(v, num_type); + } + + template + inline _uint64_t to_uint64(const T v) + { + const typename details::number_type::type num_type; + return to_uint64_impl(v, num_type); + } + + template + inline bool is_nan(const T v) + { + const typename details::number_type::type num_type; + return is_nan_impl(v, num_type); + } + + template + inline T min(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return min_impl(v0, v1, num_type); + } + + template + inline T max(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return max_impl(v0, v1, num_type); + } + + template + inline T equal(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return equal_impl(v0, v1, num_type); + } + + template + inline T nequal(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return nequal_impl(v0, v1, num_type); + } + + template + inline T modulus(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return modulus_impl(v0, v1, num_type); + } + + template + inline T pow(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return pow_impl(v0, v1, num_type); + } + + template + inline T logn(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return logn_impl(v0, v1, num_type); + } + + template + inline T root(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return root_impl(v0, v1, num_type); + } + + template + inline T roundn(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return roundn_impl(v0, v1, num_type); + } + + template + inline T hypot(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return hypot_impl(v0, v1, num_type); + } + + template + inline T atan2(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return atan2_impl(v0, v1, num_type); + } + + template + inline T shr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return shr_impl(v0, v1, num_type); + } + + template + inline T shl(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return shl_impl(v0, v1, num_type); + } + + template + inline T and_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return and_impl(v0, v1, num_type); + } + + template + inline T nand_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return nand_impl(v0, v1, num_type); + } + + template + inline T or_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return or_impl(v0, v1, num_type); + } + + template + inline T nor_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return nor_impl(v0, v1, num_type); + } + + template + inline T xor_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return xor_impl(v0, v1, num_type); + } + + template + inline T xnor_opr(const T v0, const T v1) + { + const typename details::number_type::type num_type; + return xnor_impl(v0, v1, num_type); + } + + template + inline bool is_integer(const T v) + { + const typename details::number_type::type num_type; + return is_integer_impl(v, num_type); + } + + template + struct fast_exp + { + static inline T result(T v) + { + unsigned int k = N; + T l = T(1); + + while (k) + { + if (1 == (k % 2)) + { + l *= v; + --k; + } + + v *= v; + k /= 2; + } + + return l; + } + }; + + template struct fast_exp { static inline T result(const T v) { T v_5 = fast_exp::result(v); return v_5 * v_5; } }; + template struct fast_exp { static inline T result(const T v) { return fast_exp::result(v) * v; } }; + template struct fast_exp { static inline T result(const T v) { T v_4 = fast_exp::result(v); return v_4 * v_4; } }; + template struct fast_exp { static inline T result(const T v) { return fast_exp::result(v) * v; } }; + template struct fast_exp { static inline T result(const T v) { T v_3 = fast_exp::result(v); return v_3 * v_3; } }; + template struct fast_exp { static inline T result(const T v) { return fast_exp::result(v) * v; } }; + template struct fast_exp { static inline T result(const T v) { T v_2 = v * v; return v_2 * v_2; } }; + template struct fast_exp { static inline T result(const T v) { return v * v * v; } }; + template struct fast_exp { static inline T result(const T v) { return v * v; } }; + template struct fast_exp { static inline T result(const T v) { return v; } }; + template struct fast_exp { static inline T result(const T ) { return T(1); } }; + + #define exprtk_define_unary_function(FunctionName) \ + template \ + inline T FunctionName (const T v) \ + { \ + const typename details::number_type::type num_type; \ + return FunctionName##_impl(v,num_type); \ + } \ + + exprtk_define_unary_function(abs ) + exprtk_define_unary_function(acos ) + exprtk_define_unary_function(acosh) + exprtk_define_unary_function(asin ) + exprtk_define_unary_function(asinh) + exprtk_define_unary_function(atan ) + exprtk_define_unary_function(atanh) + exprtk_define_unary_function(ceil ) + exprtk_define_unary_function(cos ) + exprtk_define_unary_function(cosh ) + exprtk_define_unary_function(exp ) + exprtk_define_unary_function(expm1) + exprtk_define_unary_function(floor) + exprtk_define_unary_function(log ) + exprtk_define_unary_function(log10) + exprtk_define_unary_function(log2 ) + exprtk_define_unary_function(log1p) + exprtk_define_unary_function(neg ) + exprtk_define_unary_function(pos ) + exprtk_define_unary_function(round) + exprtk_define_unary_function(sin ) + exprtk_define_unary_function(sinc ) + exprtk_define_unary_function(sinh ) + exprtk_define_unary_function(sqrt ) + exprtk_define_unary_function(tan ) + exprtk_define_unary_function(tanh ) + exprtk_define_unary_function(cot ) + exprtk_define_unary_function(sec ) + exprtk_define_unary_function(csc ) + exprtk_define_unary_function(r2d ) + exprtk_define_unary_function(d2r ) + exprtk_define_unary_function(d2g ) + exprtk_define_unary_function(g2d ) + exprtk_define_unary_function(notl ) + exprtk_define_unary_function(sgn ) + exprtk_define_unary_function(erf ) + exprtk_define_unary_function(erfc ) + exprtk_define_unary_function(ncdf ) + exprtk_define_unary_function(frac ) + exprtk_define_unary_function(trunc) + #undef exprtk_define_unary_function + } + + template + inline T compute_pow10(T d, const int exponent) + { + static const double fract10[] = + { + 0.0, + 1.0E+001, 1.0E+002, 1.0E+003, 1.0E+004, 1.0E+005, 1.0E+006, 1.0E+007, 1.0E+008, 1.0E+009, 1.0E+010, + 1.0E+011, 1.0E+012, 1.0E+013, 1.0E+014, 1.0E+015, 1.0E+016, 1.0E+017, 1.0E+018, 1.0E+019, 1.0E+020, + 1.0E+021, 1.0E+022, 1.0E+023, 1.0E+024, 1.0E+025, 1.0E+026, 1.0E+027, 1.0E+028, 1.0E+029, 1.0E+030, + 1.0E+031, 1.0E+032, 1.0E+033, 1.0E+034, 1.0E+035, 1.0E+036, 1.0E+037, 1.0E+038, 1.0E+039, 1.0E+040, + 1.0E+041, 1.0E+042, 1.0E+043, 1.0E+044, 1.0E+045, 1.0E+046, 1.0E+047, 1.0E+048, 1.0E+049, 1.0E+050, + 1.0E+051, 1.0E+052, 1.0E+053, 1.0E+054, 1.0E+055, 1.0E+056, 1.0E+057, 1.0E+058, 1.0E+059, 1.0E+060, + 1.0E+061, 1.0E+062, 1.0E+063, 1.0E+064, 1.0E+065, 1.0E+066, 1.0E+067, 1.0E+068, 1.0E+069, 1.0E+070, + 1.0E+071, 1.0E+072, 1.0E+073, 1.0E+074, 1.0E+075, 1.0E+076, 1.0E+077, 1.0E+078, 1.0E+079, 1.0E+080, + 1.0E+081, 1.0E+082, 1.0E+083, 1.0E+084, 1.0E+085, 1.0E+086, 1.0E+087, 1.0E+088, 1.0E+089, 1.0E+090, + 1.0E+091, 1.0E+092, 1.0E+093, 1.0E+094, 1.0E+095, 1.0E+096, 1.0E+097, 1.0E+098, 1.0E+099, 1.0E+100, + 1.0E+101, 1.0E+102, 1.0E+103, 1.0E+104, 1.0E+105, 1.0E+106, 1.0E+107, 1.0E+108, 1.0E+109, 1.0E+110, + 1.0E+111, 1.0E+112, 1.0E+113, 1.0E+114, 1.0E+115, 1.0E+116, 1.0E+117, 1.0E+118, 1.0E+119, 1.0E+120, + 1.0E+121, 1.0E+122, 1.0E+123, 1.0E+124, 1.0E+125, 1.0E+126, 1.0E+127, 1.0E+128, 1.0E+129, 1.0E+130, + 1.0E+131, 1.0E+132, 1.0E+133, 1.0E+134, 1.0E+135, 1.0E+136, 1.0E+137, 1.0E+138, 1.0E+139, 1.0E+140, + 1.0E+141, 1.0E+142, 1.0E+143, 1.0E+144, 1.0E+145, 1.0E+146, 1.0E+147, 1.0E+148, 1.0E+149, 1.0E+150, + 1.0E+151, 1.0E+152, 1.0E+153, 1.0E+154, 1.0E+155, 1.0E+156, 1.0E+157, 1.0E+158, 1.0E+159, 1.0E+160, + 1.0E+161, 1.0E+162, 1.0E+163, 1.0E+164, 1.0E+165, 1.0E+166, 1.0E+167, 1.0E+168, 1.0E+169, 1.0E+170, + 1.0E+171, 1.0E+172, 1.0E+173, 1.0E+174, 1.0E+175, 1.0E+176, 1.0E+177, 1.0E+178, 1.0E+179, 1.0E+180, + 1.0E+181, 1.0E+182, 1.0E+183, 1.0E+184, 1.0E+185, 1.0E+186, 1.0E+187, 1.0E+188, 1.0E+189, 1.0E+190, + 1.0E+191, 1.0E+192, 1.0E+193, 1.0E+194, 1.0E+195, 1.0E+196, 1.0E+197, 1.0E+198, 1.0E+199, 1.0E+200, + 1.0E+201, 1.0E+202, 1.0E+203, 1.0E+204, 1.0E+205, 1.0E+206, 1.0E+207, 1.0E+208, 1.0E+209, 1.0E+210, + 1.0E+211, 1.0E+212, 1.0E+213, 1.0E+214, 1.0E+215, 1.0E+216, 1.0E+217, 1.0E+218, 1.0E+219, 1.0E+220, + 1.0E+221, 1.0E+222, 1.0E+223, 1.0E+224, 1.0E+225, 1.0E+226, 1.0E+227, 1.0E+228, 1.0E+229, 1.0E+230, + 1.0E+231, 1.0E+232, 1.0E+233, 1.0E+234, 1.0E+235, 1.0E+236, 1.0E+237, 1.0E+238, 1.0E+239, 1.0E+240, + 1.0E+241, 1.0E+242, 1.0E+243, 1.0E+244, 1.0E+245, 1.0E+246, 1.0E+247, 1.0E+248, 1.0E+249, 1.0E+250, + 1.0E+251, 1.0E+252, 1.0E+253, 1.0E+254, 1.0E+255, 1.0E+256, 1.0E+257, 1.0E+258, 1.0E+259, 1.0E+260, + 1.0E+261, 1.0E+262, 1.0E+263, 1.0E+264, 1.0E+265, 1.0E+266, 1.0E+267, 1.0E+268, 1.0E+269, 1.0E+270, + 1.0E+271, 1.0E+272, 1.0E+273, 1.0E+274, 1.0E+275, 1.0E+276, 1.0E+277, 1.0E+278, 1.0E+279, 1.0E+280, + 1.0E+281, 1.0E+282, 1.0E+283, 1.0E+284, 1.0E+285, 1.0E+286, 1.0E+287, 1.0E+288, 1.0E+289, 1.0E+290, + 1.0E+291, 1.0E+292, 1.0E+293, 1.0E+294, 1.0E+295, 1.0E+296, 1.0E+297, 1.0E+298, 1.0E+299, 1.0E+300, + 1.0E+301, 1.0E+302, 1.0E+303, 1.0E+304, 1.0E+305, 1.0E+306, 1.0E+307, 1.0E+308 + }; + + static const int fract10_size = static_cast(sizeof(fract10) / sizeof(double)); + + const int e = std::abs(exponent); + + if (exponent >= std::numeric_limits::min_exponent10) + { + if (e < fract10_size) + { + if (exponent > 0) + return T(d * fract10[e]); + else + return T(d / fract10[e]); + } + else + return T(d * std::pow(10.0, 10.0 * exponent)); + } + else + { + d /= T(fract10[ -std::numeric_limits::min_exponent10]); + return T(d / fract10[-exponent + std::numeric_limits::min_exponent10]); + } + } + + template + inline bool string_to_type_converter_impl_ref(Iterator& itr, const Iterator end, T& result) + { + if (itr == end) + return false; + + const bool negative = ('-' == (*itr)); + + if (negative || ('+' == (*itr))) + { + if (end == ++itr) + return false; + } + + static const uchar_t zero = static_cast('0'); + + while ((end != itr) && (zero == (*itr))) ++itr; + + bool return_result = true; + unsigned int digit = 0; + const std::size_t length = static_cast(std::distance(itr,end)); + + if (length <= 4) + { + switch (length) + { + #ifdef exprtk_use_lut + + #define exprtk_process_digit \ + if ((digit = details::digit_table[(int)*itr++]) < 10) \ + result = result * 10 + (digit); \ + else \ + { \ + return_result = false; \ + break; \ + } \ + exprtk_fallthrough \ + + #else + + #define exprtk_process_digit \ + if ((digit = (*itr++ - zero)) < 10) \ + result = result * T(10) + digit; \ + else \ + { \ + return_result = false; \ + break; \ + } \ + exprtk_fallthrough \ + + #endif + + case 4 : exprtk_process_digit + case 3 : exprtk_process_digit + case 2 : exprtk_process_digit + case 1 : if ((digit = (*itr - zero))>= 10) + { + digit = 0; + return_result = false; + } + + #undef exprtk_process_digit + } + } + else + return_result = false; + + if (length && return_result) + { + result = result * 10 + static_cast(digit); + ++itr; + } + + result = negative ? -result : result; + return return_result; + } + + template + static inline bool parse_nan(Iterator& itr, const Iterator end, T& t) + { + typedef typename std::iterator_traits::value_type type; + + static const std::size_t nan_length = 3; + + if (std::distance(itr,end) != static_cast(nan_length)) + return false; + + if (static_cast('n') == (*itr)) + { + if ( + (static_cast('a') != *(itr + 1)) || + (static_cast('n') != *(itr + 2)) + ) + { + return false; + } + } + else if ( + (static_cast('A') != *(itr + 1)) || + (static_cast('N') != *(itr + 2)) + ) + { + return false; + } + + t = std::numeric_limits::quiet_NaN(); + + return true; + } + + template + static inline bool parse_inf(Iterator& itr, const Iterator end, T& t, const bool negative) + { + static const char_t inf_uc[] = "INFINITY"; + static const char_t inf_lc[] = "infinity"; + static const std::size_t inf_length = 8; + + const std::size_t length = static_cast(std::distance(itr,end)); + + if ((3 != length) && (inf_length != length)) + return false; + + char_cptr inf_itr = ('i' == (*itr)) ? inf_lc : inf_uc; + + while (end != itr) + { + if (*inf_itr == static_cast(*itr)) + { + ++itr; + ++inf_itr; + continue; + } + else + return false; + } + + if (negative) + t = -std::numeric_limits::infinity(); + else + t = std::numeric_limits::infinity(); + + return true; + } + + template + inline bool valid_exponent(const int exponent, numeric::details::real_type_tag) + { + using namespace details::numeric; + return (numeric_info::min_exp <= exponent) && (exponent <= numeric_info::max_exp); + } + + template + inline bool string_to_real(Iterator& itr_external, const Iterator end, T& t, numeric::details::real_type_tag) + { + if (end == itr_external) return false; + + Iterator itr = itr_external; + + T d = T(0); + + const bool negative = ('-' == (*itr)); + + if (negative || '+' == (*itr)) + { + if (end == ++itr) + return false; + } + + bool instate = false; + + static const char_t zero = static_cast('0'); + + #define parse_digit_1(d) \ + if ((digit = (*itr - zero)) < 10) \ + { d = d * T(10) + digit; } \ + else \ + { break; } \ + if (end == ++itr) break; \ + + #define parse_digit_2(d) \ + if ((digit = (*itr - zero)) < 10) \ + { d = d * T(10) + digit; } \ + else \ + { break; } \ + ++itr; \ + + if ('.' != (*itr)) + { + const Iterator curr = itr; + + while ((end != itr) && (zero == (*itr))) ++itr; + + while (end != itr) + { + unsigned int digit; + parse_digit_1(d) + parse_digit_1(d) + parse_digit_2(d) + } + + if (curr != itr) instate = true; + } + + int exponent = 0; + + if (end != itr) + { + if ('.' == (*itr)) + { + const Iterator curr = ++itr; + T tmp_d = T(0); + + while (end != itr) + { + unsigned int digit; + parse_digit_1(tmp_d) + parse_digit_1(tmp_d) + parse_digit_2(tmp_d) + } + + if (curr != itr) + { + instate = true; + + const int frac_exponent = static_cast(-std::distance(curr, itr)); + + if (!valid_exponent(frac_exponent, numeric::details::real_type_tag())) + return false; + + d += compute_pow10(tmp_d, frac_exponent); + } + + #undef parse_digit_1 + #undef parse_digit_2 + } + + if (end != itr) + { + typename std::iterator_traits::value_type c = (*itr); + + if (('e' == c) || ('E' == c)) + { + int exp = 0; + + if (!details::string_to_type_converter_impl_ref(++itr, end, exp)) + { + if (end == itr) + return false; + else + c = (*itr); + } + + exponent += exp; + } + + if (end != itr) + { + if (('f' == c) || ('F' == c) || ('l' == c) || ('L' == c)) + ++itr; + else if ('#' == c) + { + if (end == ++itr) + return false; + else if (('I' <= (*itr)) && ((*itr) <= 'n')) + { + if (('i' == (*itr)) || ('I' == (*itr))) + { + return parse_inf(itr, end, t, negative); + } + else if (('n' == (*itr)) || ('N' == (*itr))) + { + return parse_nan(itr, end, t); + } + else + return false; + } + else + return false; + } + else if (('I' <= (*itr)) && ((*itr) <= 'n')) + { + if (('i' == (*itr)) || ('I' == (*itr))) + { + return parse_inf(itr, end, t, negative); + } + else if (('n' == (*itr)) || ('N' == (*itr))) + { + return parse_nan(itr, end, t); + } + else + return false; + } + else + return false; + } + } + } + + if ((end != itr) || (!instate)) + return false; + else if (!valid_exponent(exponent, numeric::details::real_type_tag())) + return false; + else if (exponent) + d = compute_pow10(d,exponent); + + t = static_cast((negative) ? -d : d); + return true; + } + + template + inline bool string_to_real(const std::string& s, T& t) + { + const typename numeric::details::number_type::type num_type; + + char_cptr begin = s.data(); + char_cptr end = s.data() + s.size(); + + return string_to_real(begin, end, t, num_type); + } + + template + struct functor_t + { + /* + Note: The following definitions for Type, may require tweaking + based on the compiler and target architecture. The benchmark + should provide enough information to make the right choice. + */ + //typedef T Type; + //typedef const T Type; + typedef const T& Type; + typedef T& RefType; + typedef T (*qfunc_t)(Type t0, Type t1, Type t2, Type t3); + typedef T (*tfunc_t)(Type t0, Type t1, Type t2); + typedef T (*bfunc_t)(Type t0, Type t1); + typedef T (*ufunc_t)(Type t0); + }; + + } // namespace details + + struct loop_runtime_check + { + enum loop_types + { + e_invalid = 0, + e_for_loop = 1, + e_while_loop = 2, + e_repeat_until_loop = 4, + e_all_loops = 7 + }; + + enum violation_type + { + e_unknown = 0, + e_iteration_count = 1, + e_timeout = 2 + }; + + loop_types loop_set; + + loop_runtime_check() + : loop_set(e_invalid) + , max_loop_iterations(0) + {} + + details::_uint64_t max_loop_iterations; + + struct violation_context + { + loop_types loop; + violation_type violation; + details::_uint64_t iteration_count; + }; + + virtual bool check() + { + return true; + } + + virtual void handle_runtime_violation(const violation_context&) + { + throw std::runtime_error("ExprTk Loop runtime violation."); + } + + virtual ~loop_runtime_check() + {} + }; + + typedef loop_runtime_check* loop_runtime_check_ptr; + + struct vector_access_runtime_check + { + struct violation_context + { + void* base_ptr; + void* end_ptr; + void* access_ptr; + std::size_t type_size; + }; + + virtual ~vector_access_runtime_check() + {} + + virtual bool handle_runtime_violation(violation_context& /*context*/) + { + throw std::runtime_error("ExprTk runtime vector access violation."); + #if !defined(_MSC_VER) && !defined(__NVCOMPILER) + return false; + #endif + } + }; + + typedef vector_access_runtime_check* vector_access_runtime_check_ptr; + + struct compilation_check + { + struct compilation_context + { + std::string error_message; + }; + + virtual bool continue_compilation(compilation_context& /*context*/) = 0; + + virtual ~compilation_check() + {} + }; + + typedef compilation_check* compilation_check_ptr; + + namespace lexer + { + struct token + { + enum token_type + { + e_none = 0, e_error = 1, e_err_symbol = 2, + e_err_number = 3, e_err_string = 4, e_err_sfunc = 5, + e_eof = 6, e_number = 7, e_symbol = 8, + e_string = 9, e_assign = 10, e_addass = 11, + e_subass = 12, e_mulass = 13, e_divass = 14, + e_modass = 15, e_shr = 16, e_shl = 17, + e_lte = 18, e_ne = 19, e_gte = 20, + e_swap = 21, e_lt = '<', e_gt = '>', + e_eq = '=', e_rbracket = ')', e_lbracket = '(', + e_rsqrbracket = ']', e_lsqrbracket = '[', e_rcrlbracket = '}', + e_lcrlbracket = '{', e_comma = ',', e_add = '+', + e_sub = '-', e_div = '/', e_mul = '*', + e_mod = '%', e_pow = '^', e_colon = ':', + e_ternary = '?' + }; + + token() + : type(e_none) + , value("") + , position(std::numeric_limits::max()) + {} + + void clear() + { + type = e_none; + value = ""; + position = std::numeric_limits::max(); + } + + template + inline token& set_operator(const token_type tt, + const Iterator begin, const Iterator end, + const Iterator base_begin = Iterator(0)) + { + type = tt; + value.assign(begin,end); + if (base_begin) + position = static_cast(std::distance(base_begin,begin)); + return (*this); + } + + template + inline token& set_symbol(const Iterator begin, const Iterator end, const Iterator base_begin = Iterator(0)) + { + type = e_symbol; + value.assign(begin,end); + if (base_begin) + position = static_cast(std::distance(base_begin,begin)); + return (*this); + } + + template + inline token& set_numeric(const Iterator begin, const Iterator end, const Iterator base_begin = Iterator(0)) + { + type = e_number; + value.assign(begin,end); + if (base_begin) + position = static_cast(std::distance(base_begin,begin)); + return (*this); + } + + template + inline token& set_string(const Iterator begin, const Iterator end, const Iterator base_begin = Iterator(0)) + { + type = e_string; + value.assign(begin,end); + if (base_begin) + position = static_cast(std::distance(base_begin,begin)); + return (*this); + } + + inline token& set_string(const std::string& s, const std::size_t p) + { + type = e_string; + value = s; + position = p; + return (*this); + } + + template + inline token& set_error(const token_type et, + const Iterator begin, const Iterator end, + const Iterator base_begin = Iterator(0)) + { + if ( + (e_error == et) || + (e_err_symbol == et) || + (e_err_number == et) || + (e_err_string == et) || + (e_err_sfunc == et) + ) + { + type = et; + } + else + type = e_error; + + value.assign(begin,end); + + if (base_begin) + position = static_cast(std::distance(base_begin,begin)); + + return (*this); + } + + static inline std::string to_str(token_type t) + { + switch (t) + { + case e_none : return "NONE"; + case e_error : return "ERROR"; + case e_err_symbol : return "ERROR_SYMBOL"; + case e_err_number : return "ERROR_NUMBER"; + case e_err_string : return "ERROR_STRING"; + case e_eof : return "EOF"; + case e_number : return "NUMBER"; + case e_symbol : return "SYMBOL"; + case e_string : return "STRING"; + case e_assign : return ":="; + case e_addass : return "+="; + case e_subass : return "-="; + case e_mulass : return "*="; + case e_divass : return "/="; + case e_modass : return "%="; + case e_shr : return ">>"; + case e_shl : return "<<"; + case e_lte : return "<="; + case e_ne : return "!="; + case e_gte : return ">="; + case e_lt : return "<"; + case e_gt : return ">"; + case e_eq : return "="; + case e_rbracket : return ")"; + case e_lbracket : return "("; + case e_rsqrbracket : return "]"; + case e_lsqrbracket : return "["; + case e_rcrlbracket : return "}"; + case e_lcrlbracket : return "{"; + case e_comma : return ","; + case e_add : return "+"; + case e_sub : return "-"; + case e_div : return "/"; + case e_mul : return "*"; + case e_mod : return "%"; + case e_pow : return "^"; + case e_colon : return ":"; + case e_ternary : return "?"; + case e_swap : return "<=>"; + default : return "UNKNOWN"; + } + } + + inline bool is_error() const + { + return ( + (e_error == type) || + (e_err_symbol == type) || + (e_err_number == type) || + (e_err_string == type) || + (e_err_sfunc == type) + ); + } + + token_type type; + std::string value; + std::size_t position; + }; + + class generator + { + public: + + typedef token token_t; + typedef std::vector token_list_t; + typedef token_list_t::iterator token_list_itr_t; + typedef details::char_t char_t; + + generator() + : base_itr_(0) + , s_itr_ (0) + , s_end_ (0) + { + clear(); + } + + inline void clear() + { + base_itr_ = 0; + s_itr_ = 0; + s_end_ = 0; + token_list_.clear(); + token_itr_ = token_list_.end(); + store_token_itr_ = token_list_.end(); + } + + inline bool process(const std::string& str) + { + base_itr_ = str.data(); + s_itr_ = str.data(); + s_end_ = str.data() + str.size(); + + eof_token_.set_operator(token_t::e_eof,s_end_,s_end_,base_itr_); + token_list_.clear(); + + while (!is_end(s_itr_)) + { + scan_token(); + + if (!token_list_.empty() && token_list_.back().is_error()) + return false; + } + + return true; + } + + inline bool empty() const + { + return token_list_.empty(); + } + + inline std::size_t size() const + { + return token_list_.size(); + } + + inline void begin() + { + token_itr_ = token_list_.begin(); + store_token_itr_ = token_list_.begin(); + } + + inline void store() + { + store_token_itr_ = token_itr_; + } + + inline void restore() + { + token_itr_ = store_token_itr_; + } + + inline token_t& next_token() + { + if (token_list_.end() != token_itr_) + { + return *token_itr_++; + } + else + return eof_token_; + } + + inline token_t& peek_next_token() + { + if (token_list_.end() != token_itr_) + { + return *token_itr_; + } + else + return eof_token_; + } + + inline token_t& operator[](const std::size_t& index) + { + if (index < token_list_.size()) + return token_list_[index]; + else + return eof_token_; + } + + inline token_t operator[](const std::size_t& index) const + { + if (index < token_list_.size()) + return token_list_[index]; + else + return eof_token_; + } + + inline bool finished() const + { + return (token_list_.end() == token_itr_); + } + + inline void insert_front(token_t::token_type tk_type) + { + if ( + !token_list_.empty() && + (token_list_.end() != token_itr_) + ) + { + token_t t = *token_itr_; + + t.type = tk_type; + token_itr_ = token_list_.insert(token_itr_,t); + } + } + + inline std::string substr(const std::size_t& begin, const std::size_t& end) const + { + const details::char_cptr begin_itr = ((base_itr_ + begin) < s_end_) ? (base_itr_ + begin) : s_end_; + const details::char_cptr end_itr = ((base_itr_ + end ) < s_end_) ? (base_itr_ + end ) : s_end_; + + return std::string(begin_itr,end_itr); + } + + inline std::string remaining() const + { + if (finished()) + return ""; + else if (token_list_.begin() != token_itr_) + return std::string(base_itr_ + (token_itr_ - 1)->position, s_end_); + else + return std::string(base_itr_ + token_itr_->position, s_end_); + } + + private: + + inline bool is_end(details::char_cptr itr) const + { + return (s_end_ == itr); + } + + #ifndef exprtk_disable_comments + inline bool is_comment_start(details::char_cptr itr) const + { + const char_t c0 = *(itr + 0); + const char_t c1 = *(itr + 1); + + if ('#' == c0) + return true; + else if (!is_end(itr + 1)) + { + if (('/' == c0) && ('/' == c1)) return true; + if (('/' == c0) && ('*' == c1)) return true; + } + return false; + } + #else + inline bool is_comment_start(details::char_cptr) const + { + return false; + } + #endif + + inline void skip_whitespace() + { + while (!is_end(s_itr_) && details::is_whitespace(*s_itr_)) + { + ++s_itr_; + } + } + + inline void skip_comments() + { + #ifndef exprtk_disable_comments + // The following comment styles are supported: + // 1. // .... \n + // 2. # .... \n + // 3. /* .... */ + struct test + { + static inline bool comment_start(const char_t c0, const char_t c1, int& mode, int& incr) + { + mode = 0; + if ('#' == c0) { mode = 1; incr = 1; } + else if ('/' == c0) + { + if ('/' == c1) { mode = 1; incr = 2; } + else if ('*' == c1) { mode = 2; incr = 2; } + } + return (0 != mode); + } + + static inline bool comment_end(const char_t c0, const char_t c1, int& mode) + { + if ( + ((1 == mode) && ('\n' == c0)) || + ((2 == mode) && ( '*' == c0) && ('/' == c1)) + ) + { + mode = 0; + return true; + } + else + return false; + } + }; + + int mode = 0; + int increment = 0; + + if (is_end(s_itr_)) + return; + else if (!test::comment_start(*s_itr_, *(s_itr_ + 1), mode, increment)) + return; + + details::char_cptr cmt_start = s_itr_; + + s_itr_ += increment; + + while (!is_end(s_itr_)) + { + if ((1 == mode) && test::comment_end(*s_itr_, 0, mode)) + { + ++s_itr_; + return; + } + + if ((2 == mode)) + { + if (!is_end((s_itr_ + 1)) && test::comment_end(*s_itr_, *(s_itr_ + 1), mode)) + { + s_itr_ += 2; + return; + } + } + + ++s_itr_; + } + + if (2 == mode) + { + token_t t; + t.set_error(token::e_error, cmt_start, cmt_start + mode, base_itr_); + token_list_.push_back(t); + } + #endif + } + + inline void scan_token() + { + const char_t c = *s_itr_; + + if (details::is_whitespace(c)) + { + skip_whitespace(); + return; + } + else if (is_comment_start(s_itr_)) + { + skip_comments(); + return; + } + else if (details::is_operator_char(c)) + { + scan_operator(); + return; + } + else if (details::is_letter(c)) + { + scan_symbol(); + return; + } + else if (details::is_digit(c) || ('.' == c)) + { + scan_number(); + return; + } + else if ('$' == c) + { + scan_special_function(); + return; + } + #ifndef exprtk_disable_string_capabilities + else if ('\'' == c) + { + scan_string(); + return; + } + #endif + else if ('~' == c) + { + token_t t; + t.set_symbol(s_itr_, s_itr_ + 1, base_itr_); + token_list_.push_back(t); + ++s_itr_; + return; + } + else + { + token_t t; + t.set_error(token::e_error, s_itr_, s_itr_ + 2, base_itr_); + token_list_.push_back(t); + ++s_itr_; + } + } + + inline void scan_operator() + { + token_t t; + + const char_t c0 = s_itr_[0]; + + if (!is_end(s_itr_ + 1)) + { + const char_t c1 = s_itr_[1]; + + if (!is_end(s_itr_ + 2)) + { + const char_t c2 = s_itr_[2]; + + if ((c0 == '<') && (c1 == '=') && (c2 == '>')) + { + t.set_operator(token_t::e_swap, s_itr_, s_itr_ + 3, base_itr_); + token_list_.push_back(t); + s_itr_ += 3; + return; + } + } + + token_t::token_type ttype = token_t::e_none; + + if ((c0 == '<') && (c1 == '=')) ttype = token_t::e_lte; + else if ((c0 == '>') && (c1 == '=')) ttype = token_t::e_gte; + else if ((c0 == '<') && (c1 == '>')) ttype = token_t::e_ne; + else if ((c0 == '!') && (c1 == '=')) ttype = token_t::e_ne; + else if ((c0 == '=') && (c1 == '=')) ttype = token_t::e_eq; + else if ((c0 == ':') && (c1 == '=')) ttype = token_t::e_assign; + else if ((c0 == '<') && (c1 == '<')) ttype = token_t::e_shl; + else if ((c0 == '>') && (c1 == '>')) ttype = token_t::e_shr; + else if ((c0 == '+') && (c1 == '=')) ttype = token_t::e_addass; + else if ((c0 == '-') && (c1 == '=')) ttype = token_t::e_subass; + else if ((c0 == '*') && (c1 == '=')) ttype = token_t::e_mulass; + else if ((c0 == '/') && (c1 == '=')) ttype = token_t::e_divass; + else if ((c0 == '%') && (c1 == '=')) ttype = token_t::e_modass; + + if (token_t::e_none != ttype) + { + t.set_operator(ttype, s_itr_, s_itr_ + 2, base_itr_); + token_list_.push_back(t); + s_itr_ += 2; + return; + } + } + + if ('<' == c0) + t.set_operator(token_t::e_lt , s_itr_, s_itr_ + 1, base_itr_); + else if ('>' == c0) + t.set_operator(token_t::e_gt , s_itr_, s_itr_ + 1, base_itr_); + else if (';' == c0) + t.set_operator(token_t::e_eof, s_itr_, s_itr_ + 1, base_itr_); + else if ('&' == c0) + t.set_symbol(s_itr_, s_itr_ + 1, base_itr_); + else if ('|' == c0) + t.set_symbol(s_itr_, s_itr_ + 1, base_itr_); + else + t.set_operator(token_t::token_type(c0), s_itr_, s_itr_ + 1, base_itr_); + + token_list_.push_back(t); + ++s_itr_; + } + + inline void scan_symbol() + { + details::char_cptr initial_itr = s_itr_; + + while (!is_end(s_itr_)) + { + if (!details::is_letter_or_digit(*s_itr_) && ('_' != (*s_itr_))) + { + if ('.' != (*s_itr_)) + break; + /* + Permit symbols that contain a 'dot' + Allowed : abc.xyz, a123.xyz, abc.123, abc_.xyz a123_.xyz abc._123 + Disallowed: .abc, abc., abc., abc. + */ + if ( + (s_itr_ != initial_itr) && + !is_end(s_itr_ + 1) && + !details::is_letter_or_digit(*(s_itr_ + 1)) && + ('_' != (*(s_itr_ + 1))) + ) + break; + } + + ++s_itr_; + } + + token_t t; + t.set_symbol(initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + } + + inline void scan_number() + { + /* + Attempt to match a valid numeric value in one of the following formats: + (01) 123456 + (02) 123456. + (03) 123.456 + (04) 123.456e3 + (05) 123.456E3 + (06) 123.456e+3 + (07) 123.456E+3 + (08) 123.456e-3 + (09) 123.456E-3 + (00) .1234 + (11) .1234e3 + (12) .1234E+3 + (13) .1234e+3 + (14) .1234E-3 + (15) .1234e-3 + */ + + details::char_cptr initial_itr = s_itr_; + bool dot_found = false; + bool e_found = false; + bool post_e_sign_found = false; + bool post_e_digit_found = false; + token_t t; + + while (!is_end(s_itr_)) + { + if ('.' == (*s_itr_)) + { + if (dot_found) + { + t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + dot_found = true; + ++s_itr_; + + continue; + } + else if ('e' == std::tolower(*s_itr_)) + { + const char_t& c = *(s_itr_ + 1); + + if (is_end(s_itr_ + 1)) + { + t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + else if ( + ('+' != c) && + ('-' != c) && + !details::is_digit(c) + ) + { + t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + e_found = true; + ++s_itr_; + + continue; + } + else if (e_found && details::is_sign(*s_itr_) && !post_e_digit_found) + { + if (post_e_sign_found) + { + t.set_error(token::e_err_number, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + post_e_sign_found = true; + ++s_itr_; + + continue; + } + else if (e_found && details::is_digit(*s_itr_)) + { + post_e_digit_found = true; + ++s_itr_; + + continue; + } + else if (('.' != (*s_itr_)) && !details::is_digit(*s_itr_)) + break; + else + ++s_itr_; + } + + t.set_numeric(initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + inline void scan_special_function() + { + details::char_cptr initial_itr = s_itr_; + token_t t; + + // $fdd(x,x,x) = at least 11 chars + if (std::distance(s_itr_,s_end_) < 11) + { + t.set_error( + token::e_err_sfunc, + initial_itr, std::min(initial_itr + 11, s_end_), + base_itr_); + token_list_.push_back(t); + + return; + } + + if ( + !(('$' == *s_itr_) && + (details::imatch ('f',*(s_itr_ + 1))) && + (details::is_digit(*(s_itr_ + 2))) && + (details::is_digit(*(s_itr_ + 3)))) + ) + { + t.set_error( + token::e_err_sfunc, + initial_itr, std::min(initial_itr + 4, s_end_), + base_itr_); + token_list_.push_back(t); + + return; + } + + s_itr_ += 4; // $fdd = 4chars + + t.set_symbol(initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + #ifndef exprtk_disable_string_capabilities + inline void scan_string() + { + details::char_cptr initial_itr = s_itr_ + 1; + token_t t; + + if (std::distance(s_itr_,s_end_) < 2) + { + t.set_error(token::e_err_string, s_itr_, s_end_, base_itr_); + token_list_.push_back(t); + + return; + } + + ++s_itr_; + + bool escaped_found = false; + bool escaped = false; + + while (!is_end(s_itr_)) + { + if (!details::is_valid_string_char(*s_itr_)) + { + t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + else if (!escaped && ('\\' == *s_itr_)) + { + escaped_found = true; + escaped = true; + ++s_itr_; + + continue; + } + else if (!escaped) + { + if ('\'' == *s_itr_) + break; + } + else if (escaped) + { + if ( + !is_end(s_itr_) && ('0' == *(s_itr_)) && + ((s_itr_ + 4) <= s_end_) + ) + { + const bool x_separator = ('X' == std::toupper(*(s_itr_ + 1))); + + const bool both_digits = details::is_hex_digit(*(s_itr_ + 2)) && + details::is_hex_digit(*(s_itr_ + 3)) ; + + if (!(x_separator && both_digits)) + { + t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + else + s_itr_ += 3; + } + + escaped = false; + } + + ++s_itr_; + } + + if (is_end(s_itr_)) + { + t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + if (!escaped_found) + t.set_string(initial_itr, s_itr_, base_itr_); + else + { + std::string parsed_string(initial_itr,s_itr_); + + if (!details::cleanup_escapes(parsed_string)) + { + t.set_error(token::e_err_string, initial_itr, s_itr_, base_itr_); + token_list_.push_back(t); + + return; + } + + t.set_string( + parsed_string, + static_cast(std::distance(base_itr_,initial_itr))); + } + + token_list_.push_back(t); + ++s_itr_; + + return; + } + #endif + + private: + + token_list_t token_list_; + token_list_itr_t token_itr_; + token_list_itr_t store_token_itr_; + token_t eof_token_; + details::char_cptr base_itr_; + details::char_cptr s_itr_; + details::char_cptr s_end_; + + friend class token_scanner; + friend class token_modifier; + friend class token_inserter; + friend class token_joiner; + }; // class generator + + class helper_interface + { + public: + + virtual void init() { } + virtual void reset() { } + virtual bool result() { return true; } + virtual std::size_t process(generator&) { return 0; } + virtual ~helper_interface() { } + }; + + class token_scanner : public helper_interface + { + public: + + virtual ~token_scanner() + {} + + explicit token_scanner(const std::size_t& stride) + : stride_(stride) + { + if (stride > 4) + { + throw std::invalid_argument("token_scanner() - Invalid stride value"); + } + } + + inline std::size_t process(generator& g) exprtk_override + { + if (g.token_list_.size() >= stride_) + { + for (std::size_t i = 0; i < (g.token_list_.size() - stride_ + 1); ++i) + { + token t; + + switch (stride_) + { + case 1 : + { + const token& t0 = g.token_list_[i]; + + if (!operator()(t0)) + { + return i; + } + } + break; + + case 2 : + { + const token& t0 = g.token_list_[i ]; + const token& t1 = g.token_list_[i + 1]; + + if (!operator()(t0, t1)) + { + return i; + } + } + break; + + case 3 : + { + const token& t0 = g.token_list_[i ]; + const token& t1 = g.token_list_[i + 1]; + const token& t2 = g.token_list_[i + 2]; + + if (!operator()(t0, t1, t2)) + { + return i; + } + } + break; + + case 4 : + { + const token& t0 = g.token_list_[i ]; + const token& t1 = g.token_list_[i + 1]; + const token& t2 = g.token_list_[i + 2]; + const token& t3 = g.token_list_[i + 3]; + + if (!operator()(t0, t1, t2, t3)) + { + return i; + } + } + break; + } + } + } + + return (g.token_list_.size() - stride_ + 1); + } + + virtual bool operator() (const token&) + { + return false; + } + + virtual bool operator() (const token&, const token&) + { + return false; + } + + virtual bool operator() (const token&, const token&, const token&) + { + return false; + } + + virtual bool operator() (const token&, const token&, const token&, const token&) + { + return false; + } + + private: + + const std::size_t stride_; + }; // class token_scanner + + class token_modifier : public helper_interface + { + public: + + inline std::size_t process(generator& g) exprtk_override + { + std::size_t changes = 0; + + for (std::size_t i = 0; i < g.token_list_.size(); ++i) + { + if (modify(g.token_list_[i])) changes++; + } + + return changes; + } + + virtual bool modify(token& t) = 0; + }; + + class token_inserter : public helper_interface + { + public: + + explicit token_inserter(const std::size_t& stride) + : stride_(stride) + { + if (stride > 5) + { + throw std::invalid_argument("token_inserter() - Invalid stride value"); + } + } + + inline std::size_t process(generator& g) exprtk_override + { + if (g.token_list_.empty()) + return 0; + else if (g.token_list_.size() < stride_) + return 0; + + std::size_t changes = 0; + + typedef std::pair insert_t; + std::vector insert_list; + insert_list.reserve(10000); + + for (std::size_t i = 0; i < (g.token_list_.size() - stride_ + 1); ++i) + { + int insert_index = -1; + token t; + + switch (stride_) + { + case 1 : insert_index = insert(g.token_list_[i],t); + break; + + case 2 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], t); + break; + + case 3 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], t); + break; + + case 4 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], g.token_list_[i + 3], t); + break; + + case 5 : insert_index = insert(g.token_list_[i], g.token_list_[i + 1], g.token_list_[i + 2], g.token_list_[i + 3], g.token_list_[i + 4], t); + break; + } + + if ((insert_index >= 0) && (insert_index <= (static_cast(stride_) + 1))) + { + insert_list.push_back(insert_t(i, t)); + changes++; + } + } + + if (!insert_list.empty()) + { + generator::token_list_t token_list; + + std::size_t insert_index = 0; + + for (std::size_t i = 0; i < g.token_list_.size(); ++i) + { + token_list.push_back(g.token_list_[i]); + + if ( + (insert_index < insert_list.size()) && + (insert_list[insert_index].first == i) + ) + { + token_list.push_back(insert_list[insert_index].second); + insert_index++; + } + } + + std::swap(g.token_list_,token_list); + } + + return changes; + } + + #define token_inserter_empty_body \ + { \ + return -1; \ + } \ + + inline virtual int insert(const token&, token&) + token_inserter_empty_body + + inline virtual int insert(const token&, const token&, token&) + token_inserter_empty_body + + inline virtual int insert(const token&, const token&, const token&, token&) + token_inserter_empty_body + + inline virtual int insert(const token&, const token&, const token&, const token&, token&) + token_inserter_empty_body + + inline virtual int insert(const token&, const token&, const token&, const token&, const token&, token&) + token_inserter_empty_body + + #undef token_inserter_empty_body + + private: + + const std::size_t stride_; + }; + + class token_joiner : public helper_interface + { + public: + + explicit token_joiner(const std::size_t& stride) + : stride_(stride) + {} + + inline std::size_t process(generator& g) exprtk_override + { + if (g.token_list_.empty()) + return 0; + + switch (stride_) + { + case 2 : return process_stride_2(g); + case 3 : return process_stride_3(g); + default : return 0; + } + } + + virtual bool join(const token&, const token&, token&) { return false; } + virtual bool join(const token&, const token&, const token&, token&) { return false; } + + private: + + inline std::size_t process_stride_2(generator& g) + { + if (g.token_list_.size() < 2) + return 0; + + std::size_t changes = 0; + + generator::token_list_t token_list; + token_list.reserve(10000); + + for (int i = 0; i < static_cast(g.token_list_.size() - 1); ++i) + { + token t; + + for ( ; ; ) + { + if (!join(g[i], g[i + 1], t)) + { + token_list.push_back(g[i]); + break; + } + + token_list.push_back(t); + + ++changes; + + i += 2; + + if (static_cast(i) >= (g.token_list_.size() - 1)) + break; + } + } + + token_list.push_back(g.token_list_.back()); + + assert(token_list.size() <= g.token_list_.size()); + + std::swap(token_list, g.token_list_); + + return changes; + } + + inline std::size_t process_stride_3(generator& g) + { + if (g.token_list_.size() < 3) + return 0; + + std::size_t changes = 0; + + generator::token_list_t token_list; + token_list.reserve(10000); + + for (int i = 0; i < static_cast(g.token_list_.size() - 2); ++i) + { + token t; + + for ( ; ; ) + { + if (!join(g[i], g[i + 1], g[i + 2], t)) + { + token_list.push_back(g[i]); + break; + } + + token_list.push_back(t); + + ++changes; + + i += 3; + + if (static_cast(i) >= (g.token_list_.size() - 2)) + break; + } + } + + token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 2)); + token_list.push_back(*(g.token_list_.begin() + g.token_list_.size() - 1)); + + assert(token_list.size() <= g.token_list_.size()); + + std::swap(token_list, g.token_list_); + + return changes; + } + + const std::size_t stride_; + }; + + namespace helper + { + + inline void dump(const lexer::generator& generator) + { + for (std::size_t i = 0; i < generator.size(); ++i) + { + const lexer::token& t = generator[i]; + printf("Token[%02d] @ %03d %6s --> '%s'\n", + static_cast(i), + static_cast(t.position), + t.to_str(t.type).c_str(), + t.value.c_str()); + } + } + + class commutative_inserter : public lexer::token_inserter + { + public: + + using lexer::token_inserter::insert; + + commutative_inserter() + : lexer::token_inserter(2) + {} + + inline void ignore_symbol(const std::string& symbol) + { + ignore_set_.insert(symbol); + } + + inline int insert(const lexer::token& t0, const lexer::token& t1, lexer::token& new_token) exprtk_override + { + bool match = false; + new_token.type = lexer::token::e_mul; + new_token.value = "*"; + new_token.position = t1.position; + + if (t0.type == lexer::token::e_symbol) + { + if (ignore_set_.end() != ignore_set_.find(t0.value)) + { + return -1; + } + else if (!t0.value.empty() && ('$' == t0.value[0])) + { + return -1; + } + } + + if (t1.type == lexer::token::e_symbol) + { + if (ignore_set_.end() != ignore_set_.find(t1.value)) + { + return -1; + } + } + if ((t0.type == lexer::token::e_number ) && (t1.type == lexer::token::e_symbol )) match = true; + else if ((t0.type == lexer::token::e_number ) && (t1.type == lexer::token::e_lbracket )) match = true; + else if ((t0.type == lexer::token::e_number ) && (t1.type == lexer::token::e_lcrlbracket)) match = true; + else if ((t0.type == lexer::token::e_number ) && (t1.type == lexer::token::e_lsqrbracket)) match = true; + else if ((t0.type == lexer::token::e_symbol ) && (t1.type == lexer::token::e_number )) match = true; + else if ((t0.type == lexer::token::e_rbracket ) && (t1.type == lexer::token::e_number )) match = true; + else if ((t0.type == lexer::token::e_rcrlbracket) && (t1.type == lexer::token::e_number )) match = true; + else if ((t0.type == lexer::token::e_rsqrbracket) && (t1.type == lexer::token::e_number )) match = true; + else if ((t0.type == lexer::token::e_rbracket ) && (t1.type == lexer::token::e_symbol )) match = true; + else if ((t0.type == lexer::token::e_rcrlbracket) && (t1.type == lexer::token::e_symbol )) match = true; + else if ((t0.type == lexer::token::e_rsqrbracket) && (t1.type == lexer::token::e_symbol )) match = true; + else if ((t0.type == lexer::token::e_symbol ) && (t1.type == lexer::token::e_symbol )) match = true; + + return (match) ? 1 : -1; + } + + private: + + std::set ignore_set_; + }; + + class operator_joiner exprtk_final : public token_joiner + { + public: + + explicit operator_joiner(const std::size_t& stride) + : token_joiner(stride) + {} + + inline bool join(const lexer::token& t0, const lexer::token& t1, lexer::token& t) exprtk_override + { + // ': =' --> ':=' + if ((t0.type == lexer::token::e_colon) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_assign; + t.value = ":="; + t.position = t0.position; + + return true; + } + // '+ =' --> '+=' + else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_addass; + t.value = "+="; + t.position = t0.position; + + return true; + } + // '- =' --> '-=' + else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_subass; + t.value = "-="; + t.position = t0.position; + + return true; + } + // '* =' --> '*=' + else if ((t0.type == lexer::token::e_mul) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_mulass; + t.value = "*="; + t.position = t0.position; + + return true; + } + // '/ =' --> '/=' + else if ((t0.type == lexer::token::e_div) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_divass; + t.value = "/="; + t.position = t0.position; + + return true; + } + // '% =' --> '%=' + else if ((t0.type == lexer::token::e_mod) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_modass; + t.value = "%="; + t.position = t0.position; + + return true; + } + // '> =' --> '>=' + else if ((t0.type == lexer::token::e_gt) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_gte; + t.value = ">="; + t.position = t0.position; + + return true; + } + // '< =' --> '<=' + else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_lte; + t.value = "<="; + t.position = t0.position; + + return true; + } + // '= =' --> '==' + else if ((t0.type == lexer::token::e_eq) && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_eq; + t.value = "=="; + t.position = t0.position; + + return true; + } + // '! =' --> '!=' + else if ((static_cast(t0.type) == '!') && (t1.type == lexer::token::e_eq)) + { + t.type = lexer::token::e_ne; + t.value = "!="; + t.position = t0.position; + + return true; + } + // '< >' --> '<>' + else if ((t0.type == lexer::token::e_lt) && (t1.type == lexer::token::e_gt)) + { + t.type = lexer::token::e_ne; + t.value = "<>"; + t.position = t0.position; + + return true; + } + // '<= >' --> '<=>' + else if ((t0.type == lexer::token::e_lte) && (t1.type == lexer::token::e_gt)) + { + t.type = lexer::token::e_swap; + t.value = "<=>"; + t.position = t0.position; + + return true; + } + // '+ -' --> '-' + else if ((t0.type == lexer::token::e_add) && (t1.type == lexer::token::e_sub)) + { + t.type = lexer::token::e_sub; + t.value = "-"; + t.position = t0.position; + + return true; + } + // '- +' --> '-' + else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_add)) + { + t.type = lexer::token::e_sub; + t.value = "-"; + t.position = t0.position; + + return true; + } + // '- -' --> '+' + else if ((t0.type == lexer::token::e_sub) && (t1.type == lexer::token::e_sub)) + { + /* + Note: May need to reconsider this when wanting to implement + pre/postfix decrement operator + */ + t.type = lexer::token::e_add; + t.value = "+"; + t.position = t0.position; + + return true; + } + else + return false; + } + + inline bool join(const lexer::token& t0, + const lexer::token& t1, + const lexer::token& t2, + lexer::token& t) exprtk_override + { + // '[ * ]' --> '[*]' + if ( + (t0.type == lexer::token::e_lsqrbracket) && + (t1.type == lexer::token::e_mul ) && + (t2.type == lexer::token::e_rsqrbracket) + ) + { + t.type = lexer::token::e_symbol; + t.value = "[*]"; + t.position = t0.position; + + return true; + } + else + return false; + } + }; + + class bracket_checker exprtk_final : public lexer::token_scanner + { + public: + + using lexer::token_scanner::operator(); + + bracket_checker() + : token_scanner(1) + , state_(true) + {} + + bool result() exprtk_override + { + if (!stack_.empty()) + { + lexer::token t; + t.value = stack_.top().first; + t.position = stack_.top().second; + error_token_ = t; + state_ = false; + + return false; + } + else + return state_; + } + + lexer::token error_token() + { + return error_token_; + } + + void reset() exprtk_override + { + // Why? because msvc doesn't support swap properly. + stack_ = std::stack >(); + state_ = true; + error_token_.clear(); + } + + bool operator() (const lexer::token& t) exprtk_override + { + if ( + !t.value.empty() && + (lexer::token::e_string != t.type) && + (lexer::token::e_symbol != t.type) && + exprtk::details::is_bracket(t.value[0]) + ) + { + details::char_t c = t.value[0]; + + if (t.type == lexer::token::e_lbracket ) stack_.push(std::make_pair(')',t.position)); + else if (t.type == lexer::token::e_lcrlbracket) stack_.push(std::make_pair('}',t.position)); + else if (t.type == lexer::token::e_lsqrbracket) stack_.push(std::make_pair(']',t.position)); + else if (exprtk::details::is_right_bracket(c)) + { + if (stack_.empty()) + { + state_ = false; + error_token_ = t; + + return false; + } + else if (c != stack_.top().first) + { + state_ = false; + error_token_ = t; + + return false; + } + else + stack_.pop(); + } + } + + return true; + } + + private: + + bool state_; + std::stack > stack_; + lexer::token error_token_; + }; + + template + class numeric_checker exprtk_final : public lexer::token_scanner + { + public: + + using lexer::token_scanner::operator(); + + numeric_checker() + : token_scanner (1) + , current_index_(0) + {} + + bool result() exprtk_override + { + return error_list_.empty(); + } + + void reset() exprtk_override + { + error_list_.clear(); + current_index_ = 0; + } + + bool operator() (const lexer::token& t) exprtk_override + { + if (token::e_number == t.type) + { + T v; + + if (!exprtk::details::string_to_real(t.value,v)) + { + error_list_.push_back(current_index_); + } + } + + ++current_index_; + + return true; + } + + std::size_t error_count() const + { + return error_list_.size(); + } + + std::size_t error_index(const std::size_t& i) + { + if (i < error_list_.size()) + return error_list_[i]; + else + return std::numeric_limits::max(); + } + + void clear_errors() + { + error_list_.clear(); + } + + private: + + std::size_t current_index_; + std::vector error_list_; + }; + + class symbol_replacer exprtk_final : public lexer::token_modifier + { + private: + + typedef std::map,details::ilesscompare> replace_map_t; + + public: + + bool remove(const std::string& target_symbol) + { + const replace_map_t::iterator itr = replace_map_.find(target_symbol); + + if (replace_map_.end() == itr) + return false; + + replace_map_.erase(itr); + + return true; + } + + bool add_replace(const std::string& target_symbol, + const std::string& replace_symbol, + const lexer::token::token_type token_type = lexer::token::e_symbol) + { + const replace_map_t::iterator itr = replace_map_.find(target_symbol); + + if (replace_map_.end() != itr) + { + return false; + } + + replace_map_[target_symbol] = std::make_pair(replace_symbol,token_type); + + return true; + } + + void clear() + { + replace_map_.clear(); + } + + private: + + bool modify(lexer::token& t) exprtk_override + { + if (lexer::token::e_symbol == t.type) + { + if (replace_map_.empty()) + return false; + + const replace_map_t::iterator itr = replace_map_.find(t.value); + + if (replace_map_.end() != itr) + { + t.value = itr->second.first; + t.type = itr->second.second; + + return true; + } + } + + return false; + } + + replace_map_t replace_map_; + }; + + class sequence_validator exprtk_final : public lexer::token_scanner + { + private: + + typedef std::pair token_pair_t; + typedef std::set set_t; + + public: + + using lexer::token_scanner::operator(); + + sequence_validator() + : lexer::token_scanner(2) + { + add_invalid(lexer::token::e_number, lexer::token::e_number); + add_invalid(lexer::token::e_string, lexer::token::e_string); + add_invalid(lexer::token::e_number, lexer::token::e_string); + add_invalid(lexer::token::e_string, lexer::token::e_number); + + add_invalid_set1(lexer::token::e_assign ); + add_invalid_set1(lexer::token::e_shr ); + add_invalid_set1(lexer::token::e_shl ); + add_invalid_set1(lexer::token::e_lte ); + add_invalid_set1(lexer::token::e_ne ); + add_invalid_set1(lexer::token::e_gte ); + add_invalid_set1(lexer::token::e_lt ); + add_invalid_set1(lexer::token::e_gt ); + add_invalid_set1(lexer::token::e_eq ); + add_invalid_set1(lexer::token::e_comma ); + add_invalid_set1(lexer::token::e_add ); + add_invalid_set1(lexer::token::e_sub ); + add_invalid_set1(lexer::token::e_div ); + add_invalid_set1(lexer::token::e_mul ); + add_invalid_set1(lexer::token::e_mod ); + add_invalid_set1(lexer::token::e_pow ); + add_invalid_set1(lexer::token::e_colon ); + add_invalid_set1(lexer::token::e_ternary); + } + + bool result() exprtk_override + { + return error_list_.empty(); + } + + bool operator() (const lexer::token& t0, const lexer::token& t1) exprtk_override + { + const set_t::value_type p = std::make_pair(t0.type,t1.type); + + if (invalid_bracket_check(t0.type,t1.type)) + { + error_list_.push_back(std::make_pair(t0,t1)); + } + else if (invalid_comb_.find(p) != invalid_comb_.end()) + { + error_list_.push_back(std::make_pair(t0,t1)); + } + + return true; + } + + std::size_t error_count() const + { + return error_list_.size(); + } + + std::pair error(const std::size_t index) + { + if (index < error_list_.size()) + { + return error_list_[index]; + } + else + { + static const lexer::token error_token; + return std::make_pair(error_token,error_token); + } + } + + void clear_errors() + { + error_list_.clear(); + } + + private: + + void add_invalid(const lexer::token::token_type base, const lexer::token::token_type t) + { + invalid_comb_.insert(std::make_pair(base,t)); + } + + void add_invalid_set1(const lexer::token::token_type t) + { + add_invalid(t, lexer::token::e_assign); + add_invalid(t, lexer::token::e_shr ); + add_invalid(t, lexer::token::e_shl ); + add_invalid(t, lexer::token::e_lte ); + add_invalid(t, lexer::token::e_ne ); + add_invalid(t, lexer::token::e_gte ); + add_invalid(t, lexer::token::e_lt ); + add_invalid(t, lexer::token::e_gt ); + add_invalid(t, lexer::token::e_eq ); + add_invalid(t, lexer::token::e_comma ); + add_invalid(t, lexer::token::e_div ); + add_invalid(t, lexer::token::e_mul ); + add_invalid(t, lexer::token::e_mod ); + add_invalid(t, lexer::token::e_pow ); + add_invalid(t, lexer::token::e_colon ); + } + + bool invalid_bracket_check(const lexer::token::token_type base, const lexer::token::token_type t) + { + if (details::is_right_bracket(static_cast(base))) + { + switch (t) + { + case lexer::token::e_assign : return (']' != base); + case lexer::token::e_string : return (')' != base); + default : return false; + } + } + else if (details::is_left_bracket(static_cast(base))) + { + if (details::is_right_bracket(static_cast(t))) + return false; + else if (details::is_left_bracket(static_cast(t))) + return false; + else + { + switch (t) + { + case lexer::token::e_number : return false; + case lexer::token::e_symbol : return false; + case lexer::token::e_string : return false; + case lexer::token::e_add : return false; + case lexer::token::e_sub : return false; + case lexer::token::e_colon : return false; + case lexer::token::e_ternary : return false; + default : return true ; + } + } + } + else if (details::is_right_bracket(static_cast(t))) + { + switch (base) + { + case lexer::token::e_number : return false; + case lexer::token::e_symbol : return false; + case lexer::token::e_string : return false; + case lexer::token::e_eof : return false; + case lexer::token::e_colon : return false; + case lexer::token::e_ternary : return false; + default : return true ; + } + } + else if (details::is_left_bracket(static_cast(t))) + { + switch (base) + { + case lexer::token::e_rbracket : return true; + case lexer::token::e_rsqrbracket : return true; + case lexer::token::e_rcrlbracket : return true; + default : return false; + } + } + + return false; + } + + set_t invalid_comb_; + std::vector > error_list_; + }; + + class sequence_validator_3tokens exprtk_final : public lexer::token_scanner + { + private: + + typedef lexer::token::token_type token_t; + typedef std::pair > token_triplet_t; + typedef std::set set_t; + + public: + + using lexer::token_scanner::operator(); + + sequence_validator_3tokens() + : lexer::token_scanner(3) + { + add_invalid(lexer::token::e_number , lexer::token::e_number , lexer::token::e_number); + add_invalid(lexer::token::e_string , lexer::token::e_string , lexer::token::e_string); + add_invalid(lexer::token::e_comma , lexer::token::e_comma , lexer::token::e_comma ); + + add_invalid(lexer::token::e_add , lexer::token::e_add , lexer::token::e_add ); + add_invalid(lexer::token::e_sub , lexer::token::e_sub , lexer::token::e_sub ); + add_invalid(lexer::token::e_div , lexer::token::e_div , lexer::token::e_div ); + add_invalid(lexer::token::e_mul , lexer::token::e_mul , lexer::token::e_mul ); + add_invalid(lexer::token::e_mod , lexer::token::e_mod , lexer::token::e_mod ); + add_invalid(lexer::token::e_pow , lexer::token::e_pow , lexer::token::e_pow ); + + add_invalid(lexer::token::e_add , lexer::token::e_sub , lexer::token::e_add ); + add_invalid(lexer::token::e_sub , lexer::token::e_add , lexer::token::e_sub ); + add_invalid(lexer::token::e_div , lexer::token::e_mul , lexer::token::e_div ); + add_invalid(lexer::token::e_mul , lexer::token::e_div , lexer::token::e_mul ); + add_invalid(lexer::token::e_mod , lexer::token::e_pow , lexer::token::e_mod ); + add_invalid(lexer::token::e_pow , lexer::token::e_mod , lexer::token::e_pow ); + } + + bool result() exprtk_override + { + return error_list_.empty(); + } + + bool operator() (const lexer::token& t0, const lexer::token& t1, const lexer::token& t2) exprtk_override + { + const set_t::value_type p = std::make_pair(t0.type,std::make_pair(t1.type,t2.type)); + + if (invalid_comb_.find(p) != invalid_comb_.end()) + { + error_list_.push_back(std::make_pair(t0,t1)); + } + + return true; + } + + std::size_t error_count() const + { + return error_list_.size(); + } + + std::pair error(const std::size_t index) + { + if (index < error_list_.size()) + { + return error_list_[index]; + } + else + { + static const lexer::token error_token; + return std::make_pair(error_token,error_token); + } + } + + void clear_errors() + { + error_list_.clear(); + } + + private: + + void add_invalid(const token_t t0, const token_t t1, const token_t t2) + { + invalid_comb_.insert(std::make_pair(t0,std::make_pair(t1,t2))); + } + + set_t invalid_comb_; + std::vector > error_list_; + }; + + struct helper_assembly + { + inline bool register_scanner(lexer::token_scanner* scanner) + { + if (token_scanner_list.end() != std::find(token_scanner_list.begin(), + token_scanner_list.end (), + scanner)) + { + return false; + } + + token_scanner_list.push_back(scanner); + + return true; + } + + inline bool register_modifier(lexer::token_modifier* modifier) + { + if (token_modifier_list.end() != std::find(token_modifier_list.begin(), + token_modifier_list.end (), + modifier)) + { + return false; + } + + token_modifier_list.push_back(modifier); + + return true; + } + + inline bool register_joiner(lexer::token_joiner* joiner) + { + if (token_joiner_list.end() != std::find(token_joiner_list.begin(), + token_joiner_list.end (), + joiner)) + { + return false; + } + + token_joiner_list.push_back(joiner); + + return true; + } + + inline bool register_inserter(lexer::token_inserter* inserter) + { + if (token_inserter_list.end() != std::find(token_inserter_list.begin(), + token_inserter_list.end (), + inserter)) + { + return false; + } + + token_inserter_list.push_back(inserter); + + return true; + } + + inline bool run_modifiers(lexer::generator& g) + { + error_token_modifier = reinterpret_cast(0); + + for (std::size_t i = 0; i < token_modifier_list.size(); ++i) + { + lexer::token_modifier& modifier = (*token_modifier_list[i]); + + modifier.reset(); + modifier.process(g); + + if (!modifier.result()) + { + error_token_modifier = token_modifier_list[i]; + + return false; + } + } + + return true; + } + + inline bool run_joiners(lexer::generator& g) + { + error_token_joiner = reinterpret_cast(0); + + for (std::size_t i = 0; i < token_joiner_list.size(); ++i) + { + lexer::token_joiner& joiner = (*token_joiner_list[i]); + + joiner.reset(); + joiner.process(g); + + if (!joiner.result()) + { + error_token_joiner = token_joiner_list[i]; + + return false; + } + } + + return true; + } + + inline bool run_inserters(lexer::generator& g) + { + error_token_inserter = reinterpret_cast(0); + + for (std::size_t i = 0; i < token_inserter_list.size(); ++i) + { + lexer::token_inserter& inserter = (*token_inserter_list[i]); + + inserter.reset(); + inserter.process(g); + + if (!inserter.result()) + { + error_token_inserter = token_inserter_list[i]; + + return false; + } + } + + return true; + } + + inline bool run_scanners(lexer::generator& g) + { + error_token_scanner = reinterpret_cast(0); + + for (std::size_t i = 0; i < token_scanner_list.size(); ++i) + { + lexer::token_scanner& scanner = (*token_scanner_list[i]); + + scanner.reset(); + scanner.process(g); + + if (!scanner.result()) + { + error_token_scanner = token_scanner_list[i]; + + return false; + } + } + + return true; + } + + std::vector token_scanner_list; + std::vector token_modifier_list; + std::vector token_joiner_list; + std::vector token_inserter_list; + + lexer::token_scanner* error_token_scanner; + lexer::token_modifier* error_token_modifier; + lexer::token_joiner* error_token_joiner; + lexer::token_inserter* error_token_inserter; + }; + } + + class parser_helper + { + public: + + typedef token token_t; + typedef generator generator_t; + + inline bool init(const std::string& str) + { + if (!lexer_.process(str)) + { + return false; + } + + lexer_.begin(); + + next_token(); + + return true; + } + + inline generator_t& lexer() + { + return lexer_; + } + + inline const generator_t& lexer() const + { + return lexer_; + } + + inline void store_token() + { + lexer_.store(); + store_current_token_ = current_token_; + } + + inline void restore_token() + { + lexer_.restore(); + current_token_ = store_current_token_; + } + + inline void next_token() + { + current_token_ = lexer_.next_token(); + } + + inline const token_t& current_token() const + { + return current_token_; + } + + inline const token_t& peek_next_token() + { + return lexer_.peek_next_token(); + } + + enum token_advance_mode + { + e_hold = 0, + e_advance = 1 + }; + + inline void advance_token(const token_advance_mode mode) + { + if (e_advance == mode) + { + next_token(); + } + } + + inline bool token_is(const token_t::token_type& ttype, const token_advance_mode mode = e_advance) + { + if (current_token().type != ttype) + { + return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is(const token_t::token_type& ttype, + const std::string& value, + const token_advance_mode mode = e_advance) + { + if ( + (current_token().type != ttype) || + !exprtk::details::imatch(value,current_token().value) + ) + { + return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is(const std::string& value, + const token_advance_mode mode = e_advance) + { + if (!exprtk::details::imatch(value,current_token().value)) + { + return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is_arithmetic_opr(const token_advance_mode mode = e_advance) + { + switch (current_token().type) + { + case token_t::e_add : + case token_t::e_sub : + case token_t::e_div : + case token_t::e_mul : + case token_t::e_mod : + case token_t::e_pow : break; + default : return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is_ineq_opr(const token_advance_mode mode = e_advance) + { + switch (current_token().type) + { + case token_t::e_eq : + case token_t::e_lte : + case token_t::e_ne : + case token_t::e_gte : + case token_t::e_lt : + case token_t::e_gt : break; + default : return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is_left_bracket(const token_advance_mode mode = e_advance) + { + switch (current_token().type) + { + case token_t::e_lbracket : + case token_t::e_lcrlbracket : + case token_t::e_lsqrbracket : break; + default : return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is_right_bracket(const token_advance_mode mode = e_advance) + { + switch (current_token().type) + { + case token_t::e_rbracket : + case token_t::e_rcrlbracket : + case token_t::e_rsqrbracket : break; + default : return false; + } + + advance_token(mode); + + return true; + } + + inline bool token_is_loop(const token_advance_mode mode = e_advance) + { + return token_is("for" , mode) || + token_is("while" , mode) || + token_is("repeat", mode) ; + } + + inline bool peek_token_is(const token_t::token_type& ttype) + { + return (lexer_.peek_next_token().type == ttype); + } + + inline bool peek_token_is(const std::string& s) + { + return (exprtk::details::imatch(lexer_.peek_next_token().value,s)); + } + + private: + + generator_t lexer_; + token_t current_token_; + token_t store_current_token_; + }; + } + + template + class vector_view + { + public: + + typedef T* data_ptr_t; + + vector_view(data_ptr_t data, const std::size_t& size) + : base_size_(size) + , size_(size) + , data_(data) + , data_ref_(0) + { + assert(size_ > 0); + } + + vector_view(const vector_view& vv) + : base_size_(vv.base_size_) + , size_(vv.size_) + , data_(vv.data_) + , data_ref_(0) + { + assert(size_ > 0); + } + + inline void rebase(data_ptr_t data) + { + data_ = data; + + if (!data_ref_.empty()) + { + for (std::size_t i = 0; i < data_ref_.size(); ++i) + { + (*data_ref_[i]) = data; + } + } + } + + inline data_ptr_t data() const + { + return data_; + } + + inline std::size_t base_size() const + { + return base_size_; + } + + inline std::size_t size() const + { + return size_; + } + + inline const T& operator[](const std::size_t index) const + { + assert(index < size_); + return data_[index]; + } + + inline T& operator[](const std::size_t index) + { + assert(index < size_); + return data_[index]; + } + + void set_ref(data_ptr_t* data_ref) + { + data_ref_.push_back(data_ref); + exprtk_debug(("vector_view::set_ref() - data_ref: %p data_ref_.size(): %lu\n", + reinterpret_cast(data_ref), + data_ref_.size())); + } + + void remove_ref(data_ptr_t* data_ref) + { + data_ref_.erase( + std::remove(data_ref_.begin(), data_ref_.end(), data_ref), + data_ref_.end()); + exprtk_debug(("vector_view::remove_ref() - data_ref: %p data_ref_.size(): %lu\n", + reinterpret_cast(data_ref), + data_ref_.size())); + } + + bool set_size(const std::size_t new_size) + { + if ((new_size > 0) && (new_size <= base_size_)) + { + size_ = new_size; + exprtk_debug(("vector_view::set_size() - data_: %p size: %lu\n", + reinterpret_cast(data_), + size_)); + return true; + } + + exprtk_debug(("vector_view::set_size() - error invalid new_size: %lu base_size: %lu\n", + new_size, + base_size_)); + return false; + } + + private: + + const std::size_t base_size_; + std::size_t size_; + data_ptr_t data_; + std::vector data_ref_; + }; + + template + inline vector_view make_vector_view(T* data, + const std::size_t size, const std::size_t offset = 0) + { + return vector_view(data + offset, size); + } + + template + inline vector_view make_vector_view(std::vector& v, + const std::size_t size, const std::size_t offset = 0) + { + return vector_view(v.data() + offset, size); + } + + template class results_context; + + template + struct type_store + { + enum store_type + { + e_unknown, + e_scalar , + e_vector , + e_string + }; + + type_store() + : data(0) + , size(0) + , type(e_unknown) + {} + + union + { + void* data; + T* vec_data; + }; + + std::size_t size; + store_type type; + + class parameter_list + { + public: + + explicit parameter_list(std::vector& pl) + : parameter_list_(pl) + {} + + inline bool empty() const + { + return parameter_list_.empty(); + } + + inline std::size_t size() const + { + return parameter_list_.size(); + } + + inline type_store& operator[](const std::size_t& index) + { + return parameter_list_[index]; + } + + inline const type_store& operator[](const std::size_t& index) const + { + return parameter_list_[index]; + } + + inline type_store& front() + { + return parameter_list_[0]; + } + + inline const type_store& front() const + { + return parameter_list_[0]; + } + + inline type_store& back() + { + return parameter_list_.back(); + } + + inline const type_store& back() const + { + return parameter_list_.back(); + } + + private: + + std::vector& parameter_list_; + + friend class results_context; + }; + + template + struct type_view + { + typedef type_store type_store_t; + typedef ViewType value_t; + + explicit type_view(type_store_t& ts) + : ts_(ts) + , data_(reinterpret_cast(ts_.data)) + {} + + explicit type_view(const type_store_t& ts) + : ts_(const_cast(ts)) + , data_(reinterpret_cast(ts_.data)) + {} + + inline std::size_t size() const + { + return ts_.size; + } + + inline value_t& operator[](const std::size_t& i) + { + return data_[i]; + } + + inline const value_t& operator[](const std::size_t& i) const + { + return data_[i]; + } + + inline const value_t* begin() const { return data_; } + inline value_t* begin() { return data_; } + + inline const value_t* end() const + { + return static_cast(data_ + ts_.size); + } + + inline value_t* end() + { + return static_cast(data_ + ts_.size); + } + + type_store_t& ts_; + value_t* data_; + }; + + typedef type_view vector_view; + typedef type_view string_view; + + struct scalar_view + { + typedef type_store type_store_t; + typedef T value_t; + + explicit scalar_view(type_store_t& ts) + : v_(*reinterpret_cast(ts.data)) + {} + + explicit scalar_view(const type_store_t& ts) + : v_(*reinterpret_cast(const_cast(ts).data)) + {} + + inline value_t& operator() () + { + return v_; + } + + inline const value_t& operator() () const + { + return v_; + } + + inline operator value_t() const + { + return v_; + } + + inline operator value_t() + { + return v_; + } + + template + inline bool to_int(IntType& i) const + { + if (!exprtk::details::numeric::is_integer(v_)) + return false; + + i = static_cast(v_); + + return true; + } + + template + inline bool to_uint(UIntType& u) const + { + if (v_ < T(0)) + return false; + else if (!exprtk::details::numeric::is_integer(v_)) + return false; + + u = static_cast(v_); + + return true; + } + + T& v_; + }; + }; + + template + inline std::string to_str(const StringView& view) + { + return std::string(view.begin(),view.size()); + } + + #ifndef exprtk_disable_return_statement + namespace details + { + template class return_node; + template class return_envelope_node; + } + #endif + + template + class results_context + { + public: + + typedef type_store type_store_t; + typedef typename type_store_t::scalar_view scalar_t; + typedef typename type_store_t::vector_view vector_t; + typedef typename type_store_t::string_view string_t; + + results_context() + : results_available_(false) + {} + + inline std::size_t count() const + { + if (results_available_) + return parameter_list_.size(); + else + return 0; + } + + inline type_store_t& operator[](const std::size_t& index) + { + return parameter_list_[index]; + } + + inline const type_store_t& operator[](const std::size_t& index) const + { + return parameter_list_[index]; + } + + inline bool get_scalar(const std::size_t& index, T& out) const + { + if ( + (index < parameter_list_.size()) && + (parameter_list_[index].type == type_store_t::e_scalar) + ) + { + const scalar_t scalar(parameter_list_[index]); + out = scalar(); + return true; + } + + return false; + } + + template + inline bool get_vector(const std::size_t& index, OutputIterator out_itr) const + { + if ( + (index < parameter_list_.size()) && + (parameter_list_[index].type == type_store_t::e_vector) + ) + { + const vector_t vector(parameter_list_[index]); + for (std::size_t i = 0; i < vector.size(); ++i) + { + *(out_itr++) = vector[i]; + } + + return true; + } + + return false; + } + + inline bool get_vector(const std::size_t& index, std::vector& out) const + { + return get_vector(index,std::back_inserter(out)); + } + + inline bool get_string(const std::size_t& index, std::string& out) const + { + if ( + (index < parameter_list_.size()) && + (parameter_list_[index].type == type_store_t::e_string) + ) + { + const string_t str(parameter_list_[index]); + out.assign(str.begin(),str.size()); + return true; + } + + return false; + } + + private: + + inline void clear() + { + results_available_ = false; + } + + typedef std::vector ts_list_t; + typedef typename type_store_t::parameter_list parameter_list_t; + + inline void assign(const parameter_list_t& pl) + { + parameter_list_ = pl.parameter_list_; + results_available_ = true; + } + + bool results_available_; + ts_list_t parameter_list_; + + #ifndef exprtk_disable_return_statement + friend class details::return_node; + friend class details::return_envelope_node; + #endif + }; + + namespace details + { + enum operator_type + { + e_default , e_null , e_add , e_sub , + e_mul , e_div , e_mod , e_pow , + e_atan2 , e_min , e_max , e_avg , + e_sum , e_prod , e_lt , e_lte , + e_eq , e_equal , e_ne , e_nequal , + e_gte , e_gt , e_and , e_nand , + e_or , e_nor , e_xor , e_xnor , + e_mand , e_mor , e_scand , e_scor , + e_shr , e_shl , e_abs , e_acos , + e_acosh , e_asin , e_asinh , e_atan , + e_atanh , e_ceil , e_cos , e_cosh , + e_exp , e_expm1 , e_floor , e_log , + e_log10 , e_log2 , e_log1p , e_logn , + e_neg , e_pos , e_round , e_roundn , + e_root , e_sqrt , e_sin , e_sinc , + e_sinh , e_sec , e_csc , e_tan , + e_tanh , e_cot , e_clamp , e_iclamp , + e_inrange , e_sgn , e_r2d , e_d2r , + e_d2g , e_g2d , e_hypot , e_notl , + e_erf , e_erfc , e_ncdf , e_frac , + e_trunc , e_assign , e_addass , e_subass , + e_mulass , e_divass , e_modass , e_in , + e_like , e_ilike , e_multi , e_smulti , + e_swap , + + // Do not add new functions/operators after this point. + e_sf00 = 1000, e_sf01 = 1001, e_sf02 = 1002, e_sf03 = 1003, + e_sf04 = 1004, e_sf05 = 1005, e_sf06 = 1006, e_sf07 = 1007, + e_sf08 = 1008, e_sf09 = 1009, e_sf10 = 1010, e_sf11 = 1011, + e_sf12 = 1012, e_sf13 = 1013, e_sf14 = 1014, e_sf15 = 1015, + e_sf16 = 1016, e_sf17 = 1017, e_sf18 = 1018, e_sf19 = 1019, + e_sf20 = 1020, e_sf21 = 1021, e_sf22 = 1022, e_sf23 = 1023, + e_sf24 = 1024, e_sf25 = 1025, e_sf26 = 1026, e_sf27 = 1027, + e_sf28 = 1028, e_sf29 = 1029, e_sf30 = 1030, e_sf31 = 1031, + e_sf32 = 1032, e_sf33 = 1033, e_sf34 = 1034, e_sf35 = 1035, + e_sf36 = 1036, e_sf37 = 1037, e_sf38 = 1038, e_sf39 = 1039, + e_sf40 = 1040, e_sf41 = 1041, e_sf42 = 1042, e_sf43 = 1043, + e_sf44 = 1044, e_sf45 = 1045, e_sf46 = 1046, e_sf47 = 1047, + e_sf48 = 1048, e_sf49 = 1049, e_sf50 = 1050, e_sf51 = 1051, + e_sf52 = 1052, e_sf53 = 1053, e_sf54 = 1054, e_sf55 = 1055, + e_sf56 = 1056, e_sf57 = 1057, e_sf58 = 1058, e_sf59 = 1059, + e_sf60 = 1060, e_sf61 = 1061, e_sf62 = 1062, e_sf63 = 1063, + e_sf64 = 1064, e_sf65 = 1065, e_sf66 = 1066, e_sf67 = 1067, + e_sf68 = 1068, e_sf69 = 1069, e_sf70 = 1070, e_sf71 = 1071, + e_sf72 = 1072, e_sf73 = 1073, e_sf74 = 1074, e_sf75 = 1075, + e_sf76 = 1076, e_sf77 = 1077, e_sf78 = 1078, e_sf79 = 1079, + e_sf80 = 1080, e_sf81 = 1081, e_sf82 = 1082, e_sf83 = 1083, + e_sf84 = 1084, e_sf85 = 1085, e_sf86 = 1086, e_sf87 = 1087, + e_sf88 = 1088, e_sf89 = 1089, e_sf90 = 1090, e_sf91 = 1091, + e_sf92 = 1092, e_sf93 = 1093, e_sf94 = 1094, e_sf95 = 1095, + e_sf96 = 1096, e_sf97 = 1097, e_sf98 = 1098, e_sf99 = 1099, + e_sffinal = 1100, + e_sf4ext00 = 2000, e_sf4ext01 = 2001, e_sf4ext02 = 2002, e_sf4ext03 = 2003, + e_sf4ext04 = 2004, e_sf4ext05 = 2005, e_sf4ext06 = 2006, e_sf4ext07 = 2007, + e_sf4ext08 = 2008, e_sf4ext09 = 2009, e_sf4ext10 = 2010, e_sf4ext11 = 2011, + e_sf4ext12 = 2012, e_sf4ext13 = 2013, e_sf4ext14 = 2014, e_sf4ext15 = 2015, + e_sf4ext16 = 2016, e_sf4ext17 = 2017, e_sf4ext18 = 2018, e_sf4ext19 = 2019, + e_sf4ext20 = 2020, e_sf4ext21 = 2021, e_sf4ext22 = 2022, e_sf4ext23 = 2023, + e_sf4ext24 = 2024, e_sf4ext25 = 2025, e_sf4ext26 = 2026, e_sf4ext27 = 2027, + e_sf4ext28 = 2028, e_sf4ext29 = 2029, e_sf4ext30 = 2030, e_sf4ext31 = 2031, + e_sf4ext32 = 2032, e_sf4ext33 = 2033, e_sf4ext34 = 2034, e_sf4ext35 = 2035, + e_sf4ext36 = 2036, e_sf4ext37 = 2037, e_sf4ext38 = 2038, e_sf4ext39 = 2039, + e_sf4ext40 = 2040, e_sf4ext41 = 2041, e_sf4ext42 = 2042, e_sf4ext43 = 2043, + e_sf4ext44 = 2044, e_sf4ext45 = 2045, e_sf4ext46 = 2046, e_sf4ext47 = 2047, + e_sf4ext48 = 2048, e_sf4ext49 = 2049, e_sf4ext50 = 2050, e_sf4ext51 = 2051, + e_sf4ext52 = 2052, e_sf4ext53 = 2053, e_sf4ext54 = 2054, e_sf4ext55 = 2055, + e_sf4ext56 = 2056, e_sf4ext57 = 2057, e_sf4ext58 = 2058, e_sf4ext59 = 2059, + e_sf4ext60 = 2060, e_sf4ext61 = 2061 + }; + + inline std::string to_str(const operator_type opr) + { + switch (opr) + { + case e_add : return "+" ; + case e_sub : return "-" ; + case e_mul : return "*" ; + case e_div : return "/" ; + case e_mod : return "%" ; + case e_pow : return "^" ; + case e_assign : return ":=" ; + case e_addass : return "+=" ; + case e_subass : return "-=" ; + case e_mulass : return "*=" ; + case e_divass : return "/=" ; + case e_modass : return "%=" ; + case e_lt : return "<" ; + case e_lte : return "<=" ; + case e_eq : return "==" ; + case e_equal : return "=" ; + case e_ne : return "!=" ; + case e_nequal : return "<>" ; + case e_gte : return ">=" ; + case e_gt : return ">" ; + case e_and : return "and" ; + case e_or : return "or" ; + case e_xor : return "xor" ; + case e_nand : return "nand"; + case e_nor : return "nor" ; + case e_xnor : return "xnor"; + default : return "N/A" ; + } + } + + struct base_operation_t + { + base_operation_t(const operator_type t, const unsigned int& np) + : type(t) + , num_params(np) + {} + + operator_type type; + unsigned int num_params; + }; + + namespace loop_unroll + { + const unsigned int global_loop_batch_size = + #ifndef exprtk_disable_superscalar_unroll + 16; + #else + 4; + #endif + + struct details + { + explicit details(const std::size_t& vsize, + const unsigned int loop_batch_size = global_loop_batch_size) + : batch_size(loop_batch_size ) + , remainder (vsize % batch_size) + , upper_bound(static_cast(vsize - (remainder ? loop_batch_size : 0))) + {} + + unsigned int batch_size; + int remainder; + int upper_bound; + }; + } + + #ifdef exprtk_enable_debugging + inline void dump_ptr(const std::string& s, const void* ptr, const std::size_t size = 0) + { + if (size) + exprtk_debug(("%s - addr: %p size: %d\n", + s.c_str(), + ptr, + static_cast(size))); + else + exprtk_debug(("%s - addr: %p\n", s.c_str(), ptr)); + } + + template + inline void dump_vector(const std::string& vec_name, const T* data, const std::size_t size) + { + printf("----- %s (%p) -----\n", + vec_name.c_str(), + static_cast(data)); + printf("[ "); + for (std::size_t i = 0; i < size; ++i) + { + printf("%8.3f\t", data[i]); + } + printf(" ]\n"); + printf("---------------------\n"); + } + #else + inline void dump_ptr(const std::string&, const void*) {} + inline void dump_ptr(const std::string&, const void*, const std::size_t) {} + template + inline void dump_vector(const std::string&, const T*, const std::size_t) {} + #endif + + template + class vec_data_store + { + public: + + typedef vec_data_store type; + typedef T* data_t; + + private: + + struct control_block + { + control_block() + : ref_count(1) + , size (0) + , data (0) + , destruct (true) + {} + + explicit control_block(const std::size_t& dsize) + : ref_count(1 ) + , size (dsize) + , data (0 ) + , destruct (true ) + { create_data(); } + + control_block(const std::size_t& dsize, data_t dptr, bool dstrct = false) + : ref_count(1 ) + , size (dsize ) + , data (dptr ) + , destruct (dstrct) + {} + + ~control_block() + { + if (data && destruct && (0 == ref_count)) + { + dump_ptr("~vec_data_store::control_block() data",data); + delete[] data; + data = reinterpret_cast(0); + } + } + + static inline control_block* create(const std::size_t& dsize, data_t data_ptr = data_t(0), bool dstrct = false) + { + if (dsize) + { + if (0 == data_ptr) + return (new control_block(dsize)); + else + return (new control_block(dsize, data_ptr, dstrct)); + } + else + return (new control_block); + } + + static inline void destroy(control_block*& cntrl_blck) + { + if (cntrl_blck) + { + if ( + (0 != cntrl_blck->ref_count) && + (0 == --cntrl_blck->ref_count) + ) + { + delete cntrl_blck; + } + + cntrl_blck = 0; + } + } + + std::size_t ref_count; + std::size_t size; + data_t data; + bool destruct; + + private: + + control_block(const control_block&) exprtk_delete; + control_block& operator=(const control_block&) exprtk_delete; + + inline void create_data() + { + destruct = true; + data = new T[size]; + std::fill_n(data, size, T(0)); + dump_ptr("control_block::create_data() - data", data, size); + } + }; + + public: + + vec_data_store() + : control_block_(control_block::create(0)) + {} + + explicit vec_data_store(const std::size_t& size) + : control_block_(control_block::create(size,reinterpret_cast(0),true)) + {} + + vec_data_store(const std::size_t& size, data_t data, bool dstrct = false) + : control_block_(control_block::create(size, data, dstrct)) + {} + + vec_data_store(const type& vds) + { + control_block_ = vds.control_block_; + control_block_->ref_count++; + } + + ~vec_data_store() + { + control_block::destroy(control_block_); + } + + type& operator=(const type& vds) + { + if (this != &vds) + { + const std::size_t final_size = min_size(control_block_, vds.control_block_); + + vds.control_block_->size = final_size; + control_block_->size = final_size; + + if (control_block_->destruct || (0 == control_block_->data)) + { + control_block::destroy(control_block_); + + control_block_ = vds.control_block_; + control_block_->ref_count++; + } + } + + return (*this); + } + + inline data_t data() + { + return control_block_->data; + } + + inline data_t data() const + { + return control_block_->data; + } + + inline std::size_t size() const + { + return control_block_->size; + } + + inline data_t& ref() + { + return control_block_->data; + } + + inline void dump() const + { + #ifdef exprtk_enable_debugging + exprtk_debug(("size: %d\taddress:%p\tdestruct:%c\n", + size(), + data(), + (control_block_->destruct ? 'T' : 'F'))); + + for (std::size_t i = 0; i < size(); ++i) + { + if (5 == i) + exprtk_debug(("\n")); + + exprtk_debug(("%15.10f ", data()[i])); + } + exprtk_debug(("\n")); + #endif + } + + static inline void match_sizes(type& vds0, type& vds1) + { + const std::size_t size = min_size(vds0.control_block_,vds1.control_block_); + vds0.control_block_->size = size; + vds1.control_block_->size = size; + } + + private: + + static inline std::size_t min_size(const control_block* cb0, const control_block* cb1) + { + const std::size_t size0 = cb0->size; + const std::size_t size1 = cb1->size; + + if (size0 && size1) + return std::min(size0,size1); + else + return (size0) ? size0 : size1; + } + + control_block* control_block_; + }; + + namespace numeric + { + namespace details + { + template + inline T process_impl(const operator_type operation, const T arg) + { + switch (operation) + { + case e_abs : return numeric::abs (arg); + case e_acos : return numeric::acos (arg); + case e_acosh : return numeric::acosh(arg); + case e_asin : return numeric::asin (arg); + case e_asinh : return numeric::asinh(arg); + case e_atan : return numeric::atan (arg); + case e_atanh : return numeric::atanh(arg); + case e_ceil : return numeric::ceil (arg); + case e_cos : return numeric::cos (arg); + case e_cosh : return numeric::cosh (arg); + case e_exp : return numeric::exp (arg); + case e_expm1 : return numeric::expm1(arg); + case e_floor : return numeric::floor(arg); + case e_log : return numeric::log (arg); + case e_log10 : return numeric::log10(arg); + case e_log2 : return numeric::log2 (arg); + case e_log1p : return numeric::log1p(arg); + case e_neg : return numeric::neg (arg); + case e_pos : return numeric::pos (arg); + case e_round : return numeric::round(arg); + case e_sin : return numeric::sin (arg); + case e_sinc : return numeric::sinc (arg); + case e_sinh : return numeric::sinh (arg); + case e_sqrt : return numeric::sqrt (arg); + case e_tan : return numeric::tan (arg); + case e_tanh : return numeric::tanh (arg); + case e_cot : return numeric::cot (arg); + case e_sec : return numeric::sec (arg); + case e_csc : return numeric::csc (arg); + case e_r2d : return numeric::r2d (arg); + case e_d2r : return numeric::d2r (arg); + case e_d2g : return numeric::d2g (arg); + case e_g2d : return numeric::g2d (arg); + case e_notl : return numeric::notl (arg); + case e_sgn : return numeric::sgn (arg); + case e_erf : return numeric::erf (arg); + case e_erfc : return numeric::erfc (arg); + case e_ncdf : return numeric::ncdf (arg); + case e_frac : return numeric::frac (arg); + case e_trunc : return numeric::trunc(arg); + + default : exprtk_debug(("numeric::details::process_impl - Invalid unary operation.\n")); + return std::numeric_limits::quiet_NaN(); + } + } + + template + inline T process_impl(const operator_type operation, const T arg0, const T arg1) + { + switch (operation) + { + case e_add : return (arg0 + arg1); + case e_sub : return (arg0 - arg1); + case e_mul : return (arg0 * arg1); + case e_div : return (arg0 / arg1); + case e_mod : return modulus(arg0,arg1); + case e_pow : return pow(arg0,arg1); + case e_atan2 : return atan2(arg0,arg1); + case e_min : return std::min(arg0,arg1); + case e_max : return std::max(arg0,arg1); + case e_logn : return logn(arg0,arg1); + case e_lt : return (arg0 < arg1) ? T(1) : T(0); + case e_lte : return (arg0 <= arg1) ? T(1) : T(0); + case e_eq : return std::equal_to()(arg0,arg1) ? T(1) : T(0); + case e_ne : return std::not_equal_to()(arg0,arg1) ? T(1) : T(0); + case e_gte : return (arg0 >= arg1) ? T(1) : T(0); + case e_gt : return (arg0 > arg1) ? T(1) : T(0); + case e_and : return and_opr (arg0,arg1); + case e_nand : return nand_opr(arg0,arg1); + case e_or : return or_opr (arg0,arg1); + case e_nor : return nor_opr (arg0,arg1); + case e_xor : return xor_opr (arg0,arg1); + case e_xnor : return xnor_opr(arg0,arg1); + case e_root : return root (arg0,arg1); + case e_roundn : return roundn (arg0,arg1); + case e_equal : return equal (arg0,arg1); + case e_nequal : return nequal (arg0,arg1); + case e_hypot : return hypot (arg0,arg1); + case e_shr : return shr (arg0,arg1); + case e_shl : return shl (arg0,arg1); + + default : exprtk_debug(("numeric::details::process_impl - Invalid binary operation.\n")); + return std::numeric_limits::quiet_NaN(); + } + } + + template + inline T process_impl(const operator_type operation, const T arg0, const T arg1, int_type_tag) + { + switch (operation) + { + case e_add : return (arg0 + arg1); + case e_sub : return (arg0 - arg1); + case e_mul : return (arg0 * arg1); + case e_div : return (arg0 / arg1); + case e_mod : return arg0 % arg1; + case e_pow : return pow(arg0,arg1); + case e_min : return std::min(arg0,arg1); + case e_max : return std::max(arg0,arg1); + case e_logn : return logn(arg0,arg1); + case e_lt : return (arg0 < arg1) ? T(1) : T(0); + case e_lte : return (arg0 <= arg1) ? T(1) : T(0); + case e_eq : return (arg0 == arg1) ? T(1) : T(0); + case e_ne : return (arg0 != arg1) ? T(1) : T(0); + case e_gte : return (arg0 >= arg1) ? T(1) : T(0); + case e_gt : return (arg0 > arg1) ? T(1) : T(0); + case e_and : return ((arg0 != T(0)) && (arg1 != T(0))) ? T(1) : T(0); + case e_nand : return ((arg0 != T(0)) && (arg1 != T(0))) ? T(0) : T(1); + case e_or : return ((arg0 != T(0)) || (arg1 != T(0))) ? T(1) : T(0); + case e_nor : return ((arg0 != T(0)) || (arg1 != T(0))) ? T(0) : T(1); + case e_xor : return arg0 ^ arg1; + case e_xnor : return !(arg0 ^ arg1); + case e_root : return root(arg0,arg1); + case e_equal : return arg0 == arg1; + case e_nequal : return arg0 != arg1; + case e_hypot : return hypot(arg0,arg1); + case e_shr : return arg0 >> arg1; + case e_shl : return arg0 << arg1; + + default : exprtk_debug(("numeric::details::process_impl - Invalid binary operation.\n")); + return std::numeric_limits::quiet_NaN(); + } + } + } + + template + inline T process(const operator_type operation, const T arg) + { + return exprtk::details::numeric::details::process_impl(operation,arg); + } + + template + inline T process(const operator_type operation, const T arg0, const T arg1) + { + return exprtk::details::numeric::details::process_impl(operation, arg0, arg1); + } + } + + template + struct node_collector_interface + { + typedef Node* node_ptr_t; + typedef Node** node_pp_t; + typedef std::vector noderef_list_t; + + virtual ~node_collector_interface() + {} + + virtual void collect_nodes(noderef_list_t&) + {} + }; + + template + struct node_depth_base; + + template + class expression_node : public node_collector_interface > + , public node_depth_base > + { + public: + + enum node_type + { + e_none , e_null , e_constant , e_unary , + e_binary , e_binary_ext , e_trinary , e_quaternary , + e_vararg , e_conditional , e_while , e_repeat , + e_for , e_switch , e_mswitch , e_return , + e_retenv , e_variable , e_stringvar , e_stringconst , + e_stringvarrng , e_cstringvarrng , e_strgenrange , e_strconcat , + e_stringvarsize , e_strswap , e_stringsize , e_stringvararg , + e_function , e_vafunction , e_genfunction , e_strfunction , + e_strcondition , e_strccondition , e_add , e_sub , + e_mul , e_div , e_mod , e_pow , + e_lt , e_lte , e_gt , e_gte , + e_eq , e_ne , e_and , e_nand , + e_or , e_nor , e_xor , e_xnor , + e_in , e_like , e_ilike , e_inranges , + e_ipow , e_ipowinv , e_abs , e_acos , + e_acosh , e_asin , e_asinh , e_atan , + e_atanh , e_ceil , e_cos , e_cosh , + e_exp , e_expm1 , e_floor , e_log , + e_log10 , e_log2 , e_log1p , e_neg , + e_pos , e_round , e_sin , e_sinc , + e_sinh , e_sqrt , e_tan , e_tanh , + e_cot , e_sec , e_csc , e_r2d , + e_d2r , e_d2g , e_g2d , e_notl , + e_sgn , e_erf , e_erfc , e_ncdf , + e_frac , e_trunc , e_uvouv , e_vov , + e_cov , e_voc , e_vob , e_bov , + e_cob , e_boc , e_vovov , e_vovoc , + e_vocov , e_covov , e_covoc , e_vovovov , + e_vovovoc , e_vovocov , e_vocovov , e_covovov , + e_covocov , e_vocovoc , e_covovoc , e_vococov , + e_sf3ext , e_sf4ext , e_nulleq , e_strass , + e_vector , e_vecsize , e_vecelem , e_veccelem , + e_vecelemrtc , e_veccelemrtc , e_rbvecelem , e_rbvecelemrtc , + e_rbveccelem , e_rbveccelemrtc , e_vecdefass , e_vecvalass , + e_vecvecass , e_vecopvalass , e_vecopvecass , e_vecfunc , + e_vecvecswap , e_vecvecineq , e_vecvalineq , e_valvecineq , + e_vecvecarith , e_vecvalarith , e_valvecarith , e_vecunaryop , + e_vecondition , e_break , e_continue , e_swap + }; + + typedef T value_type; + typedef expression_node* expression_ptr; + typedef node_collector_interface > nci_t; + typedef typename nci_t::noderef_list_t noderef_list_t; + typedef node_depth_base > ndb_t; + + virtual ~expression_node() + {} + + inline virtual T value() const + { + return std::numeric_limits::quiet_NaN(); + } + + inline virtual expression_node* branch(const std::size_t& index = 0) const + { + return reinterpret_cast(index * 0); + } + + inline virtual node_type type() const + { + return e_none; + } + + inline virtual bool valid() const + { + return true; + } + }; // class expression_node + + template + inline bool is_generally_string_node(const expression_node* node); + + inline bool is_true(const double v) + { + return std::not_equal_to()(0.0,v); + } + + inline bool is_true(const long double v) + { + return std::not_equal_to()(0.0L,v); + } + + inline bool is_true(const float v) + { + return std::not_equal_to()(0.0f,v); + } + + template + inline bool is_true(const expression_node* node) + { + return std::not_equal_to()(T(0),node->value()); + } + + template + inline bool is_true(const std::pair*,bool>& node) + { + return std::not_equal_to()(T(0),node.first->value()); + } + + template + inline bool is_false(const expression_node* node) + { + return std::equal_to()(T(0),node->value()); + } + + template + inline bool is_false(const std::pair*,bool>& node) + { + return std::equal_to()(T(0),node.first->value()); + } + + template + inline bool is_literal_node(const expression_node* node) + { + return node && (details::expression_node::e_constant == node->type()); + } + + template + inline bool is_unary_node(const expression_node* node) + { + return node && (details::expression_node::e_unary == node->type()); + } + + template + inline bool is_neg_unary_node(const expression_node* node) + { + return node && (details::expression_node::e_neg == node->type()); + } + + template + inline bool is_binary_node(const expression_node* node) + { + return node && (details::expression_node::e_binary == node->type()); + } + + template + inline bool is_variable_node(const expression_node* node) + { + return node && (details::expression_node::e_variable == node->type()); + } + + template + inline bool is_ivariable_node(const expression_node* node) + { + return node && + ( + details::expression_node::e_variable == node->type() || + details::expression_node::e_vecelem == node->type() || + details::expression_node::e_veccelem == node->type() || + details::expression_node::e_vecelemrtc == node->type() || + details::expression_node::e_veccelemrtc == node->type() || + details::expression_node::e_rbvecelem == node->type() || + details::expression_node::e_rbveccelem == node->type() || + details::expression_node::e_rbvecelemrtc == node->type() || + details::expression_node::e_rbveccelemrtc == node->type() + ); + } + + template + inline bool is_vector_elem_node(const expression_node* node) + { + return node && (details::expression_node::e_vecelem == node->type()); + } + + template + inline bool is_vector_celem_node(const expression_node* node) + { + return node && (details::expression_node::e_veccelem == node->type()); + } + + template + inline bool is_vector_elem_rtc_node(const expression_node* node) + { + return node && (details::expression_node::e_vecelemrtc == node->type()); + } + + template + inline bool is_vector_celem_rtc_node(const expression_node* node) + { + return node && (details::expression_node::e_veccelemrtc == node->type()); + } + + template + inline bool is_rebasevector_elem_node(const expression_node* node) + { + return node && (details::expression_node::e_rbvecelem == node->type()); + } + + template + inline bool is_rebasevector_elem_rtc_node(const expression_node* node) + { + return node && (details::expression_node::e_rbvecelemrtc == node->type()); + } + + template + inline bool is_rebasevector_celem_rtc_node(const expression_node* node) + { + return node && (details::expression_node::e_rbveccelemrtc == node->type()); + } + + template + inline bool is_rebasevector_celem_node(const expression_node* node) + { + return node && (details::expression_node::e_rbveccelem == node->type()); + } + + template + inline bool is_vector_node(const expression_node* node) + { + return node && (details::expression_node::e_vector == node->type()); + } + + template + inline bool is_ivector_node(const expression_node* node) + { + if (node) + { + switch (node->type()) + { + case details::expression_node::e_vector : + case details::expression_node::e_vecvalass : + case details::expression_node::e_vecvecass : + case details::expression_node::e_vecopvalass : + case details::expression_node::e_vecopvecass : + case details::expression_node::e_vecvecswap : + case details::expression_node::e_vecvecarith : + case details::expression_node::e_vecvalarith : + case details::expression_node::e_valvecarith : + case details::expression_node::e_vecunaryop : + case details::expression_node::e_vecondition : return true; + default : return false; + } + } + else + return false; + } + + template + inline bool is_constant_node(const expression_node* node) + { + return node && + ( + details::expression_node::e_constant == node->type() || + details::expression_node::e_stringconst == node->type() + ); + } + + template + inline bool is_null_node(const expression_node* node) + { + return node && (details::expression_node::e_null == node->type()); + } + + template + inline bool is_break_node(const expression_node* node) + { + return node && (details::expression_node::e_break == node->type()); + } + + template + inline bool is_continue_node(const expression_node* node) + { + return node && (details::expression_node::e_continue == node->type()); + } + + template + inline bool is_swap_node(const expression_node* node) + { + return node && (details::expression_node::e_swap == node->type()); + } + + template + inline bool is_function(const expression_node* node) + { + return node && (details::expression_node::e_function == node->type()); + } + + template + inline bool is_return_node(const expression_node* node) + { + return node && (details::expression_node::e_return == node->type()); + } + + template class unary_node; + + template + inline bool is_negate_node(const expression_node* node) + { + if (node && is_unary_node(node)) + { + return (details::e_neg == static_cast*>(node)->operation()); + } + else + return false; + } + + template + inline bool branch_deletable(const expression_node* node) + { + return (0 != node) && + !is_variable_node(node) && + !is_string_node (node) ; + } + + template + inline bool all_nodes_valid(expression_node* const (&b)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + if (0 == b[i]) return false; + } + + return true; + } + + template class Sequence> + inline bool all_nodes_valid(const Sequence*,Allocator>& b) + { + for (std::size_t i = 0; i < b.size(); ++i) + { + if (0 == b[i]) return false; + } + + return true; + } + + template + inline bool all_nodes_variables(expression_node* const (&b)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + if (0 == b[i]) + return false; + else if (!is_variable_node(b[i])) + return false; + } + + return true; + } + + template class Sequence> + inline bool all_nodes_variables(const Sequence*,Allocator>& b) + { + for (std::size_t i = 0; i < b.size(); ++i) + { + if (0 == b[i]) + return false; + else if (!is_variable_node(b[i])) + return false; + } + + return true; + } + + template + class node_collection_destructor + { + public: + + typedef node_collector_interface nci_t; + + typedef typename nci_t::node_ptr_t node_ptr_t; + typedef typename nci_t::node_pp_t node_pp_t; + typedef typename nci_t::noderef_list_t noderef_list_t; + + static void delete_nodes(node_ptr_t& root) + { + std::vector node_delete_list; + node_delete_list.reserve(1000); + + collect_nodes(root, node_delete_list); + + for (std::size_t i = 0; i < node_delete_list.size(); ++i) + { + node_ptr_t& node = *node_delete_list[i]; + exprtk_debug(("ncd::delete_nodes() - deleting: %p\n", reinterpret_cast(node))); + delete node; + node = reinterpret_cast(0); + } + } + + private: + + static void collect_nodes(node_ptr_t& root, noderef_list_t& node_delete_list) + { + std::deque node_list; + node_list.push_back(root); + node_delete_list.push_back(&root); + + noderef_list_t child_node_delete_list; + child_node_delete_list.reserve(1000); + + while (!node_list.empty()) + { + node_list.front()->collect_nodes(child_node_delete_list); + + if (!child_node_delete_list.empty()) + { + for (std::size_t i = 0; i < child_node_delete_list.size(); ++i) + { + node_pp_t& node = child_node_delete_list[i]; + + if (0 == (*node)) + { + exprtk_debug(("ncd::collect_nodes() - null node encountered.\n")); + } + + node_list.push_back(*node); + } + + node_delete_list.insert( + node_delete_list.end(), + child_node_delete_list.begin(), child_node_delete_list.end()); + + child_node_delete_list.clear(); + } + + node_list.pop_front(); + } + + std::reverse(node_delete_list.begin(), node_delete_list.end()); + } + }; + + template + inline void free_all_nodes(NodeAllocator& node_allocator, expression_node* (&b)[N]) + { + for (std::size_t i = 0; i < N; ++i) + { + free_node(node_allocator,b[i]); + } + } + + template class Sequence> + inline void free_all_nodes(NodeAllocator& node_allocator, Sequence*,Allocator>& b) + { + for (std::size_t i = 0; i < b.size(); ++i) + { + free_node(node_allocator,b[i]); + } + + b.clear(); + } + + template + inline void free_node(NodeAllocator&, expression_node*& node) + { + if ((0 == node) || is_variable_node(node) || is_string_node(node)) + { + return; + } + + node_collection_destructor > + ::delete_nodes(node); + } + + template + inline void destroy_node(expression_node*& node) + { + if (0 != node) + { + node_collection_destructor > + ::delete_nodes(node); + } + } + + template + struct node_depth_base + { + typedef Node* node_ptr_t; + typedef std::pair nb_pair_t; + + node_depth_base() + : depth_set(false) + , depth(0) + {} + + virtual ~node_depth_base() + {} + + virtual std::size_t node_depth() const { return 1; } + + std::size_t compute_node_depth(const Node* const& node) const + { + if (!depth_set) + { + depth = 1 + (node ? node->node_depth() : 0); + depth_set = true; + } + + return depth; + } + + std::size_t compute_node_depth(const nb_pair_t& branch) const + { + if (!depth_set) + { + depth = 1 + (branch.first ? branch.first->node_depth() : 0); + depth_set = true; + } + + return depth; + } + + template + std::size_t compute_node_depth(const nb_pair_t (&branch)[N]) const + { + if (!depth_set) + { + depth = 0; + + for (std::size_t i = 0; i < N; ++i) + { + if (branch[i].first) + { + depth = std::max(depth,branch[i].first->node_depth()); + } + } + + depth += 1; + depth_set = true; + } + + return depth; + } + + template + std::size_t max_node_depth(const BranchType& n0, const BranchType& n1) const + { + return std::max(compute_node_depth(n0), compute_node_depth(n1)); + } + + template + std::size_t max_node_depth(const BranchType& n0, const BranchType& n1, const BranchType& n2) const + { + return std::max(compute_node_depth(n0), + std::max(compute_node_depth(n1), compute_node_depth(n2))); + } + + template + std::size_t max_node_depth(const BranchType& n0, const BranchType& n1, + const BranchType& n2, const BranchType& n3) const + { + return std::max( + std::max(compute_node_depth(n0), compute_node_depth(n1)), + std::max(compute_node_depth(n2), compute_node_depth(n3))); + } + + template + std::size_t compute_node_depth(const BranchType& n0, const BranchType& n1) const + { + if (!depth_set) + { + depth = 1 + max_node_depth(n0, n1); + depth_set = true; + } + + return depth; + } + + template + std::size_t compute_node_depth(const BranchType& n0, const BranchType& n1, + const BranchType& n2) const + { + if (!depth_set) + { + depth = 1 + max_node_depth(n0, n1, n2); + depth_set = true; + } + + return depth; + } + + template + std::size_t compute_node_depth(const BranchType& n0, const BranchType& n1, + const BranchType& n2, const BranchType& n3) const + { + if (!depth_set) + { + depth = 1 + max_node_depth(n0, n1, n2, n3); + depth_set = true; + } + + return depth; + } + + template class Sequence> + std::size_t compute_node_depth(const Sequence& branch_list) const + { + if (!depth_set) + { + for (std::size_t i = 0; i < branch_list.size(); ++i) + { + if (branch_list[i]) + { + depth = std::max(depth, compute_node_depth(branch_list[i])); + } + } + depth_set = true; + } + + return depth; + } + + template class Sequence> + std::size_t compute_node_depth(const Sequence& branch_list) const + { + if (!depth_set) + { + for (std::size_t i = 0; i < branch_list.size(); ++i) + { + if (branch_list[i].first) + { + depth = std::max(depth, compute_node_depth(branch_list[i].first)); + } + } + + depth_set = true; + } + + return depth; + } + + mutable bool depth_set; + mutable std::size_t depth; + + template + void collect(node_ptr_t const& node, + const bool deletable, + NodeSequence& delete_node_list) const + { + if ((0 != node) && deletable) + { + delete_node_list.push_back(const_cast(&node)); + } + } + + template + void collect(const nb_pair_t& branch, + NodeSequence& delete_node_list) const + { + collect(branch.first, branch.second, delete_node_list); + } + + template + void collect(Node*& node, + NodeSequence& delete_node_list) const + { + collect(node, branch_deletable(node), delete_node_list); + } + + template + void collect(const nb_pair_t(&branch)[N], + NodeSequence& delete_node_list) const + { + for (std::size_t i = 0; i < N; ++i) + { + collect(branch[i].first, branch[i].second, delete_node_list); + } + } + + template class Sequence, + typename NodeSequence> + void collect(const Sequence& branch, + NodeSequence& delete_node_list) const + { + for (std::size_t i = 0; i < branch.size(); ++i) + { + collect(branch[i].first, branch[i].second, delete_node_list); + } + } + + template class Sequence, + typename NodeSequence> + void collect(const Sequence& branch_list, + NodeSequence& delete_node_list) const + { + for (std::size_t i = 0; i < branch_list.size(); ++i) + { + collect(branch_list[i], branch_deletable(branch_list[i]), delete_node_list); + } + } + + template class Sequence, + typename NodeSequence> + void collect(const Sequence& branch_list, + const Sequence& branch_deletable_list, + NodeSequence& delete_node_list) const + { + for (std::size_t i = 0; i < branch_list.size(); ++i) + { + collect(branch_list[i], branch_deletable_list[i], delete_node_list); + } + } + }; + + template + class vector_holder + { + private: + + typedef Type value_type; + typedef value_type* value_ptr; + typedef const value_ptr const_value_ptr; + typedef vector_holder vector_holder_t; + + class vector_holder_base + { + public: + + virtual ~vector_holder_base() + {} + + inline value_ptr operator[](const std::size_t& index) const + { + return value_at(index); + } + + inline std::size_t size() const + { + return vector_size(); + } + + inline std::size_t base_size() const + { + return vector_base_size(); + } + + inline value_ptr data() const + { + return value_at(0); + } + + virtual inline bool rebaseable() const + { + return false; + } + + virtual void set_ref(value_ptr*) + {} + + virtual void remove_ref(value_ptr*) + {} + + virtual vector_view* rebaseable_instance() + { + return reinterpret_cast*>(0); + } + + protected: + + virtual value_ptr value_at(const std::size_t&) const = 0; + virtual std::size_t vector_size() const = 0; + virtual std::size_t vector_base_size() const = 0; + }; + + class array_vector_impl exprtk_final : public vector_holder_base + { + public: + + array_vector_impl(const Type* vec, const std::size_t& vec_size) + : vec_(vec) + , size_(vec_size) + {} + + protected: + + value_ptr value_at(const std::size_t& index) const exprtk_override + { + assert(index < size_); + return const_cast(vec_ + index); + } + + std::size_t vector_size() const exprtk_override + { + return size_; + } + + std::size_t vector_base_size() const exprtk_override + { + return vector_size(); + } + + private: + + array_vector_impl(const array_vector_impl&) exprtk_delete; + array_vector_impl& operator=(const array_vector_impl&) exprtk_delete; + + const Type* vec_; + const std::size_t size_; + }; + + template class Sequence> + class sequence_vector_impl exprtk_final : public vector_holder_base + { + public: + + typedef Sequence sequence_t; + + explicit sequence_vector_impl(sequence_t& seq) + : sequence_(seq) + {} + + protected: + + value_ptr value_at(const std::size_t& index) const exprtk_override + { + assert(index < sequence_.size()); + return (&sequence_[index]); + } + + std::size_t vector_size() const exprtk_override + { + return sequence_.size(); + } + + std::size_t vector_base_size() const exprtk_override + { + return vector_size(); + } + + private: + + sequence_vector_impl(const sequence_vector_impl&) exprtk_delete; + sequence_vector_impl& operator=(const sequence_vector_impl&) exprtk_delete; + + sequence_t& sequence_; + }; + + class vector_view_impl exprtk_final : public vector_holder_base + { + public: + + typedef exprtk::vector_view vector_view_t; + + vector_view_impl(vector_view_t& vec_view) + : vec_view_(vec_view) + { + assert(vec_view_.size() > 0); + } + + void set_ref(value_ptr* ref) exprtk_override + { + vec_view_.set_ref(ref); + } + + void remove_ref(value_ptr* ref) exprtk_override + { + vec_view_.remove_ref(ref); + } + + bool rebaseable() const exprtk_override + { + return true; + } + + vector_view* rebaseable_instance() exprtk_override + { + return &vec_view_; + } + + protected: + + value_ptr value_at(const std::size_t& index) const exprtk_override + { + assert(index < vec_view_.size()); + return (&vec_view_[index]); + } + + std::size_t vector_size() const exprtk_override + { + return vec_view_.size(); + } + + std::size_t vector_base_size() const exprtk_override + { + return vec_view_.base_size(); + } + + private: + + vector_view_impl(const vector_view_impl&) exprtk_delete; + vector_view_impl& operator=(const vector_view_impl&) exprtk_delete; + + vector_view_t& vec_view_; + }; + + class resizable_vector_impl exprtk_final : public vector_holder_base + { + public: + + resizable_vector_impl(vector_holder& vec_view_holder, + const Type* vec, + const std::size_t& vec_size) + : vec_(vec) + , size_(vec_size) + , vec_view_holder_(*vec_view_holder.rebaseable_instance()) + { + assert(vec_view_holder.rebaseable_instance()); + assert(size_ <= vector_base_size()); + } + + virtual ~resizable_vector_impl() + {} + + protected: + + value_ptr value_at(const std::size_t& index) const exprtk_override + { + assert(index < vector_size()); + return const_cast(vec_ + index); + } + + std::size_t vector_size() const exprtk_override + { + return vec_view_holder_.size(); + } + + std::size_t vector_base_size() const exprtk_override + { + return vec_view_holder_.base_size(); + } + + bool rebaseable() const exprtk_override + { + return true; + } + + virtual vector_view* rebaseable_instance() exprtk_override + { + return &vec_view_holder_; + } + + private: + + resizable_vector_impl(const resizable_vector_impl&) exprtk_delete; + resizable_vector_impl& operator=(const resizable_vector_impl&) exprtk_delete; + + const Type* vec_; + const std::size_t size_; + vector_view& vec_view_holder_; + }; + + public: + + typedef typename details::vec_data_store vds_t; + + vector_holder(Type* vec, const std::size_t& vec_size) + : vector_holder_base_(new(buffer)array_vector_impl(vec,vec_size)) + {} + + explicit vector_holder(const vds_t& vds) + : vector_holder_base_(new(buffer)array_vector_impl(vds.data(),vds.size())) + {} + + template + explicit vector_holder(std::vector& vec) + : vector_holder_base_(new(buffer)sequence_vector_impl(vec)) + {} + + explicit vector_holder(exprtk::vector_view& vec) + : vector_holder_base_(new(buffer)vector_view_impl(vec)) + {} + + explicit vector_holder(vector_holder_t& vec_holder, const vds_t& vds) + : vector_holder_base_(new(buffer)resizable_vector_impl(vec_holder, vds.data(), vds.size())) + {} + + inline value_ptr operator[](const std::size_t& index) const + { + return (*vector_holder_base_)[index]; + } + + inline std::size_t size() const + { + return vector_holder_base_->size(); + } + + inline std::size_t base_size() const + { + return vector_holder_base_->base_size(); + } + + inline value_ptr data() const + { + return vector_holder_base_->data(); + } + + void set_ref(value_ptr* ref) + { + if (rebaseable()) + { + vector_holder_base_->set_ref(ref); + } + } + + void remove_ref(value_ptr* ref) + { + if (rebaseable()) + { + vector_holder_base_->remove_ref(ref); + } + } + + bool rebaseable() const + { + return vector_holder_base_->rebaseable(); + } + + vector_view* rebaseable_instance() + { + return vector_holder_base_->rebaseable_instance(); + } + + private: + + vector_holder(const vector_holder&) exprtk_delete; + vector_holder& operator=(const vector_holder&) exprtk_delete; + + mutable vector_holder_base* vector_holder_base_; + uchar_t buffer[64]; + }; + + template + class null_node exprtk_final : public expression_node + { + public: + + inline T value() const exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_null; + } + }; + + template + inline void construct_branch_pair(std::pair*,bool> (&branch)[N], + expression_node* b, + const std::size_t& index) + { + if (b && (index < N)) + { + branch[index] = std::make_pair(b,branch_deletable(b)); + } + } + + template + inline void construct_branch_pair(std::pair*,bool>& branch, expression_node* b) + { + if (b) + { + branch = std::make_pair(b,branch_deletable(b)); + } + } + + template + inline void init_branches(std::pair*,bool> (&branch)[N], + expression_node* b0, + expression_node* b1 = reinterpret_cast*>(0), + expression_node* b2 = reinterpret_cast*>(0), + expression_node* b3 = reinterpret_cast*>(0), + expression_node* b4 = reinterpret_cast*>(0), + expression_node* b5 = reinterpret_cast*>(0), + expression_node* b6 = reinterpret_cast*>(0), + expression_node* b7 = reinterpret_cast*>(0), + expression_node* b8 = reinterpret_cast*>(0), + expression_node* b9 = reinterpret_cast*>(0)) + { + construct_branch_pair(branch, b0, 0); + construct_branch_pair(branch, b1, 1); + construct_branch_pair(branch, b2, 2); + construct_branch_pair(branch, b3, 3); + construct_branch_pair(branch, b4, 4); + construct_branch_pair(branch, b5, 5); + construct_branch_pair(branch, b6, 6); + construct_branch_pair(branch, b7, 7); + construct_branch_pair(branch, b8, 8); + construct_branch_pair(branch, b9, 9); + } + + template + class null_eq_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + explicit null_eq_node(expression_ptr branch, const bool equality = true) + : equality_(equality) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + const T v = branch_.first->value(); + const bool result = details::numeric::is_nan(v); + + if (result) + return equality_ ? T(1) : T(0); + else + return equality_ ? T(0) : T(1); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_nulleq; + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + inline bool valid() const exprtk_override + { + return branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + bool equality_; + branch_t branch_; + }; + + template + class literal_node exprtk_final : public expression_node + { + public: + + explicit literal_node(const T& v) + : value_(v) + {} + + inline T value() const exprtk_override + { + return value_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_constant; + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return reinterpret_cast*>(0); + } + + private: + + literal_node(const literal_node&) exprtk_delete; + literal_node& operator=(const literal_node&) exprtk_delete; + + const T value_; + }; + + template + struct range_pack; + + template + struct range_data_type; + + template + class range_interface + { + public: + + typedef range_pack range_t; + + virtual ~range_interface() + {} + + virtual range_t& range_ref() = 0; + + virtual const range_t& range_ref() const = 0; + }; + + #ifndef exprtk_disable_string_capabilities + template + class string_base_node + { + public: + + typedef range_data_type range_data_type_t; + + virtual ~string_base_node() + {} + + virtual std::string str () const = 0; + + virtual char_cptr base() const = 0; + + virtual std::size_t size() const = 0; + }; + + template + class string_literal_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef range_pack range_t; + + explicit string_literal_node(const std::string& v) + : value_(v) + { + rp_.n0_c = std::make_pair(true, 0); + rp_.n1_c = std::make_pair(true, v.size()); + rp_.cache.first = rp_.n0_c.second; + rp_.cache.second = rp_.n1_c.second; + } + + inline T value() const exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringconst; + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return reinterpret_cast*>(0); + } + + std::string str() const exprtk_override + { + return value_; + } + + char_cptr base() const exprtk_override + { + return value_.data(); + } + + std::size_t size() const exprtk_override + { + return value_.size(); + } + + range_t& range_ref() exprtk_override + { + return rp_; + } + + const range_t& range_ref() const exprtk_override + { + return rp_; + } + + private: + + string_literal_node(const string_literal_node&) exprtk_delete; + string_literal_node& operator=(const string_literal_node&) exprtk_delete; + + const std::string value_; + range_t rp_; + }; + #endif + + template + class unary_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + unary_node(const operator_type& opr, expression_ptr branch) + : operation_(opr) + { + construct_branch_pair(branch_,branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return numeric::process + (operation_,branch_.first->value()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_unary; + } + + inline operator_type operation() + { + return operation_; + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline void release() + { + branch_.second = false; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_final + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + operator_type operation_; + branch_t branch_; + }; + + template + class binary_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + binary_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : operation_(opr) + { + init_branches<2>(branch_, branch0, branch1); + assert(valid()); + } + + inline T value() const exprtk_override + { + return numeric::process + ( + operation_, + branch_[0].first->value(), + branch_[1].first->value() + ); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_binary; + } + + inline operator_type operation() + { + return operation_; + } + + inline expression_node* branch(const std::size_t& index = 0) const exprtk_override + { + assert(index < 2); + return branch_[index].first; + } + + inline bool valid() const exprtk_override + { + return + branch_[0].first && branch_[0].first->valid() && + branch_[1].first && branch_[1].first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_final + { + return expression_node::ndb_t::template compute_node_depth<2>(branch_); + } + + private: + + operator_type operation_; + branch_t branch_[2]; + }; + + template + class binary_ext_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + binary_ext_node(expression_ptr branch0, expression_ptr branch1) + { + init_branches<2>(branch_, branch0, branch1); + assert(valid()); + } + + inline T value() const exprtk_override + { + const T arg0 = branch_[0].first->value(); + const T arg1 = branch_[1].first->value(); + return Operation::process(arg0,arg1); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_binary_ext; + } + + inline operator_type operation() + { + return Operation::operation(); + } + + inline expression_node* branch(const std::size_t& index = 0) const exprtk_override + { + assert(index < 2); + return branch_[index].first; + } + + inline bool valid() const exprtk_override + { + return + branch_[0].first && branch_[0].first->valid() && + branch_[1].first && branch_[1].first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::template compute_node_depth<2>(branch_); + } + + protected: + + branch_t branch_[2]; + }; + + template + class trinary_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + trinary_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1, + expression_ptr branch2) + : operation_(opr) + { + init_branches<3>(branch_, branch0, branch1, branch2); + assert(valid()); + } + + inline T value() const exprtk_override + { + const T arg0 = branch_[0].first->value(); + const T arg1 = branch_[1].first->value(); + const T arg2 = branch_[2].first->value(); + + switch (operation_) + { + case e_inrange : return (arg1 < arg0) ? T(0) : ((arg1 > arg2) ? T(0) : T(1)); + + case e_clamp : return (arg1 < arg0) ? arg0 : (arg1 > arg2 ? arg2 : arg1); + + case e_iclamp : if ((arg1 <= arg0) || (arg1 >= arg2)) + return arg1; + else + return ((T(2) * arg1 <= (arg2 + arg0)) ? arg0 : arg2); + + default : exprtk_debug(("trinary_node::value() - Error: Invalid operation\n")); + return std::numeric_limits::quiet_NaN(); + } + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_trinary; + } + + inline bool valid() const exprtk_override + { + return + branch_[0].first && branch_[0].first->valid() && + branch_[1].first && branch_[1].first->valid() && + branch_[2].first && branch_[2].first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override exprtk_final + { + return expression_node::ndb_t::template compute_node_depth<3>(branch_); + } + + protected: + + operator_type operation_; + branch_t branch_[3]; + }; + + template + class quaternary_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + quaternary_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1, + expression_ptr branch2, + expression_ptr branch3) + : operation_(opr) + { + init_branches<4>(branch_, branch0, branch1, branch2, branch3); + } + + inline T value() const exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_quaternary; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override exprtk_final + { + return expression_node::ndb_t::template compute_node_depth<4>(branch_); + } + + inline bool valid() const exprtk_override + { + return + branch_[0].first && branch_[0].first->valid() && + branch_[1].first && branch_[1].first->valid() && + branch_[2].first && branch_[2].first->valid() && + branch_[3].first && branch_[3].first->valid() ; + } + + protected: + + operator_type operation_; + branch_t branch_[4]; + }; + + template + class conditional_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + conditional_node(expression_ptr condition, + expression_ptr consequent, + expression_ptr alternative) + { + construct_branch_pair(condition_ , condition ); + construct_branch_pair(consequent_ , consequent ); + construct_branch_pair(alternative_, alternative); + assert(valid()); + } + + inline T value() const exprtk_override + { + if (is_true(condition_)) + return consequent_.first->value(); + else + return alternative_.first->value(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_conditional; + } + + inline bool valid() const exprtk_override + { + return + condition_ .first && condition_ .first->valid() && + consequent_ .first && consequent_ .first->valid() && + alternative_.first && alternative_.first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(consequent_ , node_delete_list); + expression_node::ndb_t::collect(alternative_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (condition_, consequent_, alternative_); + } + + private: + + branch_t condition_; + branch_t consequent_; + branch_t alternative_; + }; + + template + class cons_conditional_node exprtk_final : public expression_node + { + public: + + // Consequent only conditional statement node + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + cons_conditional_node(expression_ptr condition, + expression_ptr consequent) + { + construct_branch_pair(condition_ , condition ); + construct_branch_pair(consequent_, consequent); + assert(valid()); + } + + inline T value() const exprtk_override + { + if (is_true(condition_)) + return consequent_.first->value(); + else + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_conditional; + } + + inline bool valid() const exprtk_override + { + return + condition_ .first && condition_ .first->valid() && + consequent_.first && consequent_.first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(consequent_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t:: + compute_node_depth(condition_, consequent_); + } + + private: + + branch_t condition_; + branch_t consequent_; + }; + + #ifndef exprtk_disable_break_continue + template + class break_exception + { + public: + + explicit break_exception(const T& v) + : value(v) + {} + + T value; + }; + + class continue_exception {}; + + template + class break_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + explicit break_node(expression_ptr ret = expression_ptr(0)) + { + construct_branch_pair(return_, ret); + } + + inline T value() const exprtk_override + { + const T result = return_.first ? + return_.first->value() : + std::numeric_limits::quiet_NaN(); + + throw break_exception(result); + + #if !defined(_MSC_VER) && !defined(__NVCOMPILER) + return std::numeric_limits::quiet_NaN(); + #endif + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_break; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(return_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(return_); + } + + private: + + branch_t return_; + }; + + template + class continue_node exprtk_final : public expression_node + { + public: + + inline T value() const exprtk_override + { + throw continue_exception(); + #if !defined(_MSC_VER) && !defined(__NVCOMPILER) + return std::numeric_limits::quiet_NaN(); + #endif + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_break; + } + }; + #endif + + struct loop_runtime_checker + { + loop_runtime_checker(loop_runtime_check_ptr loop_runtime_check, + loop_runtime_check::loop_types lp_typ = loop_runtime_check::e_invalid) + : iteration_count_(0) + , loop_runtime_check_(loop_runtime_check) + , max_loop_iterations_(loop_runtime_check_->max_loop_iterations) + , loop_type_(lp_typ) + { + assert(loop_runtime_check_); + } + + inline void reset(const _uint64_t initial_value = 0) const + { + iteration_count_ = initial_value; + } + + inline bool check() const + { + if ( + (0 == loop_runtime_check_) || + ((++iteration_count_ <= max_loop_iterations_) && loop_runtime_check_->check()) + ) + { + return true; + } + + loop_runtime_check::violation_context ctxt; + ctxt.loop = loop_type_; + ctxt.violation = loop_runtime_check::e_iteration_count; + + loop_runtime_check_->handle_runtime_violation(ctxt); + + return false; + } + + mutable _uint64_t iteration_count_; + mutable loop_runtime_check_ptr loop_runtime_check_; + const details::_uint64_t& max_loop_iterations_; + loop_runtime_check::loop_types loop_type_; + }; + + template + class while_loop_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + while_loop_node(expression_ptr condition, + expression_ptr loop_body) + { + construct_branch_pair(condition_, condition); + construct_branch_pair(loop_body_, loop_body); + assert(valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + while (is_true(condition_)) + { + result = loop_body_.first->value(); + } + + return result; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_while; + } + + inline bool valid() const exprtk_override exprtk_final + { + return + condition_.first && condition_.first->valid() && + loop_body_.first && loop_body_.first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(loop_body_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(condition_, loop_body_); + } + + protected: + + branch_t condition_; + branch_t loop_body_; + }; + + template + class while_loop_rtc_node exprtk_final + : public while_loop_node + , public loop_runtime_checker + { + public: + + typedef while_loop_node parent_t; + typedef expression_node* expression_ptr; + + while_loop_rtc_node(expression_ptr condition, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(condition, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_while_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + + T result = T(0); + + loop_runtime_checker::reset(); + + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + result = parent_t::loop_body_.first->value(); + } + + return result; + } + }; + + template + class repeat_until_loop_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + repeat_until_loop_node(expression_ptr condition, + expression_ptr loop_body) + { + construct_branch_pair(condition_, condition); + construct_branch_pair(loop_body_, loop_body); + assert(valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + do + { + result = loop_body_.first->value(); + } + while (is_false(condition_.first)); + + return result; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_repeat; + } + + inline bool valid() const exprtk_override exprtk_final + { + return + condition_.first && condition_.first->valid() && + loop_body_.first && loop_body_.first->valid() ; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(loop_body_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(condition_, loop_body_); + } + + protected: + + branch_t condition_; + branch_t loop_body_; + }; + + template + class repeat_until_loop_rtc_node exprtk_final + : public repeat_until_loop_node + , public loop_runtime_checker + { + public: + + typedef repeat_until_loop_node parent_t; + typedef expression_node* expression_ptr; + + repeat_until_loop_rtc_node(expression_ptr condition, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(condition, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_repeat_until_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + loop_runtime_checker::reset(1); + + do + { + result = parent_t::loop_body_.first->value(); + } + while (is_false(parent_t::condition_.first) && loop_runtime_checker::check()); + + return result; + } + }; + + template + class for_loop_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + for_loop_node(expression_ptr initialiser, + expression_ptr condition, + expression_ptr incrementor, + expression_ptr loop_body) + { + construct_branch_pair(initialiser_, initialiser); + construct_branch_pair(condition_ , condition ); + construct_branch_pair(incrementor_, incrementor); + construct_branch_pair(loop_body_ , loop_body ); + assert(valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + if (initialiser_.first) + initialiser_.first->value(); + + if (incrementor_.first) + { + while (is_true(condition_)) + { + result = loop_body_.first->value(); + incrementor_.first->value(); + } + } + else + { + while (is_true(condition_)) + { + result = loop_body_.first->value(); + } + } + + return result; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_for; + } + + inline bool valid() const exprtk_override exprtk_final + { + return condition_.first && loop_body_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(initialiser_ , node_delete_list); + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(incrementor_ , node_delete_list); + expression_node::ndb_t::collect(loop_body_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (initialiser_, condition_, incrementor_, loop_body_); + } + + protected: + + branch_t initialiser_; + branch_t condition_ ; + branch_t incrementor_; + branch_t loop_body_ ; + }; + + template + class for_loop_rtc_node exprtk_final + : public for_loop_node + , public loop_runtime_checker + { + public: + + typedef for_loop_node parent_t; + typedef expression_node* expression_ptr; + + for_loop_rtc_node(expression_ptr initialiser, + expression_ptr condition, + expression_ptr incrementor, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(initialiser, condition, incrementor, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_for_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + loop_runtime_checker::reset(); + + if (parent_t::initialiser_.first) + parent_t::initialiser_.first->value(); + + if (parent_t::incrementor_.first) + { + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + result = parent_t::loop_body_.first->value(); + parent_t::incrementor_.first->value(); + } + } + else + { + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + result = parent_t::loop_body_.first->value(); + } + } + + return result; + } + }; + + #ifndef exprtk_disable_break_continue + template + class while_loop_bc_node : public while_loop_node + { + public: + + typedef while_loop_node parent_t; + typedef expression_node* expression_ptr; + + while_loop_bc_node(expression_ptr condition, + expression_ptr loop_body) + : parent_t(condition, loop_body) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + while (is_true(parent_t::condition_)) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + + return result; + } + }; + + template + class while_loop_bc_rtc_node exprtk_final + : public while_loop_bc_node + , public loop_runtime_checker + { + public: + + typedef while_loop_bc_node parent_t; + typedef expression_node* expression_ptr; + + while_loop_bc_rtc_node(expression_ptr condition, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(condition, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_while_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + loop_runtime_checker::reset(); + + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + + return result; + } + }; + + template + class repeat_until_loop_bc_node : public repeat_until_loop_node + { + public: + + typedef repeat_until_loop_node parent_t; + typedef expression_node* expression_ptr; + + repeat_until_loop_bc_node(expression_ptr condition, + expression_ptr loop_body) + : parent_t(condition, loop_body) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + do + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + while (is_false(parent_t::condition_.first)); + + return result; + } + }; + + template + class repeat_until_loop_bc_rtc_node exprtk_final + : public repeat_until_loop_bc_node + , public loop_runtime_checker + { + public: + + typedef repeat_until_loop_bc_node parent_t; + typedef expression_node* expression_ptr; + + repeat_until_loop_bc_rtc_node(expression_ptr condition, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(condition, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_repeat_until_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + loop_runtime_checker::reset(); + + do + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + while (is_false(parent_t::condition_.first) && loop_runtime_checker::check()); + + return result; + } + }; + + template + class for_loop_bc_node : public for_loop_node + { + public: + + typedef for_loop_node parent_t; + typedef expression_node* expression_ptr; + + for_loop_bc_node(expression_ptr initialiser, + expression_ptr condition, + expression_ptr incrementor, + expression_ptr loop_body) + : parent_t(initialiser, condition, incrementor, loop_body) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + if (parent_t::initialiser_.first) + parent_t::initialiser_.first->value(); + + if (parent_t::incrementor_.first) + { + while (is_true(parent_t::condition_)) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + + parent_t::incrementor_.first->value(); + } + } + else + { + while (is_true(parent_t::condition_)) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + } + + return result; + } + }; + + template + class for_loop_bc_rtc_node exprtk_final + : public for_loop_bc_node + , public loop_runtime_checker + { + public: + + typedef for_loop_bc_node parent_t; + typedef expression_node* expression_ptr; + + for_loop_bc_rtc_node(expression_ptr initialiser, + expression_ptr condition, + expression_ptr incrementor, + expression_ptr loop_body, + loop_runtime_check_ptr loop_rt_chk) + : parent_t(initialiser, condition, incrementor, loop_body) + , loop_runtime_checker(loop_rt_chk, loop_runtime_check::e_for_loop) + { + assert(parent_t::valid()); + } + + inline T value() const exprtk_override + { + T result = T(0); + + loop_runtime_checker::reset(); + + if (parent_t::initialiser_.first) + parent_t::initialiser_.first->value(); + + if (parent_t::incrementor_.first) + { + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + + parent_t::incrementor_.first->value(); + } + } + else + { + while (is_true(parent_t::condition_) && loop_runtime_checker::check()) + { + try + { + result = parent_t::loop_body_.first->value(); + } + catch(const break_exception& e) + { + return e.value; + } + catch(const continue_exception&) + {} + } + } + + return result; + } + }; + #endif + + template + class switch_node : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + template class Sequence> + explicit switch_node(const Sequence& arg_list) + { + if (1 != (arg_list.size() & 1)) + return; + + arg_list_.resize(arg_list.size()); + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (arg_list[i] && arg_list[i]->valid()) + { + construct_branch_pair(arg_list_[i], arg_list[i]); + } + else + { + arg_list_.clear(); + return; + } + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + const std::size_t upper_bound = (arg_list_.size() - 1); + + for (std::size_t i = 0; i < upper_bound; i += 2) + { + expression_ptr condition = arg_list_[i ].first; + expression_ptr consequent = arg_list_[i + 1].first; + + if (is_true(condition)) + { + return consequent->value(); + } + } + + return arg_list_[upper_bound].first->value(); + } + + inline typename expression_node::node_type type() const exprtk_override exprtk_final + { + return expression_node::e_switch; + } + + inline bool valid() const exprtk_override + { + return !arg_list_.empty(); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(arg_list_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override exprtk_final + { + return expression_node::ndb_t::compute_node_depth(arg_list_); + } + + protected: + + std::vector arg_list_; + }; + + template + class switch_n_node exprtk_final : public switch_node + { + public: + + typedef expression_node* expression_ptr; + + template class Sequence> + explicit switch_n_node(const Sequence& arg_list) + : switch_node(arg_list) + {} + + inline T value() const exprtk_override + { + return Switch_N::process(switch_node::arg_list_); + } + }; + + template + class multi_switch_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + template class Sequence> + explicit multi_switch_node(const Sequence& arg_list) + { + if (0 != (arg_list.size() & 1)) + return; + + arg_list_.resize(arg_list.size()); + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (arg_list[i] && arg_list[i]->valid()) + { + construct_branch_pair(arg_list_[i], arg_list[i]); + } + else + { + arg_list_.clear(); + return; + } + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + const std::size_t upper_bound = (arg_list_.size() - 1); + + T result = T(0); + + for (std::size_t i = 0; i < upper_bound; i += 2) + { + expression_ptr condition = arg_list_[i ].first; + expression_ptr consequent = arg_list_[i + 1].first; + + if (is_true(condition)) + { + result = consequent->value(); + } + } + + return result; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_mswitch; + } + + inline bool valid() const exprtk_override + { + return !arg_list_.empty() && (0 == (arg_list_.size() % 2)); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(arg_list_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override exprtk_final + { + return expression_node::ndb_t::compute_node_depth(arg_list_); + } + + private: + + std::vector arg_list_; + }; + + template + class ivariable + { + public: + + virtual ~ivariable() + {} + + virtual T& ref() = 0; + virtual const T& ref() const = 0; + }; + + template + class variable_node exprtk_final + : public expression_node + , public ivariable + { + public: + + static T null_value; + + explicit variable_node() + : value_(&null_value) + {} + + explicit variable_node(T& v) + : value_(&v) + {} + + inline bool operator <(const variable_node& v) const + { + return this < (&v); + } + + inline T value() const exprtk_override + { + return (*value_); + } + + inline T& ref() exprtk_override + { + return (*value_); + } + + inline const T& ref() const exprtk_override + { + return (*value_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_variable; + } + + private: + + T* value_; + }; + + template + T variable_node::null_value = T(std::numeric_limits::quiet_NaN()); + + template + struct range_pack + { + typedef expression_node* expression_node_ptr; + typedef std::pair cached_range_t; + + range_pack() + : n0_e (std::make_pair(false,expression_node_ptr(0))) + , n1_e (std::make_pair(false,expression_node_ptr(0))) + , n0_c (std::make_pair(false,0)) + , n1_c (std::make_pair(false,0)) + , cache(std::make_pair(0,0)) + {} + + void clear() + { + n0_e = std::make_pair(false,expression_node_ptr(0)); + n1_e = std::make_pair(false,expression_node_ptr(0)); + n0_c = std::make_pair(false,0); + n1_c = std::make_pair(false,0); + cache = std::make_pair(0,0); + } + + void free() + { + if (n0_e.first && n0_e.second) + { + n0_e.first = false; + + if ( + !is_variable_node(n0_e.second) && + !is_string_node (n0_e.second) + ) + { + destroy_node(n0_e.second); + } + } + + if (n1_e.first && n1_e.second) + { + n1_e.first = false; + + if ( + !is_variable_node(n1_e.second) && + !is_string_node (n1_e.second) + ) + { + destroy_node(n1_e.second); + } + } + } + + bool const_range() const + { + return ( n0_c.first && n1_c.first) && + (!n0_e.first && !n1_e.first); + } + + bool var_range() const + { + return ( n0_e.first && n1_e.first) && + (!n0_c.first && !n1_c.first); + } + + bool operator() (std::size_t& r0, std::size_t& r1, + const std::size_t& size = std::numeric_limits::max()) const + { + if (n0_c.first) + r0 = n0_c.second; + else if (n0_e.first) + { + r0 = static_cast(details::numeric::to_int64(n0_e.second->value())); + } + else + return false; + + if (n1_c.first) + r1 = n1_c.second; + else if (n1_e.first) + { + r1 = static_cast(details::numeric::to_int64(n1_e.second->value())); + } + else + return false; + + if ( + (std::numeric_limits::max() != size) && + (std::numeric_limits::max() == r1 ) + ) + { + r1 = size; + } + + cache.first = r0; + cache.second = r1; + + #ifndef exprtk_enable_range_runtime_checks + return (r0 <= r1); + #else + return range_runtime_check(r0, r1, size); + #endif + } + + inline std::size_t const_size() const + { + return (n1_c.second - n0_c.second); + } + + inline std::size_t cache_size() const + { + return (cache.second - cache.first); + } + + std::pair n0_e; + std::pair n1_e; + std::pair n0_c; + std::pair n1_c; + mutable cached_range_t cache; + + #ifdef exprtk_enable_range_runtime_checks + bool range_runtime_check(const std::size_t r0, + const std::size_t r1, + const std::size_t size) const + { + if (r0 > size) + { + throw std::runtime_error("range error: (r0 < 0) || (r0 > size)"); + #ifndef _MSC_VER + return false; + #endif + } + + if (r1 > size) + { + throw std::runtime_error("range error: (r1 < 0) || (r1 > size)"); + #ifndef _MSC_VER + return false; + #endif + } + + return (r0 <= r1); + } + #endif + }; + + template + class string_base_node; + + template + struct range_data_type + { + typedef range_pack range_t; + typedef string_base_node* strbase_ptr_t; + + range_data_type() + : range(0) + , data (0) + , size (0) + , type_size(0) + , str_node (0) + {} + + range_t* range; + void* data; + std::size_t size; + std::size_t type_size; + strbase_ptr_t str_node; + }; + + template class vector_node; + + template + class vector_interface + { + public: + + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + virtual ~vector_interface() + {} + + virtual std::size_t size () const = 0; + + virtual std::size_t base_size() const = 0; + + virtual vector_node_ptr vec () const = 0; + + virtual vector_node_ptr vec () = 0; + + virtual vds_t& vds () = 0; + + virtual const vds_t& vds () const = 0; + + virtual bool side_effect () const { return false; } + }; + + template + class vector_node exprtk_final + : public expression_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + explicit vector_node(vector_holder_t* vh) + : vector_holder_(vh) + , vds_((*vector_holder_).size(),(*vector_holder_)[0]) + { + vector_holder_->set_ref(&vds_.ref()); + } + + vector_node(const vds_t& vds, vector_holder_t* vh) + : vector_holder_(vh) + , vds_(vds) + {} + + ~vector_node() + { + assert(valid()); + vector_holder_->remove_ref(&vds_.ref()); + } + + inline T value() const exprtk_override + { + return vds().data()[0]; + } + + vector_node_ptr vec() const exprtk_override + { + return const_cast(this); + } + + vector_node_ptr vec() exprtk_override + { + return this; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vector; + } + + inline bool valid() const exprtk_override + { + return vector_holder_; + } + + std::size_t size() const exprtk_override + { + return vec_holder().size(); + } + + std::size_t base_size() const exprtk_override + { + return vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + inline vector_holder_t& vec_holder() const + { + return (*vector_holder_); + } + + private: + + vector_holder_t* vector_holder_; + vds_t vds_; + }; + + template + class vector_size_node exprtk_final + : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + + explicit vector_size_node(vector_holder_t* vh) + : vector_holder_(vh) + {} + + ~vector_size_node() + { + assert(valid()); + } + + inline T value() const exprtk_override + { + assert(vector_holder_); + return static_cast(vector_holder_->size()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecsize; + } + + inline bool valid() const exprtk_override + { + return vector_holder_ && vector_holder_->size(); + } + + inline vector_holder_t* vec_holder() + { + return vector_holder_; + } + + private: + + vector_holder_t* vector_holder_; + }; + + template + class vector_elem_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + vector_elem_node(expression_ptr vec_node, + expression_ptr index, + vector_holder_ptr vec_holder) + : vector_holder_(vec_holder) + , vector_base_((*vec_holder)[0]) + { + construct_branch_pair(vector_node_, vec_node); + construct_branch_pair(index_ , index ); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecelem; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + index_.first && + vector_node_.first && + index_.first->valid() && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + expression_node::ndb_t::collect(index_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (vector_node_, index_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + return (vector_base_ + details::numeric::to_uint64(index_.first->value())); + } + + vector_holder_ptr vector_holder_; + T* vector_base_; + branch_t vector_node_; + branch_t index_; + }; + + template + class vector_celem_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + vector_celem_node(expression_ptr vec_node, + const std::size_t index, + vector_holder_ptr vec_holder) + : index_(index) + , vector_holder_(vec_holder) + , vector_base_((*vec_holder)[0]) + { + construct_branch_pair(vector_node_, vec_node); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_veccelem; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + vector_node_.first && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(vector_node_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + return (vector_base_ + index_); + } + + const std::size_t index_; + vector_holder_ptr vector_holder_; + T* vector_base_; + branch_t vector_node_; + }; + + template + class vector_elem_rtc_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + vector_elem_rtc_node(expression_ptr vec_node, + expression_ptr index, + vector_holder_ptr vec_holder, + vector_access_runtime_check_ptr vec_rt_chk) + : vector_holder_(vec_holder) + , vector_base_((*vec_holder)[0]) + , vec_rt_chk_(vec_rt_chk) + , max_vector_index_(vector_holder_->size() - 1) + { + construct_branch_pair(vector_node_, vec_node); + construct_branch_pair(index_ , index ); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecelemrtc; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + index_.first && + vector_node_.first && + index_.first->valid() && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + expression_node::ndb_t::collect(index_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (vector_node_, index_); + } + + private: + + inline T* access_vector() const + { + const _uint64_t index = details::numeric::to_uint64(index_.first->value()); + vector_node_.first->value(); + + if (index <= max_vector_index_) + { + return (vector_holder_->data() + index); + } + + assert(vec_rt_chk_); + + vector_access_runtime_check::violation_context context; + context.base_ptr = reinterpret_cast(vector_base_); + context.end_ptr = reinterpret_cast(vector_base_ + vector_holder_->size()); + context.access_ptr = reinterpret_cast(vector_base_ + index); + context.type_size = sizeof(T); + + return vec_rt_chk_->handle_runtime_violation(context) ? + reinterpret_cast(context.access_ptr) : + vector_base_ ; + } + + vector_holder_ptr vector_holder_; + T* vector_base_; + branch_t vector_node_; + branch_t index_; + vector_access_runtime_check_ptr vec_rt_chk_; + const std::size_t max_vector_index_; + }; + + template + class vector_celem_rtc_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + vector_celem_rtc_node(expression_ptr vec_node, + const std::size_t index, + vector_holder_ptr vec_holder, + vector_access_runtime_check_ptr vec_rt_chk) + : index_(index) + , max_vector_index_(vec_holder->size() - 1) + , vector_holder_(vec_holder) + , vector_base_((*vec_holder)[0]) + , vec_rt_chk_(vec_rt_chk) + { + construct_branch_pair(vector_node_, vec_node); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_veccelemrtc; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + vector_node_.first && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(vector_node_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + + if (index_ <= max_vector_index_) + { + return (vector_holder_->data() + index_); + } + + assert(vec_rt_chk_); + + vector_access_runtime_check::violation_context context; + context.base_ptr = reinterpret_cast(vector_base_); + context.end_ptr = reinterpret_cast(vector_base_ + vector_holder_->size()); + context.access_ptr = reinterpret_cast(vector_base_ + index_); + context.type_size = sizeof(T); + + return vec_rt_chk_->handle_runtime_violation(context) ? + reinterpret_cast(context.access_ptr) : + vector_base_ ; + } + + const std::size_t index_; + const std::size_t max_vector_index_; + vector_holder_ptr vector_holder_; + T* vector_base_; + branch_t vector_node_; + vector_access_runtime_check_ptr vec_rt_chk_; + }; + + template + class rebasevector_elem_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef std::pair branch_t; + + rebasevector_elem_node(expression_ptr vec_node, + expression_ptr index, + vector_holder_ptr vec_holder) + : vector_holder_(vec_holder) + { + construct_branch_pair(vector_node_, vec_node); + construct_branch_pair(index_ , index ); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_rbvecelem; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + index_.first && + vector_node_.first && + index_.first->valid() && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + expression_node::ndb_t::collect(index_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (vector_node_, index_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + return (vector_holder_->data() + details::numeric::to_uint64(index_.first->value())); + } + + vector_holder_ptr vector_holder_; + branch_t vector_node_; + branch_t index_; + }; + + template + class rebasevector_celem_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + rebasevector_celem_node(expression_ptr vec_node, + const std::size_t index, + vector_holder_ptr vec_holder) + : index_(index) + , vector_holder_(vec_holder) + { + construct_branch_pair(vector_node_, vec_node); + assert(valid()); + } + + inline T value() const exprtk_override + { + vector_node_.first->value(); + return ref();; + } + + inline T& ref() exprtk_override + { + return *(vector_holder_->data() + index_); + } + + inline const T& ref() const exprtk_override + { + return *(vector_holder_->data() + index_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_rbveccelem; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + vector_node_.first && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(vector_node_); + } + + private: + + const std::size_t index_; + vector_holder_ptr vector_holder_; + branch_t vector_node_; + }; + + template + class rebasevector_elem_rtc_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + rebasevector_elem_rtc_node(expression_ptr vec_node, + expression_ptr index, + vector_holder_ptr vec_holder, + vector_access_runtime_check_ptr vec_rt_chk) + : vector_holder_(vec_holder) + , vec_rt_chk_(vec_rt_chk) + { + construct_branch_pair(vector_node_, vec_node); + construct_branch_pair(index_ , index ); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_rbvecelemrtc; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + index_.first && + vector_node_.first && + index_.first->valid() && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + expression_node::ndb_t::collect(index_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (vector_node_, index_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + const _uint64_t index = details::numeric::to_uint64(index_.first->value()); + + if (index <= (vector_holder_->size() - 1)) + { + return (vector_holder_->data() + index); + } + + assert(vec_rt_chk_); + + vector_access_runtime_check::violation_context context; + context.base_ptr = reinterpret_cast(vector_holder_->data()); + context.end_ptr = reinterpret_cast(vector_holder_->data() + vector_holder_->size()); + context.access_ptr = reinterpret_cast(vector_holder_->data() + index); + context.type_size = sizeof(T); + + return vec_rt_chk_->handle_runtime_violation(context) ? + reinterpret_cast(context.access_ptr) : + vector_holder_->data() ; + } + + vector_holder_ptr vector_holder_; + branch_t vector_node_; + branch_t index_; + vector_access_runtime_check_ptr vec_rt_chk_; + }; + + template + class rebasevector_celem_rtc_node exprtk_final + : public expression_node + , public ivariable + { + public: + + typedef expression_node* expression_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef std::pair branch_t; + + rebasevector_celem_rtc_node(expression_ptr vec_node, + const std::size_t index, + vector_holder_ptr vec_holder, + vector_access_runtime_check_ptr vec_rt_chk) + : index_(index) + , vector_holder_(vec_holder) + , vector_base_((*vec_holder)[0]) + , vec_rt_chk_(vec_rt_chk) + { + construct_branch_pair(vector_node_, vec_node); + assert(valid()); + } + + inline T value() const exprtk_override + { + return *access_vector(); + } + + inline T& ref() exprtk_override + { + return *access_vector(); + } + + inline const T& ref() const exprtk_override + { + return *access_vector(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_rbveccelemrtc; + } + + inline bool valid() const exprtk_override + { + return + vector_holder_ && + vector_node_.first && + vector_node_.first->valid(); + } + + inline vector_holder_t& vec_holder() + { + return (*vector_holder_); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(vector_node_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(vector_node_); + } + + private: + + inline T* access_vector() const + { + vector_node_.first->value(); + + if (index_ <= vector_holder_->size() - 1) + { + return (vector_holder_->data() + index_); + } + + assert(vec_rt_chk_); + + vector_access_runtime_check::violation_context context; + context.base_ptr = reinterpret_cast(vector_base_); + context.end_ptr = reinterpret_cast(vector_base_ + vector_holder_->size()); + context.access_ptr = reinterpret_cast(vector_base_ + index_); + context.type_size = sizeof(T); + + return vec_rt_chk_->handle_runtime_violation(context) ? + reinterpret_cast(context.access_ptr) : + vector_base_ ; + } + + const std::size_t index_; + vector_holder_ptr vector_holder_; + T* vector_base_; + branch_t vector_node_; + vector_access_runtime_check_ptr vec_rt_chk_; + }; + + template + class vector_assignment_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + + vector_assignment_node(T* vector_base, + const std::size_t& size, + const std::vector& initialiser_list, + const bool single_value_initialse) + : vector_base_(vector_base) + , initialiser_list_(initialiser_list) + , size_(size) + , single_value_initialse_(single_value_initialse) + , zero_value_initialse_(false) + , const_nonzero_literal_value_initialse_(false) + , single_initialiser_value_(T(0)) + { + if (single_value_initialse_) + { + if (initialiser_list_.empty()) + zero_value_initialse_ = true; + else if ( + (initialiser_list_.size() == 1) && + details::is_constant_node(initialiser_list_[0]) && + (T(0) == initialiser_list_[0]->value()) + ) + { + zero_value_initialse_ = true; + } + else + { + assert(initialiser_list_.size() == 1); + + if (details::is_constant_node(initialiser_list_[0])) + { + const_nonzero_literal_value_initialse_ = true; + single_initialiser_value_ = initialiser_list_[0]->value(); + assert(T(0) != single_initialiser_value_); + } + } + } + } + + inline T value() const exprtk_override + { + if (single_value_initialse_) + { + if (zero_value_initialse_) + { + details::set_zero_value(vector_base_, size_); + } + else if (const_nonzero_literal_value_initialse_) + { + for (std::size_t i = 0; i < size_; ++i) + { + *(vector_base_ + i) = single_initialiser_value_; + } + } + else + { + for (std::size_t i = 0; i < size_; ++i) + { + *(vector_base_ + i) = initialiser_list_[0]->value(); + } + } + } + else + { + const std::size_t initialiser_list_size = initialiser_list_.size(); + + for (std::size_t i = 0; i < initialiser_list_size; ++i) + { + *(vector_base_ + i) = initialiser_list_[i]->value(); + } + + if (initialiser_list_size < size_) + { + details::set_zero_value( + vector_base_ + initialiser_list_size, + (size_ - initialiser_list_size)); + } + } + + return *(vector_base_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecdefass; + } + + inline bool valid() const exprtk_override + { + return vector_base_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(initialiser_list_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(initialiser_list_); + } + + private: + + vector_assignment_node(const vector_assignment_node&) exprtk_delete; + vector_assignment_node& operator=(const vector_assignment_node&) exprtk_delete; + + mutable T* vector_base_; + std::vector initialiser_list_; + const std::size_t size_; + const bool single_value_initialse_; + bool zero_value_initialse_; + bool const_nonzero_literal_value_initialse_; + T single_initialiser_value_; + }; + + template + class swap_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef variable_node* variable_node_ptr; + + swap_node(variable_node_ptr var0, variable_node_ptr var1) + : var0_(var0) + , var1_(var1) + {} + + inline T value() const exprtk_override + { + std::swap(var0_->ref(),var1_->ref()); + return var1_->ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_swap; + } + + private: + + variable_node_ptr var0_; + variable_node_ptr var1_; + }; + + template + class swap_generic_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + typedef ivariable* ivariable_ptr; + + swap_generic_node(expression_ptr var0, expression_ptr var1) + : binary_node(details::e_swap, var0, var1) + , var0_(dynamic_cast(var0)) + , var1_(dynamic_cast(var1)) + {} + + inline T value() const exprtk_override + { + std::swap(var0_->ref(),var1_->ref()); + return var1_->ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_swap; + } + + private: + + ivariable_ptr var0_; + ivariable_ptr var1_; + }; + + template + class swap_vecvec_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node * vector_node_ptr; + typedef vec_data_store vds_t; + + using binary_node::branch; + + swap_vecvec_node(expression_ptr branch0, + expression_ptr branch1) + : binary_node(details::e_swap, branch0, branch1) + , vec0_node_ptr_(0) + , vec1_node_ptr_(0) + , initialised_ (false) + { + if (is_ivector_node(branch(0))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(0)))) + { + vec0_node_ptr_ = vi->vec(); + vds() = vi->vds(); + } + } + + if (is_ivector_node(branch(1))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(1)))) + { + vec1_node_ptr_ = vi->vec(); + } + } + + if (vec0_node_ptr_ && vec1_node_ptr_) + { + initialised_ = size() <= base_size(); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + binary_node::branch(0)->value(); + binary_node::branch(1)->value(); + + T* vec0 = vec0_node_ptr_->vds().data(); + T* vec1 = vec1_node_ptr_->vds().data(); + + assert(size() <= base_size()); + const std::size_t n = size(); + + for (std::size_t i = 0; i < n; ++i) + { + std::swap(vec0[i],vec1[i]); + } + + return vec1_node_ptr_->value(); + } + + vector_node_ptr vec() const exprtk_override + { + return vec0_node_ptr_; + } + + vector_node_ptr vec() exprtk_override + { + return vec0_node_ptr_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvecswap; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + std::size_t size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().size(), + vec1_node_ptr_->vec_holder().size()); + } + + std::size_t base_size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().base_size(), + vec1_node_ptr_->vec_holder().base_size()); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node* vec0_node_ptr_; + vector_node* vec1_node_ptr_; + bool initialised_; + vds_t vds_; + }; + + #ifndef exprtk_disable_string_capabilities + template + class stringvar_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + + static std::string null_value; + + explicit stringvar_node() + : value_(&null_value) + {} + + explicit stringvar_node(std::string& v) + : value_(&v) + { + rp_.n0_c = std::make_pair(true,0); + rp_.n1_c = std::make_pair(true,v.size()); + rp_.cache.first = rp_.n0_c.second; + rp_.cache.second = rp_.n1_c.second; + } + + inline bool operator <(const stringvar_node& v) const + { + return this < (&v); + } + + inline T value() const exprtk_override + { + rp_.n1_c.second = (*value_).size(); + rp_.cache.second = rp_.n1_c.second; + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return ref(); + } + + char_cptr base() const exprtk_override + { + return &(*value_)[0]; + } + + std::size_t size() const exprtk_override + { + return ref().size(); + } + + std::string& ref() + { + return (*value_); + } + + const std::string& ref() const + { + return (*value_); + } + + range_t& range_ref() exprtk_override + { + return rp_; + } + + const range_t& range_ref() const exprtk_override + { + return rp_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringvar; + } + + void rebase(std::string& s) + { + value_ = &s; + rp_.n0_c = std::make_pair(true,0); + rp_.n1_c = std::make_pair(true,value_->size() - 1); + rp_.cache.first = rp_.n0_c.second; + rp_.cache.second = rp_.n1_c.second; + } + + private: + + std::string* value_; + mutable range_t rp_; + }; + + template + std::string stringvar_node::null_value = std::string(""); + + template + class string_range_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + + static std::string null_value; + + explicit string_range_node(std::string& v, const range_t& rp) + : value_(&v) + , rp_(rp) + {} + + virtual ~string_range_node() + { + rp_.free(); + } + + inline bool operator <(const string_range_node& v) const + { + return this < (&v); + } + + inline T value() const exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline std::string str() const exprtk_override + { + return (*value_); + } + + char_cptr base() const exprtk_override + { + return &(*value_)[0]; + } + + std::size_t size() const exprtk_override + { + return ref().size(); + } + + inline range_t range() const + { + return rp_; + } + + inline virtual std::string& ref() + { + return (*value_); + } + + inline virtual const std::string& ref() const + { + return (*value_); + } + + inline range_t& range_ref() exprtk_override + { + return rp_; + } + + inline const range_t& range_ref() const exprtk_override + { + return rp_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringvarrng; + } + + private: + + std::string* value_; + range_t rp_; + }; + + template + std::string string_range_node::null_value = std::string(""); + + template + class const_string_range_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + + explicit const_string_range_node(const std::string& v, const range_t& rp) + : value_(v) + , rp_(rp) + {} + + ~const_string_range_node() + { + rp_.free(); + } + + inline T value() const exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return value_; + } + + char_cptr base() const exprtk_override + { + return value_.data(); + } + + std::size_t size() const exprtk_override + { + return value_.size(); + } + + range_t range() const + { + return rp_; + } + + range_t& range_ref() exprtk_override + { + return rp_; + } + + const range_t& range_ref() const exprtk_override + { + return rp_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_cstringvarrng; + } + + private: + + const_string_range_node(const const_string_range_node&) exprtk_delete; + const_string_range_node& operator=(const const_string_range_node&) exprtk_delete; + + const std::string value_; + range_t rp_; + }; + + template + class generic_string_range_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef expression_node * expression_ptr; + typedef stringvar_node * strvar_node_ptr; + typedef string_base_node* str_base_ptr; + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef std::pair branch_t; + + generic_string_range_node(expression_ptr str_branch, const range_t& brange) + : initialised_(false) + , str_base_ptr_ (0) + , str_range_ptr_(0) + , base_range_(brange) + { + range_.n0_c = std::make_pair(true,0); + range_.n1_c = std::make_pair(true,0); + range_.cache.first = range_.n0_c.second; + range_.cache.second = range_.n1_c.second; + + construct_branch_pair(branch_, str_branch); + + if (is_generally_string_node(branch_.first)) + { + str_base_ptr_ = dynamic_cast(branch_.first); + + if (0 == str_base_ptr_) + return; + + str_range_ptr_ = dynamic_cast(branch_.first); + + if (0 == str_range_ptr_) + return; + } + + initialised_ = (str_base_ptr_ && str_range_ptr_); + assert(valid()); + } + + ~generic_string_range_node() + { + base_range_.free(); + } + + inline T value() const exprtk_override + { + branch_.first->value(); + + std::size_t str_r0 = 0; + std::size_t str_r1 = 0; + + std::size_t r0 = 0; + std::size_t r1 = 0; + + const range_t& range = str_range_ptr_->range_ref(); + + const std::size_t base_str_size = str_base_ptr_->size(); + + if ( + range (str_r0, str_r1, base_str_size ) && + base_range_(r0 , r1 , base_str_size - str_r0) + ) + { + const std::size_t size = r1 - r0; + + range_.n1_c.second = size; + range_.cache.second = range_.n1_c.second; + + value_.assign(str_base_ptr_->base() + str_r0 + r0, size); + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return value_; + } + + char_cptr base() const exprtk_override + { + return &value_[0]; + } + + std::size_t size() const exprtk_override + { + return value_.size(); + } + + range_t& range_ref() exprtk_override + { + return range_; + } + + const range_t& range_ref() const exprtk_override + { + return range_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strgenrange; + } + + inline bool valid() const exprtk_override + { + return initialised_ && branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + bool initialised_; + branch_t branch_; + str_base_ptr str_base_ptr_; + irange_ptr str_range_ptr_; + mutable range_t base_range_; + mutable range_t range_; + mutable std::string value_; + }; + + template + class string_concat_node exprtk_final + : public binary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef range_t* range_ptr; + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + + using binary_node::branch; + + string_concat_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , initialised_(false) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_range_ptr_(0) + , str1_range_ptr_(0) + { + range_.n0_c = std::make_pair(true,0); + range_.n1_c = std::make_pair(true,0); + + range_.cache.first = range_.n0_c.second; + range_.cache.second = range_.n1_c.second; + + if (is_generally_string_node(branch(0))) + { + str0_base_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_base_ptr_) + return; + + str0_range_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_range_ptr_) + return; + } + + if (is_generally_string_node(branch(1))) + { + str1_base_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_base_ptr_) + return; + + str1_range_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_range_ptr_) + return; + } + + initialised_ = str0_base_ptr_ && + str1_base_ptr_ && + str0_range_ptr_ && + str1_range_ptr_ ; + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + std::size_t str0_r0 = 0; + std::size_t str0_r1 = 0; + + std::size_t str1_r0 = 0; + std::size_t str1_r1 = 0; + + const range_t& range0 = str0_range_ptr_->range_ref(); + const range_t& range1 = str1_range_ptr_->range_ref(); + + if ( + range0(str0_r0, str0_r1, str0_base_ptr_->size()) && + range1(str1_r0, str1_r1, str1_base_ptr_->size()) + ) + { + const std::size_t size0 = (str0_r1 - str0_r0); + const std::size_t size1 = (str1_r1 - str1_r0); + + value_.assign(str0_base_ptr_->base() + str0_r0, size0); + value_.append(str1_base_ptr_->base() + str1_r0, size1); + + range_.n1_c.second = value_.size(); + range_.cache.second = range_.n1_c.second; + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return value_; + } + + char_cptr base() const exprtk_override + { + return &value_[0]; + } + + std::size_t size() const exprtk_override + { + return value_.size(); + } + + range_t& range_ref() exprtk_override + { + return range_; + } + + const range_t& range_ref() const exprtk_override + { + return range_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strconcat; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + private: + + bool initialised_; + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + irange_ptr str0_range_ptr_; + irange_ptr str1_range_ptr_; + mutable range_t range_; + mutable std::string value_; + }; + + template + class swap_string_node exprtk_final + : public binary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef stringvar_node * strvar_node_ptr; + typedef string_base_node* str_base_ptr; + + using binary_node::branch; + + swap_string_node(expression_ptr branch0, expression_ptr branch1) + : binary_node(details::e_swap, branch0, branch1) + , initialised_(false) + , str0_node_ptr_(0) + , str1_node_ptr_(0) + { + if (is_string_node(branch(0))) + { + str0_node_ptr_ = static_cast(branch(0)); + } + + if (is_string_node(branch(1))) + { + str1_node_ptr_ = static_cast(branch(1)); + } + + initialised_ = (str0_node_ptr_ && str1_node_ptr_); + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + std::swap(str0_node_ptr_->ref(), str1_node_ptr_->ref()); + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return str0_node_ptr_->str(); + } + + char_cptr base() const exprtk_override + { + return str0_node_ptr_->base(); + } + + std::size_t size() const exprtk_override + { + return str0_node_ptr_->size(); + } + + range_t& range_ref() exprtk_override + { + return str0_node_ptr_->range_ref(); + } + + const range_t& range_ref() const exprtk_override + { + return str0_node_ptr_->range_ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strswap; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + private: + + bool initialised_; + strvar_node_ptr str0_node_ptr_; + strvar_node_ptr str1_node_ptr_; + }; + + template + class swap_genstrings_node exprtk_final : public binary_node + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + + using binary_node::branch; + + swap_genstrings_node(expression_ptr branch0, + expression_ptr branch1) + : binary_node(details::e_default, branch0, branch1) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_range_ptr_(0) + , str1_range_ptr_(0) + , initialised_(false) + { + if (is_generally_string_node(branch(0))) + { + str0_base_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(0)); + + if (0 == range) + return; + + str0_range_ptr_ = &(range->range_ref()); + } + + if (is_generally_string_node(branch(1))) + { + str1_base_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(1)); + + if (0 == range) + return; + + str1_range_ptr_ = &(range->range_ref()); + } + + initialised_ = str0_base_ptr_ && + str1_base_ptr_ && + str0_range_ptr_ && + str1_range_ptr_ ; + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + std::size_t str0_r0 = 0; + std::size_t str0_r1 = 0; + + std::size_t str1_r0 = 0; + std::size_t str1_r1 = 0; + + const range_t& range0 = (*str0_range_ptr_); + const range_t& range1 = (*str1_range_ptr_); + + if ( + range0(str0_r0, str0_r1, str0_base_ptr_->size()) && + range1(str1_r0, str1_r1, str1_base_ptr_->size()) + ) + { + const std::size_t size0 = range0.cache_size(); + const std::size_t size1 = range1.cache_size(); + const std::size_t max_size = std::min(size0,size1); + + char_ptr s0 = const_cast(str0_base_ptr_->base() + str0_r0); + char_ptr s1 = const_cast(str1_base_ptr_->base() + str1_r0); + + loop_unroll::details lud(max_size); + char_cptr upper_bound = s0 + lud.upper_bound; + + while (s0 < upper_bound) + { + #define exprtk_loop(N) \ + std::swap(s0[N], s1[N]); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + s0 += lud.batch_size; + s1 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N) \ + case N : { std::swap(s0[i], s1[i]); ++i; } \ + exprtk_fallthrough \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15) case_stmt(14) + case_stmt(13) case_stmt(12) + case_stmt(11) case_stmt(10) + case_stmt( 9) case_stmt( 8) + case_stmt( 7) case_stmt( 6) + case_stmt( 5) case_stmt( 4) + #endif + case_stmt( 3) case_stmt( 2) + case_stmt( 1) + default: break; + } + + #undef exprtk_loop + #undef case_stmt + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strswap; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + private: + + swap_genstrings_node(const swap_genstrings_node&) exprtk_delete; + swap_genstrings_node& operator=(const swap_genstrings_node&) exprtk_delete; + + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + range_ptr str0_range_ptr_; + range_ptr str1_range_ptr_; + bool initialised_; + }; + + template + class stringvar_size_node exprtk_final : public expression_node + { + public: + + static const std::string null_value; + + explicit stringvar_size_node() + : value_(&null_value) + {} + + explicit stringvar_size_node(std::string& v) + : value_(&v) + {} + + inline T value() const exprtk_override + { + return T((*value_).size()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringvarsize; + } + + private: + + const std::string* value_; + }; + + template + const std::string stringvar_size_node::null_value = std::string(""); + + template + class string_size_node exprtk_final : public expression_node + { + public: + + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + typedef std::pair branch_t; + + explicit string_size_node(expression_ptr branch) + : str_base_ptr_(0) + { + construct_branch_pair(branch_, branch); + + if (is_generally_string_node(branch_.first)) + { + str_base_ptr_ = dynamic_cast(branch_.first); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch_.first->value(); + return T(str_base_ptr_->size()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringsize; + } + + inline bool valid() const exprtk_override + { + return str_base_ptr_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + branch_t branch_; + str_base_ptr str_base_ptr_; + }; + + struct asn_assignment + { + static inline void execute(std::string& s, char_cptr data, const std::size_t size) + { s.assign(data,size); } + }; + + struct asn_addassignment + { + static inline void execute(std::string& s, char_cptr data, const std::size_t size) + { s.append(data,size); } + }; + + template + class assignment_string_node exprtk_final + : public binary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef stringvar_node * strvar_node_ptr; + typedef string_base_node* str_base_ptr; + + using binary_node::branch; + + assignment_string_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , initialised_(false) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_node_ptr_ (0) + , str1_range_ptr_(0) + { + if (is_string_node(branch(0))) + { + str0_node_ptr_ = static_cast(branch(0)); + str0_base_ptr_ = dynamic_cast(branch(0)); + } + + if (is_generally_string_node(branch(1))) + { + str1_base_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(1)); + + if (0 == range) + return; + + str1_range_ptr_ = &(range->range_ref()); + } + + initialised_ = str0_base_ptr_ && + str1_base_ptr_ && + str0_node_ptr_ && + str1_range_ptr_ ; + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(1)->value(); + + std::size_t r0 = 0; + std::size_t r1 = 0; + + const range_t& range = (*str1_range_ptr_); + + if (range(r0, r1, str1_base_ptr_->size())) + { + AssignmentProcess::execute( + str0_node_ptr_->ref(), + str1_base_ptr_->base() + r0, (r1 - r0)); + + branch(0)->value(); + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return str0_node_ptr_->str(); + } + + char_cptr base() const exprtk_override + { + return str0_node_ptr_->base(); + } + + std::size_t size() const exprtk_override + { + return str0_node_ptr_->size(); + } + + range_t& range_ref() exprtk_override + { + return str0_node_ptr_->range_ref(); + } + + const range_t& range_ref() const exprtk_override + { + return str0_node_ptr_->range_ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strass; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + private: + + bool initialised_; + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + strvar_node_ptr str0_node_ptr_; + range_ptr str1_range_ptr_; + }; + + template + class assignment_string_range_node exprtk_final + : public binary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef stringvar_node * strvar_node_ptr; + typedef string_range_node* str_rng_node_ptr; + typedef string_base_node * str_base_ptr; + + using binary_node::branch; + + assignment_string_range_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , initialised_(false) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_rng_node_ptr_(0) + , str0_range_ptr_ (0) + , str1_range_ptr_ (0) + { + if (is_string_range_node(branch(0))) + { + str0_rng_node_ptr_ = static_cast(branch(0)); + str0_base_ptr_ = dynamic_cast(branch(0)); + irange_ptr range = dynamic_cast(branch(0)); + + if (0 == range) + return; + + str0_range_ptr_ = &(range->range_ref()); + } + + if (is_generally_string_node(branch(1))) + { + str1_base_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(1)); + + if (0 == range) + return; + + str1_range_ptr_ = &(range->range_ref()); + } + + initialised_ = str0_base_ptr_ && + str1_base_ptr_ && + str0_rng_node_ptr_ && + str0_range_ptr_ && + str1_range_ptr_ ; + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + std::size_t s0_r0 = 0; + std::size_t s0_r1 = 0; + + std::size_t s1_r0 = 0; + std::size_t s1_r1 = 0; + + const range_t& range0 = (*str0_range_ptr_); + const range_t& range1 = (*str1_range_ptr_); + + if ( + range0(s0_r0, s0_r1, str0_base_ptr_->size()) && + range1(s1_r0, s1_r1, str1_base_ptr_->size()) + ) + { + const std::size_t size = std::min((s0_r1 - s0_r0), (s1_r1 - s1_r0)); + + std::copy( + str1_base_ptr_->base() + s1_r0, + str1_base_ptr_->base() + s1_r0 + size, + const_cast(base() + s0_r0)); + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return str0_base_ptr_->str(); + } + + char_cptr base() const exprtk_override + { + return str0_base_ptr_->base(); + } + + std::size_t size() const exprtk_override + { + return str0_base_ptr_->size(); + } + + range_t& range_ref() exprtk_override + { + return str0_rng_node_ptr_->range_ref(); + } + + const range_t& range_ref() const exprtk_override + { + return str0_rng_node_ptr_->range_ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strass; + } + + inline bool valid() const exprtk_override + { + return initialised_ && binary_node::valid(); + } + + private: + + bool initialised_; + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + str_rng_node_ptr str0_rng_node_ptr_; + range_ptr str0_range_ptr_; + range_ptr str1_range_ptr_; + }; + + template + class conditional_string_node exprtk_final + : public trinary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + + conditional_string_node(expression_ptr condition, + expression_ptr consequent, + expression_ptr alternative) + : trinary_node(details::e_default, consequent, alternative, condition) + , initialised_(false) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_range_ptr_(0) + , str1_range_ptr_(0) + , condition_ (condition ) + , consequent_ (consequent ) + , alternative_(alternative) + { + range_.n0_c = std::make_pair(true,0); + range_.n1_c = std::make_pair(true,0); + + range_.cache.first = range_.n0_c.second; + range_.cache.second = range_.n1_c.second; + + if (is_generally_string_node(trinary_node::branch_[0].first)) + { + str0_base_ptr_ = dynamic_cast(trinary_node::branch_[0].first); + + if (0 == str0_base_ptr_) + return; + + str0_range_ptr_ = dynamic_cast(trinary_node::branch_[0].first); + + if (0 == str0_range_ptr_) + return; + } + + if (is_generally_string_node(trinary_node::branch_[1].first)) + { + str1_base_ptr_ = dynamic_cast(trinary_node::branch_[1].first); + + if (0 == str1_base_ptr_) + return; + + str1_range_ptr_ = dynamic_cast(trinary_node::branch_[1].first); + + if (0 == str1_range_ptr_) + return; + } + + initialised_ = str0_base_ptr_ && + str1_base_ptr_ && + str0_range_ptr_ && + str1_range_ptr_ ; + + assert(valid()); + } + + inline T value() const exprtk_override + { + std::size_t r0 = 0; + std::size_t r1 = 0; + + if (is_true(condition_)) + { + consequent_->value(); + + const range_t& range = str0_range_ptr_->range_ref(); + + if (range(r0, r1, str0_base_ptr_->size())) + { + const std::size_t size = (r1 - r0); + + value_.assign(str0_base_ptr_->base() + r0, size); + + range_.n1_c.second = value_.size(); + range_.cache.second = range_.n1_c.second; + + return T(1); + } + } + else + { + alternative_->value(); + + const range_t& range = str1_range_ptr_->range_ref(); + + if (range(r0, r1, str1_base_ptr_->size())) + { + const std::size_t size = (r1 - r0); + + value_.assign(str1_base_ptr_->base() + r0, size); + + range_.n1_c.second = value_.size(); + range_.cache.second = range_.n1_c.second; + + return T(0); + } + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return value_; + } + + char_cptr base() const exprtk_override + { + return &value_[0]; + } + + std::size_t size() const exprtk_override + { + return value_.size(); + } + + range_t& range_ref() exprtk_override + { + return range_; + } + + const range_t& range_ref() const exprtk_override + { + return range_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strcondition; + } + + inline bool valid() const exprtk_override + { + return + initialised_ && + condition_ && condition_ ->valid() && + consequent_ && consequent_ ->valid() && + alternative_&& alternative_->valid() ; + } + + private: + + bool initialised_; + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + irange_ptr str0_range_ptr_; + irange_ptr str1_range_ptr_; + mutable range_t range_; + mutable std::string value_; + + expression_ptr condition_; + expression_ptr consequent_; + expression_ptr alternative_; + }; + + template + class cons_conditional_str_node exprtk_final + : public binary_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + + using binary_node::branch; + + cons_conditional_str_node(expression_ptr condition, + expression_ptr consequent) + : binary_node(details::e_default, consequent, condition) + , initialised_(false) + , str0_base_ptr_ (0) + , str0_range_ptr_(0) + , condition_ (condition ) + , consequent_(consequent) + { + range_.n0_c = std::make_pair(true,0); + range_.n1_c = std::make_pair(true,0); + + range_.cache.first = range_.n0_c.second; + range_.cache.second = range_.n1_c.second; + + if (is_generally_string_node(branch(0))) + { + str0_base_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_base_ptr_) + return; + + str0_range_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_range_ptr_) + return; + } + + initialised_ = str0_base_ptr_ && str0_range_ptr_ ; + assert(valid()); + } + + inline T value() const exprtk_override + { + if (is_true(condition_)) + { + consequent_->value(); + + const range_t& range = str0_range_ptr_->range_ref(); + + std::size_t r0 = 0; + std::size_t r1 = 0; + + if (range(r0, r1, str0_base_ptr_->size())) + { + const std::size_t size = (r1 - r0); + + value_.assign(str0_base_ptr_->base() + r0, size); + + range_.n1_c.second = value_.size(); + range_.cache.second = range_.n1_c.second; + + return T(1); + } + } + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const + { + return value_; + } + + char_cptr base() const + { + return &value_[0]; + } + + std::size_t size() const + { + return value_.size(); + } + + range_t& range_ref() + { + return range_; + } + + const range_t& range_ref() const + { + return range_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strccondition; + } + + inline bool valid() const exprtk_override + { + return + initialised_ && + condition_ && condition_ ->valid() && + consequent_ && consequent_ ->valid() ; + } + + private: + + bool initialised_; + str_base_ptr str0_base_ptr_; + irange_ptr str0_range_ptr_; + mutable range_t range_; + mutable std::string value_; + + expression_ptr condition_; + expression_ptr consequent_; + }; + + template + class str_vararg_node exprtk_final + : public expression_node + , public string_base_node + , public range_interface + { + public: + + typedef typename range_interface::range_t range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + typedef std::pair branch_t; + + template class Sequence> + explicit str_vararg_node(const Sequence& arg_list) + : initialised_(false) + , str_base_ptr_ (0) + , str_range_ptr_(0) + { + construct_branch_pair(final_node_, const_cast(arg_list.back())); + + if (0 == final_node_.first) + return; + else if (!is_generally_string_node(final_node_.first)) + return; + + str_base_ptr_ = dynamic_cast(final_node_.first); + + if (0 == str_base_ptr_) + return; + + str_range_ptr_ = dynamic_cast(final_node_.first); + + if (0 == str_range_ptr_) + return; + + if (arg_list.size() > 1) + { + const std::size_t arg_list_size = arg_list.size() - 1; + + arg_list_.resize(arg_list_size); + + for (std::size_t i = 0; i < arg_list_size; ++i) + { + if (arg_list[i] && arg_list[i]->valid()) + { + construct_branch_pair(arg_list_[i], arg_list[i]); + } + else + { + arg_list_.clear(); + return; + } + } + + initialised_ = true; + } + + initialised_ &= str_base_ptr_ && str_range_ptr_; + assert(valid()); + } + + inline T value() const exprtk_override + { + if (!arg_list_.empty()) + { + VarArgFunction::process(arg_list_); + } + + final_node_.first->value(); + + return std::numeric_limits::quiet_NaN(); + } + + std::string str() const exprtk_override + { + return str_base_ptr_->str(); + } + + char_cptr base() const exprtk_override + { + return str_base_ptr_->base(); + } + + std::size_t size() const exprtk_override + { + return str_base_ptr_->size(); + } + + range_t& range_ref() exprtk_override + { + return str_range_ptr_->range_ref(); + } + + const range_t& range_ref() const exprtk_override + { + return str_range_ptr_->range_ref(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_stringvararg; + } + + inline bool valid() const exprtk_override + { + return + initialised_ && + final_node_.first && final_node_.first->valid(); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(final_node_ , node_delete_list); + expression_node::ndb_t::collect(arg_list_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return std::max( + expression_node::ndb_t::compute_node_depth(final_node_), + expression_node::ndb_t::compute_node_depth(arg_list_ )); + } + + private: + + bool initialised_; + branch_t final_node_; + str_base_ptr str_base_ptr_; + irange_ptr str_range_ptr_; + std::vector arg_list_; + }; + #endif + + template + inline T axn(const T a, const T x) + { + // a*x^n + return a * exprtk::details::numeric::fast_exp::result(x); + } + + template + inline T axnb(const T a, const T x, const T b) + { + // a*x^n+b + return a * exprtk::details::numeric::fast_exp::result(x) + b; + } + + template + struct sf_base + { + typedef typename details::functor_t::Type Type; + typedef typename details::functor_t functor_t; + typedef typename functor_t::qfunc_t quaternary_functor_t; + typedef typename functor_t::tfunc_t trinary_functor_t; + typedef typename functor_t::bfunc_t binary_functor_t; + typedef typename functor_t::ufunc_t unary_functor_t; + }; + + #define define_sfop3(NN, OP0, OP1) \ + template \ + struct sf##NN##_op : public sf_base \ + { \ + typedef typename sf_base::Type const Type; \ + static inline T process(Type x, Type y, Type z) \ + { \ + return (OP0); \ + } \ + static inline std::string id() \ + { \ + return (OP1); \ + } \ + }; \ + + define_sfop3(00,(x + y) / z ,"(t+t)/t") + define_sfop3(01,(x + y) * z ,"(t+t)*t") + define_sfop3(02,(x + y) - z ,"(t+t)-t") + define_sfop3(03,(x + y) + z ,"(t+t)+t") + define_sfop3(04,(x - y) + z ,"(t-t)+t") + define_sfop3(05,(x - y) / z ,"(t-t)/t") + define_sfop3(06,(x - y) * z ,"(t-t)*t") + define_sfop3(07,(x * y) + z ,"(t*t)+t") + define_sfop3(08,(x * y) - z ,"(t*t)-t") + define_sfop3(09,(x * y) / z ,"(t*t)/t") + define_sfop3(10,(x * y) * z ,"(t*t)*t") + define_sfop3(11,(x / y) + z ,"(t/t)+t") + define_sfop3(12,(x / y) - z ,"(t/t)-t") + define_sfop3(13,(x / y) / z ,"(t/t)/t") + define_sfop3(14,(x / y) * z ,"(t/t)*t") + define_sfop3(15,x / (y + z) ,"t/(t+t)") + define_sfop3(16,x / (y - z) ,"t/(t-t)") + define_sfop3(17,x / (y * z) ,"t/(t*t)") + define_sfop3(18,x / (y / z) ,"t/(t/t)") + define_sfop3(19,x * (y + z) ,"t*(t+t)") + define_sfop3(20,x * (y - z) ,"t*(t-t)") + define_sfop3(21,x * (y * z) ,"t*(t*t)") + define_sfop3(22,x * (y / z) ,"t*(t/t)") + define_sfop3(23,x - (y + z) ,"t-(t+t)") + define_sfop3(24,x - (y - z) ,"t-(t-t)") + define_sfop3(25,x - (y / z) ,"t-(t/t)") + define_sfop3(26,x - (y * z) ,"t-(t*t)") + define_sfop3(27,x + (y * z) ,"t+(t*t)") + define_sfop3(28,x + (y / z) ,"t+(t/t)") + define_sfop3(29,x + (y + z) ,"t+(t+t)") + define_sfop3(30,x + (y - z) ,"t+(t-t)") + define_sfop3(31,(axnb(x,y,z))," ") + define_sfop3(32,(axnb(x,y,z))," ") + define_sfop3(33,(axnb(x,y,z))," ") + define_sfop3(34,(axnb(x,y,z))," ") + define_sfop3(35,(axnb(x,y,z))," ") + define_sfop3(36,(axnb(x,y,z))," ") + define_sfop3(37,(axnb(x,y,z))," ") + define_sfop3(38,(axnb(x,y,z))," ") + define_sfop3(39,x * numeric::log(y) + z,"") + define_sfop3(40,x * numeric::log(y) - z,"") + define_sfop3(41,x * numeric::log10(y) + z,"") + define_sfop3(42,x * numeric::log10(y) - z,"") + define_sfop3(43,x * numeric::sin(y) + z ,"") + define_sfop3(44,x * numeric::sin(y) - z ,"") + define_sfop3(45,x * numeric::cos(y) + z ,"") + define_sfop3(46,x * numeric::cos(y) - z ,"") + define_sfop3(47,details::is_true(x) ? y : z,"") + + #define define_sfop4(NN, OP0, OP1) \ + template \ + struct sf##NN##_op : public sf_base \ + { \ + typedef typename sf_base::Type const Type; \ + static inline T process(Type x, Type y, Type z, Type w) \ + { \ + return (OP0); \ + } \ + static inline std::string id() \ + { \ + return (OP1); \ + } \ + }; \ + + define_sfop4(48,(x + ((y + z) / w)),"t+((t+t)/t)") + define_sfop4(49,(x + ((y + z) * w)),"t+((t+t)*t)") + define_sfop4(50,(x + ((y - z) / w)),"t+((t-t)/t)") + define_sfop4(51,(x + ((y - z) * w)),"t+((t-t)*t)") + define_sfop4(52,(x + ((y * z) / w)),"t+((t*t)/t)") + define_sfop4(53,(x + ((y * z) * w)),"t+((t*t)*t)") + define_sfop4(54,(x + ((y / z) + w)),"t+((t/t)+t)") + define_sfop4(55,(x + ((y / z) / w)),"t+((t/t)/t)") + define_sfop4(56,(x + ((y / z) * w)),"t+((t/t)*t)") + define_sfop4(57,(x - ((y + z) / w)),"t-((t+t)/t)") + define_sfop4(58,(x - ((y + z) * w)),"t-((t+t)*t)") + define_sfop4(59,(x - ((y - z) / w)),"t-((t-t)/t)") + define_sfop4(60,(x - ((y - z) * w)),"t-((t-t)*t)") + define_sfop4(61,(x - ((y * z) / w)),"t-((t*t)/t)") + define_sfop4(62,(x - ((y * z) * w)),"t-((t*t)*t)") + define_sfop4(63,(x - ((y / z) / w)),"t-((t/t)/t)") + define_sfop4(64,(x - ((y / z) * w)),"t-((t/t)*t)") + define_sfop4(65,(((x + y) * z) - w),"((t+t)*t)-t") + define_sfop4(66,(((x - y) * z) - w),"((t-t)*t)-t") + define_sfop4(67,(((x * y) * z) - w),"((t*t)*t)-t") + define_sfop4(68,(((x / y) * z) - w),"((t/t)*t)-t") + define_sfop4(69,(((x + y) / z) - w),"((t+t)/t)-t") + define_sfop4(70,(((x - y) / z) - w),"((t-t)/t)-t") + define_sfop4(71,(((x * y) / z) - w),"((t*t)/t)-t") + define_sfop4(72,(((x / y) / z) - w),"((t/t)/t)-t") + define_sfop4(73,((x * y) + (z * w)),"(t*t)+(t*t)") + define_sfop4(74,((x * y) - (z * w)),"(t*t)-(t*t)") + define_sfop4(75,((x * y) + (z / w)),"(t*t)+(t/t)") + define_sfop4(76,((x * y) - (z / w)),"(t*t)-(t/t)") + define_sfop4(77,((x / y) + (z / w)),"(t/t)+(t/t)") + define_sfop4(78,((x / y) - (z / w)),"(t/t)-(t/t)") + define_sfop4(79,((x / y) - (z * w)),"(t/t)-(t*t)") + define_sfop4(80,(x / (y + (z * w))),"t/(t+(t*t))") + define_sfop4(81,(x / (y - (z * w))),"t/(t-(t*t))") + define_sfop4(82,(x * (y + (z * w))),"t*(t+(t*t))") + define_sfop4(83,(x * (y - (z * w))),"t*(t-(t*t))") + + define_sfop4(84,(axn(x,y) + axn(z,w)),"") + define_sfop4(85,(axn(x,y) + axn(z,w)),"") + define_sfop4(86,(axn(x,y) + axn(z,w)),"") + define_sfop4(87,(axn(x,y) + axn(z,w)),"") + define_sfop4(88,(axn(x,y) + axn(z,w)),"") + define_sfop4(89,(axn(x,y) + axn(z,w)),"") + define_sfop4(90,(axn(x,y) + axn(z,w)),"") + define_sfop4(91,(axn(x,y) + axn(z,w)),"") + define_sfop4(92,((details::is_true(x) && details::is_true(y)) ? z : w),"") + define_sfop4(93,((details::is_true(x) || details::is_true(y)) ? z : w),"") + define_sfop4(94,((x < y) ? z : w),"") + define_sfop4(95,((x <= y) ? z : w),"") + define_sfop4(96,((x > y) ? z : w),"") + define_sfop4(97,((x >= y) ? z : w),"") + define_sfop4(98,(details::is_true(numeric::equal(x,y)) ? z : w),"") + define_sfop4(99,(x * numeric::sin(y) + z * numeric::cos(w)),"") + + define_sfop4(ext00,((x + y) - (z * w)),"(t+t)-(t*t)") + define_sfop4(ext01,((x + y) - (z / w)),"(t+t)-(t/t)") + define_sfop4(ext02,((x + y) + (z * w)),"(t+t)+(t*t)") + define_sfop4(ext03,((x + y) + (z / w)),"(t+t)+(t/t)") + define_sfop4(ext04,((x - y) + (z * w)),"(t-t)+(t*t)") + define_sfop4(ext05,((x - y) + (z / w)),"(t-t)+(t/t)") + define_sfop4(ext06,((x - y) - (z * w)),"(t-t)-(t*t)") + define_sfop4(ext07,((x - y) - (z / w)),"(t-t)-(t/t)") + define_sfop4(ext08,((x + y) - (z - w)),"(t+t)-(t-t)") + define_sfop4(ext09,((x + y) + (z - w)),"(t+t)+(t-t)") + define_sfop4(ext10,((x + y) + (z + w)),"(t+t)+(t+t)") + define_sfop4(ext11,((x + y) * (z - w)),"(t+t)*(t-t)") + define_sfop4(ext12,((x + y) / (z - w)),"(t+t)/(t-t)") + define_sfop4(ext13,((x - y) - (z + w)),"(t-t)-(t+t)") + define_sfop4(ext14,((x - y) + (z + w)),"(t-t)+(t+t)") + define_sfop4(ext15,((x - y) * (z + w)),"(t-t)*(t+t)") + define_sfop4(ext16,((x - y) / (z + w)),"(t-t)/(t+t)") + define_sfop4(ext17,((x * y) - (z + w)),"(t*t)-(t+t)") + define_sfop4(ext18,((x / y) - (z + w)),"(t/t)-(t+t)") + define_sfop4(ext19,((x * y) + (z + w)),"(t*t)+(t+t)") + define_sfop4(ext20,((x / y) + (z + w)),"(t/t)+(t+t)") + define_sfop4(ext21,((x * y) + (z - w)),"(t*t)+(t-t)") + define_sfop4(ext22,((x / y) + (z - w)),"(t/t)+(t-t)") + define_sfop4(ext23,((x * y) - (z - w)),"(t*t)-(t-t)") + define_sfop4(ext24,((x / y) - (z - w)),"(t/t)-(t-t)") + define_sfop4(ext25,((x + y) * (z * w)),"(t+t)*(t*t)") + define_sfop4(ext26,((x + y) * (z / w)),"(t+t)*(t/t)") + define_sfop4(ext27,((x + y) / (z * w)),"(t+t)/(t*t)") + define_sfop4(ext28,((x + y) / (z / w)),"(t+t)/(t/t)") + define_sfop4(ext29,((x - y) / (z * w)),"(t-t)/(t*t)") + define_sfop4(ext30,((x - y) / (z / w)),"(t-t)/(t/t)") + define_sfop4(ext31,((x - y) * (z * w)),"(t-t)*(t*t)") + define_sfop4(ext32,((x - y) * (z / w)),"(t-t)*(t/t)") + define_sfop4(ext33,((x * y) * (z + w)),"(t*t)*(t+t)") + define_sfop4(ext34,((x / y) * (z + w)),"(t/t)*(t+t)") + define_sfop4(ext35,((x * y) / (z + w)),"(t*t)/(t+t)") + define_sfop4(ext36,((x / y) / (z + w)),"(t/t)/(t+t)") + define_sfop4(ext37,((x * y) / (z - w)),"(t*t)/(t-t)") + define_sfop4(ext38,((x / y) / (z - w)),"(t/t)/(t-t)") + define_sfop4(ext39,((x * y) * (z - w)),"(t*t)*(t-t)") + define_sfop4(ext40,((x * y) / (z * w)),"(t*t)/(t*t)") + define_sfop4(ext41,((x / y) * (z / w)),"(t/t)*(t/t)") + define_sfop4(ext42,((x / y) * (z - w)),"(t/t)*(t-t)") + define_sfop4(ext43,((x * y) * (z * w)),"(t*t)*(t*t)") + define_sfop4(ext44,(x + (y * (z / w))),"t+(t*(t/t))") + define_sfop4(ext45,(x - (y * (z / w))),"t-(t*(t/t))") + define_sfop4(ext46,(x + (y / (z * w))),"t+(t/(t*t))") + define_sfop4(ext47,(x - (y / (z * w))),"t-(t/(t*t))") + define_sfop4(ext48,(((x - y) - z) * w),"((t-t)-t)*t") + define_sfop4(ext49,(((x - y) - z) / w),"((t-t)-t)/t") + define_sfop4(ext50,(((x - y) + z) * w),"((t-t)+t)*t") + define_sfop4(ext51,(((x - y) + z) / w),"((t-t)+t)/t") + define_sfop4(ext52,((x + (y - z)) * w),"(t+(t-t))*t") + define_sfop4(ext53,((x + (y - z)) / w),"(t+(t-t))/t") + define_sfop4(ext54,((x + y) / (z + w)),"(t+t)/(t+t)") + define_sfop4(ext55,((x - y) / (z - w)),"(t-t)/(t-t)") + define_sfop4(ext56,((x + y) * (z + w)),"(t+t)*(t+t)") + define_sfop4(ext57,((x - y) * (z - w)),"(t-t)*(t-t)") + define_sfop4(ext58,((x - y) + (z - w)),"(t-t)+(t-t)") + define_sfop4(ext59,((x - y) - (z - w)),"(t-t)-(t-t)") + define_sfop4(ext60,((x / y) + (z * w)),"(t/t)+(t*t)") + define_sfop4(ext61,(((x * y) * z) / w),"((t*t)*t)/t") + + #undef define_sfop3 + #undef define_sfop4 + + template + class sf3_node exprtk_final : public trinary_node + { + public: + + typedef expression_node* expression_ptr; + + sf3_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1, + expression_ptr branch2) + : trinary_node(opr, branch0, branch1, branch2) + {} + + inline T value() const exprtk_override + { + const T x = trinary_node::branch_[0].first->value(); + const T y = trinary_node::branch_[1].first->value(); + const T z = trinary_node::branch_[2].first->value(); + + return SpecialFunction::process(x, y, z); + } + }; + + template + class sf4_node exprtk_final : public quaternary_node + { + public: + + typedef expression_node* expression_ptr; + + sf4_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1, + expression_ptr branch2, + expression_ptr branch3) + : quaternary_node(opr, branch0, branch1, branch2, branch3) + {} + + inline T value() const exprtk_override + { + const T x = quaternary_node::branch_[0].first->value(); + const T y = quaternary_node::branch_[1].first->value(); + const T z = quaternary_node::branch_[2].first->value(); + const T w = quaternary_node::branch_[3].first->value(); + + return SpecialFunction::process(x, y, z, w); + } + }; + + template + class sf3_var_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + + sf3_var_node(const T& v0, const T& v1, const T& v2) + : v0_(v0) + , v1_(v1) + , v2_(v2) + {} + + inline T value() const exprtk_override + { + return SpecialFunction::process(v0_, v1_, v2_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_trinary; + } + + private: + + sf3_var_node(const sf3_var_node&) exprtk_delete; + sf3_var_node& operator=(const sf3_var_node&) exprtk_delete; + + const T& v0_; + const T& v1_; + const T& v2_; + }; + + template + class sf4_var_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + + sf4_var_node(const T& v0, const T& v1, const T& v2, const T& v3) + : v0_(v0) + , v1_(v1) + , v2_(v2) + , v3_(v3) + {} + + inline T value() const exprtk_override + { + return SpecialFunction::process(v0_, v1_, v2_, v3_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_trinary; + } + + private: + + sf4_var_node(const sf4_var_node&) exprtk_delete; + sf4_var_node& operator=(const sf4_var_node&) exprtk_delete; + + const T& v0_; + const T& v1_; + const T& v2_; + const T& v3_; + }; + + template + class vararg_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + template class Sequence> + explicit vararg_node(const Sequence& arg_list) + : initialised_(false) + { + arg_list_.resize(arg_list.size()); + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (arg_list[i] && arg_list[i]->valid()) + { + construct_branch_pair(arg_list_[i],arg_list[i]); + } + else + { + arg_list_.clear(); + return; + } + } + + initialised_ = (arg_list_.size() == arg_list.size()); + assert(valid()); + } + + inline T value() const exprtk_override + { + return VarArgFunction::process(arg_list_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vararg; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(arg_list_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(arg_list_); + } + + private: + + std::vector arg_list_; + bool initialised_; + }; + + template + class vararg_varnode exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + + template class Sequence> + explicit vararg_varnode(const Sequence& arg_list) + : initialised_(false) + { + arg_list_.resize(arg_list.size()); + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (arg_list[i] && arg_list[i]->valid() && is_variable_node(arg_list[i])) + { + variable_node* var_node_ptr = static_cast*>(arg_list[i]); + arg_list_[i] = (&var_node_ptr->ref()); + } + else + { + arg_list_.clear(); + return; + } + } + + initialised_ = (arg_list.size() == arg_list_.size()); + assert(valid()); + } + + inline T value() const exprtk_override + { + return VarArgFunction::process(arg_list_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vararg; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + private: + + std::vector arg_list_; + bool initialised_; + }; + + template + class vectorize_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + explicit vectorize_node(const expression_ptr v) + : ivec_ptr_(0) + { + construct_branch_pair(v_, v); + + if (is_ivector_node(v_.first)) + { + ivec_ptr_ = dynamic_cast*>(v_.first); + } + } + + inline T value() const exprtk_override + { + v_.first->value(); + return VecFunction::process(ivec_ptr_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecfunc; + } + + inline bool valid() const exprtk_override + { + return ivec_ptr_ && v_.first && v_.first->valid(); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(v_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(v_); + } + + private: + + vector_interface* ivec_ptr_; + branch_t v_; + }; + + template + class assignment_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , var_node_ptr_(0) + { + if (is_variable_node(branch(0))) + { + var_node_ptr_ = static_cast*>(branch(0)); + } + } + + inline T value() const exprtk_override + { + T& result = var_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return var_node_ptr_ && binary_node::valid(); + } + + private: + + variable_node* var_node_ptr_; + }; + + template + class assignment_vec_elem_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_vec_elem_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_elem_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& result = vec_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return vec_node_ptr_ && binary_node::valid(); + } + + private: + + vector_elem_node* vec_node_ptr_; + }; + + template + class assignment_vec_elem_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_vec_elem_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_elem_rtc_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& result = vec_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return vec_node_ptr_ && binary_node::valid(); + } + + private: + + vector_elem_rtc_node* vec_node_ptr_; + }; + + template + class assignment_rebasevec_elem_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using expression_node::branch; + + assignment_rebasevec_elem_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_elem_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& result = rbvec_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_elem_node* rbvec_node_ptr_; + }; + + template + class assignment_rebasevec_elem_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using expression_node::branch; + + assignment_rebasevec_elem_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_elem_rtc_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& result = rbvec_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_elem_rtc_node* rbvec_node_ptr_; + }; + + template + class assignment_rebasevec_celem_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_rebasevec_celem_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_celem_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& result = rbvec_node_ptr_->ref(); + result = branch(1)->value(); + + return result; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_celem_node* rbvec_node_ptr_; + }; + + template + class assignment_vec_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + using binary_node::branch; + + assignment_vec_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + vds() = vec_node_ptr_->vds(); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + const T v = branch(1)->value(); + + T* vec = vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec + lud.upper_bound; + + while (vec < upper_bound) + { + #define exprtk_loop(N) \ + vec[N] = v; \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec += lud.batch_size; + } + + switch (lud.remainder) + { + #define case_stmt(N) \ + case N : *vec++ = v; \ + exprtk_fallthrough \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15) case_stmt(14) + case_stmt(13) case_stmt(12) + case_stmt(11) case_stmt(10) + case_stmt( 9) case_stmt( 8) + case_stmt( 7) case_stmt( 6) + case_stmt( 5) case_stmt( 4) + #endif + case_stmt( 3) case_stmt( 2) + case 1 : *vec++ = v; + } + + #undef exprtk_loop + #undef case_stmt + + return vec_node_ptr_->value(); + } + + vector_node_ptr vec() const exprtk_override + { + return vec_node_ptr_; + } + + vector_node_ptr vec() exprtk_override + { + return vec_node_ptr_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvalass; + } + + inline bool valid() const exprtk_override + { + return + vec_node_ptr_ && + (vds().size() <= vec_node_ptr_->vec_holder().base_size()) && + binary_node::valid(); + } + + std::size_t size() const exprtk_override + { + return vec_node_ptr_->vec_holder().size(); + } + + std::size_t base_size() const exprtk_override + { + return vec_node_ptr_->vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node* vec_node_ptr_; + vds_t vds_; + }; + + template + class assignment_vecvec_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + using binary_node::branch; + + assignment_vecvec_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec0_node_ptr_(0) + , vec1_node_ptr_(0) + , initialised_(false) + , src_is_ivec_(false) + { + if (is_vector_node(branch(0))) + { + vec0_node_ptr_ = static_cast*>(branch(0)); + vds() = vec0_node_ptr_->vds(); + } + + if (is_vector_node(branch(1))) + { + vec1_node_ptr_ = static_cast*>(branch(1)); + vds_t::match_sizes(vds(),vec1_node_ptr_->vds()); + } + else if (is_ivector_node(branch(1))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(1)))) + { + vec1_node_ptr_ = vi->vec(); + + if (!vi->side_effect()) + { + vi->vds() = vds(); + src_is_ivec_ = true; + } + else + vds_t::match_sizes(vds(),vi->vds()); + } + } + + initialised_ = + vec0_node_ptr_ && + vec1_node_ptr_ && + (size() <= base_size()) && + (vds_.size() <= base_size()) && + binary_node::valid(); + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(1)->value(); + + if (src_is_ivec_) + return vec0_node_ptr_->value(); + + T* vec0 = vec0_node_ptr_->vds().data(); + T* vec1 = vec1_node_ptr_->vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec0 + lud.upper_bound; + + while (vec0 < upper_bound) + { + #define exprtk_loop(N) \ + vec0[N] = vec1[N]; \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + } + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : *vec0++ = *vec1++; \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return vec0_node_ptr_->value(); + } + + vector_node_ptr vec() exprtk_override + { + return vec0_node_ptr_; + } + + vector_node_ptr vec() const exprtk_override + { + return vec0_node_ptr_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvecass; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + std::size_t size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().size(), + vec1_node_ptr_->vec_holder().size()); + } + + std::size_t base_size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().base_size(), + vec1_node_ptr_->vec_holder().base_size()); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node* vec0_node_ptr_; + vector_node* vec1_node_ptr_; + bool initialised_; + bool src_is_ivec_; + vds_t vds_; + }; + + template + class assignment_op_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , var_node_ptr_(0) + { + if (is_variable_node(branch(0))) + { + var_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = var_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return var_node_ptr_ && binary_node::valid(); + } + + private: + + variable_node* var_node_ptr_; + }; + + template + class assignment_vec_elem_op_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_vec_elem_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_elem_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = vec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return vec_node_ptr_ && binary_node::valid(); + } + + private: + + vector_elem_node* vec_node_ptr_; + }; + + template + class assignment_vec_elem_op_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_vec_elem_op_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_elem_rtc_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = vec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return vec_node_ptr_ && binary_node::valid(); + } + + private: + + vector_elem_rtc_node* vec_node_ptr_; + }; + + template + class assignment_vec_celem_op_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_vec_celem_op_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_celem_rtc_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = vec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return vec_node_ptr_ && binary_node::valid(); + } + + private: + + vector_celem_rtc_node* vec_node_ptr_; + }; + + template + class assignment_rebasevec_elem_op_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_rebasevec_elem_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_elem_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = rbvec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_elem_node* rbvec_node_ptr_; + }; + + template + class assignment_rebasevec_celem_op_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_rebasevec_celem_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_celem_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = rbvec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_celem_node* rbvec_node_ptr_; + }; + + template + class assignment_rebasevec_elem_op_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_rebasevec_elem_op_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_elem_rtc_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = rbvec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_elem_rtc_node* rbvec_node_ptr_; + }; + + template + class assignment_rebasevec_celem_op_rtc_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + assignment_rebasevec_celem_op_rtc_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , rbvec_node_ptr_(0) + { + if (is_rebasevector_celem_rtc_node(branch(0))) + { + rbvec_node_ptr_ = static_cast*>(branch(0)); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + T& v = rbvec_node_ptr_->ref(); + v = Operation::process(v,branch(1)->value()); + + return v; + } + + inline bool valid() const exprtk_override + { + return rbvec_node_ptr_ && binary_node::valid(); + } + + private: + + rebasevector_celem_rtc_node* rbvec_node_ptr_; + }; + + template + class assignment_vec_op_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + using binary_node::branch; + + assignment_vec_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec_node_ptr_(0) + { + if (is_vector_node(branch(0))) + { + vec_node_ptr_ = static_cast*>(branch(0)); + vds() = vec_node_ptr_->vds(); + } + + assert(valid()); + } + + inline T value() const exprtk_override + { + const T v = branch(1)->value(); + + T* vec = vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec + lud.upper_bound; + + while (vec < upper_bound) + { + #define exprtk_loop(N) \ + Operation::assign(vec[N],v); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec += lud.batch_size; + } + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : Operation::assign(*vec++,v); \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return vec_node_ptr_->value(); + } + + vector_node_ptr vec() const exprtk_override + { + return vec_node_ptr_; + } + + vector_node_ptr vec() exprtk_override + { + return vec_node_ptr_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecopvalass; + } + + inline bool valid() const exprtk_override + { + return + vec_node_ptr_ && + (size() <= base_size()) && + binary_node::valid() ; + } + + std::size_t size() const exprtk_override + { + return vec_node_ptr_->vec_holder().size(); + } + + std::size_t base_size() const exprtk_override + { + return vec_node_ptr_->vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + bool side_effect() const exprtk_override + { + return true; + } + + private: + + vector_node* vec_node_ptr_; + vds_t vds_; + }; + + template + class assignment_vecvec_op_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vec_data_store vds_t; + + using binary_node::branch; + + assignment_vecvec_op_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec0_node_ptr_(0) + , vec1_node_ptr_(0) + , initialised_(false) + { + if (is_vector_node(branch(0))) + { + vec0_node_ptr_ = static_cast*>(branch(0)); + vds() = vec0_node_ptr_->vds(); + } + + if (is_vector_node(branch(1))) + { + vec1_node_ptr_ = static_cast*>(branch(1)); + vec1_node_ptr_->vds() = vds(); + } + else if (is_ivector_node(branch(1))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(1)))) + { + vec1_node_ptr_ = vi->vec(); + vec1_node_ptr_->vds() = vi->vds(); + } + else + vds_t::match_sizes(vds(),vec1_node_ptr_->vds()); + } + + initialised_ = + vec0_node_ptr_ && + vec1_node_ptr_ && + (size() <= base_size()) && + binary_node::valid(); + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + T* vec0 = vec0_node_ptr_->vds().data(); + const T* vec1 = vec1_node_ptr_->vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec0 + lud.upper_bound; + + while (vec0 < upper_bound) + { + #define exprtk_loop(N) \ + vec0[N] = Operation::process(vec0[N], vec1[N]); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : { vec0[i] = Operation::process(vec0[i], vec1[i]); ++i; } \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return vec0_node_ptr_->value(); + } + + vector_node_ptr vec() const exprtk_override + { + return vec0_node_ptr_; + } + + vector_node_ptr vec() exprtk_override + { + return vec0_node_ptr_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecopvecass; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + std::size_t size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().size(), + vec1_node_ptr_->vec_holder().size()); + } + + std::size_t base_size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().base_size(), + vec1_node_ptr_->vec_holder().base_size()); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + bool side_effect() const exprtk_override + { + return true; + } + + private: + + vector_node* vec0_node_ptr_; + vector_node* vec1_node_ptr_; + bool initialised_; + vds_t vds_; + }; + + template + struct memory_context_t + { + typedef vector_node* vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + + memory_context_t() + : temp_(0) + , temp_vec_node_(0) + {} + + void clear() + { + delete temp_vec_node_; + delete temp_; + } + + vector_holder_ptr temp_; + vector_node_ptr temp_vec_node_; + }; + + template + inline memory_context_t make_memory_context(vector_holder& vec_holder, + vec_data_store& vds) + { + memory_context_t result_ctxt; + result_ctxt.temp_ = (vec_holder.rebaseable()) ? + new vector_holder(vec_holder,vds) : + new vector_holder(vds) ; + result_ctxt.temp_vec_node_ = new vector_node (vds,result_ctxt.temp_); + return result_ctxt; + } + + template + inline memory_context_t make_memory_context(vector_holder& vec_holder0, + vector_holder& vec_holder1, + vec_data_store& vds) + { + memory_context_t result_ctxt; + + if (!vec_holder0.rebaseable() && !vec_holder1.rebaseable()) + result_ctxt.temp_ = new vector_holder(vds); + else if (vec_holder0.rebaseable() && !vec_holder1.rebaseable()) + result_ctxt.temp_ = new vector_holder(vec_holder0,vds); + else if (!vec_holder0.rebaseable() && vec_holder1.rebaseable()) + result_ctxt.temp_ = new vector_holder(vec_holder1,vds); + else + { + result_ctxt.temp_ = (vec_holder0.base_size() >= vec_holder1.base_size()) ? + new vector_holder(vec_holder0, vds) : + new vector_holder(vec_holder1, vds) ; + } + + result_ctxt.temp_vec_node_ = new vector_node (vds,result_ctxt.temp_); + return result_ctxt; + } + + template + class vec_binop_vecvec_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef memory_context_t memory_context; + + using binary_node::branch; + + vec_binop_vecvec_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec0_node_ptr_(0) + , vec1_node_ptr_(0) + , initialised_(false) + { + bool v0_is_ivec = false; + bool v1_is_ivec = false; + + if (is_vector_node(branch(0))) + { + vec0_node_ptr_ = static_cast(branch(0)); + } + else if (is_ivector_node(branch(0))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(0)))) + { + vec0_node_ptr_ = vi->vec(); + v0_is_ivec = true; + } + } + + if (is_vector_node(branch(1))) + { + vec1_node_ptr_ = static_cast(branch(1)); + } + else if (is_ivector_node(branch(1))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(1)))) + { + vec1_node_ptr_ = vi->vec(); + v1_is_ivec = true; + } + } + + if (vec0_node_ptr_ && vec1_node_ptr_) + { + vector_holder& vec0 = vec0_node_ptr_->vec_holder(); + vector_holder& vec1 = vec1_node_ptr_->vec_holder(); + + if (v0_is_ivec && (vec0.base_size() <= vec1.base_size())) + { + vds_ = vds_t(vec0_node_ptr_->vds()); + } + else if (v1_is_ivec && (vec1.base_size() <= vec0.base_size())) + { + vds_ = vds_t(vec1_node_ptr_->vds()); + } + else + { + vds_ = vds_t(std::min(vec0.base_size(),vec1.base_size())); + } + + memory_context_ = make_memory_context(vec0, vec1, vds()); + + initialised_ = + (size() <= base_size()) && + binary_node::valid(); + } + + assert(valid()); + } + + ~vec_binop_vecvec_node() + { + memory_context_.clear(); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + const T* vec0 = vec0_node_ptr_->vds().data(); + const T* vec1 = vec1_node_ptr_->vds().data(); + T* vec2 = vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec2 + lud.upper_bound; + + while (vec2 < upper_bound) + { + #define exprtk_loop(N) \ + vec2[N] = Operation::process(vec0[N], vec1[N]); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + vec2 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N) \ + case N : { vec2[i] = Operation::process(vec0[i], vec1[i]); ++i; } \ + exprtk_fallthrough \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15) case_stmt(14) + case_stmt(13) case_stmt(12) + case_stmt(11) case_stmt(10) + case_stmt( 9) case_stmt( 8) + case_stmt( 7) case_stmt( 6) + case_stmt( 5) case_stmt( 4) + #endif + case_stmt( 3) case_stmt( 2) + case_stmt( 1) + default: break; + } + + #undef exprtk_loop + #undef case_stmt + + return (vds().data())[0]; + } + + vector_node_ptr vec() const exprtk_override + { + return memory_context_.temp_vec_node_; + } + + vector_node_ptr vec() exprtk_override + { + return memory_context_.temp_vec_node_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvecarith; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + std::size_t size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().size(), + vec1_node_ptr_->vec_holder().size()); + } + + std::size_t base_size() const exprtk_override + { + return std::min( + vec0_node_ptr_->vec_holder().base_size(), + vec1_node_ptr_->vec_holder().base_size()); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node_ptr vec0_node_ptr_; + vector_node_ptr vec1_node_ptr_; + bool initialised_; + vds_t vds_; + memory_context memory_context_; + }; + + template + class vec_binop_vecval_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef memory_context_t memory_context; + + using binary_node::branch; + + vec_binop_vecval_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec0_node_ptr_(0) + { + bool v0_is_ivec = false; + + if (is_vector_node(branch(0))) + { + vec0_node_ptr_ = static_cast(branch(0)); + } + else if (is_ivector_node(branch(0))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(0)))) + { + vec0_node_ptr_ = vi->vec(); + v0_is_ivec = true; + } + } + + if (vec0_node_ptr_) + { + if (v0_is_ivec) + vds() = vec0_node_ptr_->vds(); + else + vds() = vds_t(vec0_node_ptr_->base_size()); + + memory_context_ = make_memory_context(vec0_node_ptr_->vec_holder(), vds()); + } + + assert(valid()); + } + + ~vec_binop_vecval_node() + { + memory_context_.clear(); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + const T v = branch(1)->value(); + + const T* vec0 = vec0_node_ptr_->vds().data(); + T* vec1 = vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec0 + lud.upper_bound; + + while (vec0 < upper_bound) + { + #define exprtk_loop(N) \ + vec1[N] = Operation::process(vec0[N], v); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : { vec1[i] = Operation::process(vec0[i], v); ++i; } \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return (vds().data())[0]; + } + + vector_node_ptr vec() const exprtk_override + { + return memory_context_.temp_vec_node_; + } + + vector_node_ptr vec() exprtk_override + { + return memory_context_.temp_vec_node_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvalarith; + } + + inline bool valid() const exprtk_override + { + return + vec0_node_ptr_ && + (size() <= base_size()) && + binary_node::valid(); + } + + std::size_t size() const exprtk_override + { + return vec0_node_ptr_->size(); + } + + std::size_t base_size() const exprtk_override + { + return vec0_node_ptr_->vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node_ptr vec0_node_ptr_; + vds_t vds_; + memory_context memory_context_; + }; + + template + class vec_binop_valvec_node exprtk_final + : public binary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef memory_context_t memory_context; + + using binary_node::branch; + + vec_binop_valvec_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , vec1_node_ptr_(0) + { + bool v1_is_ivec = false; + + if (is_vector_node(branch(1))) + { + vec1_node_ptr_ = static_cast(branch(1)); + } + else if (is_ivector_node(branch(1))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(1)))) + { + vec1_node_ptr_ = vi->vec(); + v1_is_ivec = true; + } + } + + if (vec1_node_ptr_) + { + if (v1_is_ivec) + vds() = vec1_node_ptr_->vds(); + else + vds() = vds_t(vec1_node_ptr_->base_size()); + + memory_context_ = make_memory_context(vec1_node_ptr_->vec_holder(), vds()); + } + + assert(valid()); + } + + ~vec_binop_valvec_node() + { + memory_context_.clear(); + } + + inline T value() const exprtk_override + { + const T v = branch(0)->value(); + branch(1)->value(); + + T* vec0 = vds().data(); + const T* vec1 = vec1_node_ptr_->vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec0 + lud.upper_bound; + + while (vec0 < upper_bound) + { + #define exprtk_loop(N) \ + vec0[N] = Operation::process(v, vec1[N]); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : { vec0[i] = Operation::process(v, vec1[i]); ++i; } \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return (vds().data())[0]; + } + + vector_node_ptr vec() const exprtk_override + { + return memory_context_.temp_vec_node_; + } + + vector_node_ptr vec() exprtk_override + { + return memory_context_.temp_vec_node_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecvalarith; + } + + inline bool valid() const exprtk_override + { + return + vec1_node_ptr_ && + (size() <= base_size()) && + (vds_.size() <= base_size()) && + binary_node::valid(); + } + + std::size_t size() const exprtk_override + { + return vec1_node_ptr_->vec_holder().size(); + } + + std::size_t base_size() const exprtk_override + { + return vec1_node_ptr_->vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node_ptr vec1_node_ptr_; + vds_t vds_; + memory_context memory_context_; + }; + + template + class unary_vector_node exprtk_final + : public unary_node + , public vector_interface + { + public: + + typedef expression_node* expression_ptr; + typedef vector_node* vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef memory_context_t memory_context; + + using expression_node::branch; + + unary_vector_node(const operator_type& opr, expression_ptr branch0) + : unary_node(opr, branch0) + , vec0_node_ptr_(0) + { + bool vec0_is_ivec = false; + + if (is_vector_node(branch(0))) + { + vec0_node_ptr_ = static_cast(branch(0)); + } + else if (is_ivector_node(branch(0))) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 != (vi = dynamic_cast*>(branch(0)))) + { + vec0_node_ptr_ = vi->vec(); + vec0_is_ivec = true; + } + } + + if (vec0_node_ptr_) + { + if (vec0_is_ivec) + vds_ = vec0_node_ptr_->vds(); + else + vds_ = vds_t(vec0_node_ptr_->base_size()); + + memory_context_ = make_memory_context(vec0_node_ptr_->vec_holder(), vds()); + } + + assert(valid()); + } + + ~unary_vector_node() + { + memory_context_.clear(); + } + + inline T value() const exprtk_override + { + branch()->value(); + + const T* vec0 = vec0_node_ptr_->vds().data(); + T* vec1 = vds().data(); + + loop_unroll::details lud(size()); + const T* upper_bound = vec0 + lud.upper_bound; + + while (vec0 < upper_bound) + { + #define exprtk_loop(N) \ + vec1[N] = Operation::process(vec0[N]); \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec0 += lud.batch_size; + vec1 += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N) \ + case N : { vec1[i] = Operation::process(vec0[i]); ++i; } \ + exprtk_fallthrough \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15) case_stmt(14) + case_stmt(13) case_stmt(12) + case_stmt(11) case_stmt(10) + case_stmt( 9) case_stmt( 8) + case_stmt( 7) case_stmt( 6) + case_stmt( 5) case_stmt( 4) + #endif + case_stmt( 3) case_stmt( 2) + case_stmt( 1) + default: break; + } + + #undef exprtk_loop + #undef case_stmt + + return (vds().data())[0]; + } + + vector_node_ptr vec() const exprtk_override + { + return memory_context_.temp_vec_node_; + } + + vector_node_ptr vec() exprtk_override + { + return memory_context_.temp_vec_node_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecunaryop; + } + + inline bool valid() const exprtk_override + { + return vec0_node_ptr_ && unary_node::valid(); + } + + std::size_t size() const exprtk_override + { + return vec0_node_ptr_->vec_holder().size(); + } + + std::size_t base_size() const exprtk_override + { + return vec0_node_ptr_->vec_holder().base_size(); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + private: + + vector_node_ptr vec0_node_ptr_; + vds_t vds_; + memory_context memory_context_; + }; + + template + class conditional_vector_node exprtk_final + : public expression_node + , public vector_interface + { + public: + + typedef expression_node * expression_ptr; + typedef vector_interface* vec_interface_ptr; + typedef vector_node * vector_node_ptr; + typedef vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + typedef vec_data_store vds_t; + typedef memory_context_t memory_context; + typedef std::pair branch_t; + + conditional_vector_node(expression_ptr condition, + expression_ptr consequent, + expression_ptr alternative) + : consequent_node_ptr_ (0) + , alternative_node_ptr_(0) + , temp_vec_node_ (0) + , temp_ (0) + , result_vec_size_ (0) + , initialised_ (false) + { + construct_branch_pair(condition_ , condition ); + construct_branch_pair(consequent_ , consequent ); + construct_branch_pair(alternative_, alternative); + + if (details::is_ivector_node(consequent_.first)) + { + vec_interface_ptr ivec_ptr = dynamic_cast(consequent_.first); + + if (0 != ivec_ptr) + { + consequent_node_ptr_ = ivec_ptr->vec(); + } + } + + if (details::is_ivector_node(alternative_.first)) + { + vec_interface_ptr ivec_ptr = dynamic_cast(alternative_.first); + + if (0 != ivec_ptr) + { + alternative_node_ptr_ = ivec_ptr->vec(); + } + } + + if (consequent_node_ptr_ && alternative_node_ptr_) + { + const std::size_t vec_size = + std::max(consequent_node_ptr_ ->vec_holder().base_size(), + alternative_node_ptr_->vec_holder().base_size()); + + vds_ = vds_t(vec_size); + memory_context_ = make_memory_context( + consequent_node_ptr_ ->vec_holder(), + alternative_node_ptr_->vec_holder(), + vds()); + + initialised_ = (vec_size > 0); + } + + assert(initialised_); + } + + ~conditional_vector_node() + { + memory_context_.clear(); + } + + inline T value() const exprtk_override + { + T result = T(0); + T* source_vector = 0; + T* result_vector = vds().data(); + + if (is_true(condition_)) + { + result = consequent_.first->value(); + source_vector = consequent_node_ptr_->vds().data(); + result_vec_size_ = consequent_node_ptr_->size(); + } + else + { + result = alternative_.first->value(); + source_vector = alternative_node_ptr_->vds().data(); + result_vec_size_ = alternative_node_ptr_->size(); + } + + for (std::size_t i = 0; i < result_vec_size_; ++i) + { + result_vector[i] = source_vector[i]; + } + + return result; + } + + vector_node_ptr vec() const exprtk_override + { + return memory_context_.temp_vec_node_; + } + + vector_node_ptr vec() exprtk_override + { + return memory_context_.temp_vec_node_; + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vecondition; + } + + inline bool valid() const exprtk_override + { + return + initialised_ && + condition_ .first && condition_ .first->valid() && + consequent_ .first && consequent_ .first->valid() && + alternative_.first && alternative_.first->valid() && + size() <= base_size(); + } + + std::size_t size() const exprtk_override + { + return result_vec_size_; + } + + std::size_t base_size() const exprtk_override + { + return std::min( + consequent_node_ptr_ ->vec_holder().base_size(), + alternative_node_ptr_->vec_holder().base_size()); + } + + vds_t& vds() exprtk_override + { + return vds_; + } + + const vds_t& vds() const exprtk_override + { + return vds_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(condition_ , node_delete_list); + expression_node::ndb_t::collect(consequent_ , node_delete_list); + expression_node::ndb_t::collect(alternative_ , node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth + (condition_, consequent_, alternative_); + } + + private: + + branch_t condition_; + branch_t consequent_; + branch_t alternative_; + vector_node_ptr consequent_node_ptr_; + vector_node_ptr alternative_node_ptr_; + vector_node_ptr temp_vec_node_; + vector_holder_ptr temp_; + vds_t vds_; + mutable std::size_t result_vec_size_; + bool initialised_; + memory_context memory_context_; + }; + + template + class scand_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + scand_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + { + assert(binary_node::valid()); + } + + inline T value() const exprtk_override + { + return ( + std::not_equal_to() + (T(0),branch(0)->value()) && + std::not_equal_to() + (T(0),branch(1)->value()) + ) ? T(1) : T(0); + } + }; + + template + class scor_node exprtk_final : public binary_node + { + public: + + typedef expression_node* expression_ptr; + using binary_node::branch; + + scor_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + { + assert(binary_node::valid()); + } + + inline T value() const exprtk_override + { + return ( + std::not_equal_to() + (T(0),branch(0)->value()) || + std::not_equal_to() + (T(0),branch(1)->value()) + ) ? T(1) : T(0); + } + }; + + template + class function_N_node exprtk_final : public expression_node + { + public: + + // Function of N parameters. + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef IFunction ifunction; + + explicit function_N_node(ifunction* func) + : function_((N == func->param_count) ? func : reinterpret_cast(0)) + , parameter_count_(func->param_count) + , initialised_(false) + {} + + template + bool init_branches(expression_ptr (&b)[NumBranches]) + { + // Needed for incompetent and broken msvc compiler versions + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable: 4127) + #endif + + if (N != NumBranches) + { + return false; + } + + for (std::size_t i = 0; i < NumBranches; ++i) + { + if (b[i] && b[i]->valid()) + branch_[i] = std::make_pair(b[i],branch_deletable(b[i])); + else + return false; + } + + initialised_ = function_; + assert(valid()); + return initialised_; + + #ifdef _MSC_VER + #pragma warning(pop) + #endif + } + + inline bool operator <(const function_N_node& fn) const + { + return this < (&fn); + } + + inline T value() const exprtk_override + { + // Needed for incompetent and broken msvc compiler versions + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable: 4127) + #endif + + T v[N]; + evaluate_branches::execute(v,branch_); + return invoke::execute(*function_,v); + + #ifdef _MSC_VER + #pragma warning(pop) + #endif + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_function; + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::template compute_node_depth(branch_); + } + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[BranchCount], const branch_t (&b)[BranchCount]) + { + for (std::size_t i = 0; i < BranchCount; ++i) + { + v[i] = b[i].first->value(); + } + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[6], const branch_t (&b)[6]) + { + v[0] = b[0].first->value(); + v[1] = b[1].first->value(); + v[2] = b[2].first->value(); + v[3] = b[3].first->value(); + v[4] = b[4].first->value(); + v[5] = b[5].first->value(); + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[5], const branch_t (&b)[5]) + { + v[0] = b[0].first->value(); + v[1] = b[1].first->value(); + v[2] = b[2].first->value(); + v[3] = b[3].first->value(); + v[4] = b[4].first->value(); + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[4], const branch_t (&b)[4]) + { + v[0] = b[0].first->value(); + v[1] = b[1].first->value(); + v[2] = b[2].first->value(); + v[3] = b[3].first->value(); + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[3], const branch_t (&b)[3]) + { + v[0] = b[0].first->value(); + v[1] = b[1].first->value(); + v[2] = b[2].first->value(); + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[2], const branch_t (&b)[2]) + { + v[0] = b[0].first->value(); + v[1] = b[1].first->value(); + } + }; + + template + struct evaluate_branches + { + static inline void execute(T_ (&v)[1], const branch_t (&b)[1]) + { + v[0] = b[0].first->value(); + } + }; + + template + struct invoke { static inline T execute(ifunction&, branch_t (&)[ParamCount]) { return std::numeric_limits::quiet_NaN(); } }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[20]) + { return f(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15],v[16],v[17],v[18],v[19]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[19]) + { return f(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7],v[8],v[9],v[10],v[11],v[12],v[13],v[14],v[15],v[16],v[17],v[18]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[18]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15], v[16], v[17]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[17]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15], v[16]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[16]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14], v[15]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[15]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13], v[14]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[14]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12], v[13]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[13]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11], v[12]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[12]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10], v[11]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[11]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9], v[10]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[10]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8], v[9]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[9]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7], v[8]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[8]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[7]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5], v[6]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[6]) + { return f(v[0], v[1], v[2], v[3], v[4], v[5]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[5]) + { return f(v[0], v[1], v[2], v[3], v[4]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[4]) + { return f(v[0], v[1], v[2], v[3]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[3]) + { return f(v[0], v[1], v[2]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[2]) + { return f(v[0], v[1]); } + }; + + template + struct invoke + { + static inline T_ execute(ifunction& f, T_ (&v)[1]) + { return f(v[0]); } + }; + + private: + + ifunction* function_; + std::size_t parameter_count_; + branch_t branch_[N]; + bool initialised_; + }; + + template + class function_N_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef IFunction ifunction; + + explicit function_N_node(ifunction* func) + : function_((0 == func->param_count) ? func : reinterpret_cast(0)) + { + assert(valid()); + } + + inline bool operator <(const function_N_node& fn) const + { + return this < (&fn); + } + + inline T value() const exprtk_override + { + return (*function_)(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_function; + } + + inline bool valid() const exprtk_override + { + return function_; + } + + private: + + ifunction* function_; + }; + + template + class vararg_function_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + + vararg_function_node(VarArgFunction* func, + const std::vector& arg_list) + : function_(func) + , arg_list_(arg_list) + { + value_list_.resize(arg_list.size(),std::numeric_limits::quiet_NaN()); + assert(valid()); + } + + inline bool operator <(const vararg_function_node& fn) const + { + return this < (&fn); + } + + inline T value() const exprtk_override + { + populate_value_list(); + return (*function_)(value_list_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_vafunction; + } + + inline bool valid() const exprtk_override + { + return function_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + for (std::size_t i = 0; i < arg_list_.size(); ++i) + { + if (arg_list_[i] && !details::is_variable_node(arg_list_[i])) + { + node_delete_list.push_back(&arg_list_[i]); + } + } + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(arg_list_); + } + + private: + + inline void populate_value_list() const + { + for (std::size_t i = 0; i < arg_list_.size(); ++i) + { + value_list_[i] = arg_list_[i]->value(); + } + } + + VarArgFunction* function_; + std::vector arg_list_; + mutable std::vector value_list_; + }; + + template + class generic_function_node : public expression_node + { + public: + + typedef type_store type_store_t; + typedef expression_node* expression_ptr; + typedef variable_node variable_node_t; + typedef vector_node vector_node_t; + typedef variable_node_t* variable_node_ptr_t; + typedef vector_node_t* vector_node_ptr_t; + typedef range_interface range_interface_t; + typedef range_data_type range_data_type_t; + typedef typename range_interface::range_t range_t; + + typedef std::pair branch_t; + typedef vector_holder* vh_t; + typedef vector_view* vecview_t; + + typedef std::vector tmp_vs_t; + typedef std::vector typestore_list_t; + typedef std::vector range_list_t; + + explicit generic_function_node(const std::vector& arg_list, + GenericFunction* func = reinterpret_cast(0)) + : function_(func) + , arg_list_(arg_list) + {} + + virtual ~generic_function_node() + { + for (std::size_t i = 0; i < vv_list_.size(); ++i) + { + vecview_t& vv = vv_list_[i]; + if (vv && typestore_list_[i].vec_data) + { + vv->remove_ref(&typestore_list_[i].vec_data); + typestore_list_[i].vec_data = 0; + } + } + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override exprtk_final + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + virtual bool init_branches() + { + expr_as_vec1_store_.resize(arg_list_.size(), T(0) ); + typestore_list_ .resize(arg_list_.size(), type_store_t() ); + range_list_ .resize(arg_list_.size(), range_data_type_t()); + branch_ .resize(arg_list_.size(), branch_t(reinterpret_cast(0),false)); + vv_list_ .resize(arg_list_.size(), vecview_t(0)); + + for (std::size_t i = 0; i < arg_list_.size(); ++i) + { + type_store_t& ts = typestore_list_[i]; + + if (0 == arg_list_[i]) + return false; + else if (is_ivector_node(arg_list_[i])) + { + vector_interface* vi = reinterpret_cast*>(0); + + if (0 == (vi = dynamic_cast*>(arg_list_[i]))) + return false; + + ts.size = vi->size(); + ts.data = vi->vds().data(); + ts.type = type_store_t::e_vector; + + if ( + vi->vec()->vec_holder().rebaseable() && + vi->vec()->vec_holder().rebaseable_instance() + ) + { + vv_list_[i] = vi->vec()->vec_holder().rebaseable_instance(); + vv_list_[i]->set_ref(&ts.vec_data); + } + } + #ifndef exprtk_disable_string_capabilities + else if (is_generally_string_node(arg_list_[i])) + { + string_base_node* sbn = reinterpret_cast*>(0); + + if (0 == (sbn = dynamic_cast*>(arg_list_[i]))) + return false; + + ts.size = sbn->size(); + ts.data = reinterpret_cast(const_cast(sbn->base())); + ts.type = type_store_t::e_string; + + range_list_[i].data = ts.data; + range_list_[i].size = ts.size; + range_list_[i].type_size = sizeof(char); + range_list_[i].str_node = sbn; + + range_interface_t* ri = reinterpret_cast(0); + + if (0 == (ri = dynamic_cast(arg_list_[i]))) + return false; + + const range_t& rp = ri->range_ref(); + + if ( + rp.const_range() && + is_const_string_range_node(arg_list_[i]) + ) + { + ts.size = rp.const_size(); + ts.data = static_cast(ts.data) + rp.n0_c.second; + range_list_[i].range = reinterpret_cast(0); + } + else + { + range_list_[i].range = &(ri->range_ref()); + range_param_list_.push_back(i); + } + } + #endif + else if (is_variable_node(arg_list_[i])) + { + variable_node_ptr_t var = variable_node_ptr_t(0); + + if (0 == (var = dynamic_cast(arg_list_[i]))) + return false; + + ts.size = 1; + ts.data = &var->ref(); + ts.type = type_store_t::e_scalar; + } + else + { + ts.size = 1; + ts.data = reinterpret_cast(&expr_as_vec1_store_[i]); + ts.type = type_store_t::e_scalar; + } + + branch_[i] = std::make_pair(arg_list_[i],branch_deletable(arg_list_[i])); + } + + return true; + } + + inline bool operator <(const generic_function_node& fn) const + { + return this < (&fn); + } + + inline T value() const exprtk_override + { + if (populate_value_list()) + { + typedef typename GenericFunction::parameter_list_t parameter_list_t; + + return (*function_)(parameter_list_t(typestore_list_)); + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_genfunction; + } + + inline bool valid() const exprtk_override + { + return function_; + } + + protected: + + inline virtual bool populate_value_list() const + { + for (std::size_t i = 0; i < branch_.size(); ++i) + { + expr_as_vec1_store_[i] = branch_[i].first->value(); + } + + if (!range_param_list_.empty()) + { + assert(range_param_list_.size() <= branch_.size()); + + for (std::size_t i = 0; i < range_param_list_.size(); ++i) + { + const std::size_t index = range_param_list_[i]; + range_data_type_t& rdt = range_list_[index]; + + const range_t& rp = (*rdt.range); + std::size_t r0 = 0; + std::size_t r1 = 0; + + const std::size_t data_size = + #ifndef exprtk_disable_string_capabilities + rdt.str_node ? rdt.str_node->size() : rdt.size; + #else + rdt.size; + #endif + + if (!rp(r0, r1, data_size)) + { + return false; + } + + type_store_t& ts = typestore_list_[index]; + + ts.size = rp.cache_size(); + #ifndef exprtk_disable_string_capabilities + if (ts.type == type_store_t::e_string) + ts.data = const_cast(rdt.str_node->base()) + rp.cache.first; + else + #endif + ts.data = static_cast(rdt.data) + (rp.cache.first * rdt.type_size); + } + } + + return true; + } + + GenericFunction* function_; + mutable typestore_list_t typestore_list_; + + private: + + std::vector arg_list_; + std::vector branch_; + std::vector vv_list_; + mutable tmp_vs_t expr_as_vec1_store_; + mutable range_list_t range_list_; + std::vector range_param_list_; + }; + + #ifndef exprtk_disable_string_capabilities + template + class string_function_node : public generic_function_node + , public string_base_node + , public range_interface + { + public: + + typedef generic_function_node gen_function_t; + typedef typename range_interface::range_t range_t; + + string_function_node(StringFunction* func, + const std::vector& arg_list) + : gen_function_t(arg_list,func) + { + range_.n0_c = std::make_pair(true,0); + range_.n1_c = std::make_pair(true,0); + range_.cache.first = range_.n0_c.second; + range_.cache.second = range_.n1_c.second; + assert(valid()); + } + + inline bool operator <(const string_function_node& fn) const + { + return this < (&fn); + } + + inline T value() const exprtk_override + { + if (gen_function_t::populate_value_list()) + { + typedef typename StringFunction::parameter_list_t parameter_list_t; + + const T result = + (*gen_function_t::function_) + ( + ret_string_, + parameter_list_t(gen_function_t::typestore_list_) + ); + + range_.n1_c.second = ret_string_.size(); + range_.cache.second = range_.n1_c.second; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strfunction; + } + + inline bool valid() const exprtk_override + { + return gen_function_t::function_; + } + + std::string str() const exprtk_override + { + return ret_string_; + } + + char_cptr base() const exprtk_override + { + return &ret_string_[0]; + } + + std::size_t size() const exprtk_override + { + return ret_string_.size(); + } + + range_t& range_ref() exprtk_override + { + return range_; + } + + const range_t& range_ref() const exprtk_override + { + return range_; + } + + protected: + + mutable range_t range_; + mutable std::string ret_string_; + }; + #endif + + template + class multimode_genfunction_node : public generic_function_node + { + public: + + typedef generic_function_node gen_function_t; + typedef typename gen_function_t::range_t range_t; + + multimode_genfunction_node(GenericFunction* func, + const std::size_t& param_seq_index, + const std::vector& arg_list) + : gen_function_t(arg_list,func) + , param_seq_index_(param_seq_index) + {} + + inline T value() const exprtk_override + { + assert(gen_function_t::valid()); + + if (gen_function_t::populate_value_list()) + { + typedef typename GenericFunction::parameter_list_t parameter_list_t; + + return + (*gen_function_t::function_) + ( + param_seq_index_, + parameter_list_t(gen_function_t::typestore_list_) + ); + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override exprtk_final + { + return expression_node::e_genfunction; + } + + private: + + std::size_t param_seq_index_; + }; + + #ifndef exprtk_disable_string_capabilities + template + class multimode_strfunction_node exprtk_final : public string_function_node + { + public: + + typedef string_function_node str_function_t; + typedef typename str_function_t::range_t range_t; + + multimode_strfunction_node(StringFunction* func, + const std::size_t& param_seq_index, + const std::vector& arg_list) + : str_function_t(func,arg_list) + , param_seq_index_(param_seq_index) + {} + + inline T value() const exprtk_override + { + if (str_function_t::populate_value_list()) + { + typedef typename StringFunction::parameter_list_t parameter_list_t; + + const T result = + (*str_function_t::function_) + ( + param_seq_index_, + str_function_t::ret_string_, + parameter_list_t(str_function_t::typestore_list_) + ); + + str_function_t::range_.n1_c.second = str_function_t::ret_string_.size(); + str_function_t::range_.cache.second = str_function_t::range_.n1_c.second; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_strfunction; + } + + private: + + const std::size_t param_seq_index_; + }; + #endif + + class return_exception {}; + + template + class null_igenfunc + { + public: + + virtual ~null_igenfunc() + {} + + typedef type_store generic_type; + typedef typename generic_type::parameter_list parameter_list_t; + + inline virtual T operator() (parameter_list_t) + { + return std::numeric_limits::quiet_NaN(); + } + }; + + #ifndef exprtk_disable_return_statement + template + class return_node exprtk_final : public generic_function_node > + { + public: + + typedef results_context results_context_t; + typedef null_igenfunc igeneric_function_t; + typedef igeneric_function_t* igeneric_function_ptr; + typedef generic_function_node gen_function_t; + + return_node(const std::vector& arg_list, + results_context_t& rc) + : gen_function_t (arg_list) + , results_context_(&rc) + {} + + inline T value() const exprtk_override + { + if ( + (0 != results_context_) && + gen_function_t::populate_value_list() + ) + { + typedef typename type_store::parameter_list parameter_list_t; + + results_context_-> + assign(parameter_list_t(gen_function_t::typestore_list_)); + + throw return_exception(); + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_return; + } + + inline bool valid() const exprtk_override + { + return results_context_; + } + + private: + + results_context_t* results_context_; + }; + + template + class return_envelope_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef results_context results_context_t; + typedef std::pair branch_t; + + return_envelope_node(expression_ptr body, results_context_t& rc) + : results_context_(&rc ) + , return_invoked_ (false) + { + construct_branch_pair(body_, body); + assert(valid()); + } + + inline T value() const exprtk_override + { + try + { + return_invoked_ = false; + results_context_->clear(); + + return body_.first->value(); + } + catch(const return_exception&) + { + return_invoked_ = true; + + return std::numeric_limits::quiet_NaN(); + } + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_retenv; + } + + inline bool valid() const exprtk_override + { + return results_context_ && body_.first; + } + + inline bool* retinvk_ptr() + { + return &return_invoked_; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(body_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(body_); + } + + private: + + results_context_t* results_context_; + mutable bool return_invoked_; + branch_t body_; + }; + #endif + + #define exprtk_define_unary_op(OpName) \ + template \ + struct OpName##_op \ + { \ + typedef typename functor_t::Type Type; \ + typedef typename expression_node::node_type node_t; \ + \ + static inline T process(Type v) \ + { \ + return numeric:: OpName (v); \ + } \ + \ + static inline node_t type() \ + { \ + return expression_node::e_##OpName; \ + } \ + \ + static inline details::operator_type operation() \ + { \ + return details::e_##OpName; \ + } \ + }; \ + + exprtk_define_unary_op(abs ) + exprtk_define_unary_op(acos ) + exprtk_define_unary_op(acosh) + exprtk_define_unary_op(asin ) + exprtk_define_unary_op(asinh) + exprtk_define_unary_op(atan ) + exprtk_define_unary_op(atanh) + exprtk_define_unary_op(ceil ) + exprtk_define_unary_op(cos ) + exprtk_define_unary_op(cosh ) + exprtk_define_unary_op(cot ) + exprtk_define_unary_op(csc ) + exprtk_define_unary_op(d2g ) + exprtk_define_unary_op(d2r ) + exprtk_define_unary_op(erf ) + exprtk_define_unary_op(erfc ) + exprtk_define_unary_op(exp ) + exprtk_define_unary_op(expm1) + exprtk_define_unary_op(floor) + exprtk_define_unary_op(frac ) + exprtk_define_unary_op(g2d ) + exprtk_define_unary_op(log ) + exprtk_define_unary_op(log10) + exprtk_define_unary_op(log2 ) + exprtk_define_unary_op(log1p) + exprtk_define_unary_op(ncdf ) + exprtk_define_unary_op(neg ) + exprtk_define_unary_op(notl ) + exprtk_define_unary_op(pos ) + exprtk_define_unary_op(r2d ) + exprtk_define_unary_op(round) + exprtk_define_unary_op(sec ) + exprtk_define_unary_op(sgn ) + exprtk_define_unary_op(sin ) + exprtk_define_unary_op(sinc ) + exprtk_define_unary_op(sinh ) + exprtk_define_unary_op(sqrt ) + exprtk_define_unary_op(tan ) + exprtk_define_unary_op(tanh ) + exprtk_define_unary_op(trunc) + #undef exprtk_define_unary_op + + template + struct opr_base + { + typedef typename details::functor_t::Type Type; + typedef typename details::functor_t::RefType RefType; + typedef typename details::functor_t functor_t; + typedef typename functor_t::qfunc_t quaternary_functor_t; + typedef typename functor_t::tfunc_t trinary_functor_t; + typedef typename functor_t::bfunc_t binary_functor_t; + typedef typename functor_t::ufunc_t unary_functor_t; + }; + + template + struct add_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return t1 + t2; } + static inline T process(Type t1, Type t2, Type t3) { return t1 + t2 + t3; } + static inline void assign(RefType t1, Type t2) { t1 += t2; } + static inline typename expression_node::node_type type() { return expression_node::e_add; } + static inline details::operator_type operation() { return details::e_add; } + }; + + template + struct mul_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return t1 * t2; } + static inline T process(Type t1, Type t2, Type t3) { return t1 * t2 * t3; } + static inline void assign(RefType t1, Type t2) { t1 *= t2; } + static inline typename expression_node::node_type type() { return expression_node::e_mul; } + static inline details::operator_type operation() { return details::e_mul; } + }; + + template + struct sub_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return t1 - t2; } + static inline T process(Type t1, Type t2, Type t3) { return t1 - t2 - t3; } + static inline void assign(RefType t1, Type t2) { t1 -= t2; } + static inline typename expression_node::node_type type() { return expression_node::e_sub; } + static inline details::operator_type operation() { return details::e_sub; } + }; + + template + struct div_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return t1 / t2; } + static inline T process(Type t1, Type t2, Type t3) { return t1 / t2 / t3; } + static inline void assign(RefType t1, Type t2) { t1 /= t2; } + static inline typename expression_node::node_type type() { return expression_node::e_div; } + static inline details::operator_type operation() { return details::e_div; } + }; + + template + struct mod_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return numeric::modulus(t1,t2); } + static inline void assign(RefType t1, Type t2) { t1 = numeric::modulus(t1,t2); } + static inline typename expression_node::node_type type() { return expression_node::e_mod; } + static inline details::operator_type operation() { return details::e_mod; } + }; + + template + struct pow_op : public opr_base + { + typedef typename opr_base::Type Type; + typedef typename opr_base::RefType RefType; + + static inline T process(Type t1, Type t2) { return numeric::pow(t1,t2); } + static inline void assign(RefType t1, Type t2) { t1 = numeric::pow(t1,t2); } + static inline typename expression_node::node_type type() { return expression_node::e_pow; } + static inline details::operator_type operation() { return details::e_pow; } + }; + + template + struct lt_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return ((t1 < t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 < t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_lt; } + static inline details::operator_type operation() { return details::e_lt; } + }; + + template + struct lte_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return ((t1 <= t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 <= t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_lte; } + static inline details::operator_type operation() { return details::e_lte; } + }; + + template + struct gt_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return ((t1 > t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 > t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_gt; } + static inline details::operator_type operation() { return details::e_gt; } + }; + + template + struct gte_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return ((t1 >= t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 >= t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_gte; } + static inline details::operator_type operation() { return details::e_gte; } + }; + + template + struct eq_op : public opr_base + { + typedef typename opr_base::Type Type; + static inline T process(Type t1, Type t2) { return (std::equal_to()(t1,t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 == t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_eq; } + static inline details::operator_type operation() { return details::e_eq; } + }; + + template + struct equal_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return numeric::equal(t1,t2); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 == t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_eq; } + static inline details::operator_type operation() { return details::e_equal; } + }; + + template + struct ne_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return (std::not_equal_to()(t1,t2) ? T(1) : T(0)); } + static inline T process(const std::string& t1, const std::string& t2) { return ((t1 != t2) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_ne; } + static inline details::operator_type operation() { return details::e_ne; } + }; + + template + struct and_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return (details::is_true(t1) && details::is_true(t2)) ? T(1) : T(0); } + static inline typename expression_node::node_type type() { return expression_node::e_and; } + static inline details::operator_type operation() { return details::e_and; } + }; + + template + struct nand_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return (details::is_true(t1) && details::is_true(t2)) ? T(0) : T(1); } + static inline typename expression_node::node_type type() { return expression_node::e_nand; } + static inline details::operator_type operation() { return details::e_nand; } + }; + + template + struct or_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return (details::is_true(t1) || details::is_true(t2)) ? T(1) : T(0); } + static inline typename expression_node::node_type type() { return expression_node::e_or; } + static inline details::operator_type operation() { return details::e_or; } + }; + + template + struct nor_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return (details::is_true(t1) || details::is_true(t2)) ? T(0) : T(1); } + static inline typename expression_node::node_type type() { return expression_node::e_nor; } + static inline details::operator_type operation() { return details::e_nor; } + }; + + template + struct xor_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return numeric::xor_opr(t1,t2); } + static inline typename expression_node::node_type type() { return expression_node::e_nor; } + static inline details::operator_type operation() { return details::e_xor; } + }; + + template + struct xnor_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(Type t1, Type t2) { return numeric::xnor_opr(t1,t2); } + static inline typename expression_node::node_type type() { return expression_node::e_nor; } + static inline details::operator_type operation() { return details::e_xnor; } + }; + + template + struct in_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(const T&, const T&) { return std::numeric_limits::quiet_NaN(); } + static inline T process(const std::string& t1, const std::string& t2) { return ((std::string::npos != t2.find(t1)) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_in; } + static inline details::operator_type operation() { return details::e_in; } + }; + + template + struct like_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(const T&, const T&) { return std::numeric_limits::quiet_NaN(); } + static inline T process(const std::string& t1, const std::string& t2) { return (details::wc_match(t2,t1) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_like; } + static inline details::operator_type operation() { return details::e_like; } + }; + + template + struct ilike_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(const T&, const T&) { return std::numeric_limits::quiet_NaN(); } + static inline T process(const std::string& t1, const std::string& t2) { return (details::wc_imatch(t2,t1) ? T(1) : T(0)); } + static inline typename expression_node::node_type type() { return expression_node::e_ilike; } + static inline details::operator_type operation() { return details::e_ilike; } + }; + + template + struct inrange_op : public opr_base + { + typedef typename opr_base::Type Type; + + static inline T process(const T& t0, const T& t1, const T& t2) { return ((t0 <= t1) && (t1 <= t2)) ? T(1) : T(0); } + static inline T process(const std::string& t0, const std::string& t1, const std::string& t2) + { + return ((t0 <= t1) && (t1 <= t2)) ? T(1) : T(0); + } + static inline typename expression_node::node_type type() { return expression_node::e_inranges; } + static inline details::operator_type operation() { return details::e_inrange; } + }; + + template + inline T value(details::expression_node* n) + { + return n->value(); + } + + template + inline T value(std::pair*,bool> n) + { + return n.first->value(); + } + + template + inline T value(const T* t) + { + return (*t); + } + + template + inline T value(const T& t) + { + return t; + } + + template + struct vararg_add_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return T(0); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + T result = T(0); + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + result += value(arg_list[i]); + } + + return result; + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return value(arg_list[0]) + value(arg_list[1]); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return value(arg_list[0]) + value(arg_list[1]) + + value(arg_list[2]) ; + } + + template + static inline T process_4(const Sequence& arg_list) + { + return value(arg_list[0]) + value(arg_list[1]) + + value(arg_list[2]) + value(arg_list[3]) ; + } + + template + static inline T process_5(const Sequence& arg_list) + { + return value(arg_list[0]) + value(arg_list[1]) + + value(arg_list[2]) + value(arg_list[3]) + + value(arg_list[4]) ; + } + }; + + template + struct vararg_mul_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return T(0); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + T result = T(value(arg_list[0])); + + for (std::size_t i = 1; i < arg_list.size(); ++i) + { + result *= value(arg_list[i]); + } + + return result; + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return value(arg_list[0]) * value(arg_list[1]); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return value(arg_list[0]) * value(arg_list[1]) * + value(arg_list[2]) ; + } + + template + static inline T process_4(const Sequence& arg_list) + { + return value(arg_list[0]) * value(arg_list[1]) * + value(arg_list[2]) * value(arg_list[3]) ; + } + + template + static inline T process_5(const Sequence& arg_list) + { + return value(arg_list[0]) * value(arg_list[1]) * + value(arg_list[2]) * value(arg_list[3]) * + value(arg_list[4]) ; + } + }; + + template + struct vararg_avg_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return T(0); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : return vararg_add_op::process(arg_list) / T(arg_list.size()); + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return (value(arg_list[0]) + value(arg_list[1])) / T(2); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return (value(arg_list[0]) + value(arg_list[1]) + value(arg_list[2])) / T(3); + } + + template + static inline T process_4(const Sequence& arg_list) + { + return (value(arg_list[0]) + value(arg_list[1]) + + value(arg_list[2]) + value(arg_list[3])) / T(4); + } + + template + static inline T process_5(const Sequence& arg_list) + { + return (value(arg_list[0]) + value(arg_list[1]) + + value(arg_list[2]) + value(arg_list[3]) + + value(arg_list[4])) / T(5); + } + }; + + template + struct vararg_min_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return T(0); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + T result = T(value(arg_list[0])); + + for (std::size_t i = 1; i < arg_list.size(); ++i) + { + const T v = value(arg_list[i]); + + if (v < result) + result = v; + } + + return result; + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return std::min(value(arg_list[0]),value(arg_list[1])); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return std::min(std::min(value(arg_list[0]),value(arg_list[1])),value(arg_list[2])); + } + + template + static inline T process_4(const Sequence& arg_list) + { + return std::min( + std::min(value(arg_list[0]), value(arg_list[1])), + std::min(value(arg_list[2]), value(arg_list[3]))); + } + + template + static inline T process_5(const Sequence& arg_list) + { + return std::min( + std::min(std::min(value(arg_list[0]), value(arg_list[1])), + std::min(value(arg_list[2]), value(arg_list[3]))), + value(arg_list[4])); + } + }; + + template + struct vararg_max_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return T(0); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + T result = T(value(arg_list[0])); + + for (std::size_t i = 1; i < arg_list.size(); ++i) + { + const T v = value(arg_list[i]); + + if (v > result) + result = v; + } + + return result; + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return std::max(value(arg_list[0]),value(arg_list[1])); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return std::max(std::max(value(arg_list[0]),value(arg_list[1])),value(arg_list[2])); + } + + template + static inline T process_4(const Sequence& arg_list) + { + return std::max( + std::max(value(arg_list[0]), value(arg_list[1])), + std::max(value(arg_list[2]), value(arg_list[3]))); + } + + template + static inline T process_5(const Sequence& arg_list) + { + return std::max( + std::max(std::max(value(arg_list[0]), value(arg_list[1])), + std::max(value(arg_list[2]), value(arg_list[3]))), + value(arg_list[4])); + } + }; + + template + struct vararg_mand_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (std::equal_to()(T(0), value(arg_list[i]))) + return T(0); + } + + return T(1); + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return std::not_equal_to() + (T(0), value(arg_list[0])) ? T(1) : T(0); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) && + std::not_equal_to()(T(0), value(arg_list[1])) + ) ? T(1) : T(0); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) && + std::not_equal_to()(T(0), value(arg_list[1])) && + std::not_equal_to()(T(0), value(arg_list[2])) + ) ? T(1) : T(0); + } + + template + static inline T process_4(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) && + std::not_equal_to()(T(0), value(arg_list[1])) && + std::not_equal_to()(T(0), value(arg_list[2])) && + std::not_equal_to()(T(0), value(arg_list[3])) + ) ? T(1) : T(0); + } + + template + static inline T process_5(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) && + std::not_equal_to()(T(0), value(arg_list[1])) && + std::not_equal_to()(T(0), value(arg_list[2])) && + std::not_equal_to()(T(0), value(arg_list[3])) && + std::not_equal_to()(T(0), value(arg_list[4])) + ) ? T(1) : T(0); + } + }; + + template + struct vararg_mor_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + default : + { + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (std::not_equal_to()(T(0), value(arg_list[i]))) + return T(1); + } + + return T(0); + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return std::not_equal_to() + (T(0), value(arg_list[0])) ? T(1) : T(0); + } + + template + static inline T process_2(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) || + std::not_equal_to()(T(0), value(arg_list[1])) + ) ? T(1) : T(0); + } + + template + static inline T process_3(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) || + std::not_equal_to()(T(0), value(arg_list[1])) || + std::not_equal_to()(T(0), value(arg_list[2])) + ) ? T(1) : T(0); + } + + template + static inline T process_4(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) || + std::not_equal_to()(T(0), value(arg_list[1])) || + std::not_equal_to()(T(0), value(arg_list[2])) || + std::not_equal_to()(T(0), value(arg_list[3])) + ) ? T(1) : T(0); + } + + template + static inline T process_5(const Sequence& arg_list) + { + return ( + std::not_equal_to()(T(0), value(arg_list[0])) || + std::not_equal_to()(T(0), value(arg_list[1])) || + std::not_equal_to()(T(0), value(arg_list[2])) || + std::not_equal_to()(T(0), value(arg_list[3])) || + std::not_equal_to()(T(0), value(arg_list[4])) + ) ? T(1) : T(0); + } + }; + + template + struct vararg_multi_op exprtk_final : public opr_base + { + typedef typename opr_base::Type Type; + + template class Sequence> + static inline T process(const Sequence& arg_list) + { + switch (arg_list.size()) + { + case 0 : return std::numeric_limits::quiet_NaN(); + case 1 : return process_1(arg_list); + case 2 : return process_2(arg_list); + case 3 : return process_3(arg_list); + case 4 : return process_4(arg_list); + case 5 : return process_5(arg_list); + case 6 : return process_6(arg_list); + case 7 : return process_7(arg_list); + case 8 : return process_8(arg_list); + default : + { + for (std::size_t i = 0; i < (arg_list.size() - 1); ++i) + { + value(arg_list[i]); + } + return value(arg_list.back()); + } + } + } + + template + static inline T process_1(const Sequence& arg_list) + { + return value(arg_list[0]); + } + + template + static inline T process_2(const Sequence& arg_list) + { + value(arg_list[0]); + return value(arg_list[1]); + } + + template + static inline T process_3(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + return value(arg_list[2]); + } + + template + static inline T process_4(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + value(arg_list[2]); + return value(arg_list[3]); + } + + template + static inline T process_5(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + value(arg_list[2]); + value(arg_list[3]); + return value(arg_list[4]); + } + + template + static inline T process_6(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + value(arg_list[2]); + value(arg_list[3]); + value(arg_list[4]); + return value(arg_list[5]); + } + + template + static inline T process_7(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + value(arg_list[2]); + value(arg_list[3]); + value(arg_list[4]); + value(arg_list[5]); + return value(arg_list[6]); + } + + template + static inline T process_8(const Sequence& arg_list) + { + value(arg_list[0]); + value(arg_list[1]); + value(arg_list[2]); + value(arg_list[3]); + value(arg_list[4]); + value(arg_list[5]); + value(arg_list[6]); + return value(arg_list[7]); + } + }; + + template + struct vec_add_op + { + typedef vector_interface* ivector_ptr; + + static inline T process(const ivector_ptr v) + { + const T* vec = v->vec()->vds().data(); + const std::size_t vec_size = v->size(); + + loop_unroll::details lud(vec_size); + + if (vec_size <= static_cast(lud.batch_size)) + { + T result = T(0); + int i = 0; + + switch (vec_size) + { + #define case_stmt(N,fall_through) \ + case N : result += vec[i++]; \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(16, exprtk_fallthrough) case_stmt(15, exprtk_fallthrough) + case_stmt(14, exprtk_fallthrough) case_stmt(13, exprtk_fallthrough) + case_stmt(12, exprtk_fallthrough) case_stmt(11, exprtk_fallthrough) + case_stmt(10, exprtk_fallthrough) case_stmt( 9, exprtk_fallthrough) + case_stmt( 8, exprtk_fallthrough) case_stmt( 7, exprtk_fallthrough) + case_stmt( 6, exprtk_fallthrough) case_stmt( 5, exprtk_fallthrough) + + #endif + case_stmt( 4, exprtk_fallthrough) case_stmt( 3, exprtk_fallthrough) + case_stmt( 2, exprtk_fallthrough) case_stmt( 1, (void)0;) + } + + #undef case_stmt + + return result; + } + + T r[] = { + T(0), T(0), T(0), T(0), T(0), T(0), T(0), T(0), + T(0), T(0), T(0), T(0), T(0), T(0), T(0), T(0) + }; + + const T* upper_bound = vec + lud.upper_bound; + + while (vec < upper_bound) + { + #define exprtk_loop(N) \ + r[N] += vec[N]; \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : r[0] += vec[i++]; \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return (r[ 0] + r[ 1] + r[ 2] + r[ 3]) + #ifndef exprtk_disable_superscalar_unroll + + (r[ 4] + r[ 5] + r[ 6] + r[ 7]) + + (r[ 8] + r[ 9] + r[10] + r[11]) + + (r[12] + r[13] + r[14] + r[15]) + #endif + ; + } + }; + + template + struct vec_mul_op + { + typedef vector_interface* ivector_ptr; + + static inline T process(const ivector_ptr v) + { + const T* vec = v->vec()->vds().data(); + const std::size_t vec_size = v->vec()->size(); + + loop_unroll::details lud(vec_size); + + if (vec_size <= static_cast(lud.batch_size)) + { + T result = T(1); + int i = 0; + + switch (vec_size) + { + #define case_stmt(N,fall_through) \ + case N : result *= vec[i++]; \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(16, exprtk_fallthrough) case_stmt(15, exprtk_fallthrough) + case_stmt(14, exprtk_fallthrough) case_stmt(13, exprtk_fallthrough) + case_stmt(12, exprtk_fallthrough) case_stmt(11, exprtk_fallthrough) + case_stmt(10, exprtk_fallthrough) case_stmt( 9, exprtk_fallthrough) + case_stmt( 8, exprtk_fallthrough) case_stmt( 7, exprtk_fallthrough) + case_stmt( 6, exprtk_fallthrough) case_stmt( 5, exprtk_fallthrough) + #endif + case_stmt( 4, exprtk_fallthrough) case_stmt( 3, exprtk_fallthrough) + case_stmt( 2, exprtk_fallthrough) case_stmt( 1, (void)0;) + } + + #undef case_stmt + + return result; + } + + T r[] = { + T(1), T(1), T(1), T(1), T(1), T(1), T(1), T(1), + T(1), T(1), T(1), T(1), T(1), T(1), T(1), T(1) + }; + + const T* upper_bound = vec + lud.upper_bound; + + while (vec < upper_bound) + { + #define exprtk_loop(N) \ + r[N] *= vec[N]; \ + + exprtk_loop( 0) exprtk_loop( 1) + exprtk_loop( 2) exprtk_loop( 3) + #ifndef exprtk_disable_superscalar_unroll + exprtk_loop( 4) exprtk_loop( 5) + exprtk_loop( 6) exprtk_loop( 7) + exprtk_loop( 8) exprtk_loop( 9) + exprtk_loop(10) exprtk_loop(11) + exprtk_loop(12) exprtk_loop(13) + exprtk_loop(14) exprtk_loop(15) + #endif + + vec += lud.batch_size; + } + + int i = 0; + + switch (lud.remainder) + { + #define case_stmt(N,fall_through) \ + case N : r[0] *= vec[i++]; \ + fall_through \ + + #ifndef exprtk_disable_superscalar_unroll + case_stmt(15, exprtk_fallthrough) case_stmt(14, exprtk_fallthrough) + case_stmt(13, exprtk_fallthrough) case_stmt(12, exprtk_fallthrough) + case_stmt(11, exprtk_fallthrough) case_stmt(10, exprtk_fallthrough) + case_stmt( 9, exprtk_fallthrough) case_stmt( 8, exprtk_fallthrough) + case_stmt( 7, exprtk_fallthrough) case_stmt( 6, exprtk_fallthrough) + case_stmt( 5, exprtk_fallthrough) case_stmt( 4, exprtk_fallthrough) + #endif + case_stmt( 3, exprtk_fallthrough) case_stmt( 2, exprtk_fallthrough) + case_stmt( 1, (void)0;) + } + + #undef exprtk_loop + #undef case_stmt + + return (r[ 0] * r[ 1] * r[ 2] * r[ 3]) + #ifndef exprtk_disable_superscalar_unroll + * (r[ 4] * r[ 5] * r[ 6] * r[ 7]) + * (r[ 8] * r[ 9] * r[10] * r[11]) + * (r[12] * r[13] * r[14] * r[15]) + #endif + ; + } + }; + + template + struct vec_avg_op + { + typedef vector_interface* ivector_ptr; + + static inline T process(const ivector_ptr v) + { + const T vec_size = T(v->vec()->size()); + return vec_add_op::process(v) / vec_size; + } + }; + + template + struct vec_min_op + { + typedef vector_interface* ivector_ptr; + + static inline T process(const ivector_ptr v) + { + const T* vec = v->vec()->vds().data(); + const std::size_t vec_size = v->vec()->size(); + + T result = vec[0]; + + for (std::size_t i = 1; i < vec_size; ++i) + { + const T v_i = vec[i]; + + if (v_i < result) + result = v_i; + } + + return result; + } + }; + + template + struct vec_max_op + { + typedef vector_interface* ivector_ptr; + + static inline T process(const ivector_ptr v) + { + const T* vec = v->vec()->vds().data(); + const std::size_t vec_size = v->vec()->size(); + + T result = vec[0]; + + for (std::size_t i = 1; i < vec_size; ++i) + { + const T v_i = vec[i]; + + if (v_i > result) + result = v_i; + } + + return result; + } + }; + + template + class vov_base_node : public expression_node + { + public: + + virtual ~vov_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T& v0() const = 0; + + virtual const T& v1() const = 0; + }; + + template + class cov_base_node : public expression_node + { + public: + + virtual ~cov_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T c() const = 0; + + virtual const T& v() const = 0; + }; + + template + class voc_base_node : public expression_node + { + public: + + virtual ~voc_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T c() const = 0; + + virtual const T& v() const = 0; + }; + + template + class vob_base_node : public expression_node + { + public: + + virtual ~vob_base_node() + {} + + virtual const T& v() const = 0; + }; + + template + class bov_base_node : public expression_node + { + public: + + virtual ~bov_base_node() + {} + + virtual const T& v() const = 0; + }; + + template + class cob_base_node : public expression_node + { + public: + + virtual ~cob_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T c() const = 0; + + virtual void set_c(const T) = 0; + + virtual expression_node* move_branch(const std::size_t& index) = 0; + }; + + template + class boc_base_node : public expression_node + { + public: + + virtual ~boc_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T c() const = 0; + + virtual void set_c(const T) = 0; + + virtual expression_node* move_branch(const std::size_t& index) = 0; + }; + + template + class uv_base_node : public expression_node + { + public: + + virtual ~uv_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + + virtual const T& v() const = 0; + }; + + template + class sos_base_node : public expression_node + { + public: + + virtual ~sos_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + }; + + template + class sosos_base_node : public expression_node + { + public: + + virtual ~sosos_base_node() + {} + + inline virtual operator_type operation() const + { + return details::e_default; + } + }; + + template + class T0oT1oT2_base_node : public expression_node + { + public: + + virtual ~T0oT1oT2_base_node() + {} + + virtual std::string type_id() const = 0; + }; + + template + class T0oT1oT2oT3_base_node : public expression_node + { + public: + + virtual ~T0oT1oT2oT3_base_node() + {} + + virtual std::string type_id() const = 0; + }; + + template + class unary_variable_node exprtk_final : public uv_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + + explicit unary_variable_node(const T& var) + : v_(var) + {} + + inline T value() const exprtk_override + { + return Operation::process(v_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T& v() const exprtk_override + { + return v_; + } + + private: + + unary_variable_node(const unary_variable_node&) exprtk_delete; + unary_variable_node& operator=(const unary_variable_node&) exprtk_delete; + + const T& v_; + }; + + template + class uvouv_node exprtk_final : public expression_node + { + public: + + // UOpr1(v0) Op UOpr2(v1) + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + typedef typename functor_t::ufunc_t ufunc_t; + typedef expression_node* expression_ptr; + + explicit uvouv_node(const T& var0,const T& var1, + ufunc_t uf0, ufunc_t uf1, bfunc_t bf) + : v0_(var0) + , v1_(var1) + , u0_(uf0 ) + , u1_(uf1 ) + , f_ (bf ) + {} + + inline T value() const exprtk_override + { + return f_(u0_(v0_),u1_(v1_)); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_uvouv; + } + + inline const T& v0() + { + return v0_; + } + + inline const T& v1() + { + return v1_; + } + + inline ufunc_t u0() + { + return u0_; + } + + inline ufunc_t u1() + { + return u1_; + } + + inline ufunc_t f() + { + return f_; + } + + private: + + uvouv_node(const uvouv_node&) exprtk_delete; + uvouv_node& operator=(const uvouv_node&) exprtk_delete; + + const T& v0_; + const T& v1_; + const ufunc_t u0_; + const ufunc_t u1_; + const bfunc_t f_; + }; + + template + class unary_branch_node exprtk_final : public expression_node + { + public: + + typedef Operation operation_t; + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + + explicit unary_branch_node(expression_ptr branch) + { + construct_branch_pair(branch_, branch); + } + + inline T value() const exprtk_override + { + return Operation::process(branch_.first->value()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline operator_type operation() + { + return Operation::operation(); + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + inline void release() + { + branch_.second = false; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + unary_branch_node(const unary_branch_node&) exprtk_delete; + unary_branch_node& operator=(const unary_branch_node&) exprtk_delete; + + branch_t branch_; + }; + + template struct is_const { enum {result = 0}; }; + template struct is_const { enum {result = 1}; }; + template struct is_const_ref { enum {result = 0}; }; + template struct is_const_ref { enum {result = 1}; }; + template struct is_ref { enum {result = 0}; }; + template struct is_ref { enum {result = 1}; }; + template struct is_ref { enum {result = 0}; }; + + template + struct param_to_str { static std::string result() { static const std::string r("v"); return r; } }; + + template <> + struct param_to_str<0> { static std::string result() { static const std::string r("c"); return r; } }; + + #define exprtk_crtype(Type) \ + param_to_str::result>::result() \ + + template + struct T0oT1oT2process + { + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + + struct mode0 + { + static inline T process(const T& t0, const T& t1, const T& t2, const bfunc_t bf0, const bfunc_t bf1) + { + // (T0 o0 T1) o1 T2 + return bf1(bf0(t0,t1),t2); + } + + template + static inline std::string id() + { + static const std::string result = "(" + exprtk_crtype(T0) + "o" + + exprtk_crtype(T1) + ")o(" + + exprtk_crtype(T2) + ")" ; + return result; + } + }; + + struct mode1 + { + static inline T process(const T& t0, const T& t1, const T& t2, const bfunc_t bf0, const bfunc_t bf1) + { + // T0 o0 (T1 o1 T2) + return bf0(t0,bf1(t1,t2)); + } + + template + static inline std::string id() + { + static const std::string result = "(" + exprtk_crtype(T0) + ")o(" + + exprtk_crtype(T1) + "o" + + exprtk_crtype(T2) + ")" ; + return result; + } + }; + }; + + template + struct T0oT1oT20T3process + { + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + + struct mode0 + { + static inline T process(const T& t0, const T& t1, + const T& t2, const T& t3, + const bfunc_t bf0, const bfunc_t bf1, const bfunc_t bf2) + { + // (T0 o0 T1) o1 (T2 o2 T3) + return bf1(bf0(t0,t1),bf2(t2,t3)); + } + + template + static inline std::string id() + { + static const std::string result = "(" + exprtk_crtype(T0) + "o" + + exprtk_crtype(T1) + ")o" + + "(" + exprtk_crtype(T2) + "o" + + exprtk_crtype(T3) + ")" ; + return result; + } + }; + + struct mode1 + { + static inline T process(const T& t0, const T& t1, + const T& t2, const T& t3, + const bfunc_t bf0, const bfunc_t bf1, const bfunc_t bf2) + { + // (T0 o0 (T1 o1 (T2 o2 T3)) + return bf0(t0,bf1(t1,bf2(t2,t3))); + } + template + static inline std::string id() + { + static const std::string result = "(" + exprtk_crtype(T0) + ")o((" + + exprtk_crtype(T1) + ")o(" + + exprtk_crtype(T2) + "o" + + exprtk_crtype(T3) + "))" ; + return result; + } + }; + + struct mode2 + { + static inline T process(const T& t0, const T& t1, + const T& t2, const T& t3, + const bfunc_t bf0, const bfunc_t bf1, const bfunc_t bf2) + { + // (T0 o0 ((T1 o1 T2) o2 T3) + return bf0(t0,bf2(bf1(t1,t2),t3)); + } + + template + static inline std::string id() + { + static const std::string result = "(" + exprtk_crtype(T0) + ")o((" + + exprtk_crtype(T1) + "o" + + exprtk_crtype(T2) + ")o(" + + exprtk_crtype(T3) + "))" ; + return result; + } + }; + + struct mode3 + { + static inline T process(const T& t0, const T& t1, + const T& t2, const T& t3, + const bfunc_t bf0, const bfunc_t bf1, const bfunc_t bf2) + { + // (((T0 o0 T1) o1 T2) o2 T3) + return bf2(bf1(bf0(t0,t1),t2),t3); + } + + template + static inline std::string id() + { + static const std::string result = "((" + exprtk_crtype(T0) + "o" + + exprtk_crtype(T1) + ")o(" + + exprtk_crtype(T2) + "))o(" + + exprtk_crtype(T3) + ")"; + return result; + } + }; + + struct mode4 + { + static inline T process(const T& t0, const T& t1, + const T& t2, const T& t3, + const bfunc_t bf0, const bfunc_t bf1, const bfunc_t bf2) + { + // ((T0 o0 (T1 o1 T2)) o2 T3 + return bf2(bf0(t0,bf1(t1,t2)),t3); + } + + template + static inline std::string id() + { + static const std::string result = "((" + exprtk_crtype(T0) + ")o(" + + exprtk_crtype(T1) + "o" + + exprtk_crtype(T2) + "))o(" + + exprtk_crtype(T3) + ")" ; + return result; + } + }; + }; + + #undef exprtk_crtype + + template + struct nodetype_T0oT1 { static const typename expression_node::node_type result; }; + template + const typename expression_node::node_type nodetype_T0oT1::result = expression_node::e_none; + + #define synthesis_node_type_define(T0_, T1_, v_) \ + template \ + struct nodetype_T0oT1 { static const typename expression_node::node_type result; }; \ + template \ + const typename expression_node::node_type nodetype_T0oT1::result = expression_node:: v_; \ + + synthesis_node_type_define(const T0&, const T1&, e_vov) + synthesis_node_type_define(const T0&, const T1 , e_voc) + synthesis_node_type_define(const T0 , const T1&, e_cov) + synthesis_node_type_define( T0&, T1&, e_none) + synthesis_node_type_define(const T0 , const T1 , e_none) + synthesis_node_type_define( T0&, const T1 , e_none) + synthesis_node_type_define(const T0 , T1&, e_none) + synthesis_node_type_define(const T0&, T1&, e_none) + synthesis_node_type_define( T0&, const T1&, e_none) + #undef synthesis_node_type_define + + template + struct nodetype_T0oT1oT2 { static const typename expression_node::node_type result; }; + template + const typename expression_node::node_type nodetype_T0oT1oT2::result = expression_node::e_none; + + #define synthesis_node_type_define(T0_, T1_, T2_, v_) \ + template \ + struct nodetype_T0oT1oT2 { static const typename expression_node::node_type result; }; \ + template \ + const typename expression_node::node_type nodetype_T0oT1oT2::result = expression_node:: v_; \ + + synthesis_node_type_define(const T0&, const T1&, const T2&, e_vovov) + synthesis_node_type_define(const T0&, const T1&, const T2 , e_vovoc) + synthesis_node_type_define(const T0&, const T1 , const T2&, e_vocov) + synthesis_node_type_define(const T0 , const T1&, const T2&, e_covov) + synthesis_node_type_define(const T0 , const T1&, const T2 , e_covoc) + synthesis_node_type_define(const T0 , const T1 , const T2 , e_none ) + synthesis_node_type_define(const T0 , const T1 , const T2&, e_none ) + synthesis_node_type_define(const T0&, const T1 , const T2 , e_none ) + synthesis_node_type_define( T0&, T1&, T2&, e_none ) + #undef synthesis_node_type_define + + template + struct nodetype_T0oT1oT2oT3 { static const typename expression_node::node_type result; }; + template + const typename expression_node::node_type nodetype_T0oT1oT2oT3::result = expression_node::e_none; + + #define synthesis_node_type_define(T0_, T1_, T2_, T3_, v_) \ + template \ + struct nodetype_T0oT1oT2oT3 { static const typename expression_node::node_type result; }; \ + template \ + const typename expression_node::node_type nodetype_T0oT1oT2oT3::result = expression_node:: v_; \ + + synthesis_node_type_define(const T0&, const T1&, const T2&, const T3&, e_vovovov) + synthesis_node_type_define(const T0&, const T1&, const T2&, const T3 , e_vovovoc) + synthesis_node_type_define(const T0&, const T1&, const T2 , const T3&, e_vovocov) + synthesis_node_type_define(const T0&, const T1 , const T2&, const T3&, e_vocovov) + synthesis_node_type_define(const T0 , const T1&, const T2&, const T3&, e_covovov) + synthesis_node_type_define(const T0 , const T1&, const T2 , const T3&, e_covocov) + synthesis_node_type_define(const T0&, const T1 , const T2&, const T3 , e_vocovoc) + synthesis_node_type_define(const T0 , const T1&, const T2&, const T3 , e_covovoc) + synthesis_node_type_define(const T0&, const T1 , const T2 , const T3&, e_vococov) + synthesis_node_type_define(const T0 , const T1 , const T2 , const T3 , e_none ) + synthesis_node_type_define(const T0 , const T1 , const T2 , const T3&, e_none ) + synthesis_node_type_define(const T0 , const T1 , const T2&, const T3 , e_none ) + synthesis_node_type_define(const T0 , const T1&, const T2 , const T3 , e_none ) + synthesis_node_type_define(const T0&, const T1 , const T2 , const T3 , e_none ) + synthesis_node_type_define(const T0 , const T1 , const T2&, const T3&, e_none ) + synthesis_node_type_define(const T0&, const T1&, const T2 , const T3 , e_none ) + #undef synthesis_node_type_define + + template + class T0oT1 exprtk_final : public expression_node + { + public: + + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + typedef T value_type; + typedef T0oT1 node_type; + + T0oT1(T0 p0, T1 p1, const bfunc_t p2) + : t0_(p0) + , t1_(p1) + , f_ (p2) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1::result; + return result; + } + + inline operator_type operation() const exprtk_override + { + return e_default; + } + + inline T value() const exprtk_override + { + return f_(t0_,t1_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline bfunc_t f() const + { + return f_; + } + + template + static inline expression_node* allocate(Allocator& allocator, + T0 p0, T1 p1, + bfunc_t p2) + { + return allocator + .template allocate_type + (p0, p1, p2); + } + + private: + + T0oT1(const T0oT1&) exprtk_delete; + T0oT1& operator=(const T0oT1&) { return (*this); } + + T0 t0_; + T1 t1_; + const bfunc_t f_; + }; + + template + class T0oT1oT2 exprtk_final : public T0oT1oT2_base_node + { + public: + + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + typedef T value_type; + typedef T0oT1oT2 node_type; + typedef ProcessMode process_mode_t; + + T0oT1oT2(T0 p0, T1 p1, T2 p2, const bfunc_t p3, const bfunc_t p4) + : t0_(p0) + , t1_(p1) + , t2_(p2) + , f0_(p3) + , f1_(p4) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1oT2::result; + return result; + } + + inline operator_type operation() + { + return e_default; + } + + inline T value() const exprtk_override + { + return ProcessMode::process(t0_, t1_, t2_, f0_, f1_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline T2 t2() const + { + return t2_; + } + + bfunc_t f0() const + { + return f0_; + } + + bfunc_t f1() const + { + return f1_; + } + + std::string type_id() const exprtk_override + { + return id(); + } + + static inline std::string id() + { + return process_mode_t::template id(); + } + + template + static inline expression_node* allocate(Allocator& allocator, T0 p0, T1 p1, T2 p2, bfunc_t p3, bfunc_t p4) + { + return allocator + .template allocate_type + (p0, p1, p2, p3, p4); + } + + private: + + T0oT1oT2(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + const bfunc_t f0_; + const bfunc_t f1_; + }; + + template + class T0oT1oT2oT3 exprtk_final : public T0oT1oT2oT3_base_node + { + public: + + typedef typename details::functor_t functor_t; + typedef typename functor_t::bfunc_t bfunc_t; + typedef T value_type; + typedef T0_ T0; + typedef T1_ T1; + typedef T2_ T2; + typedef T3_ T3; + typedef T0oT1oT2oT3 node_type; + typedef ProcessMode process_mode_t; + + T0oT1oT2oT3(T0 p0, T1 p1, T2 p2, T3 p3, bfunc_t p4, bfunc_t p5, bfunc_t p6) + : t0_(p0) + , t1_(p1) + , t2_(p2) + , t3_(p3) + , f0_(p4) + , f1_(p5) + , f2_(p6) + {} + + inline T value() const exprtk_override + { + return ProcessMode::process(t0_, t1_, t2_, t3_, f0_, f1_, f2_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline T2 t2() const + { + return t2_; + } + + inline T3 t3() const + { + return t3_; + } + + inline bfunc_t f0() const + { + return f0_; + } + + inline bfunc_t f1() const + { + return f1_; + } + + inline bfunc_t f2() const + { + return f2_; + } + + inline std::string type_id() const exprtk_override + { + return id(); + } + + static inline std::string id() + { + return process_mode_t::template id(); + } + + template + static inline expression_node* allocate(Allocator& allocator, + T0 p0, T1 p1, T2 p2, T3 p3, + bfunc_t p4, bfunc_t p5, bfunc_t p6) + { + return allocator + .template allocate_type + (p0, p1, p2, p3, p4, p5, p6); + } + + private: + + T0oT1oT2oT3(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + T3 t3_; + const bfunc_t f0_; + const bfunc_t f1_; + const bfunc_t f2_; + }; + + template + class T0oT1oT2_sf3 exprtk_final : public T0oT1oT2_base_node + { + public: + + typedef typename details::functor_t functor_t; + typedef typename functor_t::tfunc_t tfunc_t; + typedef T value_type; + typedef T0oT1oT2_sf3 node_type; + + T0oT1oT2_sf3(T0 p0, T1 p1, T2 p2, const tfunc_t p3) + : t0_(p0) + , t1_(p1) + , t2_(p2) + , f_ (p3) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1oT2::result; + return result; + } + + inline operator_type operation() const exprtk_override + { + return e_default; + } + + inline T value() const exprtk_override + { + return f_(t0_, t1_, t2_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline T2 t2() const + { + return t2_; + } + + tfunc_t f() const + { + return f_; + } + + std::string type_id() const + { + return id(); + } + + static inline std::string id() + { + return "sf3"; + } + + template + static inline expression_node* allocate(Allocator& allocator, T0 p0, T1 p1, T2 p2, tfunc_t p3) + { + return allocator + .template allocate_type + (p0, p1, p2, p3); + } + + private: + + T0oT1oT2_sf3(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + const tfunc_t f_; + }; + + template + class sf3ext_type_node : public T0oT1oT2_base_node + { + public: + + virtual ~sf3ext_type_node() + {} + + virtual T0 t0() const = 0; + + virtual T1 t1() const = 0; + + virtual T2 t2() const = 0; + }; + + template + class T0oT1oT2_sf3ext exprtk_final : public sf3ext_type_node + { + public: + + typedef T value_type; + typedef T0oT1oT2_sf3ext node_type; + + T0oT1oT2_sf3ext(T0 p0, T1 p1, T2 p2) + : t0_(p0) + , t1_(p1) + , t2_(p2) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1oT2::result; + return result; + } + + inline operator_type operation() + { + return e_default; + } + + inline T value() const exprtk_override + { + return SF3Operation::process(t0_, t1_, t2_); + } + + T0 t0() const exprtk_override + { + return t0_; + } + + T1 t1() const exprtk_override + { + return t1_; + } + + T2 t2() const exprtk_override + { + return t2_; + } + + std::string type_id() const exprtk_override + { + return id(); + } + + static inline std::string id() + { + return SF3Operation::id(); + } + + template + static inline expression_node* allocate(Allocator& allocator, T0 p0, T1 p1, T2 p2) + { + return allocator + .template allocate_type + (p0, p1, p2); + } + + private: + + T0oT1oT2_sf3ext(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + }; + + template + inline bool is_sf3ext_node(const expression_node* n) + { + switch (n->type()) + { + case expression_node::e_vovov : return true; + case expression_node::e_vovoc : return true; + case expression_node::e_vocov : return true; + case expression_node::e_covov : return true; + case expression_node::e_covoc : return true; + default : return false; + } + } + + template + class T0oT1oT2oT3_sf4 exprtk_final : public T0oT1oT2_base_node + { + public: + + typedef typename details::functor_t functor_t; + typedef typename functor_t::qfunc_t qfunc_t; + typedef T value_type; + typedef T0oT1oT2oT3_sf4 node_type; + + T0oT1oT2oT3_sf4(T0 p0, T1 p1, T2 p2, T3 p3, const qfunc_t p4) + : t0_(p0) + , t1_(p1) + , t2_(p2) + , t3_(p3) + , f_ (p4) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1oT2oT3::result; + return result; + } + + inline operator_type operation() const exprtk_override + { + return e_default; + } + + inline T value() const exprtk_override + { + return f_(t0_, t1_, t2_, t3_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline T2 t2() const + { + return t2_; + } + + inline T3 t3() const + { + return t3_; + } + + qfunc_t f() const + { + return f_; + } + + std::string type_id() const + { + return id(); + } + + static inline std::string id() + { + return "sf4"; + } + + template + static inline expression_node* allocate(Allocator& allocator, T0 p0, T1 p1, T2 p2, T3 p3, qfunc_t p4) + { + return allocator + .template allocate_type + (p0, p1, p2, p3, p4); + } + + private: + + T0oT1oT2oT3_sf4(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + T3 t3_; + const qfunc_t f_; + }; + + template + class T0oT1oT2oT3_sf4ext exprtk_final : public T0oT1oT2oT3_base_node + { + public: + + typedef T value_type; + typedef T0oT1oT2oT3_sf4ext node_type; + + T0oT1oT2oT3_sf4ext(T0 p0, T1 p1, T2 p2, T3 p3) + : t0_(p0) + , t1_(p1) + , t2_(p2) + , t3_(p3) + {} + + inline typename expression_node::node_type type() const exprtk_override + { + static const typename expression_node::node_type result = nodetype_T0oT1oT2oT3::result; + return result; + } + + inline T value() const exprtk_override + { + return SF4Operation::process(t0_, t1_, t2_, t3_); + } + + inline T0 t0() const + { + return t0_; + } + + inline T1 t1() const + { + return t1_; + } + + inline T2 t2() const + { + return t2_; + } + + inline T3 t3() const + { + return t3_; + } + + std::string type_id() const exprtk_override + { + return id(); + } + + static inline std::string id() + { + return SF4Operation::id(); + } + + template + static inline expression_node* allocate(Allocator& allocator, T0 p0, T1 p1, T2 p2, T3 p3) + { + return allocator + .template allocate_type + (p0, p1, p2, p3); + } + + private: + + T0oT1oT2oT3_sf4ext(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + + T0 t0_; + T1 t1_; + T2 t2_; + T3 t3_; + }; + + template + inline bool is_sf4ext_node(const expression_node* n) + { + switch (n->type()) + { + case expression_node::e_vovovov : return true; + case expression_node::e_vovovoc : return true; + case expression_node::e_vovocov : return true; + case expression_node::e_vocovov : return true; + case expression_node::e_covovov : return true; + case expression_node::e_covocov : return true; + case expression_node::e_vocovoc : return true; + case expression_node::e_covovoc : return true; + case expression_node::e_vococov : return true; + default : return false; + } + } + + template + struct T0oT1_define + { + typedef details::T0oT1 type0; + }; + + template + struct T0oT1oT2_define + { + typedef details::T0oT1oT2::mode0> type0; + typedef details::T0oT1oT2::mode1> type1; + typedef details::T0oT1oT2_sf3 sf3_type; + typedef details::sf3ext_type_node sf3_type_node; + }; + + template + struct T0oT1oT2oT3_define + { + typedef details::T0oT1oT2oT3::mode0> type0; + typedef details::T0oT1oT2oT3::mode1> type1; + typedef details::T0oT1oT2oT3::mode2> type2; + typedef details::T0oT1oT2oT3::mode3> type3; + typedef details::T0oT1oT2oT3::mode4> type4; + typedef details::T0oT1oT2oT3_sf4 sf4_type; + }; + + template + class vov_node exprtk_final : public vov_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + + // variable op variable node + explicit vov_node(const T& var0, const T& var1) + : v0_(var0) + , v1_(var1) + {} + + inline T value() const exprtk_override + { + return Operation::process(v0_,v1_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T& v0() const exprtk_override + { + return v0_; + } + + inline const T& v1() const exprtk_override + { + return v1_; + } + + protected: + + const T& v0_; + const T& v1_; + + private: + + vov_node(const vov_node&) exprtk_delete; + vov_node& operator=(const vov_node&) exprtk_delete; + }; + + template + class cov_node exprtk_final : public cov_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + + // constant op variable node + explicit cov_node(const T& const_var, const T& var) + : c_(const_var) + , v_(var) + {} + + inline T value() const exprtk_override + { + return Operation::process(c_,v_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T c() const exprtk_override + { + return c_; + } + + inline const T& v() const exprtk_override + { + return v_; + } + + protected: + + const T c_; + const T& v_; + + private: + + cov_node(const cov_node&) exprtk_delete; + cov_node& operator=(const cov_node&) exprtk_delete; + }; + + template + class voc_node exprtk_final : public voc_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + + // variable op constant node + explicit voc_node(const T& var, const T& const_var) + : v_(var) + , c_(const_var) + {} + + inline T value() const exprtk_override + { + return Operation::process(v_,c_); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T c() const exprtk_override + { + return c_; + } + + inline const T& v() const exprtk_override + { + return v_; + } + + protected: + + const T& v_; + const T c_; + + private: + + voc_node(const voc_node&) exprtk_delete; + voc_node& operator=(const voc_node&) exprtk_delete; + }; + + template + class vob_node exprtk_final : public vob_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef Operation operation_t; + + // variable op binary node + explicit vob_node(const T& var, const expression_ptr branch) + : v_(var) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return Operation::process(v_,branch_.first->value()); + } + + inline const T& v() const exprtk_override + { + return v_; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + vob_node(const vob_node&) exprtk_delete; + vob_node& operator=(const vob_node&) exprtk_delete; + + const T& v_; + branch_t branch_; + }; + + template + class bov_node exprtk_final : public bov_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef Operation operation_t; + + // binary node op variable node + explicit bov_node(const expression_ptr branch, const T& var) + : v_(var) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return Operation::process(branch_.first->value(),v_); + } + + inline const T& v() const exprtk_override + { + return v_; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + bov_node(const bov_node&) exprtk_delete; + bov_node& operator=(const bov_node&) exprtk_delete; + + const T& v_; + branch_t branch_; + }; + + template + class cob_node exprtk_final : public cob_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef Operation operation_t; + + // constant op variable node + explicit cob_node(const T const_var, const expression_ptr branch) + : c_(const_var) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return Operation::process(c_,branch_.first->value()); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T c() const exprtk_override + { + return c_; + } + + inline void set_c(const T new_c) exprtk_override + { + (*const_cast(&c_)) = new_c; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + inline expression_node* move_branch(const std::size_t&) exprtk_override + { + branch_.second = false; + return branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + cob_node(const cob_node&) exprtk_delete; + cob_node& operator=(const cob_node&) exprtk_delete; + + const T c_; + branch_t branch_; + }; + + template + class boc_node exprtk_final : public boc_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef Operation operation_t; + + // binary node op constant node + explicit boc_node(const expression_ptr branch, const T const_var) + : c_(const_var) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return Operation::process(branch_.first->value(),c_); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline const T c() const exprtk_override + { + return c_; + } + + inline void set_c(const T new_c) exprtk_override + { + (*const_cast(&c_)) = new_c; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + inline expression_node* branch(const std::size_t&) const exprtk_override + { + return branch_.first; + } + + inline expression_node* move_branch(const std::size_t&) exprtk_override + { + branch_.second = false; + return branch_.first; + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + boc_node(const boc_node&) exprtk_delete; + boc_node& operator=(const boc_node&) exprtk_delete; + + const T c_; + branch_t branch_; + }; + + #ifndef exprtk_disable_string_capabilities + template + class sos_node exprtk_final : public sos_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + + // string op string node + explicit sos_node(SType0 p0, SType1 p1) + : s0_(p0) + , s1_(p1) + {} + + inline T value() const exprtk_override + { + return Operation::process(s0_,s1_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline std::string& s0() + { + return s0_; + } + + inline std::string& s1() + { + return s1_; + } + + protected: + + SType0 s0_; + SType1 s1_; + + private: + + sos_node(const sos_node&) exprtk_delete; + sos_node& operator=(const sos_node&) exprtk_delete; + }; + + template + class str_xrox_node exprtk_final : public sos_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + typedef str_xrox_node node_type; + + // string-range op string node + explicit str_xrox_node(SType0 p0, SType1 p1, RangePack rp0) + : s0_ (p0 ) + , s1_ (p1 ) + , rp0_(rp0) + {} + + ~str_xrox_node() + { + rp0_.free(); + } + + inline T value() const exprtk_override + { + std::size_t r0 = 0; + std::size_t r1 = 0; + + if (rp0_(r0, r1, s0_.size())) + return Operation::process(s0_.substr(r0, (r1 - r0) + 1), s1_); + else + return T(0); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline std::string& s0() + { + return s0_; + } + + inline std::string& s1() + { + return s1_; + } + + protected: + + SType0 s0_; + SType1 s1_; + RangePack rp0_; + + private: + + str_xrox_node(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + }; + + template + class str_xoxr_node exprtk_final : public sos_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + typedef str_xoxr_node node_type; + + // string op string range node + explicit str_xoxr_node(SType0 p0, SType1 p1, RangePack rp1) + : s0_ (p0 ) + , s1_ (p1 ) + , rp1_(rp1) + {} + + ~str_xoxr_node() + { + rp1_.free(); + } + + inline T value() const exprtk_override + { + std::size_t r0 = 0; + std::size_t r1 = 0; + + if (rp1_(r0, r1, s1_.size())) + { + return Operation::process + ( + s0_, + s1_.substr(r0, (r1 - r0) + 1) + ); + } + else + return T(0); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline std::string& s0() + { + return s0_; + } + + inline std::string& s1() + { + return s1_; + } + + protected: + + SType0 s0_; + SType1 s1_; + RangePack rp1_; + + private: + + str_xoxr_node(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + }; + + template + class str_xroxr_node exprtk_final : public sos_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + typedef str_xroxr_node node_type; + + // string-range op string-range node + explicit str_xroxr_node(SType0 p0, SType1 p1, RangePack rp0, RangePack rp1) + : s0_ (p0 ) + , s1_ (p1 ) + , rp0_(rp0) + , rp1_(rp1) + {} + + ~str_xroxr_node() + { + rp0_.free(); + rp1_.free(); + } + + inline T value() const exprtk_override + { + std::size_t r0_0 = 0; + std::size_t r0_1 = 0; + std::size_t r1_0 = 0; + std::size_t r1_1 = 0; + + if ( + rp0_(r0_0, r1_0, s0_.size()) && + rp1_(r0_1, r1_1, s1_.size()) + ) + { + return Operation::process + ( + s0_.substr(r0_0, (r1_0 - r0_0) + 1), + s1_.substr(r0_1, (r1_1 - r0_1) + 1) + ); + } + else + return T(0); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline std::string& s0() + { + return s0_; + } + + inline std::string& s1() + { + return s1_; + } + + protected: + + SType0 s0_; + SType1 s1_; + RangePack rp0_; + RangePack rp1_; + + private: + + str_xroxr_node(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + }; + + template + class str_sogens_node exprtk_final : public binary_node + { + public: + + typedef expression_node * expression_ptr; + typedef string_base_node* str_base_ptr; + typedef range_pack range_t; + typedef range_t* range_ptr; + typedef range_interface irange_t; + typedef irange_t* irange_ptr; + + using binary_node::branch; + + str_sogens_node(const operator_type& opr, + expression_ptr branch0, + expression_ptr branch1) + : binary_node(opr, branch0, branch1) + , str0_base_ptr_ (0) + , str1_base_ptr_ (0) + , str0_range_ptr_(0) + , str1_range_ptr_(0) + , initialised_ (false) + { + if (is_generally_string_node(branch(0))) + { + str0_base_ptr_ = dynamic_cast(branch(0)); + + if (0 == str0_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(0)); + + if (0 == range) + return; + + str0_range_ptr_ = &(range->range_ref()); + } + + if (is_generally_string_node(branch(1))) + { + str1_base_ptr_ = dynamic_cast(branch(1)); + + if (0 == str1_base_ptr_) + return; + + irange_ptr range = dynamic_cast(branch(1)); + + if (0 == range) + return; + + str1_range_ptr_ = &(range->range_ref()); + } + + initialised_ = + str0_base_ptr_ && + str1_base_ptr_ && + str0_range_ptr_ && + str1_range_ptr_; + + assert(valid()); + } + + inline T value() const exprtk_override + { + branch(0)->value(); + branch(1)->value(); + + std::size_t str0_r0 = 0; + std::size_t str0_r1 = 0; + + std::size_t str1_r0 = 0; + std::size_t str1_r1 = 0; + + const range_t& range0 = (*str0_range_ptr_); + const range_t& range1 = (*str1_range_ptr_); + + if ( + range0(str0_r0, str0_r1, str0_base_ptr_->size()) && + range1(str1_r0, str1_r1, str1_base_ptr_->size()) + ) + { + return Operation::process + ( + str0_base_ptr_->str().substr(str0_r0,(str0_r1 - str0_r0)), + str1_base_ptr_->str().substr(str1_r0,(str1_r1 - str1_r0)) + ); + } + + return std::numeric_limits::quiet_NaN(); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline bool valid() const exprtk_override + { + return initialised_; + } + + private: + + str_sogens_node(const str_sogens_node&) exprtk_delete; + str_sogens_node& operator=(const str_sogens_node&) exprtk_delete; + + str_base_ptr str0_base_ptr_; + str_base_ptr str1_base_ptr_; + range_ptr str0_range_ptr_; + range_ptr str1_range_ptr_; + bool initialised_; + }; + + template + class sosos_node exprtk_final : public sosos_base_node + { + public: + + typedef expression_node* expression_ptr; + typedef Operation operation_t; + typedef sosos_node node_type; + + // string op string op string node + explicit sosos_node(SType0 p0, SType1 p1, SType2 p2) + : s0_(p0) + , s1_(p1) + , s2_(p2) + {} + + inline T value() const exprtk_override + { + return Operation::process(s0_, s1_, s2_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return Operation::type(); + } + + inline operator_type operation() const exprtk_override + { + return Operation::operation(); + } + + inline std::string& s0() + { + return s0_; + } + + inline std::string& s1() + { + return s1_; + } + + inline std::string& s2() + { + return s2_; + } + + protected: + + SType0 s0_; + SType1 s1_; + SType2 s2_; + + private: + + sosos_node(const node_type&) exprtk_delete; + node_type& operator=(const node_type&) exprtk_delete; + }; + #endif + + template + class ipow_node exprtk_final: public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef PowOp operation_t; + + explicit ipow_node(const T& v) + : v_(v) + {} + + inline T value() const exprtk_override + { + return PowOp::result(v_); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_ipow; + } + + private: + + ipow_node(const ipow_node&) exprtk_delete; + ipow_node& operator=(const ipow_node&) exprtk_delete; + + const T& v_; + }; + + template + class bipow_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef PowOp operation_t; + + explicit bipow_node(expression_ptr branch) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return PowOp::result(branch_.first->value()); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_ipow; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + bipow_node(const bipow_node&) exprtk_delete; + bipow_node& operator=(const bipow_node&) exprtk_delete; + + branch_t branch_; + }; + + template + class ipowinv_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef PowOp operation_t; + + explicit ipowinv_node(const T& v) + : v_(v) + {} + + inline T value() const exprtk_override + { + return (T(1) / PowOp::result(v_)); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_ipowinv; + } + + private: + + ipowinv_node(const ipowinv_node&) exprtk_delete; + ipowinv_node& operator=(const ipowinv_node&) exprtk_delete; + + const T& v_; + }; + + template + class bipowinv_node exprtk_final : public expression_node + { + public: + + typedef expression_node* expression_ptr; + typedef std::pair branch_t; + typedef PowOp operation_t; + + explicit bipowinv_node(expression_ptr branch) + { + construct_branch_pair(branch_, branch); + assert(valid()); + } + + inline T value() const exprtk_override + { + return (T(1) / PowOp::result(branch_.first->value())); + } + + inline typename expression_node::node_type type() const exprtk_override + { + return expression_node::e_ipowinv; + } + + inline bool valid() const exprtk_override + { + return branch_.first && branch_.first->valid(); + } + + void collect_nodes(typename expression_node::noderef_list_t& node_delete_list) exprtk_override + { + expression_node::ndb_t::template collect(branch_, node_delete_list); + } + + std::size_t node_depth() const exprtk_override + { + return expression_node::ndb_t::compute_node_depth(branch_); + } + + private: + + bipowinv_node(const bipowinv_node&) exprtk_delete; + bipowinv_node& operator=(const bipowinv_node&) exprtk_delete; + + branch_t branch_; + }; + + template + inline bool is_vov_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_cov_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_voc_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_cob_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_boc_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_t0ot1ot2_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_t0ot1ot2ot3_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_uv_node(const expression_node* node) + { + return (0 != dynamic_cast*>(node)); + } + + template + inline bool is_string_node(const expression_node* node) + { + return node && (expression_node::e_stringvar == node->type()); + } + + template + inline bool is_string_range_node(const expression_node* node) + { + return node && (expression_node::e_stringvarrng == node->type()); + } + + template + inline bool is_const_string_node(const expression_node* node) + { + return node && (expression_node::e_stringconst == node->type()); + } + + template + inline bool is_const_string_range_node(const expression_node* node) + { + return node && (expression_node::e_cstringvarrng == node->type()); + } + + template + inline bool is_string_assignment_node(const expression_node* node) + { + return node && (expression_node::e_strass == node->type()); + } + + template + inline bool is_string_concat_node(const expression_node* node) + { + return node && (expression_node::e_strconcat == node->type()); + } + + template + inline bool is_string_function_node(const expression_node* node) + { + return node && (expression_node::e_strfunction == node->type()); + } + + template + inline bool is_string_condition_node(const expression_node* node) + { + return node && (expression_node::e_strcondition == node->type()); + } + + template + inline bool is_string_ccondition_node(const expression_node* node) + { + return node && (expression_node::e_strccondition == node->type()); + } + + template + inline bool is_string_vararg_node(const expression_node* node) + { + return node && (expression_node::e_stringvararg == node->type()); + } + + template + inline bool is_genricstring_range_node(const expression_node* node) + { + return node && (expression_node::e_strgenrange == node->type()); + } + + template + inline bool is_generally_string_node(const expression_node* node) + { + if (node) + { + switch (node->type()) + { + case expression_node::e_stringvar : + case expression_node::e_stringconst : + case expression_node::e_stringvarrng : + case expression_node::e_cstringvarrng : + case expression_node::e_strgenrange : + case expression_node::e_strass : + case expression_node::e_strconcat : + case expression_node::e_strfunction : + case expression_node::e_strcondition : + case expression_node::e_strccondition : + case expression_node::e_stringvararg : return true; + default : return false; + } + } + + return false; + } + + class node_allocator + { + public: + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[1]) + { + expression_node* result = + allocate(operation, branch[0]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[2]) + { + expression_node* result = + allocate(operation, branch[0], branch[1]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[3]) + { + expression_node* result = + allocate(operation, branch[0], branch[1], branch[2]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[4]) + { + expression_node* result = + allocate(operation, branch[0], branch[1], branch[2], branch[3]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[5]) + { + expression_node* result = + allocate(operation, branch[0],branch[1], branch[2], branch[3], branch[4]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(OpType& operation, ExprNode (&branch)[6]) + { + expression_node* result = + allocate(operation, branch[0], branch[1], branch[2], branch[3], branch[4], branch[5]); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate() const + { + return (new node_type()); + } + + template class Sequence> + inline expression_node* allocate(const Sequence& seq) const + { + expression_node* + result = (new node_type(seq)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(T1& t1) const + { + expression_node* + result = (new node_type(t1)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_c(const T1& t1) const + { + expression_node* + result = (new node_type(t1)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2) const + { + expression_node* + result = (new node_type(t1, t2)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_cr(const T1& t1, T2& t2) const + { + expression_node* + result = (new node_type(t1, t2)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_rc(T1& t1, const T2& t2) const + { + expression_node* + result = (new node_type(t1, t2)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_rr(T1& t1, T2& t2) const + { + expression_node* + result = (new node_type(t1, t2)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_tt(T1 t1, T2 t2) const + { + expression_node* + result = (new node_type(t1, t2)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_ttt(T1 t1, T2 t2, T3 t3) const + { + expression_node* + result = (new node_type(t1, t2, t3)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_tttt(T1 t1, T2 t2, T3 t3, T4 t4) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_rrr(T1& t1, T2& t2, T3& t3) const + { + expression_node* + result = (new node_type(t1, t2, t3)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_rrrr(T1& t1, T2& t2, T3& t3, T4& t4) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_rrrrr(T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3) const + { + expression_node* + result = (new node_type(t1, t2, t3)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5, const T6& t6) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5, const T6& t6, + const T7& t7) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6, t7)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5, const T6& t6, + const T7& t7, const T8& t8) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6, t7, t8)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5, const T6& t6, + const T7& t7, const T8& t8, + const T9& t9) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6, t7, t8, t9)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate(const T1& t1, const T2& t2, + const T3& t3, const T4& t4, + const T5& t5, const T6& t6, + const T7& t7, const T8& t8, + const T9& t9, const T10& t10) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_type(T1 t1, T2 t2, T3 t3) const + { + expression_node* + result = (new node_type(t1, t2, t3)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_type(T1 t1, T2 t2, + T3 t3, T4 t4) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_type(T1 t1, T2 t2, + T3 t3, T4 t4, + T5 t5) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_type(T1 t1, T2 t2, + T3 t3, T4 t4, + T5 t5, T6 t6) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6)); + result->node_depth(); + return result; + } + + template + inline expression_node* allocate_type(T1 t1, T2 t2, + T3 t3, T4 t4, + T5 t5, T6 t6, + T7 t7) const + { + expression_node* + result = (new node_type(t1, t2, t3, t4, t5, t6, t7)); + result->node_depth(); + return result; + } + + template + void inline free(expression_node*& e) const + { + exprtk_debug(("node_allocator::free() - deleting expression_node " + "type: %03d addr: %p\n", + static_cast(e->type()), + reinterpret_cast(e))); + delete e; + e = 0; + } + }; + + inline void load_operations_map(std::multimap& m) + { + #define register_op(Symbol, Type, Args) \ + m.insert(std::make_pair(std::string(Symbol),details::base_operation_t(Type,Args))); \ + + register_op("abs" , e_abs , 1) + register_op("acos" , e_acos , 1) + register_op("acosh" , e_acosh , 1) + register_op("asin" , e_asin , 1) + register_op("asinh" , e_asinh , 1) + register_op("atan" , e_atan , 1) + register_op("atanh" , e_atanh , 1) + register_op("ceil" , e_ceil , 1) + register_op("cos" , e_cos , 1) + register_op("cosh" , e_cosh , 1) + register_op("exp" , e_exp , 1) + register_op("expm1" , e_expm1 , 1) + register_op("floor" , e_floor , 1) + register_op("log" , e_log , 1) + register_op("log10" , e_log10 , 1) + register_op("log2" , e_log2 , 1) + register_op("log1p" , e_log1p , 1) + register_op("round" , e_round , 1) + register_op("sin" , e_sin , 1) + register_op("sinc" , e_sinc , 1) + register_op("sinh" , e_sinh , 1) + register_op("sec" , e_sec , 1) + register_op("csc" , e_csc , 1) + register_op("sqrt" , e_sqrt , 1) + register_op("tan" , e_tan , 1) + register_op("tanh" , e_tanh , 1) + register_op("cot" , e_cot , 1) + register_op("rad2deg" , e_r2d , 1) + register_op("deg2rad" , e_d2r , 1) + register_op("deg2grad" , e_d2g , 1) + register_op("grad2deg" , e_g2d , 1) + register_op("sgn" , e_sgn , 1) + register_op("not" , e_notl , 1) + register_op("erf" , e_erf , 1) + register_op("erfc" , e_erfc , 1) + register_op("ncdf" , e_ncdf , 1) + register_op("frac" , e_frac , 1) + register_op("trunc" , e_trunc , 1) + register_op("atan2" , e_atan2 , 2) + register_op("mod" , e_mod , 2) + register_op("logn" , e_logn , 2) + register_op("pow" , e_pow , 2) + register_op("root" , e_root , 2) + register_op("roundn" , e_roundn , 2) + register_op("equal" , e_equal , 2) + register_op("not_equal" , e_nequal , 2) + register_op("hypot" , e_hypot , 2) + register_op("shr" , e_shr , 2) + register_op("shl" , e_shl , 2) + register_op("clamp" , e_clamp , 3) + register_op("iclamp" , e_iclamp , 3) + register_op("inrange" , e_inrange , 3) + #undef register_op + } + + } // namespace details + + class function_traits + { + public: + + function_traits() + : allow_zero_parameters_(false) + , has_side_effects_(true) + , min_num_args_(0) + , max_num_args_(std::numeric_limits::max()) + {} + + inline bool& allow_zero_parameters() + { + return allow_zero_parameters_; + } + + inline bool& has_side_effects() + { + return has_side_effects_; + } + + std::size_t& min_num_args() + { + return min_num_args_; + } + + std::size_t& max_num_args() + { + return max_num_args_; + } + + private: + + bool allow_zero_parameters_; + bool has_side_effects_; + std::size_t min_num_args_; + std::size_t max_num_args_; + }; + + template + void enable_zero_parameters(FunctionType& func) + { + func.allow_zero_parameters() = true; + + if (0 != func.min_num_args()) + { + func.min_num_args() = 0; + } + } + + template + void disable_zero_parameters(FunctionType& func) + { + func.allow_zero_parameters() = false; + } + + template + void enable_has_side_effects(FunctionType& func) + { + func.has_side_effects() = true; + } + + template + void disable_has_side_effects(FunctionType& func) + { + func.has_side_effects() = false; + } + + template + void set_min_num_args(FunctionType& func, const std::size_t& num_args) + { + func.min_num_args() = num_args; + + if ((0 != func.min_num_args()) && func.allow_zero_parameters()) + func.allow_zero_parameters() = false; + } + + template + void set_max_num_args(FunctionType& func, const std::size_t& num_args) + { + func.max_num_args() = num_args; + } + + template + class ifunction : public function_traits + { + public: + + explicit ifunction(const std::size_t& pc) + : param_count(pc) + {} + + virtual ~ifunction() + {} + + #define empty_method_body(N) \ + { \ + exprtk_debug(("ifunction::operator() - Operator(" #N ") has not been overridden\n")); \ + return std::numeric_limits::quiet_NaN(); \ + } \ + + inline virtual T operator() () + empty_method_body(0) + + inline virtual T operator() (const T&) + empty_method_body(1) + + inline virtual T operator() (const T&,const T&) + empty_method_body(2) + + inline virtual T operator() (const T&, const T&, const T&) + empty_method_body(3) + + inline virtual T operator() (const T&, const T&, const T&, const T&) + empty_method_body(4) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&) + empty_method_body(5) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(6) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(7) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(8) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(9) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(10) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&) + empty_method_body(11) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&) + empty_method_body(12) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&) + empty_method_body(13) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&) + empty_method_body(14) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&) + empty_method_body(15) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(16) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(17) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(18) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(19) + + inline virtual T operator() (const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, + const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&, const T&) + empty_method_body(20) + + #undef empty_method_body + + std::size_t param_count; + }; + + template + class ivararg_function : public function_traits + { + public: + + virtual ~ivararg_function() + {} + + inline virtual T operator() (const std::vector&) + { + exprtk_debug(("ivararg_function::operator() - Operator has not been overridden\n")); + return std::numeric_limits::quiet_NaN(); + } + }; + + template + class igeneric_function : public function_traits + { + public: + + enum return_type + { + e_rtrn_scalar = 0, + e_rtrn_string = 1, + e_rtrn_overload = 2 + }; + + typedef T type; + typedef type_store generic_type; + typedef typename generic_type::parameter_list parameter_list_t; + + explicit igeneric_function(const std::string& param_seq = "", const return_type rtr_type = e_rtrn_scalar) + : parameter_sequence(param_seq) + , rtrn_type(rtr_type) + {} + + virtual ~igeneric_function() + {} + + #define igeneric_function_empty_body(N) \ + { \ + exprtk_debug(("igeneric_function::operator() - Operator(" #N ") has not been overridden\n")); \ + return std::numeric_limits::quiet_NaN(); \ + } \ + + // f(i_0,i_1,....,i_N) --> Scalar + inline virtual T operator() (parameter_list_t) + igeneric_function_empty_body(1) + + // f(i_0,i_1,....,i_N) --> String + inline virtual T operator() (std::string&, parameter_list_t) + igeneric_function_empty_body(2) + + // f(psi,i_0,i_1,....,i_N) --> Scalar + inline virtual T operator() (const std::size_t&, parameter_list_t) + igeneric_function_empty_body(3) + + // f(psi,i_0,i_1,....,i_N) --> String + inline virtual T operator() (const std::size_t&, std::string&, parameter_list_t) + igeneric_function_empty_body(4) + + #undef igeneric_function_empty_body + + std::string parameter_sequence; + return_type rtrn_type; + }; + + #ifndef exprtk_disable_string_capabilities + template + class stringvar_base + { + public: + + typedef typename details::stringvar_node stringvar_node_t; + + stringvar_base(const std::string& name, stringvar_node_t* svn) + : name_(name) + , string_varnode_(svn) + {} + + bool valid() const + { + return !name_.empty() && (0 != string_varnode_); + } + + std::string name() const + { + assert(string_varnode_); + return name_; + } + + void rebase(std::string& s) + { + assert(string_varnode_); + string_varnode_->rebase(s); + } + + private: + + std::string name_; + stringvar_node_t* string_varnode_; + }; + #endif + + template class parser; + template class expression_helper; + + template + class symbol_table + { + public: + + enum symtab_mutability_type + { + e_unknown = 0, + e_mutable = 1, + e_immutable = 2 + }; + + typedef T (*ff00_functor)(); + typedef T (*ff01_functor)(T); + typedef T (*ff02_functor)(T, T); + typedef T (*ff03_functor)(T, T, T); + typedef T (*ff04_functor)(T, T, T, T); + typedef T (*ff05_functor)(T, T, T, T, T); + typedef T (*ff06_functor)(T, T, T, T, T, T); + typedef T (*ff07_functor)(T, T, T, T, T, T, T); + typedef T (*ff08_functor)(T, T, T, T, T, T, T, T); + typedef T (*ff09_functor)(T, T, T, T, T, T, T, T, T); + typedef T (*ff10_functor)(T, T, T, T, T, T, T, T, T, T); + typedef T (*ff11_functor)(T, T, T, T, T, T, T, T, T, T, T); + typedef T (*ff12_functor)(T, T, T, T, T, T, T, T, T, T, T, T); + typedef T (*ff13_functor)(T, T, T, T, T, T, T, T, T, T, T, T, T); + typedef T (*ff14_functor)(T, T, T, T, T, T, T, T, T, T, T, T, T, T); + typedef T (*ff15_functor)(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T); + + protected: + + struct freefunc00 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc00(ff00_functor ff) : exprtk::ifunction(0), f(ff) {} + inline T operator() () exprtk_override + { return f(); } + ff00_functor f; + }; + + struct freefunc01 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc01(ff01_functor ff) : exprtk::ifunction(1), f(ff) {} + inline T operator() (const T& v0) exprtk_override + { return f(v0); } + ff01_functor f; + }; + + struct freefunc02 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc02(ff02_functor ff) : exprtk::ifunction(2), f(ff) {} + inline T operator() (const T& v0, const T& v1) exprtk_override + { return f(v0, v1); } + ff02_functor f; + }; + + struct freefunc03 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc03(ff03_functor ff) : exprtk::ifunction(3), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2) exprtk_override + { return f(v0, v1, v2); } + ff03_functor f; + }; + + struct freefunc04 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc04(ff04_functor ff) : exprtk::ifunction(4), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3) exprtk_override + { return f(v0, v1, v2, v3); } + ff04_functor f; + }; + + struct freefunc05 : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc05(ff05_functor ff) : exprtk::ifunction(5), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4) exprtk_override + { return f(v0, v1, v2, v3, v4); } + ff05_functor f; + }; + + struct freefunc06 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc06(ff06_functor ff) : exprtk::ifunction(6), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) exprtk_override + { return f(v0, v1, v2, v3, v4, v5); } + ff06_functor f; + }; + + struct freefunc07 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc07(ff07_functor ff) : exprtk::ifunction(7), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6) exprtk_override + { return f(v0, v1, v2, v3, v4, v5, v6); } + ff07_functor f; + }; + + struct freefunc08 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc08(ff08_functor ff) : exprtk::ifunction(8), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7) exprtk_override + { return f(v0, v1, v2, v3, v4, v5, v6, v7); } + ff08_functor f; + }; + + struct freefunc09 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc09(ff09_functor ff) : exprtk::ifunction(9), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8) exprtk_override + { return f(v0, v1, v2, v3, v4, v5, v6, v7, v8); } + ff09_functor f; + }; + + struct freefunc10 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc10(ff10_functor ff) : exprtk::ifunction(10), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, const T& v9) exprtk_override + { return f(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); } + ff10_functor f; + }; + + struct freefunc11 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc11(ff11_functor ff) : exprtk::ifunction(11), f(ff) {} + inline T operator() (const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, const T& v9, const T& v10) exprtk_override + { return f(v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); } + ff11_functor f; + }; + + struct freefunc12 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc12(ff12_functor ff) : exprtk::ifunction(12), f(ff) {} + inline T operator() (const T& v00, const T& v01, const T& v02, const T& v03, const T& v04, + const T& v05, const T& v06, const T& v07, const T& v08, const T& v09, + const T& v10, const T& v11) exprtk_override + { return f(v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11); } + ff12_functor f; + }; + + struct freefunc13 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc13(ff13_functor ff) : exprtk::ifunction(13), f(ff) {} + inline T operator() (const T& v00, const T& v01, const T& v02, const T& v03, const T& v04, + const T& v05, const T& v06, const T& v07, const T& v08, const T& v09, + const T& v10, const T& v11, const T& v12) exprtk_override + { return f(v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12); } + ff13_functor f; + }; + + struct freefunc14 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc14(ff14_functor ff) : exprtk::ifunction(14), f(ff) {} + inline T operator() (const T& v00, const T& v01, const T& v02, const T& v03, const T& v04, + const T& v05, const T& v06, const T& v07, const T& v08, const T& v09, + const T& v10, const T& v11, const T& v12, const T& v13) exprtk_override + { return f(v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v13); } + ff14_functor f; + }; + + struct freefunc15 exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + explicit freefunc15(ff15_functor ff) : exprtk::ifunction(15), f(ff) {} + inline T operator() (const T& v00, const T& v01, const T& v02, const T& v03, const T& v04, + const T& v05, const T& v06, const T& v07, const T& v08, const T& v09, + const T& v10, const T& v11, const T& v12, const T& v13, const T& v14) exprtk_override + { return f(v00, v01, v02, v03, v04, v05, v06, v07, v08, v09, v10, v11, v12, v13, v14); } + ff15_functor f; + }; + + template + struct type_store + { + typedef details::expression_node* expression_ptr; + typedef typename details::variable_node variable_node_t; + typedef ifunction ifunction_t; + typedef ivararg_function ivararg_function_t; + typedef igeneric_function igeneric_function_t; + typedef details::vector_holder vector_t; + #ifndef exprtk_disable_string_capabilities + typedef typename details::stringvar_node stringvar_node_t; + #endif + + typedef Type type_t; + typedef type_t* type_ptr; + typedef std::pair type_pair_t; + typedef std::map type_map_t; + typedef typename type_map_t::iterator tm_itr_t; + typedef typename type_map_t::const_iterator tm_const_itr_t; + + enum { lut_size = 256 }; + + type_map_t map; + std::size_t size; + + type_store() + : size(0) + {} + + struct deleter + { + #define exprtk_define_process(Type) \ + static inline void process(std::pair& n) \ + { \ + delete n.second; \ + } \ + + exprtk_define_process(variable_node_t ) + exprtk_define_process(vector_t ) + #ifndef exprtk_disable_string_capabilities + exprtk_define_process(stringvar_node_t) + #endif + + #undef exprtk_define_process + + template + static inline void process(std::pair&) + {} + }; + + inline bool symbol_exists(const std::string& symbol_name) const + { + if (symbol_name.empty()) + return false; + else if (map.end() != map.find(symbol_name)) + return true; + else + return false; + } + + template + inline std::string entity_name(const PtrType& ptr) const + { + if (map.empty()) + return std::string(); + + tm_const_itr_t itr = map.begin(); + + while (map.end() != itr) + { + if (itr->second.second == ptr) + { + return itr->first; + } + else + ++itr; + } + + return std::string(); + } + + inline bool is_constant(const std::string& symbol_name) const + { + if (symbol_name.empty()) + return false; + else + { + const tm_const_itr_t itr = map.find(symbol_name); + + if (map.end() == itr) + return false; + else + return (*itr).second.first; + } + } + + template + inline bool add_impl(const std::string& symbol_name, RType t, const bool is_const) + { + if (symbol_name.size() > 1) + { + for (std::size_t i = 0; i < details::reserved_symbols_size; ++i) + { + if (details::imatch(symbol_name, details::reserved_symbols[i])) + { + return false; + } + } + } + + const tm_itr_t itr = map.find(symbol_name); + + if (map.end() == itr) + { + map[symbol_name] = Tie::make(t,is_const); + ++size; + } + + return true; + } + + struct tie_array + { + static inline std::pair make(std::pair v, const bool is_const = false) + { + return std::make_pair(is_const, new vector_t(v.first, v.second)); + } + }; + + struct tie_stdvec + { + template + static inline std::pair make(std::vector& v, const bool is_const = false) + { + return std::make_pair(is_const, new vector_t(v)); + } + }; + + struct tie_vecview + { + static inline std::pair make(exprtk::vector_view& v, const bool is_const = false) + { + return std::make_pair(is_const, new vector_t(v)); + } + }; + + struct tie_stddeq + { + template + static inline std::pair make(std::deque& v, const bool is_const = false) + { + return std::make_pair(is_const, new vector_t(v)); + } + }; + + template + inline bool add(const std::string& symbol_name, T (&v)[v_size], const bool is_const = false) + { + return add_impl > + (symbol_name, std::make_pair(v,v_size), is_const); + } + + inline bool add(const std::string& symbol_name, T* v, const std::size_t v_size, const bool is_const = false) + { + return add_impl > + (symbol_name, std::make_pair(v,v_size), is_const); + } + + template + inline bool add(const std::string& symbol_name, std::vector& v, const bool is_const = false) + { + return add_impl&> + (symbol_name, v, is_const); + } + + inline bool add(const std::string& symbol_name, exprtk::vector_view& v, const bool is_const = false) + { + return add_impl&> + (symbol_name, v, is_const); + } + + template + inline bool add(const std::string& symbol_name, std::deque& v, const bool is_const = false) + { + return add_impl&> + (symbol_name, v, is_const); + } + + inline bool add(const std::string& symbol_name, RawType& t_, const bool is_const = false) + { + struct tie + { + static inline std::pair make(T& t, const bool is_constant = false) + { + return std::make_pair(is_constant, new variable_node_t(t)); + } + + #ifndef exprtk_disable_string_capabilities + static inline std::pair make(std::string& t, const bool is_constant = false) + { + return std::make_pair(is_constant, new stringvar_node_t(t)); + } + #endif + + static inline std::pair make(function_t& t, const bool is_constant = false) + { + return std::make_pair(is_constant,&t); + } + + static inline std::pair make(vararg_function_t& t, const bool is_constant = false) + { + return std::make_pair(is_constant,&t); + } + + static inline std::pair make(generic_function_t& t, const bool is_constant = false) + { + return std::make_pair(is_constant,&t); + } + }; + + const tm_itr_t itr = map.find(symbol_name); + + if (map.end() == itr) + { + map[symbol_name] = tie::make(t_,is_const); + ++size; + } + + return true; + } + + inline type_ptr get(const std::string& symbol_name) const + { + const tm_const_itr_t itr = map.find(symbol_name); + + if (map.end() == itr) + return reinterpret_cast(0); + else + return itr->second.second; + } + + template + struct ptr_match + { + static inline bool test(const PtrType, const void*) + { + return false; + } + }; + + template + struct ptr_match + { + static inline bool test(const variable_node_t* p, const void* ptr) + { + exprtk_debug(("ptr_match::test() - %p <--> %p\n", reinterpret_cast(&(p->ref())), ptr)); + return (&(p->ref()) == ptr); + } + }; + + inline type_ptr get_from_varptr(const void* ptr) const + { + tm_const_itr_t itr = map.begin(); + + while (map.end() != itr) + { + type_ptr ret_ptr = itr->second.second; + + if (ptr_match::test(ret_ptr,ptr)) + { + return ret_ptr; + } + + ++itr; + } + + return type_ptr(0); + } + + inline bool remove(const std::string& symbol_name, const bool delete_node = true) + { + const tm_itr_t itr = map.find(symbol_name); + + if (map.end() != itr) + { + if (delete_node) + { + deleter::process((*itr).second); + } + + map.erase(itr); + --size; + + return true; + } + else + return false; + } + + inline RawType& type_ref(const std::string& symbol_name) + { + struct init_type + { + static inline double set(double) { return (0.0); } + static inline double set(long double) { return (0.0); } + static inline float set(float) { return (0.0f); } + static inline std::string set(std::string) { return std::string(""); } + }; + + static RawType null_type = init_type::set(RawType()); + + const tm_const_itr_t itr = map.find(symbol_name); + + if (map.end() == itr) + return null_type; + else + return itr->second.second->ref(); + } + + inline void clear(const bool delete_node = true) + { + if (!map.empty()) + { + if (delete_node) + { + tm_itr_t itr = map.begin(); + tm_itr_t end = map.end (); + + while (end != itr) + { + deleter::process((*itr).second); + ++itr; + } + } + + map.clear(); + } + + size = 0; + } + + template class Sequence> + inline std::size_t get_list(Sequence,Allocator>& list) const + { + std::size_t count = 0; + + if (!map.empty()) + { + tm_const_itr_t itr = map.begin(); + tm_const_itr_t end = map.end (); + + while (end != itr) + { + list.push_back(std::make_pair((*itr).first,itr->second.second->ref())); + ++itr; + ++count; + } + } + + return count; + } + + template class Sequence> + inline std::size_t get_list(Sequence& vlist) const + { + std::size_t count = 0; + + if (!map.empty()) + { + tm_const_itr_t itr = map.begin(); + tm_const_itr_t end = map.end (); + + while (end != itr) + { + vlist.push_back((*itr).first); + ++itr; + ++count; + } + } + + return count; + } + }; + + typedef details::expression_node* expression_ptr; + typedef typename details::variable_node variable_t; + typedef typename details::vector_holder vector_holder_t; + typedef variable_t* variable_ptr; + #ifndef exprtk_disable_string_capabilities + typedef typename details::stringvar_node stringvar_t; + typedef stringvar_t* stringvar_ptr; + #endif + typedef ifunction function_t; + typedef ivararg_function vararg_function_t; + typedef igeneric_function generic_function_t; + typedef function_t* function_ptr; + typedef vararg_function_t* vararg_function_ptr; + typedef generic_function_t* generic_function_ptr; + + static const std::size_t lut_size = 256; + + // Symbol Table Holder + struct control_block + { + struct st_data + { + type_store variable_store; + type_store function_store; + type_store vararg_function_store; + type_store generic_function_store; + type_store string_function_store; + type_store overload_function_store; + type_store vector_store; + #ifndef exprtk_disable_string_capabilities + type_store stringvar_store; + #endif + + st_data() + { + for (std::size_t i = 0; i < details::reserved_words_size; ++i) + { + reserved_symbol_table_.insert(details::reserved_words[i]); + } + + for (std::size_t i = 0; i < details::reserved_symbols_size; ++i) + { + reserved_symbol_table_.insert(details::reserved_symbols[i]); + } + } + + ~st_data() + { + for (std::size_t i = 0; i < free_function_list_.size(); ++i) + { + delete free_function_list_[i]; + } + } + + inline bool is_reserved_symbol(const std::string& symbol) const + { + return (reserved_symbol_table_.end() != reserved_symbol_table_.find(symbol)); + } + + static inline st_data* create() + { + return (new st_data); + } + + static inline void destroy(st_data*& sd) + { + delete sd; + sd = reinterpret_cast(0); + } + + std::list local_symbol_list_; + std::list local_stringvar_list_; + std::set reserved_symbol_table_; + std::vector*> free_function_list_; + }; + + control_block() + : ref_count(1) + , data_(st_data::create()) + , mutability_(e_mutable) + {} + + explicit control_block(st_data* data) + : ref_count(1) + , data_(data) + , mutability_(e_mutable) + {} + + ~control_block() + { + if (data_ && (0 == ref_count)) + { + st_data::destroy(data_); + } + } + + static inline control_block* create() + { + return (new control_block); + } + + template + static inline void destroy(control_block*& cntrl_blck, SymTab* sym_tab) + { + if (cntrl_blck) + { + if ( + (0 != cntrl_blck->ref_count) && + (0 == --cntrl_blck->ref_count) + ) + { + if (sym_tab) + sym_tab->clear(); + + delete cntrl_blck; + } + + cntrl_blck = 0; + } + } + + void set_mutability(const symtab_mutability_type mutability) + { + mutability_ = mutability; + } + + std::size_t ref_count; + st_data* data_; + symtab_mutability_type mutability_; + }; + + public: + + explicit symbol_table(const symtab_mutability_type mutability = e_mutable) + : control_block_(control_block::create()) + { + control_block_->set_mutability(mutability); + clear(); + } + + ~symbol_table() + { + exprtk::details::dump_ptr("~symbol_table", this); + control_block::destroy(control_block_, this); + } + + symbol_table(const symbol_table& st) + { + control_block_ = st.control_block_; + control_block_->ref_count++; + } + + inline symbol_table& operator=(const symbol_table& st) + { + if (this != &st) + { + control_block::destroy(control_block_,reinterpret_cast*>(0)); + + control_block_ = st.control_block_; + control_block_->ref_count++; + } + + return (*this); + } + + inline bool operator==(const symbol_table& st) const + { + return (this == &st) || (control_block_ == st.control_block_); + } + + inline symtab_mutability_type mutability() const + { + return valid() ? control_block_->mutability_ : e_unknown; + } + + inline void clear_variables(const bool delete_node = true) + { + local_data().variable_store.clear(delete_node); + } + + inline void clear_functions() + { + local_data().function_store.clear(); + } + + inline void clear_strings() + { + #ifndef exprtk_disable_string_capabilities + local_data().stringvar_store.clear(); + #endif + } + + inline void clear_vectors() + { + local_data().vector_store.clear(); + } + + inline void clear_local_constants() + { + local_data().local_symbol_list_.clear(); + } + + inline void clear() + { + if (!valid()) return; + clear_variables (); + clear_functions (); + clear_strings (); + clear_vectors (); + clear_local_constants(); + } + + inline std::size_t variable_count() const + { + if (valid()) + return local_data().variable_store.size; + else + return 0; + } + + #ifndef exprtk_disable_string_capabilities + inline std::size_t stringvar_count() const + { + if (valid()) + return local_data().stringvar_store.size; + else + return 0; + } + #endif + + inline std::size_t function_count() const + { + if (valid()) + return local_data().function_store.size; + else + return 0; + } + + inline std::size_t vector_count() const + { + if (valid()) + return local_data().vector_store.size; + else + return 0; + } + + inline variable_ptr get_variable(const std::string& variable_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(variable_name)) + return reinterpret_cast(0); + else + return local_data().variable_store.get(variable_name); + } + + inline variable_ptr get_variable(const T& var_ref) const + { + if (!valid()) + return reinterpret_cast(0); + else + return local_data().variable_store.get_from_varptr( + reinterpret_cast(&var_ref)); + } + + #ifndef exprtk_disable_string_capabilities + inline stringvar_ptr get_stringvar(const std::string& string_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(string_name)) + return reinterpret_cast(0); + else + return local_data().stringvar_store.get(string_name); + } + + inline stringvar_base get_stringvar_base(const std::string& string_name) const + { + static stringvar_base null_stringvar_base("",reinterpret_cast(0)); + if (!valid()) + return null_stringvar_base; + else if (!valid_symbol(string_name)) + return null_stringvar_base; + + stringvar_ptr stringvar = local_data().stringvar_store.get(string_name); + + if (0 == stringvar) + { + return null_stringvar_base; + } + + return stringvar_base(string_name,stringvar); + } + #endif + + inline function_ptr get_function(const std::string& function_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(function_name)) + return reinterpret_cast(0); + else + return local_data().function_store.get(function_name); + } + + inline vararg_function_ptr get_vararg_function(const std::string& vararg_function_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(vararg_function_name)) + return reinterpret_cast(0); + else + return local_data().vararg_function_store.get(vararg_function_name); + } + + inline generic_function_ptr get_generic_function(const std::string& function_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(function_name)) + return reinterpret_cast(0); + else + return local_data().generic_function_store.get(function_name); + } + + inline generic_function_ptr get_string_function(const std::string& function_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(function_name)) + return reinterpret_cast(0); + else + return local_data().string_function_store.get(function_name); + } + + inline generic_function_ptr get_overload_function(const std::string& function_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(function_name)) + return reinterpret_cast(0); + else + return local_data().overload_function_store.get(function_name); + } + + typedef vector_holder_t* vector_holder_ptr; + + inline vector_holder_ptr get_vector(const std::string& vector_name) const + { + if (!valid()) + return reinterpret_cast(0); + else if (!valid_symbol(vector_name)) + return reinterpret_cast(0); + else + return local_data().vector_store.get(vector_name); + } + + inline T& variable_ref(const std::string& symbol_name) + { + static T null_var = T(0); + if (!valid()) + return null_var; + else if (!valid_symbol(symbol_name)) + return null_var; + else + return local_data().variable_store.type_ref(symbol_name); + } + + #ifndef exprtk_disable_string_capabilities + inline std::string& stringvar_ref(const std::string& symbol_name) + { + static std::string null_stringvar; + if (!valid()) + return null_stringvar; + else if (!valid_symbol(symbol_name)) + return null_stringvar; + else + return local_data().stringvar_store.type_ref(symbol_name); + } + #endif + + inline bool is_constant_node(const std::string& symbol_name) const + { + if (!valid()) + return false; + else if (!valid_symbol(symbol_name)) + return false; + else + return local_data().variable_store.is_constant(symbol_name); + } + + #ifndef exprtk_disable_string_capabilities + inline bool is_constant_string(const std::string& symbol_name) const + { + if (!valid()) + return false; + else if (!valid_symbol(symbol_name)) + return false; + else if (!local_data().stringvar_store.symbol_exists(symbol_name)) + return false; + else + return local_data().stringvar_store.is_constant(symbol_name); + } + #endif + + inline bool create_variable(const std::string& variable_name, const T& value = T(0)) + { + if (!valid()) + return false; + else if (!valid_symbol(variable_name)) + return false; + else if (symbol_exists(variable_name)) + return false; + + local_data().local_symbol_list_.push_back(value); + T& t = local_data().local_symbol_list_.back(); + + return add_variable(variable_name,t); + } + + #ifndef exprtk_disable_string_capabilities + inline bool create_stringvar(const std::string& stringvar_name, const std::string& value = std::string("")) + { + if (!valid()) + return false; + else if (!valid_symbol(stringvar_name)) + return false; + else if (symbol_exists(stringvar_name)) + return false; + + local_data().local_stringvar_list_.push_back(value); + std::string& s = local_data().local_stringvar_list_.back(); + + return add_stringvar(stringvar_name,s); + } + #endif + + inline bool add_variable(const std::string& variable_name, T& t, const bool is_constant = false) + { + if (!valid()) + return false; + else if (!valid_symbol(variable_name)) + return false; + else if (symbol_exists(variable_name)) + return false; + else + return local_data().variable_store.add(variable_name, t, is_constant); + } + + inline bool add_constant(const std::string& constant_name, const T& value) + { + if (!valid()) + return false; + else if (!valid_symbol(constant_name)) + return false; + else if (symbol_exists(constant_name)) + return false; + + local_data().local_symbol_list_.push_back(value); + T& t = local_data().local_symbol_list_.back(); + + return add_variable(constant_name, t, true); + } + + #ifndef exprtk_disable_string_capabilities + inline bool add_stringvar(const std::string& stringvar_name, std::string& s, const bool is_constant = false) + { + if (!valid()) + return false; + else if (!valid_symbol(stringvar_name)) + return false; + else if (symbol_exists(stringvar_name)) + return false; + else + return local_data().stringvar_store.add(stringvar_name, s, is_constant); + } + #endif + + inline bool add_function(const std::string& function_name, function_t& function) + { + if (!valid()) + return false; + else if (!valid_symbol(function_name)) + return false; + else if (symbol_exists(function_name)) + return false; + else + return local_data().function_store.add(function_name,function); + } + + inline bool add_function(const std::string& vararg_function_name, vararg_function_t& vararg_function) + { + if (!valid()) + return false; + else if (!valid_symbol(vararg_function_name)) + return false; + else if (symbol_exists(vararg_function_name)) + return false; + else + return local_data().vararg_function_store.add(vararg_function_name,vararg_function); + } + + inline bool add_function(const std::string& function_name, generic_function_t& function) + { + if (!valid()) + return false; + else if (!valid_symbol(function_name)) + return false; + else if (symbol_exists(function_name)) + return false; + else + { + switch (function.rtrn_type) + { + case generic_function_t::e_rtrn_scalar : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ? + local_data().generic_function_store.add(function_name,function) : false; + + case generic_function_t::e_rtrn_string : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ? + local_data().string_function_store.add(function_name,function) : false; + + case generic_function_t::e_rtrn_overload : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|:")) ? + local_data().overload_function_store.add(function_name,function) : false; + } + } + + return false; + } + + #define exprtk_define_freefunction(NN) \ + inline bool add_function(const std::string& function_name, ff##NN##_functor function) \ + { \ + if (!valid()) \ + { return false; } \ + if (!valid_symbol(function_name)) \ + { return false; } \ + if (symbol_exists(function_name)) \ + { return false; } \ + \ + exprtk::ifunction* ifunc = new freefunc##NN(function); \ + \ + local_data().free_function_list_.push_back(ifunc); \ + \ + return add_function(function_name,(*local_data().free_function_list_.back())); \ + } \ + + exprtk_define_freefunction(00) exprtk_define_freefunction(01) + exprtk_define_freefunction(02) exprtk_define_freefunction(03) + exprtk_define_freefunction(04) exprtk_define_freefunction(05) + exprtk_define_freefunction(06) exprtk_define_freefunction(07) + exprtk_define_freefunction(08) exprtk_define_freefunction(09) + exprtk_define_freefunction(10) exprtk_define_freefunction(11) + exprtk_define_freefunction(12) exprtk_define_freefunction(13) + exprtk_define_freefunction(14) exprtk_define_freefunction(15) + + #undef exprtk_define_freefunction + + inline bool add_reserved_function(const std::string& function_name, function_t& function) + { + if (!valid()) + return false; + else if (!valid_symbol(function_name,false)) + return false; + else if (symbol_exists(function_name,false)) + return false; + else + return local_data().function_store.add(function_name,function); + } + + inline bool add_reserved_function(const std::string& vararg_function_name, vararg_function_t& vararg_function) + { + if (!valid()) + return false; + else if (!valid_symbol(vararg_function_name,false)) + return false; + else if (symbol_exists(vararg_function_name,false)) + return false; + else + return local_data().vararg_function_store.add(vararg_function_name,vararg_function); + } + + inline bool add_reserved_function(const std::string& function_name, generic_function_t& function) + { + if (!valid()) + return false; + else if (!valid_symbol(function_name,false)) + return false; + else if (symbol_exists(function_name,false)) + return false; + else + { + switch (function.rtrn_type) + { + case generic_function_t::e_rtrn_scalar : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ? + local_data().generic_function_store.add(function_name,function) : false; + + case generic_function_t::e_rtrn_string : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|")) ? + local_data().string_function_store.add(function_name,function) : false; + + case generic_function_t::e_rtrn_overload : + return (std::string::npos == function.parameter_sequence.find_first_not_of("STVZ*?|:")) ? + local_data().overload_function_store.add(function_name,function) : false; + } + } + + return false; + } + + template + inline bool add_vector(const std::string& vector_name, T (&v)[N]) + { + if (!valid()) + return false; + else if (!valid_symbol(vector_name)) + return false; + else if (symbol_exists(vector_name)) + return false; + else + return local_data().vector_store.add(vector_name,v); + } + + inline bool add_vector(const std::string& vector_name, T* v, const std::size_t& v_size) + { + if (!valid()) + return false; + else if (!valid_symbol(vector_name)) + return false; + else if (symbol_exists(vector_name)) + return false; + else if (0 == v_size) + return false; + else + return local_data().vector_store.add(vector_name, v, v_size); + } + + template + inline bool add_vector(const std::string& vector_name, std::vector& v) + { + if (!valid()) + return false; + else if (!valid_symbol(vector_name)) + return false; + else if (symbol_exists(vector_name)) + return false; + else if (0 == v.size()) + return false; + else + return local_data().vector_store.add(vector_name,v); + } + + inline bool add_vector(const std::string& vector_name, exprtk::vector_view& v) + { + if (!valid()) + return false; + else if (!valid_symbol(vector_name)) + return false; + else if (symbol_exists(vector_name)) + return false; + else if (0 == v.size()) + return false; + else + return local_data().vector_store.add(vector_name,v); + } + + inline bool remove_variable(const std::string& variable_name, const bool delete_node = true) + { + if (!valid()) + return false; + else + return local_data().variable_store.remove(variable_name, delete_node); + } + + #ifndef exprtk_disable_string_capabilities + inline bool remove_stringvar(const std::string& string_name) + { + if (!valid()) + return false; + else + return local_data().stringvar_store.remove(string_name); + } + #endif + + inline bool remove_function(const std::string& function_name) + { + if (!valid()) + return false; + else + return local_data().function_store.remove(function_name); + } + + inline bool remove_vararg_function(const std::string& vararg_function_name) + { + if (!valid()) + return false; + else + return local_data().vararg_function_store.remove(vararg_function_name); + } + + inline bool remove_vector(const std::string& vector_name) + { + if (!valid()) + return false; + else + return local_data().vector_store.remove(vector_name); + } + + inline bool add_constants() + { + return add_pi () && + add_epsilon () && + add_infinity() ; + } + + inline bool add_pi() + { + const typename details::numeric::details::number_type::type num_type; + static const T local_pi = details::numeric::details::const_pi_impl(num_type); + return add_constant("pi",local_pi); + } + + inline bool add_epsilon() + { + static const T local_epsilon = details::numeric::details::epsilon_type::value(); + return add_constant("epsilon",local_epsilon); + } + + inline bool add_infinity() + { + static const T local_infinity = std::numeric_limits::infinity(); + return add_constant("inf",local_infinity); + } + + template + inline bool add_package(Package& package) + { + return package.register_package(*this); + } + + template class Sequence> + inline std::size_t get_variable_list(Sequence,Allocator>& vlist) const + { + if (!valid()) + return 0; + else + return local_data().variable_store.get_list(vlist); + } + + template class Sequence> + inline std::size_t get_variable_list(Sequence& vlist) const + { + if (!valid()) + return 0; + else + return local_data().variable_store.get_list(vlist); + } + + #ifndef exprtk_disable_string_capabilities + template class Sequence> + inline std::size_t get_stringvar_list(Sequence,Allocator>& svlist) const + { + if (!valid()) + return 0; + else + return local_data().stringvar_store.get_list(svlist); + } + + template class Sequence> + inline std::size_t get_stringvar_list(Sequence& svlist) const + { + if (!valid()) + return 0; + else + return local_data().stringvar_store.get_list(svlist); + } + #endif + + template class Sequence> + inline std::size_t get_vector_list(Sequence& vec_list) const + { + if (!valid()) + return 0; + else + return local_data().vector_store.get_list(vec_list); + } + + template class Sequence> + inline std::size_t get_function_list(Sequence& function_list) const + { + if (!valid()) + return 0; + + std::vector function_names; + std::size_t count = 0; + + count += local_data().function_store .get_list(function_names); + count += local_data().vararg_function_store .get_list(function_names); + count += local_data().generic_function_store .get_list(function_names); + count += local_data().string_function_store .get_list(function_names); + count += local_data().overload_function_store.get_list(function_names); + + std::set function_set; + + for (std::size_t i = 0; i < function_names.size(); ++i) + { + function_set.insert(function_names[i]); + } + + std::copy(function_set.begin(), function_set.end(), + std::back_inserter(function_list)); + + return count; + } + + inline std::vector get_function_list() const + { + std::vector result; + get_function_list(result); + return result; + } + + inline bool symbol_exists(const std::string& symbol_name, const bool check_reserved_symb = true) const + { + /* + Function will return true if symbol_name exists as either a + reserved symbol, variable, stringvar, vector or function name + in any of the type stores. + */ + if (!valid()) + return false; + else if (local_data().variable_store.symbol_exists(symbol_name)) + return true; + #ifndef exprtk_disable_string_capabilities + else if (local_data().stringvar_store.symbol_exists(symbol_name)) + return true; + #endif + else if (local_data().vector_store.symbol_exists(symbol_name)) + return true; + else if (local_data().function_store.symbol_exists(symbol_name)) + return true; + else if (check_reserved_symb && local_data().is_reserved_symbol(symbol_name)) + return true; + else + return false; + } + + inline bool is_variable(const std::string& variable_name) const + { + if (!valid()) + return false; + else + return local_data().variable_store.symbol_exists(variable_name); + } + + #ifndef exprtk_disable_string_capabilities + inline bool is_stringvar(const std::string& stringvar_name) const + { + if (!valid()) + return false; + else + return local_data().stringvar_store.symbol_exists(stringvar_name); + } + + inline bool is_conststr_stringvar(const std::string& symbol_name) const + { + if (!valid()) + return false; + else if (!valid_symbol(symbol_name)) + return false; + else if (!local_data().stringvar_store.symbol_exists(symbol_name)) + return false; + + return ( + local_data().stringvar_store.symbol_exists(symbol_name) || + local_data().stringvar_store.is_constant (symbol_name) + ); + } + #endif + + inline bool is_function(const std::string& function_name) const + { + if (!valid()) + return false; + else + return local_data().function_store.symbol_exists(function_name); + } + + inline bool is_vararg_function(const std::string& vararg_function_name) const + { + if (!valid()) + return false; + else + return local_data().vararg_function_store.symbol_exists(vararg_function_name); + } + + inline bool is_vector(const std::string& vector_name) const + { + if (!valid()) + return false; + else + return local_data().vector_store.symbol_exists(vector_name); + } + + inline std::string get_variable_name(const expression_ptr& ptr) const + { + return local_data().variable_store.entity_name(ptr); + } + + inline std::string get_vector_name(const vector_holder_ptr& ptr) const + { + return local_data().vector_store.entity_name(ptr); + } + + #ifndef exprtk_disable_string_capabilities + inline std::string get_stringvar_name(const expression_ptr& ptr) const + { + return local_data().stringvar_store.entity_name(ptr); + } + + inline std::string get_conststr_stringvar_name(const expression_ptr& ptr) const + { + return local_data().stringvar_store.entity_name(ptr); + } + #endif + + inline bool valid() const + { + // Symbol table sanity check. + return control_block_ && control_block_->data_; + } + + inline void load_from(const symbol_table& st) + { + { + std::vector name_list; + + st.local_data().function_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + exprtk::ifunction& ifunc = *st.get_function(name_list[i]); + add_function(name_list[i],ifunc); + } + } + } + + { + std::vector name_list; + + st.local_data().vararg_function_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + exprtk::ivararg_function& ivafunc = *st.get_vararg_function(name_list[i]); + add_function(name_list[i],ivafunc); + } + } + } + + { + std::vector name_list; + + st.local_data().generic_function_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + exprtk::igeneric_function& ifunc = *st.get_generic_function(name_list[i]); + add_function(name_list[i],ifunc); + } + } + } + + { + std::vector name_list; + + st.local_data().string_function_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + exprtk::igeneric_function& ifunc = *st.get_string_function(name_list[i]); + add_function(name_list[i],ifunc); + } + } + } + + { + std::vector name_list; + + st.local_data().overload_function_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + exprtk::igeneric_function& ifunc = *st.get_overload_function(name_list[i]); + add_function(name_list[i],ifunc); + } + } + } + } + + inline void load_variables_from(const symbol_table& st) + { + std::vector name_list; + + st.local_data().variable_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + T& variable = st.get_variable(name_list[i])->ref(); + add_variable(name_list[i], variable); + } + } + } + + inline void load_vectors_from(const symbol_table& st) + { + std::vector name_list; + + st.local_data().vector_store.get_list(name_list); + + if (!name_list.empty()) + { + for (std::size_t i = 0; i < name_list.size(); ++i) + { + vector_holder_t& vecholder = *st.get_vector(name_list[i]); + add_vector(name_list[i], vecholder.data(), vecholder.size()); + } + } + } + + private: + + inline bool valid_symbol(const std::string& symbol, const bool check_reserved_symb = true) const + { + if (symbol.empty()) + return false; + else if (!details::is_letter(symbol[0])) + return false; + else if (symbol.size() > 1) + { + for (std::size_t i = 1; i < symbol.size(); ++i) + { + if ( + !details::is_letter_or_digit(symbol[i]) && + ('_' != symbol[i]) + ) + { + if ((i < (symbol.size() - 1)) && ('.' == symbol[i])) + continue; + else + return false; + } + } + } + + return (check_reserved_symb) ? (!local_data().is_reserved_symbol(symbol)) : true; + } + + inline bool valid_function(const std::string& symbol) const + { + if (symbol.empty()) + return false; + else if (!details::is_letter(symbol[0])) + return false; + else if (symbol.size() > 1) + { + for (std::size_t i = 1; i < symbol.size(); ++i) + { + if ( + !details::is_letter_or_digit(symbol[i]) && + ('_' != symbol[i]) + ) + { + if ((i < (symbol.size() - 1)) && ('.' == symbol[i])) + continue; + else + return false; + } + } + } + + return true; + } + + typedef typename control_block::st_data local_data_t; + + inline local_data_t& local_data() + { + return *(control_block_->data_); + } + + inline const local_data_t& local_data() const + { + return *(control_block_->data_); + } + + control_block* control_block_; + + friend class parser; + }; // class symbol_table + + template + class function_compositor; + + template + class expression + { + private: + + typedef details::expression_node* expression_ptr; + typedef details::vector_holder* vector_holder_ptr; + typedef std::vector > symtab_list_t; + + struct control_block + { + enum data_type + { + e_unknown , + e_expr , + e_vecholder, + e_data , + e_vecdata , + e_string + }; + + struct data_pack + { + data_pack() + : pointer(0) + , type(e_unknown) + , size(0) + {} + + data_pack(void* ptr, const data_type dt, const std::size_t sz = 0) + : pointer(ptr) + , type(dt) + , size(sz) + {} + + void* pointer; + data_type type; + std::size_t size; + }; + + typedef std::vector local_data_list_t; + typedef results_context results_context_t; + typedef control_block* cntrl_blck_ptr_t; + + control_block() + : ref_count(0) + , expr (0) + , results (0) + , retinv_null(false) + , return_invoked(&retinv_null) + {} + + explicit control_block(expression_ptr e) + : ref_count(1) + , expr (e) + , results (0) + , retinv_null(false) + , return_invoked(&retinv_null) + {} + + ~control_block() + { + if (expr && details::branch_deletable(expr)) + { + destroy_node(expr); + } + + if (!local_data_list.empty()) + { + for (std::size_t i = 0; i < local_data_list.size(); ++i) + { + switch (local_data_list[i].type) + { + case e_expr : delete reinterpret_cast(local_data_list[i].pointer); + break; + + case e_vecholder : delete reinterpret_cast(local_data_list[i].pointer); + break; + + case e_data : delete reinterpret_cast(local_data_list[i].pointer); + break; + + case e_vecdata : delete [] reinterpret_cast(local_data_list[i].pointer); + break; + + case e_string : delete reinterpret_cast(local_data_list[i].pointer); + break; + + default : break; + } + } + } + + if (results) + { + delete results; + } + } + + static inline cntrl_blck_ptr_t create(expression_ptr e) + { + return new control_block(e); + } + + static inline void destroy(cntrl_blck_ptr_t& cntrl_blck) + { + if (cntrl_blck) + { + if ( + (0 != cntrl_blck->ref_count) && + (0 == --cntrl_blck->ref_count) + ) + { + delete cntrl_blck; + } + + cntrl_blck = 0; + } + } + + std::size_t ref_count; + expression_ptr expr; + local_data_list_t local_data_list; + results_context_t* results; + bool retinv_null; + bool* return_invoked; + + friend class function_compositor; + }; + + public: + + expression() + : control_block_(0) + { + set_expression(new details::null_node()); + } + + expression(const expression& e) + : control_block_ (e.control_block_ ) + , symbol_table_list_(e.symbol_table_list_) + { + control_block_->ref_count++; + } + + explicit expression(const symbol_table& symbol_table) + : control_block_(0) + { + set_expression(new details::null_node()); + symbol_table_list_.push_back(symbol_table); + } + + inline expression& operator=(const expression& e) + { + if (this != &e) + { + if (control_block_) + { + if ( + (0 != control_block_->ref_count) && + (0 == --control_block_->ref_count) + ) + { + delete control_block_; + } + + control_block_ = 0; + } + + control_block_ = e.control_block_; + control_block_->ref_count++; + symbol_table_list_ = e.symbol_table_list_; + } + + return *this; + } + + inline bool operator==(const expression& e) const + { + return (this == &e); + } + + inline bool operator!() const + { + return ( + (0 == control_block_ ) || + (0 == control_block_->expr) + ); + } + + inline expression& release() + { + exprtk::details::dump_ptr("expression::release", this); + control_block::destroy(control_block_); + + return (*this); + } + + ~expression() + { + control_block::destroy(control_block_); + } + + inline T value() const + { + assert(control_block_ ); + assert(control_block_->expr); + + return control_block_->expr->value(); + } + + inline T operator() () const + { + return value(); + } + + inline operator T() const + { + return value(); + } + + inline operator bool() const + { + return details::is_true(value()); + } + + inline bool register_symbol_table(symbol_table& st) + { + for (std::size_t i = 0; i < symbol_table_list_.size(); ++i) + { + if (st == symbol_table_list_[i]) + { + return false; + } + } + + symbol_table_list_.push_back(st); + return true; + } + + inline const symbol_table& get_symbol_table(const std::size_t& index = 0) const + { + return symbol_table_list_[index]; + } + + inline symbol_table& get_symbol_table(const std::size_t& index = 0) + { + return symbol_table_list_[index]; + } + + std::size_t num_symbol_tables() const + { + return symbol_table_list_.size(); + } + + typedef results_context results_context_t; + + inline const results_context_t& results() const + { + if (control_block_->results) + return (*control_block_->results); + else + { + static const results_context_t null_results; + return null_results; + } + } + + inline bool return_invoked() const + { + return (*control_block_->return_invoked); + } + + private: + + inline symtab_list_t get_symbol_table_list() const + { + return symbol_table_list_; + } + + inline void set_expression(const expression_ptr expr) + { + if (expr) + { + if (control_block_) + { + if (0 == --control_block_->ref_count) + { + delete control_block_; + } + } + + control_block_ = control_block::create(expr); + } + } + + inline void register_local_var(expression_ptr expr) + { + if (expr) + { + if (control_block_) + { + control_block_-> + local_data_list.push_back( + typename expression::control_block:: + data_pack(reinterpret_cast(expr), + control_block::e_expr)); + } + } + } + + inline void register_local_var(vector_holder_ptr vec_holder) + { + if (vec_holder) + { + if (control_block_) + { + control_block_-> + local_data_list.push_back( + typename expression::control_block:: + data_pack(reinterpret_cast(vec_holder), + control_block::e_vecholder)); + } + } + } + + inline void register_local_data(void* data, const std::size_t& size = 0, const std::size_t data_mode = 0) + { + if (data) + { + if (control_block_) + { + typename control_block::data_type dt = control_block::e_data; + + switch (data_mode) + { + case 0 : dt = control_block::e_data; break; + case 1 : dt = control_block::e_vecdata; break; + case 2 : dt = control_block::e_string; break; + } + + control_block_-> + local_data_list.push_back( + typename expression::control_block:: + data_pack(reinterpret_cast(data), dt, size)); + } + } + } + + inline const typename control_block::local_data_list_t& local_data_list() + { + if (control_block_) + { + return control_block_->local_data_list; + } + else + { + static typename control_block::local_data_list_t null_local_data_list; + return null_local_data_list; + } + } + + inline void register_return_results(results_context_t* rc) + { + if (control_block_ && rc) + { + control_block_->results = rc; + } + } + + inline void set_retinvk(bool* retinvk_ptr) + { + if (control_block_) + { + control_block_->return_invoked = retinvk_ptr; + } + } + + control_block* control_block_; + symtab_list_t symbol_table_list_; + + friend class parser; + friend class expression_helper; + friend class function_compositor; + template + friend bool is_valid(const expression& expr); + }; // class expression + + template + class expression_helper + { + public: + + static inline bool is_constant(const expression& expr) + { + return expr.control_block_ && details::is_constant_node(expr.control_block_->expr); + } + + static inline bool is_variable(const expression& expr) + { + return expr.control_block_ && details::is_variable_node(expr.control_block_->expr); + } + + static inline bool is_unary(const expression& expr) + { + return expr.control_block_ && details::is_unary_node(expr.control_block_->expr); + } + + static inline bool is_binary(const expression& expr) + { + return expr.control_block_ && details::is_binary_node(expr.control_block_->expr); + } + + static inline bool is_function(const expression& expr) + { + return expr.control_block_ && details::is_function(expr.control_block_->expr); + } + + static inline bool is_null(const expression& expr) + { + return expr.control_block_ && details::is_null_node(expr.control_block_->expr); + } + }; + + template + inline bool is_valid(const expression& expr) + { + return expr.control_block_ && !expression_helper::is_null(expr); + } + + namespace parser_error + { + enum error_mode + { + e_unknown = 0, + e_syntax = 1, + e_token = 2, + e_numeric = 4, + e_symtab = 5, + e_lexer = 6, + e_synthesis = 7, + e_helper = 8, + e_parser = 9 + }; + + struct type + { + type() + : mode(parser_error::e_unknown) + , line_no (0) + , column_no(0) + {} + + lexer::token token; + error_mode mode; + std::string diagnostic; + std::string src_location; + std::string error_line; + std::size_t line_no; + std::size_t column_no; + }; + + inline type make_error(const error_mode mode, + const std::string& diagnostic = "", + const std::string& src_location = "") + { + type t; + t.mode = mode; + t.token.type = lexer::token::e_error; + t.diagnostic = diagnostic; + t.src_location = src_location; + exprtk_debug(("%s\n", diagnostic .c_str())); + return t; + } + + inline type make_error(const error_mode mode, + const lexer::token& tk, + const std::string& diagnostic = "", + const std::string& src_location = "") + { + type t; + t.mode = mode; + t.token = tk; + t.diagnostic = diagnostic; + t.src_location = src_location; + exprtk_debug(("%s\n", diagnostic .c_str())); + return t; + } + + inline std::string to_str(error_mode mode) + { + switch (mode) + { + case e_unknown : return std::string("Unknown Error"); + case e_syntax : return std::string("Syntax Error" ); + case e_token : return std::string("Token Error" ); + case e_numeric : return std::string("Numeric Error"); + case e_symtab : return std::string("Symbol Error" ); + case e_lexer : return std::string("Lexer Error" ); + case e_helper : return std::string("Helper Error" ); + case e_parser : return std::string("Parser Error" ); + default : return std::string("Unknown Error"); + } + } + + inline bool update_error(type& error, const std::string& expression) + { + if ( + expression.empty() || + (error.token.position > expression.size()) || + (std::numeric_limits::max() == error.token.position) + ) + { + return false; + } + + std::size_t error_line_start = 0; + + for (std::size_t i = error.token.position; i > 0; --i) + { + const details::char_t c = expression[i]; + + if (('\n' == c) || ('\r' == c)) + { + error_line_start = i + 1; + break; + } + } + + std::size_t next_nl_position = std::min(expression.size(), + expression.find_first_of('\n',error.token.position + 1)); + + error.column_no = error.token.position - error_line_start; + error.error_line = expression.substr(error_line_start, + next_nl_position - error_line_start); + + error.line_no = 0; + + for (std::size_t i = 0; i < next_nl_position; ++i) + { + if ('\n' == expression[i]) + ++error.line_no; + } + + return true; + } + + inline void dump_error(const type& error) + { + printf("Position: %02d Type: [%s] Msg: %s\n", + static_cast(error.token.position), + exprtk::parser_error::to_str(error.mode).c_str(), + error.diagnostic.c_str()); + } + } + + namespace details + { + template + inline void disable_type_checking(Parser& p) + { + p.state_.type_check_enabled = false; + } + } + + template + class parser : public lexer::parser_helper + { + private: + + enum precedence_level + { + e_level00, e_level01, e_level02, e_level03, e_level04, + e_level05, e_level06, e_level07, e_level08, e_level09, + e_level10, e_level11, e_level12, e_level13, e_level14 + }; + + typedef const T& cref_t; + typedef const T const_t; + typedef ifunction F; + typedef ivararg_function VAF; + typedef igeneric_function GF; + typedef ifunction ifunction_t; + typedef ivararg_function ivararg_function_t; + typedef igeneric_function igeneric_function_t; + typedef details::expression_node expression_node_t; + typedef details::literal_node literal_node_t; + typedef details::unary_node unary_node_t; + typedef details::binary_node binary_node_t; + typedef details::trinary_node trinary_node_t; + typedef details::quaternary_node quaternary_node_t; + typedef details::conditional_node conditional_node_t; + typedef details::cons_conditional_node cons_conditional_node_t; + typedef details::while_loop_node while_loop_node_t; + typedef details::repeat_until_loop_node repeat_until_loop_node_t; + typedef details::for_loop_node for_loop_node_t; + typedef details::while_loop_rtc_node while_loop_rtc_node_t; + typedef details::repeat_until_loop_rtc_node repeat_until_loop_rtc_node_t; + typedef details::for_loop_rtc_node for_loop_rtc_node_t; + #ifndef exprtk_disable_break_continue + typedef details::while_loop_bc_node while_loop_bc_node_t; + typedef details::repeat_until_loop_bc_node repeat_until_loop_bc_node_t; + typedef details::for_loop_bc_node for_loop_bc_node_t; + typedef details::while_loop_bc_rtc_node while_loop_bc_rtc_node_t; + typedef details::repeat_until_loop_bc_rtc_node repeat_until_loop_bc_rtc_node_t; + typedef details::for_loop_bc_rtc_node for_loop_bc_rtc_node_t; + #endif + typedef details::switch_node switch_node_t; + typedef details::variable_node variable_node_t; + typedef details::vector_elem_node vector_elem_node_t; + typedef details::vector_celem_node vector_celem_node_t; + typedef details::vector_elem_rtc_node vector_elem_rtc_node_t; + typedef details::vector_celem_rtc_node vector_celem_rtc_node_t; + typedef details::rebasevector_elem_node rebasevector_elem_node_t; + typedef details::rebasevector_celem_node rebasevector_celem_node_t; + typedef details::rebasevector_elem_rtc_node rebasevector_elem_rtc_node_t; + typedef details::rebasevector_celem_rtc_node rebasevector_celem_rtc_node_t; + typedef details::vector_node vector_node_t; + typedef details::vector_size_node vector_size_node_t; + typedef details::range_pack range_t; + #ifndef exprtk_disable_string_capabilities + typedef details::stringvar_node stringvar_node_t; + typedef details::string_literal_node string_literal_node_t; + typedef details::string_range_node string_range_node_t; + typedef details::const_string_range_node const_string_range_node_t; + typedef details::generic_string_range_node generic_string_range_node_t; + typedef details::string_concat_node string_concat_node_t; + typedef details::assignment_string_node assignment_string_node_t; + typedef details::assignment_string_range_node assignment_string_range_node_t; + typedef details::conditional_string_node conditional_string_node_t; + typedef details::cons_conditional_str_node cons_conditional_str_node_t; + #endif + typedef details::assignment_node assignment_node_t; + typedef details::assignment_vec_elem_node assignment_vec_elem_node_t; + typedef details::assignment_vec_elem_rtc_node assignment_vec_elem_rtc_node_t; + typedef details::assignment_rebasevec_elem_node assignment_rebasevec_elem_node_t; + typedef details::assignment_rebasevec_elem_rtc_node assignment_rebasevec_elem_rtc_node_t; + typedef details::assignment_rebasevec_celem_node assignment_rebasevec_celem_node_t; + typedef details::assignment_vec_node assignment_vec_node_t; + typedef details::assignment_vecvec_node assignment_vecvec_node_t; + typedef details::conditional_vector_node conditional_vector_node_t; + typedef details::scand_node scand_node_t; + typedef details::scor_node scor_node_t; + typedef lexer::token token_t; + typedef expression_node_t* expression_node_ptr; + typedef expression expression_t; + typedef symbol_table symbol_table_t; + typedef typename expression::symtab_list_t symbol_table_list_t; + typedef details::vector_holder vector_holder_t; + typedef vector_holder_t* vector_holder_ptr; + + typedef typename details::functor_t functor_t; + typedef typename functor_t::qfunc_t quaternary_functor_t; + typedef typename functor_t::tfunc_t trinary_functor_t; + typedef typename functor_t::bfunc_t binary_functor_t; + typedef typename functor_t::ufunc_t unary_functor_t; + + typedef details::operator_type operator_t; + + typedef std::map unary_op_map_t; + typedef std::map binary_op_map_t; + typedef std::map trinary_op_map_t; + + typedef std::map > sf3_map_t; + typedef std::map > sf4_map_t; + + typedef std::map inv_binary_op_map_t; + typedef std::multimap base_ops_map_t; + typedef std::set disabled_func_set_t; + + typedef details::T0oT1_define vov_t; + typedef details::T0oT1_define cov_t; + typedef details::T0oT1_define voc_t; + + typedef details::T0oT1oT2_define vovov_t; + typedef details::T0oT1oT2_define vovoc_t; + typedef details::T0oT1oT2_define vocov_t; + typedef details::T0oT1oT2_define covov_t; + typedef details::T0oT1oT2_define covoc_t; + typedef details::T0oT1oT2_define cocov_t; + typedef details::T0oT1oT2_define vococ_t; + + typedef details::T0oT1oT2oT3_define vovovov_t; + typedef details::T0oT1oT2oT3_define vovovoc_t; + typedef details::T0oT1oT2oT3_define vovocov_t; + typedef details::T0oT1oT2oT3_define vocovov_t; + typedef details::T0oT1oT2oT3_define covovov_t; + + typedef details::T0oT1oT2oT3_define covocov_t; + typedef details::T0oT1oT2oT3_define vocovoc_t; + typedef details::T0oT1oT2oT3_define covovoc_t; + typedef details::T0oT1oT2oT3_define vococov_t; + + typedef results_context results_context_t; + + typedef parser_helper prsrhlpr_t; + + struct scope_element + { + enum element_type + { + e_none , + e_variable, + e_vector , + e_vecelem , + e_string + }; + + typedef details::vector_holder vector_holder_t; + typedef variable_node_t* variable_node_ptr; + typedef vector_holder_t* vector_holder_ptr; + typedef expression_node_t* expression_node_ptr; + #ifndef exprtk_disable_string_capabilities + typedef stringvar_node_t* stringvar_node_ptr; + #endif + + scope_element() + : name("???") + , size (std::numeric_limits::max()) + , index(std::numeric_limits::max()) + , depth(std::numeric_limits::max()) + , ref_count(0) + , ip_index (0) + , type (e_none) + , active (false) + , data (0) + , var_node (0) + , vec_node (0) + #ifndef exprtk_disable_string_capabilities + , str_node(0) + #endif + {} + + bool operator < (const scope_element& se) const + { + if (ip_index < se.ip_index) + return true; + else if (ip_index > se.ip_index) + return false; + else if (depth < se.depth) + return true; + else if (depth > se.depth) + return false; + else if (index < se.index) + return true; + else if (index > se.index) + return false; + else + return (name < se.name); + } + + void clear() + { + name = "???"; + size = std::numeric_limits::max(); + index = std::numeric_limits::max(); + depth = std::numeric_limits::max(); + type = e_none; + active = false; + ref_count = 0; + ip_index = 0; + data = 0; + var_node = 0; + vec_node = 0; + #ifndef exprtk_disable_string_capabilities + str_node = 0; + #endif + } + + std::string name; + std::size_t size; + std::size_t index; + std::size_t depth; + std::size_t ref_count; + std::size_t ip_index; + element_type type; + bool active; + void* data; + expression_node_ptr var_node; + vector_holder_ptr vec_node; + #ifndef exprtk_disable_string_capabilities + stringvar_node_ptr str_node; + #endif + }; + + class scope_element_manager + { + public: + + typedef expression_node_t* expression_node_ptr; + typedef variable_node_t* variable_node_ptr; + typedef parser parser_t; + + explicit scope_element_manager(parser& p) + : parser_(p) + , input_param_cnt_(0) + {} + + inline std::size_t size() const + { + return element_.size(); + } + + inline bool empty() const + { + return element_.empty(); + } + + inline scope_element& get_element(const std::size_t& index) + { + if (index < element_.size()) + return element_[index]; + else + return null_element_; + } + + inline scope_element& get_element(const std::string& var_name, + const std::size_t index = std::numeric_limits::max()) + { + const std::size_t current_depth = parser_.state_.scope_depth; + + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& se = element_[i]; + + if (se.depth > current_depth) + continue; + else if ( + details::imatch(se.name, var_name) && + (se.index == index) + ) + return se; + } + + return null_element_; + } + + inline scope_element& get_active_element(const std::string& var_name, + const std::size_t index = std::numeric_limits::max()) + { + const std::size_t current_depth = parser_.state_.scope_depth; + + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& se = element_[i]; + + if (se.depth > current_depth) + continue; + else if ( + details::imatch(se.name, var_name) && + (se.index == index) && + (se.active) + ) + return se; + } + + return null_element_; + } + + inline bool add_element(const scope_element& se) + { + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& cse = element_[i]; + + if ( + details::imatch(cse.name, se.name) && + (cse.depth <= se.depth) && + (cse.index == se.index) && + (cse.size == se.size ) && + (cse.type == se.type ) && + (cse.active) + ) + return false; + } + + element_.push_back(se); + std::sort(element_.begin(),element_.end()); + + return true; + } + + inline void deactivate(const std::size_t& scope_depth) + { + exprtk_debug(("deactivate() - Scope depth: %d\n", + static_cast(parser_.state_.scope_depth))); + + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& se = element_[i]; + + if (se.active && (se.depth >= scope_depth)) + { + exprtk_debug(("deactivate() - element[%02d] '%s'\n", + static_cast(i), + se.name.c_str())); + + se.active = false; + } + } + } + + inline void free_element(scope_element& se) + { + exprtk_debug(("free_element() - se[%s]\n", se.name.c_str())); + + switch (se.type) + { + case scope_element::e_variable : delete reinterpret_cast(se.data); + delete se.var_node; + break; + + case scope_element::e_vector : delete[] reinterpret_cast(se.data); + delete se.vec_node; + break; + + case scope_element::e_vecelem : delete se.var_node; + break; + + #ifndef exprtk_disable_string_capabilities + case scope_element::e_string : delete reinterpret_cast(se.data); + delete se.str_node; + break; + #endif + + default : return; + } + + se.clear(); + } + + inline void cleanup() + { + for (std::size_t i = 0; i < element_.size(); ++i) + { + free_element(element_[i]); + } + + element_.clear(); + + input_param_cnt_ = 0; + } + + inline std::size_t next_ip_index() + { + return ++input_param_cnt_; + } + + inline expression_node_ptr get_variable(const T& v) + { + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& se = element_[i]; + + if ( + se.active && + se.var_node && + details::is_variable_node(se.var_node) + ) + { + variable_node_ptr vn = reinterpret_cast(se.var_node); + + if (&(vn->ref()) == (&v)) + { + return se.var_node; + } + } + } + + return expression_node_ptr(0); + } + + inline std::string get_vector_name(const T* data) + { + for (std::size_t i = 0; i < element_.size(); ++i) + { + scope_element& se = element_[i]; + + if ( + se.active && + se.vec_node && + (se.vec_node->data() == data) + ) + { + return se.name; + } + } + + return "neo-vector"; + } + + private: + + scope_element_manager(const scope_element_manager&) exprtk_delete; + scope_element_manager& operator=(const scope_element_manager&) exprtk_delete; + + parser_t& parser_; + std::vector element_; + scope_element null_element_; + std::size_t input_param_cnt_; + }; + + class scope_handler + { + public: + + typedef parser parser_t; + + explicit scope_handler(parser& p) + : parser_(p) + { + parser_.state_.scope_depth++; + #ifdef exprtk_enable_debugging + const std::string depth(2 * parser_.state_.scope_depth,'-'); + exprtk_debug(("%s> Scope Depth: %02d\n", + depth.c_str(), + static_cast(parser_.state_.scope_depth))); + #endif + } + + ~scope_handler() + { + parser_.sem_.deactivate(parser_.state_.scope_depth); + parser_.state_.scope_depth--; + #ifdef exprtk_enable_debugging + const std::string depth(2 * parser_.state_.scope_depth,'-'); + exprtk_debug(("<%s Scope Depth: %02d\n", + depth.c_str(), + static_cast(parser_.state_.scope_depth))); + #endif + } + + private: + + scope_handler(const scope_handler&) exprtk_delete; + scope_handler& operator=(const scope_handler&) exprtk_delete; + + parser_t& parser_; + }; + + template + struct halfopen_range_policy + { + static inline bool is_within(const T_& v, const T_& begin, const T_& end) + { + assert(begin <= end); + return (begin <= v) && (v < end); + } + + static inline bool is_less(const T_& v, const T_& begin) + { + return (v < begin); + } + + static inline bool is_greater(const T_& v, const T_& end) + { + return (end <= v); + } + + static inline bool end_inclusive() + { + return false; + } + }; + + template + struct closed_range_policy + { + static inline bool is_within(const T_& v, const T_& begin, const T_& end) + { + assert(begin <= end); + return (begin <= v) && (v <= end); + } + + static inline bool is_less(const T_& v, const T_& begin) + { + return (v < begin); + } + + static inline bool is_greater(const T_& v, const T_& end) + { + return (end < v); + } + + static inline bool end_inclusive() + { + return true; + } + }; + + template > + class interval_container_t + { + public: + + typedef IntervalPointType interval_point_t; + typedef std::pair interval_t; + typedef std::map interval_map_t; + typedef typename interval_map_t::const_iterator interval_map_citr_t; + + std::size_t size() const + { + return interval_map_.size(); + } + + void reset() + { + interval_map_.clear(); + } + + bool in_interval(const interval_point_t point, interval_t& interval) const + { + interval_map_citr_t itr = RangePolicy::end_inclusive() ? + interval_map_.lower_bound(point): + interval_map_.upper_bound(point); + + for (; itr != interval_map_.end(); ++itr) + { + const interval_point_t& begin = itr->second.first; + const interval_point_t& end = itr->second.second; + + if (RangePolicy::is_within(point, begin, end)) + { + interval = interval_t(begin,end); + return true; + } + else if (RangePolicy::is_greater(point, end)) + { + break; + } + } + + return false; + } + + bool in_interval(const interval_point_t point) const + { + interval_t interval; + return in_interval(point,interval); + } + + bool add_interval(const interval_point_t begin, const interval_point_t end) + { + if ((end <= begin) || in_interval(begin) || in_interval(end)) + { + return false; + } + + interval_map_[end] = std::make_pair(begin, end); + + return true; + } + + bool add_interval(const interval_t interval) + { + return add_interval(interval.first, interval.second); + } + + private: + + interval_map_t interval_map_; + }; + + class stack_limit_handler + { + public: + + typedef parser parser_t; + + explicit stack_limit_handler(parser& p) + : parser_(p) + , limit_exceeded_(false) + { + if (++parser_.state_.stack_depth > parser_.settings_.max_stack_depth_) + { + limit_exceeded_ = true; + parser_.set_error(make_error( + parser_error::e_parser, + "ERR000 - Current stack depth " + details::to_str(parser_.state_.stack_depth) + + " exceeds maximum allowed stack depth of " + details::to_str(parser_.settings_.max_stack_depth_), + exprtk_error_location)); + } + } + + ~stack_limit_handler() + { + assert(parser_.state_.stack_depth > 0); + parser_.state_.stack_depth--; + } + + bool operator!() + { + return limit_exceeded_; + } + + private: + + stack_limit_handler(const stack_limit_handler&) exprtk_delete; + stack_limit_handler& operator=(const stack_limit_handler&) exprtk_delete; + + parser_t& parser_; + bool limit_exceeded_; + }; + + struct symtab_store + { + symbol_table_list_t symtab_list_; + + typedef typename symbol_table_t::local_data_t local_data_t; + typedef typename symbol_table_t::variable_ptr variable_ptr; + typedef typename symbol_table_t::function_ptr function_ptr; + #ifndef exprtk_disable_string_capabilities + typedef typename symbol_table_t::stringvar_ptr stringvar_ptr; + #endif + typedef typename symbol_table_t::vector_holder_ptr vector_holder_ptr; + typedef typename symbol_table_t::vararg_function_ptr vararg_function_ptr; + typedef typename symbol_table_t::generic_function_ptr generic_function_ptr; + + struct variable_context + { + variable_context() + : symbol_table(0) + , variable(0) + {} + + const symbol_table_t* symbol_table; + variable_ptr variable; + }; + + struct vector_context + { + vector_context() + : symbol_table(0) + , vector_holder(0) + {} + + const symbol_table_t* symbol_table; + vector_holder_ptr vector_holder; + }; + + #ifndef exprtk_disable_string_capabilities + struct string_context + { + string_context() + : symbol_table(0) + , str_var(0) + {} + + const symbol_table_t* symbol_table; + stringvar_ptr str_var; + }; + #endif + + inline bool empty() const + { + return symtab_list_.empty(); + } + + inline void clear() + { + symtab_list_.clear(); + } + + inline bool valid() const + { + if (!empty()) + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (symtab_list_[i].valid()) + return true; + } + } + + return false; + } + + inline bool valid_symbol(const std::string& symbol) const + { + if (!symtab_list_.empty()) + return symtab_list_[0].valid_symbol(symbol); + else + return false; + } + + inline bool valid_function_name(const std::string& symbol) const + { + if (!symtab_list_.empty()) + return symtab_list_[0].valid_function(symbol); + else + return false; + } + + inline variable_context get_variable_context(const std::string& variable_name) const + { + variable_context result; + if (!valid_symbol(variable_name)) + return result; + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + result.variable = local_data(i) + .variable_store.get(variable_name); + if (result.variable) + { + result.symbol_table = &symtab_list_[i]; + break; + } + } + + return result; + } + + inline variable_ptr get_variable(const std::string& variable_name) const + { + if (!valid_symbol(variable_name)) + return reinterpret_cast(0); + + variable_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i) + .variable_store.get(variable_name); + + if (result) break; + } + + return result; + } + + inline variable_ptr get_variable(const T& var_ref) const + { + variable_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i).variable_store + .get_from_varptr(reinterpret_cast(&var_ref)); + + if (result) break; + } + + return result; + } + + #ifndef exprtk_disable_string_capabilities + inline string_context get_string_context(const std::string& string_name) const + { + string_context result; + + if (!valid_symbol(string_name)) + return result; + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + result.str_var = local_data(i).stringvar_store.get(string_name); + + if (result.str_var) + { + result.symbol_table = &symtab_list_[i]; + break; + } + } + + return result; + } + + inline stringvar_ptr get_stringvar(const std::string& string_name) const + { + if (!valid_symbol(string_name)) + return reinterpret_cast(0); + + stringvar_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i) + .stringvar_store.get(string_name); + + if (result) break; + } + + return result; + } + #endif + + inline function_ptr get_function(const std::string& function_name) const + { + if (!valid_function_name(function_name)) + return reinterpret_cast(0); + + function_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i) + .function_store.get(function_name); + + if (result) break; + } + + return result; + } + + inline vararg_function_ptr get_vararg_function(const std::string& vararg_function_name) const + { + if (!valid_function_name(vararg_function_name)) + return reinterpret_cast(0); + + vararg_function_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i) + .vararg_function_store.get(vararg_function_name); + + if (result) break; + } + + return result; + } + + inline generic_function_ptr get_generic_function(const std::string& function_name) const + { + if (!valid_function_name(function_name)) + return reinterpret_cast(0); + + generic_function_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = local_data(i) + .generic_function_store.get(function_name); + + if (result) break; + } + + return result; + } + + inline generic_function_ptr get_string_function(const std::string& function_name) const + { + if (!valid_function_name(function_name)) + return reinterpret_cast(0); + + generic_function_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = + local_data(i).string_function_store.get(function_name); + + if (result) break; + } + + return result; + } + + inline generic_function_ptr get_overload_function(const std::string& function_name) const + { + if (!valid_function_name(function_name)) + return reinterpret_cast(0); + + generic_function_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else + result = + local_data(i).overload_function_store.get(function_name); + + if (result) break; + } + + return result; + } + + inline vector_context get_vector_context(const std::string& vector_name) const + { + vector_context result; + if (!valid_symbol(vector_name)) + return result; + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + result.vector_holder = local_data(i).vector_store.get(vector_name); + + if (result.vector_holder) + { + result.symbol_table = &symtab_list_[i]; + break; + } + } + + return result; + } + + inline vector_holder_ptr get_vector(const std::string& vector_name) const + { + if (!valid_symbol(vector_name)) + return reinterpret_cast(0); + + vector_holder_ptr result = reinterpret_cast(0); + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + result = local_data(i).vector_store.get(vector_name); + + if (result) + { + break; + } + } + + return result; + } + + inline bool is_constant_node(const std::string& symbol_name) const + { + if (!valid_symbol(symbol_name)) + return false; + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + if (local_data(i).variable_store.is_constant(symbol_name)) + { + return true; + } + } + + return false; + } + + #ifndef exprtk_disable_string_capabilities + inline bool is_constant_string(const std::string& symbol_name) const + { + if (!valid_symbol(symbol_name)) + return false; + + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if (!local_data(i).stringvar_store.symbol_exists(symbol_name)) + continue; + else if (local_data(i).stringvar_store.is_constant(symbol_name)) + return true; + } + + return false; + } + #endif + + inline bool symbol_exists(const std::string& symbol) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + { + continue; + } + + if (symtab_list_[i].symbol_exists(symbol)) + { + return true; + } + } + + return false; + } + + inline bool is_variable(const std::string& variable_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + symtab_list_[i].local_data().variable_store + .symbol_exists(variable_name) + ) + return true; + } + + return false; + } + + #ifndef exprtk_disable_string_capabilities + inline bool is_stringvar(const std::string& stringvar_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + symtab_list_[i].local_data().stringvar_store + .symbol_exists(stringvar_name) + ) + return true; + } + + return false; + } + + inline bool is_conststr_stringvar(const std::string& symbol_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + symtab_list_[i].local_data().stringvar_store + .symbol_exists(symbol_name) + ) + { + return ( + local_data(i).stringvar_store.symbol_exists(symbol_name) || + local_data(i).stringvar_store.is_constant (symbol_name) + ); + + } + } + + return false; + } + #endif + + inline bool is_function(const std::string& function_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + local_data(i).vararg_function_store + .symbol_exists(function_name) + ) + return true; + } + + return false; + } + + inline bool is_vararg_function(const std::string& vararg_function_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + local_data(i).vararg_function_store + .symbol_exists(vararg_function_name) + ) + return true; + } + + return false; + } + + inline bool is_vector(const std::string& vector_name) const + { + for (std::size_t i = 0; i < symtab_list_.size(); ++i) + { + if (!symtab_list_[i].valid()) + continue; + else if ( + local_data(i).vector_store + .symbol_exists(vector_name) + ) + return true; + } + + return false; + } + + inline std::string get_variable_name(const expression_node_ptr& ptr) const + { + return local_data().variable_store.entity_name(ptr); + } + + inline std::string get_vector_name(const vector_holder_ptr& ptr) const + { + return local_data().vector_store.entity_name(ptr); + } + + #ifndef exprtk_disable_string_capabilities + inline std::string get_stringvar_name(const expression_node_ptr& ptr) const + { + return local_data().stringvar_store.entity_name(ptr); + } + + inline std::string get_conststr_stringvar_name(const expression_node_ptr& ptr) const + { + return local_data().stringvar_store.entity_name(ptr); + } + #endif + + inline local_data_t& local_data(const std::size_t& index = 0) + { + return symtab_list_[index].local_data(); + } + + inline const local_data_t& local_data(const std::size_t& index = 0) const + { + return symtab_list_[index].local_data(); + } + + inline symbol_table_t& get_symbol_table(const std::size_t& index = 0) + { + return symtab_list_[index]; + } + }; + + struct parser_state + { + parser_state() + : type_check_enabled(true) + { + reset(); + } + + void reset() + { + parsing_return_stmt = false; + parsing_break_stmt = false; + return_stmt_present = false; + side_effect_present = false; + scope_depth = 0; + stack_depth = 0; + parsing_loop_stmt_count = 0; + } + + #ifndef exprtk_enable_debugging + void activate_side_effect(const std::string&) + #else + void activate_side_effect(const std::string& source) + #endif + { + if (!side_effect_present) + { + side_effect_present = true; + + exprtk_debug(("activate_side_effect() - caller: %s\n", source.c_str())); + } + } + + bool parsing_return_stmt; + bool parsing_break_stmt; + bool return_stmt_present; + bool side_effect_present; + bool type_check_enabled; + std::size_t scope_depth; + std::size_t stack_depth; + std::size_t parsing_loop_stmt_count; + }; + + public: + + struct unknown_symbol_resolver + { + + enum usr_symbol_type + { + e_usr_unknown_type = 0, + e_usr_variable_type = 1, + e_usr_constant_type = 2 + }; + + enum usr_mode + { + e_usrmode_default = 0, + e_usrmode_extended = 1 + }; + + usr_mode mode; + + unknown_symbol_resolver(const usr_mode m = e_usrmode_default) + : mode(m) + {} + + virtual ~unknown_symbol_resolver() + {} + + virtual bool process(const std::string& /*unknown_symbol*/, + usr_symbol_type& st, + T& default_value, + std::string& error_message) + { + if (e_usrmode_default != mode) + return false; + + st = e_usr_variable_type; + default_value = T(0); + error_message.clear(); + + return true; + } + + virtual bool process(const std::string& /* unknown_symbol */, + symbol_table_t& /* symbol_table */, + std::string& /* error_message */) + { + return false; + } + }; + + enum collect_type + { + e_ct_none = 0, + e_ct_variables = 1, + e_ct_functions = 2, + e_ct_assignments = 4 + }; + + enum symbol_type + { + e_st_unknown = 0, + e_st_variable = 1, + e_st_vector = 2, + e_st_vecelem = 3, + e_st_string = 4, + e_st_function = 5, + e_st_local_variable = 6, + e_st_local_vector = 7, + e_st_local_string = 8 + }; + + class dependent_entity_collector + { + public: + + typedef std::pair symbol_t; + typedef std::vector symbol_list_t; + + dependent_entity_collector(const std::size_t options = e_ct_none) + : options_(options) + , collect_variables_ ((options_ & e_ct_variables ) == e_ct_variables ) + , collect_functions_ ((options_ & e_ct_functions ) == e_ct_functions ) + , collect_assignments_((options_ & e_ct_assignments) == e_ct_assignments) + , return_present_ (false) + , final_stmt_return_(false) + {} + + template class Sequence> + inline std::size_t symbols(Sequence& symbols_list) + { + if (!collect_variables_ && !collect_functions_) + return 0; + else if (symbol_name_list_.empty()) + return 0; + + for (std::size_t i = 0; i < symbol_name_list_.size(); ++i) + { + details::case_normalise(symbol_name_list_[i].first); + } + + std::sort(symbol_name_list_.begin(), symbol_name_list_.end()); + + std::unique_copy + ( + symbol_name_list_.begin(), + symbol_name_list_.end (), + std::back_inserter(symbols_list) + ); + + return symbols_list.size(); + } + + template class Sequence> + inline std::size_t assignment_symbols(Sequence& assignment_list) + { + if (!collect_assignments_) + return 0; + else if (assignment_name_list_.empty()) + return 0; + + for (std::size_t i = 0; i < assignment_name_list_.size(); ++i) + { + details::case_normalise(assignment_name_list_[i].first); + } + + std::sort(assignment_name_list_.begin(),assignment_name_list_.end()); + + std::unique_copy + ( + assignment_name_list_.begin(), + assignment_name_list_.end (), + std::back_inserter(assignment_list) + ); + + return assignment_list.size(); + } + + void clear() + { + symbol_name_list_ .clear(); + assignment_name_list_.clear(); + retparam_list_ .clear(); + return_present_ = false; + final_stmt_return_ = false; + } + + bool& collect_variables() + { + return collect_variables_; + } + + bool& collect_functions() + { + return collect_functions_; + } + + bool& collect_assignments() + { + return collect_assignments_; + } + + bool return_present() const + { + return return_present_; + } + + bool final_stmt_return() const + { + return final_stmt_return_; + } + + typedef std::vector retparam_list_t; + + retparam_list_t return_param_type_list() const + { + return retparam_list_; + } + + private: + + inline void add_symbol(const std::string& symbol, const symbol_type st) + { + switch (st) + { + case e_st_variable : + case e_st_vector : + case e_st_string : + case e_st_local_variable : + case e_st_local_vector : + case e_st_local_string : if (collect_variables_) + symbol_name_list_ + .push_back(std::make_pair(symbol, st)); + break; + + case e_st_function : if (collect_functions_) + symbol_name_list_ + .push_back(std::make_pair(symbol, st)); + break; + + default : return; + } + } + + inline void add_assignment(const std::string& symbol, const symbol_type st) + { + switch (st) + { + case e_st_variable : + case e_st_vector : + case e_st_string : if (collect_assignments_) + assignment_name_list_ + .push_back(std::make_pair(symbol, st)); + break; + + default : return; + } + } + + std::size_t options_; + bool collect_variables_; + bool collect_functions_; + bool collect_assignments_; + bool return_present_; + bool final_stmt_return_; + symbol_list_t symbol_name_list_; + symbol_list_t assignment_name_list_; + retparam_list_t retparam_list_; + + friend class parser; + }; + + class settings_store + { + private: + + typedef std::set disabled_entity_set_t; + typedef disabled_entity_set_t::iterator des_itr_t; + + public: + + enum settings_compilation_options + { + e_unknown = 0, + e_replacer = 1, + e_joiner = 2, + e_numeric_check = 4, + e_bracket_check = 8, + e_sequence_check = 16, + e_commutative_check = 32, + e_strength_reduction = 64, + e_disable_vardef = 128, + e_collect_vars = 256, + e_collect_funcs = 512, + e_collect_assings = 1024, + e_disable_usr_on_rsrvd = 2048, + e_disable_zero_return = 4096 + }; + + enum settings_base_funcs + { + e_bf_unknown = 0, + e_bf_abs , e_bf_acos , e_bf_acosh , e_bf_asin , + e_bf_asinh , e_bf_atan , e_bf_atan2 , e_bf_atanh , + e_bf_avg , e_bf_ceil , e_bf_clamp , e_bf_cos , + e_bf_cosh , e_bf_cot , e_bf_csc , e_bf_equal , + e_bf_erf , e_bf_erfc , e_bf_exp , e_bf_expm1 , + e_bf_floor , e_bf_frac , e_bf_hypot , e_bf_iclamp , + e_bf_like , e_bf_log , e_bf_log10 , e_bf_log1p , + e_bf_log2 , e_bf_logn , e_bf_mand , e_bf_max , + e_bf_min , e_bf_mod , e_bf_mor , e_bf_mul , + e_bf_ncdf , e_bf_pow , e_bf_root , e_bf_round , + e_bf_roundn , e_bf_sec , e_bf_sgn , e_bf_sin , + e_bf_sinc , e_bf_sinh , e_bf_sqrt , e_bf_sum , + e_bf_swap , e_bf_tan , e_bf_tanh , e_bf_trunc , + e_bf_not_equal , e_bf_inrange , e_bf_deg2grad , e_bf_deg2rad , + e_bf_rad2deg , e_bf_grad2deg + }; + + enum settings_control_structs + { + e_ctrl_unknown = 0, + e_ctrl_ifelse, + e_ctrl_switch, + e_ctrl_for_loop, + e_ctrl_while_loop, + e_ctrl_repeat_loop, + e_ctrl_return + }; + + enum settings_logic_opr + { + e_logic_unknown = 0, + e_logic_and, e_logic_nand , e_logic_nor , + e_logic_not, e_logic_or , e_logic_xnor, + e_logic_xor, e_logic_scand, e_logic_scor + }; + + enum settings_arithmetic_opr + { + e_arith_unknown = 0, + e_arith_add, e_arith_sub, e_arith_mul, + e_arith_div, e_arith_mod, e_arith_pow + }; + + enum settings_assignment_opr + { + e_assign_unknown = 0, + e_assign_assign, e_assign_addass, e_assign_subass, + e_assign_mulass, e_assign_divass, e_assign_modass + }; + + enum settings_inequality_opr + { + e_ineq_unknown = 0, + e_ineq_lt , e_ineq_lte, e_ineq_eq , + e_ineq_equal, e_ineq_ne , e_ineq_nequal, + e_ineq_gte , e_ineq_gt + }; + + static const std::size_t default_compile_all_opts = + e_replacer + + e_joiner + + e_numeric_check + + e_bracket_check + + e_sequence_check + + e_commutative_check + + e_strength_reduction; + + settings_store(const std::size_t compile_options = default_compile_all_opts) + : max_stack_depth_(400) + , max_node_depth_(10000) + , max_local_vector_size_(2000000000) + { + load_compile_options(compile_options); + } + + settings_store& enable_all_base_functions() + { + disabled_func_set_.clear(); + return (*this); + } + + settings_store& enable_all_control_structures() + { + disabled_ctrl_set_.clear(); + return (*this); + } + + settings_store& enable_all_logic_ops() + { + disabled_logic_set_.clear(); + return (*this); + } + + settings_store& enable_all_arithmetic_ops() + { + disabled_arithmetic_set_.clear(); + return (*this); + } + + settings_store& enable_all_assignment_ops() + { + disabled_assignment_set_.clear(); + return (*this); + } + + settings_store& enable_all_inequality_ops() + { + disabled_inequality_set_.clear(); + return (*this); + } + + settings_store& enable_local_vardef() + { + disable_vardef_ = false; + return (*this); + } + + settings_store& enable_commutative_check() + { + enable_commutative_check_ = true; + return (*this); + } + + settings_store& enable_strength_reduction() + { + enable_strength_reduction_ = true; + return (*this); + } + + settings_store& disable_all_base_functions() + { + std::copy(details::base_function_list, + details::base_function_list + details::base_function_list_size, + std::insert_iterator + (disabled_func_set_, disabled_func_set_.begin())); + return (*this); + } + + settings_store& disable_all_control_structures() + { + std::copy(details::cntrl_struct_list, + details::cntrl_struct_list + details::cntrl_struct_list_size, + std::insert_iterator + (disabled_ctrl_set_, disabled_ctrl_set_.begin())); + return (*this); + } + + settings_store& disable_all_logic_ops() + { + std::copy(details::logic_ops_list, + details::logic_ops_list + details::logic_ops_list_size, + std::insert_iterator + (disabled_logic_set_, disabled_logic_set_.begin())); + return (*this); + } + + settings_store& disable_all_arithmetic_ops() + { + std::copy(details::arithmetic_ops_list, + details::arithmetic_ops_list + details::arithmetic_ops_list_size, + std::insert_iterator + (disabled_arithmetic_set_, disabled_arithmetic_set_.begin())); + return (*this); + } + + settings_store& disable_all_assignment_ops() + { + std::copy(details::assignment_ops_list, + details::assignment_ops_list + details::assignment_ops_list_size, + std::insert_iterator + (disabled_assignment_set_, disabled_assignment_set_.begin())); + return (*this); + } + + settings_store& disable_all_inequality_ops() + { + std::copy(details::inequality_ops_list, + details::inequality_ops_list + details::inequality_ops_list_size, + std::insert_iterator + (disabled_inequality_set_, disabled_inequality_set_.begin())); + return (*this); + } + + settings_store& disable_local_vardef() + { + disable_vardef_ = true; + return (*this); + } + + settings_store& disable_commutative_check() + { + enable_commutative_check_ = false; + return (*this); + } + + settings_store& disable_strength_reduction() + { + enable_strength_reduction_ = false; + return (*this); + } + + bool replacer_enabled () const { return enable_replacer_; } + bool commutative_check_enabled () const { return enable_commutative_check_; } + bool joiner_enabled () const { return enable_joiner_; } + bool numeric_check_enabled () const { return enable_numeric_check_; } + bool bracket_check_enabled () const { return enable_bracket_check_; } + bool sequence_check_enabled () const { return enable_sequence_check_; } + bool strength_reduction_enabled () const { return enable_strength_reduction_; } + bool collect_variables_enabled () const { return enable_collect_vars_; } + bool collect_functions_enabled () const { return enable_collect_funcs_; } + bool collect_assignments_enabled() const { return enable_collect_assings_; } + bool vardef_disabled () const { return disable_vardef_; } + bool rsrvd_sym_usr_disabled () const { return disable_rsrvd_sym_usr_; } + bool zero_return_disabled () const { return disable_zero_return_; } + + bool function_enabled(const std::string& function_name) const + { + if (disabled_func_set_.empty()) + return true; + else + return (disabled_func_set_.end() == disabled_func_set_.find(function_name)); + } + + bool control_struct_enabled(const std::string& control_struct) const + { + if (disabled_ctrl_set_.empty()) + return true; + else + return (disabled_ctrl_set_.end() == disabled_ctrl_set_.find(control_struct)); + } + + bool logic_enabled(const std::string& logic_operation) const + { + if (disabled_logic_set_.empty()) + return true; + else + return (disabled_logic_set_.end() == disabled_logic_set_.find(logic_operation)); + } + + bool arithmetic_enabled(const details::operator_type& arithmetic_operation) const + { + if (disabled_logic_set_.empty()) + return true; + else + return disabled_arithmetic_set_.end() == disabled_arithmetic_set_ + .find(arith_opr_to_string(arithmetic_operation)); + } + + bool assignment_enabled(const details::operator_type& assignment) const + { + if (disabled_assignment_set_.empty()) + return true; + else + return disabled_assignment_set_.end() == disabled_assignment_set_ + .find(assign_opr_to_string(assignment)); + } + + bool inequality_enabled(const details::operator_type& inequality) const + { + if (disabled_inequality_set_.empty()) + return true; + else + return disabled_inequality_set_.end() == disabled_inequality_set_ + .find(inequality_opr_to_string(inequality)); + } + + bool function_disabled(const std::string& function_name) const + { + if (disabled_func_set_.empty()) + return false; + else + return (disabled_func_set_.end() != disabled_func_set_.find(function_name)); + } + + bool control_struct_disabled(const std::string& control_struct) const + { + if (disabled_ctrl_set_.empty()) + return false; + else + return (disabled_ctrl_set_.end() != disabled_ctrl_set_.find(control_struct)); + } + + bool logic_disabled(const std::string& logic_operation) const + { + if (disabled_logic_set_.empty()) + return false; + else + return (disabled_logic_set_.end() != disabled_logic_set_.find(logic_operation)); + } + + bool assignment_disabled(const details::operator_type assignment_operation) const + { + if (disabled_assignment_set_.empty()) + return false; + else + return disabled_assignment_set_.end() != disabled_assignment_set_ + .find(assign_opr_to_string(assignment_operation)); + } + + bool logic_disabled(const details::operator_type logic_operation) const + { + if (disabled_logic_set_.empty()) + return false; + else + return disabled_logic_set_.end() != disabled_logic_set_ + .find(logic_opr_to_string(logic_operation)); + } + + bool arithmetic_disabled(const details::operator_type arithmetic_operation) const + { + if (disabled_arithmetic_set_.empty()) + return false; + else + return disabled_arithmetic_set_.end() != disabled_arithmetic_set_ + .find(arith_opr_to_string(arithmetic_operation)); + } + + bool inequality_disabled(const details::operator_type& inequality) const + { + if (disabled_inequality_set_.empty()) + return false; + else + return disabled_inequality_set_.end() != disabled_inequality_set_ + .find(inequality_opr_to_string(inequality)); + } + + settings_store& disable_base_function(const settings_base_funcs bf) + { + if ( + (e_bf_unknown != bf) && + (static_cast(bf) < (details::base_function_list_size + 1)) + ) + { + disabled_func_set_.insert(details::base_function_list[bf - 1]); + } + + return (*this); + } + + settings_store& disable_control_structure(const settings_control_structs ctrl_struct) + { + if ( + (e_ctrl_unknown != ctrl_struct) && + (static_cast(ctrl_struct) < (details::cntrl_struct_list_size + 1)) + ) + { + disabled_ctrl_set_.insert(details::cntrl_struct_list[ctrl_struct - 1]); + } + + return (*this); + } + + settings_store& disable_logic_operation(const settings_logic_opr logic) + { + if ( + (e_logic_unknown != logic) && + (static_cast(logic) < (details::logic_ops_list_size + 1)) + ) + { + disabled_logic_set_.insert(details::logic_ops_list[logic - 1]); + } + + return (*this); + } + + settings_store& disable_arithmetic_operation(const settings_arithmetic_opr arithmetic) + { + if ( + (e_arith_unknown != arithmetic) && + (static_cast(arithmetic) < (details::arithmetic_ops_list_size + 1)) + ) + { + disabled_arithmetic_set_.insert(details::arithmetic_ops_list[arithmetic - 1]); + } + + return (*this); + } + + settings_store& disable_assignment_operation(const settings_assignment_opr assignment) + { + if ( + (e_assign_unknown != assignment) && + (static_cast(assignment) < (details::assignment_ops_list_size + 1)) + ) + { + disabled_assignment_set_.insert(details::assignment_ops_list[assignment - 1]); + } + + return (*this); + } + + settings_store& disable_inequality_operation(const settings_inequality_opr inequality) + { + if ( + (e_ineq_unknown != inequality) && + (static_cast(inequality) < (details::inequality_ops_list_size + 1)) + ) + { + disabled_inequality_set_.insert(details::inequality_ops_list[inequality - 1]); + } + + return (*this); + } + + settings_store& enable_base_function(const settings_base_funcs bf) + { + if ( + (e_bf_unknown != bf) && + (static_cast(bf) < (details::base_function_list_size + 1)) + ) + { + const des_itr_t itr = disabled_func_set_.find(details::base_function_list[bf - 1]); + + if (disabled_func_set_.end() != itr) + { + disabled_func_set_.erase(itr); + } + } + + return (*this); + } + + settings_store& enable_control_structure(const settings_control_structs ctrl_struct) + { + if ( + (e_ctrl_unknown != ctrl_struct) && + (static_cast(ctrl_struct) < (details::cntrl_struct_list_size + 1)) + ) + { + const des_itr_t itr = disabled_ctrl_set_.find(details::cntrl_struct_list[ctrl_struct - 1]); + + if (disabled_ctrl_set_.end() != itr) + { + disabled_ctrl_set_.erase(itr); + } + } + + return (*this); + } + + settings_store& enable_logic_operation(const settings_logic_opr logic) + { + if ( + (e_logic_unknown != logic) && + (static_cast(logic) < (details::logic_ops_list_size + 1)) + ) + { + const des_itr_t itr = disabled_logic_set_.find(details::logic_ops_list[logic - 1]); + + if (disabled_logic_set_.end() != itr) + { + disabled_logic_set_.erase(itr); + } + } + + return (*this); + } + + settings_store& enable_arithmetic_operation(const settings_arithmetic_opr arithmetic) + { + if ( + (e_arith_unknown != arithmetic) && + (static_cast(arithmetic) < (details::arithmetic_ops_list_size + 1)) + ) + { + const des_itr_t itr = disabled_arithmetic_set_.find(details::arithmetic_ops_list[arithmetic - 1]); + + if (disabled_arithmetic_set_.end() != itr) + { + disabled_arithmetic_set_.erase(itr); + } + } + + return (*this); + } + + settings_store& enable_assignment_operation(const settings_assignment_opr assignment) + { + if ( + (e_assign_unknown != assignment) && + (static_cast(assignment) < (details::assignment_ops_list_size + 1)) + ) + { + const des_itr_t itr = disabled_assignment_set_.find(details::assignment_ops_list[assignment - 1]); + + if (disabled_assignment_set_.end() != itr) + { + disabled_assignment_set_.erase(itr); + } + } + + return (*this); + } + + settings_store& enable_inequality_operation(const settings_inequality_opr inequality) + { + if ( + (e_ineq_unknown != inequality) && + (static_cast(inequality) < (details::inequality_ops_list_size + 1)) + ) + { + const des_itr_t itr = disabled_inequality_set_.find(details::inequality_ops_list[inequality - 1]); + + if (disabled_inequality_set_.end() != itr) + { + disabled_inequality_set_.erase(itr); + } + } + + return (*this); + } + + void set_max_stack_depth(const std::size_t max_stack_depth) + { + max_stack_depth_ = max_stack_depth; + } + + void set_max_node_depth(const std::size_t max_node_depth) + { + max_node_depth_ = max_node_depth; + } + + void set_max_local_vector_size(const std::size_t max_local_vector_size) + { + max_local_vector_size_ = max_local_vector_size; + } + + std::size_t max_stack_depth() const + { + return max_stack_depth_; + } + + std::size_t max_node_depth() const + { + return max_node_depth_; + } + + std::size_t max_local_vector_size() const + { + return max_local_vector_size_; + } + + private: + + void load_compile_options(const std::size_t compile_options) + { + enable_replacer_ = (compile_options & e_replacer ) == e_replacer; + enable_joiner_ = (compile_options & e_joiner ) == e_joiner; + enable_numeric_check_ = (compile_options & e_numeric_check ) == e_numeric_check; + enable_bracket_check_ = (compile_options & e_bracket_check ) == e_bracket_check; + enable_sequence_check_ = (compile_options & e_sequence_check ) == e_sequence_check; + enable_commutative_check_ = (compile_options & e_commutative_check ) == e_commutative_check; + enable_strength_reduction_ = (compile_options & e_strength_reduction ) == e_strength_reduction; + enable_collect_vars_ = (compile_options & e_collect_vars ) == e_collect_vars; + enable_collect_funcs_ = (compile_options & e_collect_funcs ) == e_collect_funcs; + enable_collect_assings_ = (compile_options & e_collect_assings ) == e_collect_assings; + disable_vardef_ = (compile_options & e_disable_vardef ) == e_disable_vardef; + disable_rsrvd_sym_usr_ = (compile_options & e_disable_usr_on_rsrvd) == e_disable_usr_on_rsrvd; + disable_zero_return_ = (compile_options & e_disable_zero_return ) == e_disable_zero_return; + } + + std::string assign_opr_to_string(details::operator_type opr) const + { + switch (opr) + { + case details::e_assign : return ":="; + case details::e_addass : return "+="; + case details::e_subass : return "-="; + case details::e_mulass : return "*="; + case details::e_divass : return "/="; + case details::e_modass : return "%="; + default : return "" ; + } + } + + std::string arith_opr_to_string(details::operator_type opr) const + { + switch (opr) + { + case details::e_add : return "+"; + case details::e_sub : return "-"; + case details::e_mul : return "*"; + case details::e_div : return "/"; + case details::e_mod : return "%"; + case details::e_pow : return "^"; + default : return "" ; + } + } + + std::string inequality_opr_to_string(details::operator_type opr) const + { + switch (opr) + { + case details::e_lt : return "<" ; + case details::e_lte : return "<="; + case details::e_eq : return "=="; + case details::e_equal : return "=" ; + case details::e_ne : return "!="; + case details::e_nequal: return "<>"; + case details::e_gte : return ">="; + case details::e_gt : return ">" ; + default : return "" ; + } + } + + std::string logic_opr_to_string(details::operator_type opr) const + { + switch (opr) + { + case details::e_and : return "and" ; + case details::e_or : return "or" ; + case details::e_xor : return "xor" ; + case details::e_nand : return "nand"; + case details::e_nor : return "nor" ; + case details::e_xnor : return "xnor"; + case details::e_notl : return "not" ; + default : return "" ; + } + } + + bool enable_replacer_; + bool enable_joiner_; + bool enable_numeric_check_; + bool enable_bracket_check_; + bool enable_sequence_check_; + bool enable_commutative_check_; + bool enable_strength_reduction_; + bool enable_collect_vars_; + bool enable_collect_funcs_; + bool enable_collect_assings_; + bool disable_vardef_; + bool disable_rsrvd_sym_usr_; + bool disable_zero_return_; + + disabled_entity_set_t disabled_func_set_ ; + disabled_entity_set_t disabled_ctrl_set_ ; + disabled_entity_set_t disabled_logic_set_; + disabled_entity_set_t disabled_arithmetic_set_; + disabled_entity_set_t disabled_assignment_set_; + disabled_entity_set_t disabled_inequality_set_; + + std::size_t max_stack_depth_; + std::size_t max_node_depth_; + std::size_t max_local_vector_size_; + + friend class parser; + }; + + typedef settings_store settings_t; + + explicit parser(const settings_t& settings = settings_t()) + : settings_(settings) + , resolve_unknown_symbol_(false) + , results_context_(0) + , unknown_symbol_resolver_(reinterpret_cast(0)) + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning (disable:4355) + #endif + , sem_(*this) + #ifdef _MSC_VER + #pragma warning(pop) + #endif + , operator_joiner_2_(2) + , operator_joiner_3_(3) + , loop_runtime_check_(0) + , vector_access_runtime_check_(0) + , compilation_check_ptr_(0) + { + init_precompilation(); + + load_operations_map (base_ops_map_ ); + load_unary_operations_map (unary_op_map_ ); + load_binary_operations_map (binary_op_map_ ); + load_inv_binary_operations_map(inv_binary_op_map_); + load_sf3_map (sf3_map_ ); + load_sf4_map (sf4_map_ ); + + expression_generator_.init_synthesize_map(); + expression_generator_.set_parser(*this); + expression_generator_.set_uom (unary_op_map_ ); + expression_generator_.set_bom (binary_op_map_ ); + expression_generator_.set_ibom(inv_binary_op_map_); + expression_generator_.set_sf3m(sf3_map_ ); + expression_generator_.set_sf4m(sf4_map_ ); + expression_generator_.set_strength_reduction_state(settings_.strength_reduction_enabled()); + } + + ~parser() + {} + + inline void init_precompilation() + { + dec_.collect_variables() = + settings_.collect_variables_enabled(); + + dec_.collect_functions() = + settings_.collect_functions_enabled(); + + dec_.collect_assignments() = + settings_.collect_assignments_enabled(); + + if (settings_.replacer_enabled()) + { + symbol_replacer_.clear(); + symbol_replacer_.add_replace("true" , "1", lexer::token::e_number); + symbol_replacer_.add_replace("false", "0", lexer::token::e_number); + helper_assembly_.token_modifier_list.clear(); + helper_assembly_.register_modifier(&symbol_replacer_); + } + + if (settings_.commutative_check_enabled()) + { + for (std::size_t i = 0; i < details::reserved_words_size; ++i) + { + commutative_inserter_.ignore_symbol(details::reserved_words[i]); + } + + helper_assembly_.token_inserter_list.clear(); + helper_assembly_.register_inserter(&commutative_inserter_); + } + + if (settings_.joiner_enabled()) + { + helper_assembly_.token_joiner_list.clear(); + helper_assembly_.register_joiner(&operator_joiner_2_); + helper_assembly_.register_joiner(&operator_joiner_3_); + } + + if ( + settings_.numeric_check_enabled () || + settings_.bracket_check_enabled () || + settings_.sequence_check_enabled() + ) + { + helper_assembly_.token_scanner_list.clear(); + + if (settings_.numeric_check_enabled()) + { + helper_assembly_.register_scanner(&numeric_checker_); + } + + if (settings_.bracket_check_enabled()) + { + helper_assembly_.register_scanner(&bracket_checker_); + } + + if (settings_.sequence_check_enabled()) + { + helper_assembly_.register_scanner(&sequence_validator_ ); + helper_assembly_.register_scanner(&sequence_validator_3tkns_); + } + } + } + + inline bool compile(const std::string& expression_string, expression& expr) + { + state_ .reset(); + error_list_ .clear(); + brkcnt_list_ .clear(); + synthesis_error_ .clear(); + immutable_memory_map_.reset(); + immutable_symtok_map_.clear(); + current_state_stack_ .clear(); + sem_ .cleanup(); + + return_cleanup(); + + expression_generator_.set_allocator(node_allocator_); + + if (expression_string.empty()) + { + set_error(make_error( + parser_error::e_syntax, + "ERR001 - Empty expression!", + exprtk_error_location)); + + return false; + } + + if (!init(expression_string)) + { + process_lexer_errors(); + return false; + } + + if (lexer().empty()) + { + set_error(make_error( + parser_error::e_syntax, + "ERR002 - Empty expression!", + exprtk_error_location)); + + return false; + } + + if (halt_compilation_check()) + { + return false; + } + + if (!run_assemblies()) + { + return false; + } + + if (halt_compilation_check()) + { + return false; + } + + symtab_store_.symtab_list_ = expr.get_symbol_table_list(); + dec_.clear(); + + lexer().begin(); + + next_token(); + + expression_node_ptr e = parse_corpus(); + + if ((0 != e) && (token_t::e_eof == current_token().type)) + { + bool* retinvk_ptr = 0; + + if (state_.return_stmt_present) + { + dec_.return_present_ = true; + + e = expression_generator_ + .return_envelope(e, results_context_, retinvk_ptr); + } + + expr.set_expression(e); + expr.set_retinvk(retinvk_ptr); + + register_local_vars(expr); + register_return_results(expr); + + return !(!expr); + } + else + { + if (error_list_.empty()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR003 - Invalid expression encountered", + exprtk_error_location)); + } + + if ((0 != e) && branch_deletable(e)) + { + destroy_node(e); + } + + dec_.clear (); + sem_.cleanup (); + return_cleanup(); + + return false; + } + } + + inline expression_t compile(const std::string& expression_string, symbol_table_t& symtab) + { + expression_t expression; + expression.register_symbol_table(symtab); + compile(expression_string,expression); + return expression; + } + + void process_lexer_errors() + { + for (std::size_t i = 0; i < lexer().size(); ++i) + { + if (lexer()[i].is_error()) + { + std::string diagnostic = "ERR004 - "; + + switch (lexer()[i].type) + { + case lexer::token::e_error : diagnostic += "General token error"; + break; + + case lexer::token::e_err_symbol : diagnostic += "Symbol error"; + break; + + case lexer::token::e_err_number : diagnostic += "Invalid numeric token"; + break; + + case lexer::token::e_err_string : diagnostic += "Invalid string token"; + break; + + case lexer::token::e_err_sfunc : diagnostic += "Invalid special function token"; + break; + + default : diagnostic += "Unknown compiler error"; + } + + set_error(make_error( + parser_error::e_lexer, + lexer()[i], + diagnostic + ": " + lexer()[i].value, + exprtk_error_location)); + } + } + } + + inline bool run_assemblies() + { + if (settings_.commutative_check_enabled()) + { + helper_assembly_.run_inserters(lexer()); + } + + if (settings_.joiner_enabled()) + { + helper_assembly_.run_joiners(lexer()); + } + + if (settings_.replacer_enabled()) + { + helper_assembly_.run_modifiers(lexer()); + } + + if ( + settings_.numeric_check_enabled () || + settings_.bracket_check_enabled () || + settings_.sequence_check_enabled() + ) + { + if (!helper_assembly_.run_scanners(lexer())) + { + if (helper_assembly_.error_token_scanner) + { + lexer::helper::bracket_checker* bracket_checker_ptr = 0; + lexer::helper::numeric_checker* numeric_checker_ptr = 0; + lexer::helper::sequence_validator* sequence_validator_ptr = 0; + lexer::helper::sequence_validator_3tokens* sequence_validator3_ptr = 0; + + if (0 != (bracket_checker_ptr = dynamic_cast(helper_assembly_.error_token_scanner))) + { + set_error(make_error( + parser_error::e_token, + bracket_checker_ptr->error_token(), + "ERR005 - Mismatched brackets: '" + bracket_checker_ptr->error_token().value + "'", + exprtk_error_location)); + } + else if (0 != (numeric_checker_ptr = dynamic_cast*>(helper_assembly_.error_token_scanner))) + { + for (std::size_t i = 0; i < numeric_checker_ptr->error_count(); ++i) + { + lexer::token error_token = lexer()[numeric_checker_ptr->error_index(i)]; + + set_error(make_error( + parser_error::e_token, + error_token, + "ERR006 - Invalid numeric token: '" + error_token.value + "'", + exprtk_error_location)); + } + + if (numeric_checker_ptr->error_count()) + { + numeric_checker_ptr->clear_errors(); + } + } + else if (0 != (sequence_validator_ptr = dynamic_cast(helper_assembly_.error_token_scanner))) + { + for (std::size_t i = 0; i < sequence_validator_ptr->error_count(); ++i) + { + std::pair error_token = sequence_validator_ptr->error(i); + + set_error(make_error( + parser_error::e_token, + error_token.first, + "ERR007 - Invalid token sequence: '" + + error_token.first.value + "' and '" + + error_token.second.value + "'", + exprtk_error_location)); + } + + if (sequence_validator_ptr->error_count()) + { + sequence_validator_ptr->clear_errors(); + } + } + else if (0 != (sequence_validator3_ptr = dynamic_cast(helper_assembly_.error_token_scanner))) + { + for (std::size_t i = 0; i < sequence_validator3_ptr->error_count(); ++i) + { + std::pair error_token = sequence_validator3_ptr->error(i); + + set_error(make_error( + parser_error::e_token, + error_token.first, + "ERR008 - Invalid token sequence: '" + + error_token.first.value + "' and '" + + error_token.second.value + "'", + exprtk_error_location)); + } + + if (sequence_validator3_ptr->error_count()) + { + sequence_validator3_ptr->clear_errors(); + } + } + } + + return false; + } + } + + return true; + } + + inline settings_store& settings() + { + return settings_; + } + + inline parser_error::type get_error(const std::size_t& index) const + { + if (index < error_list_.size()) + return error_list_[index]; + else + throw std::invalid_argument("parser::get_error() - Invalid error index specified"); + } + + inline std::string error() const + { + if (!error_list_.empty()) + { + return error_list_[0].diagnostic; + } + else + return std::string("No Error"); + } + + inline std::size_t error_count() const + { + return error_list_.size(); + } + + inline dependent_entity_collector& dec() + { + return dec_; + } + + inline bool replace_symbol(const std::string& old_symbol, const std::string& new_symbol) + { + if (!settings_.replacer_enabled()) + return false; + else if (details::is_reserved_word(old_symbol)) + return false; + else + return symbol_replacer_.add_replace(old_symbol,new_symbol,lexer::token::e_symbol); + } + + inline bool remove_replace_symbol(const std::string& symbol) + { + if (!settings_.replacer_enabled()) + return false; + else if (details::is_reserved_word(symbol)) + return false; + else + return symbol_replacer_.remove(symbol); + } + + inline void enable_unknown_symbol_resolver(unknown_symbol_resolver* usr = reinterpret_cast(0)) + { + resolve_unknown_symbol_ = true; + + if (usr) + unknown_symbol_resolver_ = usr; + else + unknown_symbol_resolver_ = &default_usr_; + } + + inline void enable_unknown_symbol_resolver(unknown_symbol_resolver& usr) + { + enable_unknown_symbol_resolver(&usr); + } + + inline void disable_unknown_symbol_resolver() + { + resolve_unknown_symbol_ = false; + unknown_symbol_resolver_ = &default_usr_; + } + + inline void register_loop_runtime_check(loop_runtime_check& lrtchk) + { + loop_runtime_check_ = &lrtchk; + } + + inline void register_vector_access_runtime_check(vector_access_runtime_check& vartchk) + { + vector_access_runtime_check_ = &vartchk; + } + + inline void register_compilation_timeout_check(compilation_check& compchk) + { + compilation_check_ptr_ = &compchk; + } + + inline void clear_loop_runtime_check() + { + loop_runtime_check_ = loop_runtime_check_ptr(0); + } + + inline void clear_vector_access_runtime_check() + { + vector_access_runtime_check_ = vector_access_runtime_check_ptr(0); + } + + inline void clear_compilation_timeout_check() + { + compilation_check_ptr_ = compilation_check_ptr(0); + } + + private: + + inline bool valid_base_operation(const std::string& symbol) const + { + const std::size_t length = symbol.size(); + + if ( + (length < 3) || // Shortest base op symbol length + (length > 9) // Longest base op symbol length + ) + return false; + else + return settings_.function_enabled(symbol) && + (base_ops_map_.end() != base_ops_map_.find(symbol)); + } + + inline bool valid_vararg_operation(const std::string& symbol) const + { + static const std::string s_sum = "sum" ; + static const std::string s_mul = "mul" ; + static const std::string s_avg = "avg" ; + static const std::string s_min = "min" ; + static const std::string s_max = "max" ; + static const std::string s_mand = "mand"; + static const std::string s_mor = "mor" ; + static const std::string s_multi = "~" ; + static const std::string s_mswitch = "[*]" ; + + return + ( + details::imatch(symbol,s_sum ) || + details::imatch(symbol,s_mul ) || + details::imatch(symbol,s_avg ) || + details::imatch(symbol,s_min ) || + details::imatch(symbol,s_max ) || + details::imatch(symbol,s_mand ) || + details::imatch(symbol,s_mor ) || + details::imatch(symbol,s_multi ) || + details::imatch(symbol,s_mswitch) + ) && + settings_.function_enabled(symbol); + } + + bool is_invalid_logic_operation(const details::operator_type operation) const + { + return settings_.logic_disabled(operation); + } + + bool is_invalid_arithmetic_operation(const details::operator_type operation) const + { + return settings_.arithmetic_disabled(operation); + } + + bool is_invalid_assignment_operation(const details::operator_type operation) const + { + return settings_.assignment_disabled(operation); + } + + bool is_invalid_inequality_operation(const details::operator_type operation) const + { + return settings_.inequality_disabled(operation); + } + + #ifdef exprtk_enable_debugging + inline void next_token() + { + const std::string ct_str = current_token().value; + const std::size_t ct_pos = current_token().position; + parser_helper::next_token(); + const std::string depth(2 * state_.scope_depth,' '); + exprtk_debug(("%s" + "prev[%s | %04d] --> curr[%s | %04d] stack_level: %3d\n", + depth.c_str(), + ct_str.c_str(), + static_cast(ct_pos), + current_token().value.c_str(), + static_cast(current_token().position), + static_cast(state_.stack_depth))); + } + #endif + + inline expression_node_ptr parse_corpus() + { + std::vector arg_list; + std::vector side_effect_list; + + scoped_vec_delete sdd((*this),arg_list); + + lexer::token begin_token; + lexer::token end_token; + + for ( ; ; ) + { + state_.side_effect_present = false; + + begin_token = current_token(); + + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + { + if (error_list_.empty()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR009 - Invalid expression encountered", + exprtk_error_location)); + } + + return error_node(); + } + else + { + arg_list.push_back(arg); + + side_effect_list.push_back(state_.side_effect_present); + + end_token = current_token(); + + const std::string sub_expr = construct_subexpr(begin_token, end_token); + + exprtk_debug(("parse_corpus(%02d) Subexpr: %s\n", + static_cast(arg_list.size() - 1), + sub_expr.c_str())); + + exprtk_debug(("parse_corpus(%02d) - Side effect present: %s\n", + static_cast(arg_list.size() - 1), + state_.side_effect_present ? "true" : "false")); + + exprtk_debug(("-------------------------------------------------\n")); + } + + if (token_is(token_t::e_eof,prsrhlpr_t::e_hold)) + { + if (lexer().finished()) + break; + else + next_token(); + } + } + + if ( + !arg_list.empty() && + is_return_node(arg_list.back()) + ) + { + dec_.final_stmt_return_ = true; + } + + const expression_node_ptr result = simplify(arg_list,side_effect_list); + + sdd.delete_ptr = (0 == result); + + return result; + } + + std::string construct_subexpr(lexer::token& begin_token, lexer::token& end_token) + { + std::string result = lexer().substr(begin_token.position,end_token.position); + + for (std::size_t i = 0; i < result.size(); ++i) + { + if (details::is_whitespace(result[i])) result[i] = ' '; + } + + return result; + } + + static const precedence_level default_precedence = e_level00; + + struct state_t + { + inline void set(const precedence_level& l, + const precedence_level& r, + const details::operator_type& o, + const token_t tkn = token_t()) + { + left = l; + right = r; + operation = o; + token = tkn; + } + + inline void reset() + { + left = e_level00; + right = e_level00; + operation = details::e_default; + } + + precedence_level left; + precedence_level right; + details::operator_type operation; + token_t token; + }; + + inline void push_current_state(const state_t current_state) + { + current_state_stack_.push_back(current_state); + } + + inline void pop_current_state() + { + if (!current_state_stack_.empty()) + { + current_state_stack_.pop_back(); + } + } + + inline state_t current_state() const + { + return (!current_state_stack_.empty()) ? + current_state_stack_.back() : + state_t(); + } + + inline bool halt_compilation_check() + { + compilation_check::compilation_context context; + + if (compilation_check_ptr_ && !compilation_check_ptr_->continue_compilation(context)) + { + const std::string error_message = + !context.error_message.empty() ? " Details: " + context.error_message : ""; + + set_error(make_error( + parser_error::e_parser, + token_t(), + "ERR010 - Internal compilation check failed." + error_message, + exprtk_error_location)); + + return true; + } + + return false; + } + + inline expression_node_ptr parse_expression(precedence_level precedence = e_level00) + { + if (halt_compilation_check()) + { + return error_node(); + } + + stack_limit_handler slh(*this); + + if (!slh) + { + return error_node(); + } + + expression_node_ptr expression = parse_branch(precedence); + + if (0 == expression) + { + return error_node(); + } + + bool break_loop = false; + + state_t current_state; + + for ( ; ; ) + { + current_state.reset(); + + switch (current_token().type) + { + case token_t::e_assign : current_state.set(e_level00, e_level00, details::e_assign, current_token()); break; + case token_t::e_addass : current_state.set(e_level00, e_level00, details::e_addass, current_token()); break; + case token_t::e_subass : current_state.set(e_level00, e_level00, details::e_subass, current_token()); break; + case token_t::e_mulass : current_state.set(e_level00, e_level00, details::e_mulass, current_token()); break; + case token_t::e_divass : current_state.set(e_level00, e_level00, details::e_divass, current_token()); break; + case token_t::e_modass : current_state.set(e_level00, e_level00, details::e_modass, current_token()); break; + case token_t::e_swap : current_state.set(e_level00, e_level00, details::e_swap , current_token()); break; + case token_t::e_lt : current_state.set(e_level05, e_level06, details::e_lt , current_token()); break; + case token_t::e_lte : current_state.set(e_level05, e_level06, details::e_lte , current_token()); break; + case token_t::e_eq : current_state.set(e_level05, e_level06, details::e_eq , current_token()); break; + case token_t::e_ne : current_state.set(e_level05, e_level06, details::e_ne , current_token()); break; + case token_t::e_gte : current_state.set(e_level05, e_level06, details::e_gte , current_token()); break; + case token_t::e_gt : current_state.set(e_level05, e_level06, details::e_gt , current_token()); break; + case token_t::e_add : current_state.set(e_level07, e_level08, details::e_add , current_token()); break; + case token_t::e_sub : current_state.set(e_level07, e_level08, details::e_sub , current_token()); break; + case token_t::e_div : current_state.set(e_level10, e_level11, details::e_div , current_token()); break; + case token_t::e_mul : current_state.set(e_level10, e_level11, details::e_mul , current_token()); break; + case token_t::e_mod : current_state.set(e_level10, e_level11, details::e_mod , current_token()); break; + case token_t::e_pow : current_state.set(e_level12, e_level12, details::e_pow , current_token()); break; + default : + if (token_t::e_symbol == current_token().type) + { + static const std::string s_and = "and" ; + static const std::string s_nand = "nand" ; + static const std::string s_or = "or" ; + static const std::string s_nor = "nor" ; + static const std::string s_xor = "xor" ; + static const std::string s_xnor = "xnor" ; + static const std::string s_in = "in" ; + static const std::string s_like = "like" ; + static const std::string s_ilike = "ilike"; + static const std::string s_and1 = "&" ; + static const std::string s_or1 = "|" ; + static const std::string s_not = "not" ; + + if (details::imatch(current_token().value,s_and)) + { + current_state.set(e_level03, e_level04, details::e_and, current_token()); + break; + } + else if (details::imatch(current_token().value,s_and1)) + { + #ifndef exprtk_disable_sc_andor + current_state.set(e_level03, e_level04, details::e_scand, current_token()); + #else + current_state.set(e_level03, e_level04, details::e_and, current_token()); + #endif + break; + } + else if (details::imatch(current_token().value,s_nand)) + { + current_state.set(e_level03, e_level04, details::e_nand, current_token()); + break; + } + else if (details::imatch(current_token().value,s_or)) + { + current_state.set(e_level01, e_level02, details::e_or, current_token()); + break; + } + else if (details::imatch(current_token().value,s_or1)) + { + #ifndef exprtk_disable_sc_andor + current_state.set(e_level01, e_level02, details::e_scor, current_token()); + #else + current_state.set(e_level01, e_level02, details::e_or, current_token()); + #endif + break; + } + else if (details::imatch(current_token().value,s_nor)) + { + current_state.set(e_level01, e_level02, details::e_nor, current_token()); + break; + } + else if (details::imatch(current_token().value,s_xor)) + { + current_state.set(e_level01, e_level02, details::e_xor, current_token()); + break; + } + else if (details::imatch(current_token().value,s_xnor)) + { + current_state.set(e_level01, e_level02, details::e_xnor, current_token()); + break; + } + else if (details::imatch(current_token().value,s_in)) + { + current_state.set(e_level04, e_level04, details::e_in, current_token()); + break; + } + else if (details::imatch(current_token().value,s_like)) + { + current_state.set(e_level04, e_level04, details::e_like, current_token()); + break; + } + else if (details::imatch(current_token().value,s_ilike)) + { + current_state.set(e_level04, e_level04, details::e_ilike, current_token()); + break; + } + else if (details::imatch(current_token().value,s_not)) + { + break; + } + } + + break_loop = true; + } + + if (break_loop) + { + parse_pending_string_rangesize(expression); + break; + } + else if (current_state.left < precedence) + break; + + const lexer::token prev_token = current_token(); + + next_token(); + + expression_node_ptr right_branch = error_node(); + expression_node_ptr new_expression = error_node(); + + if (is_invalid_logic_operation(current_state.operation)) + { + free_node(node_allocator_,expression); + + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR011 - Invalid or disabled logic operation '" + details::to_str(current_state.operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_arithmetic_operation(current_state.operation)) + { + free_node(node_allocator_,expression); + + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR012 - Invalid or disabled arithmetic operation '" + details::to_str(current_state.operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_inequality_operation(current_state.operation)) + { + free_node(node_allocator_,expression); + + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR013 - Invalid inequality operation '" + details::to_str(current_state.operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_assignment_operation(current_state.operation)) + { + free_node(node_allocator_,expression); + + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR014 - Invalid or disabled assignment operation '" + details::to_str(current_state.operation) + "'", + exprtk_error_location)); + + return error_node(); + } + + if (0 != (right_branch = parse_expression(current_state.right))) + { + if ( + details::is_return_node(expression ) || + details::is_return_node(right_branch) + ) + { + free_node(node_allocator_, expression ); + free_node(node_allocator_, right_branch); + + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR015 - Return statements cannot be part of sub-expressions", + exprtk_error_location)); + + return error_node(); + } + + push_current_state(current_state); + + new_expression = expression_generator_ + ( + current_state.operation, + expression, + right_branch + ); + + pop_current_state(); + } + + if (0 == new_expression) + { + if (error_list_.empty()) + { + set_error(make_error( + parser_error::e_syntax, + prev_token, + !synthesis_error_.empty() ? + synthesis_error_ : + "ERR016 - General parsing error at token: '" + prev_token.value + "'", + exprtk_error_location)); + } + + free_node(node_allocator_, expression ); + free_node(node_allocator_, right_branch); + + return error_node(); + } + else + { + if ( + token_is(token_t::e_ternary,prsrhlpr_t::e_hold) && + (e_level00 == precedence) + ) + { + expression = parse_ternary_conditional_statement(new_expression); + } + else + expression = new_expression; + + parse_pending_string_rangesize(expression); + } + } + + if ((0 != expression) && (expression->node_depth() > settings_.max_node_depth_)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR017 - Expression depth of " + details::to_str(static_cast(expression->node_depth())) + + " exceeds maximum allowed expression depth of " + details::to_str(static_cast(settings_.max_node_depth_)), + exprtk_error_location)); + + free_node(node_allocator_,expression); + + return error_node(); + } + + return expression; + } + + bool simplify_unary_negation_branch(expression_node_ptr& node) + { + { + typedef details::unary_branch_node > ubn_t; + ubn_t* n = dynamic_cast(node); + + if (n) + { + expression_node_ptr un_r = n->branch(0); + n->release(); + free_node(node_allocator_,node); + node = un_r; + + return true; + } + } + + { + typedef details::unary_variable_node > uvn_t; + + uvn_t* n = dynamic_cast(node); + + if (n) + { + const T& v = n->v(); + expression_node_ptr return_node = error_node(); + + if ( + (0 != (return_node = symtab_store_.get_variable(v))) || + (0 != (return_node = sem_ .get_variable(v))) + ) + { + free_node(node_allocator_,node); + node = return_node; + + return true; + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR018 - Failed to find variable node in symbol table", + exprtk_error_location)); + + free_node(node_allocator_,node); + + return false; + } + } + } + + return false; + } + + static inline expression_node_ptr error_node() + { + return reinterpret_cast(0); + } + + struct scoped_expression_delete + { + scoped_expression_delete(parser& pr, expression_node_ptr& expression) + : delete_ptr(true) + , parser_(pr) + , expression_(expression) + {} + + ~scoped_expression_delete() + { + if (delete_ptr) + { + free_node(parser_.node_allocator_, expression_); + } + } + + bool delete_ptr; + parser& parser_; + expression_node_ptr& expression_; + + private: + + scoped_expression_delete(const scoped_expression_delete&) exprtk_delete; + scoped_expression_delete& operator=(const scoped_expression_delete&) exprtk_delete; + }; + + template + struct scoped_delete + { + typedef Type* ptr_t; + + scoped_delete(parser& pr, ptr_t& p) + : delete_ptr(true) + , parser_(pr) + , p_(&p) + {} + + scoped_delete(parser& pr, ptr_t (&p)[N]) + : delete_ptr(true) + , parser_(pr) + , p_(&p[0]) + {} + + ~scoped_delete() + { + if (delete_ptr) + { + for (std::size_t i = 0; i < N; ++i) + { + free_node(parser_.node_allocator_, p_[i]); + } + } + } + + bool delete_ptr; + parser& parser_; + ptr_t* p_; + + private: + + scoped_delete(const scoped_delete&) exprtk_delete; + scoped_delete& operator=(const scoped_delete&) exprtk_delete; + }; + + template + struct scoped_deq_delete + { + typedef Type* ptr_t; + + scoped_deq_delete(parser& pr, std::deque& deq) + : delete_ptr(true) + , parser_(pr) + , deq_(deq) + {} + + ~scoped_deq_delete() + { + if (delete_ptr && !deq_.empty()) + { + for (std::size_t i = 0; i < deq_.size(); ++i) + { + free_node(parser_.node_allocator_,deq_[i]); + } + + deq_.clear(); + } + } + + bool delete_ptr; + parser& parser_; + std::deque& deq_; + + private: + + scoped_deq_delete(const scoped_deq_delete&) exprtk_delete; + scoped_deq_delete& operator=(const scoped_deq_delete&) exprtk_delete; + }; + + template + struct scoped_vec_delete + { + typedef Type* ptr_t; + + scoped_vec_delete(parser& pr, std::vector& vec) + : delete_ptr(true) + , parser_(pr) + , vec_(vec) + {} + + ~scoped_vec_delete() + { + if (delete_ptr && !vec_.empty()) + { + for (std::size_t i = 0; i < vec_.size(); ++i) + { + free_node(parser_.node_allocator_,vec_[i]); + } + + vec_.clear(); + } + } + + bool delete_ptr; + parser& parser_; + std::vector& vec_; + + private: + + scoped_vec_delete(const scoped_vec_delete&) exprtk_delete; + scoped_vec_delete& operator=(const scoped_vec_delete&) exprtk_delete; + }; + + struct scoped_bool_negator + { + explicit scoped_bool_negator(bool& bb) + : b(bb) + { b = !b; } + + ~scoped_bool_negator() + { b = !b; } + + bool& b; + }; + + struct scoped_bool_or_restorer + { + explicit scoped_bool_or_restorer(bool& bb) + : b(bb) + , original_value_(bb) + {} + + ~scoped_bool_or_restorer() + { + b = b || original_value_; + } + + bool& b; + bool original_value_; + }; + + struct scoped_inc_dec + { + explicit scoped_inc_dec(std::size_t& v) + : v_(v) + { ++v_; } + + ~scoped_inc_dec() + { + assert(v_ > 0); + --v_; + } + + std::size_t& v_; + }; + + inline expression_node_ptr parse_function_invocation(ifunction* function, const std::string& function_name) + { + expression_node_ptr func_node = reinterpret_cast(0); + + switch (function->param_count) + { + case 0 : func_node = parse_function_call_0 (function,function_name); break; + case 1 : func_node = parse_function_call< 1>(function,function_name); break; + case 2 : func_node = parse_function_call< 2>(function,function_name); break; + case 3 : func_node = parse_function_call< 3>(function,function_name); break; + case 4 : func_node = parse_function_call< 4>(function,function_name); break; + case 5 : func_node = parse_function_call< 5>(function,function_name); break; + case 6 : func_node = parse_function_call< 6>(function,function_name); break; + case 7 : func_node = parse_function_call< 7>(function,function_name); break; + case 8 : func_node = parse_function_call< 8>(function,function_name); break; + case 9 : func_node = parse_function_call< 9>(function,function_name); break; + case 10 : func_node = parse_function_call<10>(function,function_name); break; + case 11 : func_node = parse_function_call<11>(function,function_name); break; + case 12 : func_node = parse_function_call<12>(function,function_name); break; + case 13 : func_node = parse_function_call<13>(function,function_name); break; + case 14 : func_node = parse_function_call<14>(function,function_name); break; + case 15 : func_node = parse_function_call<15>(function,function_name); break; + case 16 : func_node = parse_function_call<16>(function,function_name); break; + case 17 : func_node = parse_function_call<17>(function,function_name); break; + case 18 : func_node = parse_function_call<18>(function,function_name); break; + case 19 : func_node = parse_function_call<19>(function,function_name); break; + case 20 : func_node = parse_function_call<20>(function,function_name); break; + default : { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR019 - Invalid number of parameters for function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + } + + if (func_node) + return func_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR020 - Failed to generate call to function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + } + + template + inline expression_node_ptr parse_function_call(ifunction* function, const std::string& function_name) + { + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable: 4127) + #endif + if (0 == NumberofParameters) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR021 - Expecting ifunction '" + function_name + "' to have non-zero parameter count", + exprtk_error_location)); + + return error_node(); + } + #ifdef _MSC_VER + #pragma warning(pop) + #endif + + expression_node_ptr branch[NumberofParameters]; + expression_node_ptr result = error_node(); + + std::fill_n(branch, NumberofParameters, reinterpret_cast(0)); + + scoped_delete sd((*this),branch); + + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR022 - Expecting argument list for function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + + for (int i = 0; i < static_cast(NumberofParameters); ++i) + { + branch[i] = parse_expression(); + + if (0 == branch[i]) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR023 - Failed to parse argument " + details::to_str(i) + " for function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (i < static_cast(NumberofParameters - 1)) + { + if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR024 - Invalid number of arguments for function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + + if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR025 - Invalid number of arguments for function: '" + function_name + "'", + exprtk_error_location)); + + return error_node(); + } + else + result = expression_generator_.function(function,branch); + + sd.delete_ptr = (0 == result); + + return result; + } + + inline expression_node_ptr parse_function_call_0(ifunction* function, const std::string& function_name) + { + expression_node_ptr result = expression_generator_.function(function); + + state_.side_effect_present = function->has_side_effects(); + + next_token(); + + if ( + token_is(token_t::e_lbracket) && + !token_is(token_t::e_rbracket) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR026 - Expecting '()' to proceed call to function: '" + function_name + "'", + exprtk_error_location)); + + free_node(node_allocator_,result); + + return error_node(); + } + else + return result; + } + + template + inline std::size_t parse_base_function_call(expression_node_ptr (¶m_list)[MaxNumberofParameters], const std::string& function_name = "") + { + std::fill_n(param_list, MaxNumberofParameters, reinterpret_cast(0)); + + scoped_delete sd((*this),param_list); + + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR027 - Expected a '(' at start of function call to '" + function_name + + "', instead got: '" + current_token().value + "'", + exprtk_error_location)); + + return 0; + } + + if (token_is(token_t::e_rbracket, e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR028 - Expected at least one input parameter for function call '" + function_name + "'", + exprtk_error_location)); + + return 0; + } + + std::size_t param_index = 0; + + for (; param_index < MaxNumberofParameters; ++param_index) + { + param_list[param_index] = parse_expression(); + + if (0 == param_list[param_index]) + return 0; + else if (token_is(token_t::e_rbracket)) + { + sd.delete_ptr = false; + break; + } + else if (token_is(token_t::e_comma)) + continue; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR029 - Expected a ',' between function input parameters, instead got: '" + current_token().value + "'", + exprtk_error_location)); + + return 0; + } + } + + if (sd.delete_ptr) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR030 - Invalid number of input parameters passed to function '" + function_name + "'", + exprtk_error_location)); + + return 0; + } + + return (param_index + 1); + } + + inline expression_node_ptr parse_base_operation() + { + typedef std::pair map_range_t; + + const std::string operation_name = current_token().value; + const token_t diagnostic_token = current_token(); + + map_range_t itr_range = base_ops_map_.equal_range(operation_name); + + if (0 == std::distance(itr_range.first,itr_range.second)) + { + set_error(make_error( + parser_error::e_syntax, + diagnostic_token, + "ERR031 - No entry found for base operation: " + operation_name, + exprtk_error_location)); + + return error_node(); + } + + static const std::size_t MaxNumberofParameters = 4; + expression_node_ptr param_list[MaxNumberofParameters] = {0}; + + const std::size_t parameter_count = parse_base_function_call(param_list, operation_name); + + if ((parameter_count > 0) && (parameter_count <= MaxNumberofParameters)) + { + for (base_ops_map_t::iterator itr = itr_range.first; itr != itr_range.second; ++itr) + { + const details::base_operation_t& operation = itr->second; + + if (operation.num_params == parameter_count) + { + switch (parameter_count) + { + #define base_opr_case(N) \ + case N : { \ + expression_node_ptr pl##N[N] = {0}; \ + std::copy(param_list, param_list + N, pl##N); \ + lodge_symbol(operation_name, e_st_function); \ + return expression_generator_(operation.type, pl##N); \ + } \ + + base_opr_case(1) + base_opr_case(2) + base_opr_case(3) + base_opr_case(4) + #undef base_opr_case + } + } + } + } + + for (std::size_t i = 0; i < MaxNumberofParameters; ++i) + { + free_node(node_allocator_, param_list[i]); + } + + set_error(make_error( + parser_error::e_syntax, + diagnostic_token, + "ERR032 - Invalid number of input parameters for call to function: '" + operation_name + "'", + exprtk_error_location)); + + return error_node(); + } + + inline expression_node_ptr parse_conditional_statement_01(expression_node_ptr condition) + { + // Parse: [if][(][condition][,][consequent][,][alternative][)] + + expression_node_ptr consequent = error_node(); + expression_node_ptr alternative = error_node(); + + bool result = true; + + if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR033 - Expected ',' between if-statement condition and consequent", + exprtk_error_location)); + + result = false; + } + else if (0 == (consequent = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR034 - Failed to parse consequent for if-statement", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR035 - Expected ',' between if-statement consequent and alternative", + exprtk_error_location)); + + result = false; + } + else if (0 == (alternative = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR036 - Failed to parse alternative for if-statement", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR037 - Expected ')' at the end of if-statement", + exprtk_error_location)); + + result = false; + } + + #ifndef exprtk_disable_string_capabilities + if (result) + { + const bool consq_is_str = is_generally_string_node(consequent ); + const bool alter_is_str = is_generally_string_node(alternative); + + if (consq_is_str || alter_is_str) + { + if (consq_is_str && alter_is_str) + { + expression_node_ptr result_node = + expression_generator_ + .conditional_string(condition, consequent, alternative); + + if (result_node && result_node->valid()) + { + return result_node; + } + + set_error(make_error( + parser_error::e_synthesis, + current_token(), + "ERR038 - Failed to synthesize node: conditional_string", + exprtk_error_location)); + + free_node(node_allocator_, result_node); + return error_node(); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR039 - Return types of if-statement differ: string/non-string", + exprtk_error_location)); + + result = false; + } + } + #endif + + if (result) + { + const bool consq_is_vec = is_ivector_node(consequent ); + const bool alter_is_vec = is_ivector_node(alternative); + + if (consq_is_vec || alter_is_vec) + { + if (consq_is_vec && alter_is_vec) + { + return expression_generator_ + .conditional_vector(condition, consequent, alternative); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR040 - Return types of if-statement differ: vector/non-vector", + exprtk_error_location)); + + result = false; + } + } + + if (!result) + { + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent ); + free_node(node_allocator_, alternative); + + return error_node(); + } + else + return expression_generator_ + .conditional(condition, consequent, alternative); + } + + inline expression_node_ptr parse_conditional_statement_02(expression_node_ptr condition) + { + expression_node_ptr consequent = error_node(); + expression_node_ptr alternative = error_node(); + + bool result = true; + + if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) + { + if (0 == (consequent = parse_multi_sequence("if-statement-01"))) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR041 - Failed to parse body of consequent for if-statement", + exprtk_error_location)); + + result = false; + } + else if + ( + !settings_.commutative_check_enabled() && + !token_is("else",prsrhlpr_t::e_hold) && + !token_is_loop(prsrhlpr_t::e_hold) && + !token_is_arithmetic_opr(prsrhlpr_t::e_hold) && + !token_is_right_bracket (prsrhlpr_t::e_hold) && + !token_is_ineq_opr (prsrhlpr_t::e_hold) && + !token_is(token_t::e_ternary,prsrhlpr_t::e_hold) && + !token_is(token_t::e_eof) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR042 - Expected ';' at the end of the consequent for if-statement (1)", + exprtk_error_location)); + + result = false; + } + } + else + { + if ( + settings_.commutative_check_enabled() && + token_is(token_t::e_mul,prsrhlpr_t::e_hold) + ) + { + next_token(); + } + + if (0 != (consequent = parse_expression())) + { + if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR043 - Expected ';' at the end of the consequent for if-statement (2)", + exprtk_error_location)); + + result = false; + } + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR044 - Failed to parse body of consequent for if-statement", + exprtk_error_location)); + + result = false; + } + } + + if (result) + { + if (details::imatch(current_token().value,"else")) + { + next_token(); + + if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) + { + if (0 == (alternative = parse_multi_sequence("else-statement-01"))) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR045 - Failed to parse body of the 'else' for if-statement", + exprtk_error_location)); + + result = false; + } + } + else if (details::imatch(current_token().value,"if")) + { + if (0 == (alternative = parse_conditional_statement())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR046 - Failed to parse body of if-else statement", + exprtk_error_location)); + + result = false; + } + } + else if (0 != (alternative = parse_expression())) + { + if ( + !token_is(token_t::e_ternary,prsrhlpr_t::e_hold) && + !token_is(token_t::e_eof) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR047 - Expected ';' at the end of the 'else-if' for the if-statement", + exprtk_error_location)); + + result = false; + } + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR048 - Failed to parse body of the 'else' for if-statement", + exprtk_error_location)); + + result = false; + } + } + } + + #ifndef exprtk_disable_string_capabilities + if (result) + { + const bool consq_is_str = is_generally_string_node(consequent ); + const bool alter_is_str = is_generally_string_node(alternative); + + if (consq_is_str || alter_is_str) + { + if (consq_is_str && alter_is_str) + { + return expression_generator_ + .conditional_string(condition, consequent, alternative); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR049 - Return types of if-statement differ: string/non-string", + exprtk_error_location)); + + result = false; + } + } + #endif + + if (result) + { + const bool consq_is_vec = is_ivector_node(consequent ); + const bool alter_is_vec = is_ivector_node(alternative); + + if (consq_is_vec || alter_is_vec) + { + if (consq_is_vec && alter_is_vec) + { + return expression_generator_ + .conditional_vector(condition, consequent, alternative); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR050 - Return types of if-statement differ: vector/non-vector", + exprtk_error_location)); + + result = false; + } + } + + if (!result) + { + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent ); + free_node(node_allocator_, alternative); + + return error_node(); + } + else + return expression_generator_ + .conditional(condition, consequent, alternative); + } + + inline expression_node_ptr parse_conditional_statement() + { + expression_node_ptr condition = error_node(); + + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR051 - Expected '(' at start of if-statement, instead got: '" + current_token().value + "'", + exprtk_error_location)); + + return error_node(); + } + else if (0 == (condition = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR052 - Failed to parse condition for if-statement", + exprtk_error_location)); + + return error_node(); + } + else if (token_is(token_t::e_comma,prsrhlpr_t::e_hold)) + { + // if (x,y,z) + return parse_conditional_statement_01(condition); + } + else if (token_is(token_t::e_rbracket)) + { + /* + 00. if (x) y; + 01. if (x) y; else z; + 02. if (x) y; else {z0; ... zn;} + 03. if (x) y; else if (z) w; + 04. if (x) y; else if (z) w; else u; + 05. if (x) y; else if (z) w; else {u0; ... un;} + 06. if (x) y; else if (z) {w0; ... wn;} + 07. if (x) {y0; ... yn;} + 08. if (x) {y0; ... yn;} else z; + 09. if (x) {y0; ... yn;} else {z0; ... zn;}; + 10. if (x) {y0; ... yn;} else if (z) w; + 11. if (x) {y0; ... yn;} else if (z) w; else u; + 12. if (x) {y0; ... nex;} else if (z) w; else {u0 ... un;} + 13. if (x) {y0; ... yn;} else if (z) {w0; ... wn;} + */ + return parse_conditional_statement_02(condition); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR053 - Invalid if-statement", + exprtk_error_location)); + + free_node(node_allocator_,condition); + + return error_node(); + } + + inline expression_node_ptr parse_ternary_conditional_statement(expression_node_ptr condition) + { + // Parse: [condition][?][consequent][:][alternative] + expression_node_ptr consequent = error_node(); + expression_node_ptr alternative = error_node(); + + bool result = true; + + if (0 == condition) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR054 - Encountered invalid condition branch for ternary if-statement", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_ternary)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR055 - Expected '?' after condition of ternary if-statement", + exprtk_error_location)); + + result = false; + } + else if (0 == (consequent = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR056 - Failed to parse consequent for ternary if-statement", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_colon)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR057 - Expected ':' between ternary if-statement consequent and alternative", + exprtk_error_location)); + + result = false; + } + else if (0 == (alternative = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR058 - Failed to parse alternative for ternary if-statement", + exprtk_error_location)); + + result = false; + } + + #ifndef exprtk_disable_string_capabilities + if (result) + { + const bool consq_is_str = is_generally_string_node(consequent ); + const bool alter_is_str = is_generally_string_node(alternative); + + if (consq_is_str || alter_is_str) + { + if (consq_is_str && alter_is_str) + { + return expression_generator_ + .conditional_string(condition, consequent, alternative); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR059 - Return types of ternary differ: string/non-string", + exprtk_error_location)); + + result = false; + } + } + #endif + + if (result) + { + const bool consq_is_vec = is_ivector_node(consequent ); + const bool alter_is_vec = is_ivector_node(alternative); + + if (consq_is_vec || alter_is_vec) + { + if (consq_is_vec && alter_is_vec) + { + return expression_generator_ + .conditional_vector(condition, consequent, alternative); + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR060 - Return types of ternary differ: vector/non-vector", + exprtk_error_location)); + + result = false; + } + } + + if (!result) + { + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent ); + free_node(node_allocator_, alternative); + + return error_node(); + } + else + return expression_generator_ + .conditional(condition, consequent, alternative); + } + + inline expression_node_ptr parse_not_statement() + { + if (settings_.logic_disabled("not")) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR061 - Invalid or disabled logic operation 'not'", + exprtk_error_location)); + + return error_node(); + } + + return parse_base_operation(); + } + + void handle_brkcnt_scope_exit() + { + assert(!brkcnt_list_.empty()); + brkcnt_list_.pop_front(); + } + + inline expression_node_ptr parse_while_loop() + { + // Parse: [while][(][test expr][)][{][expression][}] + expression_node_ptr condition = error_node(); + expression_node_ptr branch = error_node(); + expression_node_ptr result_node = error_node(); + + bool result = true; + + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR062 - Expected '(' at start of while-loop condition statement", + exprtk_error_location)); + + return error_node(); + } + else if (0 == (condition = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR063 - Failed to parse condition for while-loop", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR064 - Expected ')' at end of while-loop condition statement", + exprtk_error_location)); + + result = false; + } + + brkcnt_list_.push_front(false); + + if (result) + { + scoped_inc_dec sid(state_.parsing_loop_stmt_count); + + if (0 == (branch = parse_multi_sequence("while-loop", true))) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR065 - Failed to parse body of while-loop")); + result = false; + } + else if (0 == (result_node = expression_generator_.while_loop(condition, + branch, + brkcnt_list_.front()))) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR066 - Failed to synthesize while-loop", + exprtk_error_location)); + + result = false; + } + } + + handle_brkcnt_scope_exit(); + + if (!result) + { + free_node(node_allocator_, branch ); + free_node(node_allocator_, condition ); + free_node(node_allocator_, result_node); + + return error_node(); + } + + if (result_node && result_node->valid()) + { + return result_node; + } + + set_error(make_error( + parser_error::e_synthesis, + current_token(), + "ERR067 - Failed to synthesize 'valid' while-loop", + exprtk_error_location)); + + free_node(node_allocator_, result_node); + + return error_node(); + } + + inline expression_node_ptr parse_repeat_until_loop() + { + // Parse: [repeat][{][expression][}][until][(][test expr][)] + expression_node_ptr condition = error_node(); + expression_node_ptr branch = error_node(); + next_token(); + + std::vector arg_list; + std::vector side_effect_list; + + scoped_vec_delete sdd((*this),arg_list); + + brkcnt_list_.push_front(false); + + if (details::imatch(current_token().value,"until")) + { + next_token(); + branch = node_allocator_.allocate >(); + } + else + { + const token_t::token_type separator = token_t::e_eof; + + scope_handler sh(*this); + + scoped_bool_or_restorer sbr(state_.side_effect_present); + + scoped_inc_dec sid(state_.parsing_loop_stmt_count); + + for ( ; ; ) + { + state_.side_effect_present = false; + + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + else + { + arg_list.push_back(arg); + side_effect_list.push_back(state_.side_effect_present); + } + + if (details::imatch(current_token().value,"until")) + { + next_token(); + break; + } + + const bool is_next_until = peek_token_is(token_t::e_symbol) && + peek_token_is("until"); + + if (!token_is(separator) && is_next_until) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR068 - Expected '" + token_t::to_str(separator) + "' in body of repeat until loop", + exprtk_error_location)); + + return error_node(); + } + + if (details::imatch(current_token().value,"until")) + { + next_token(); + break; + } + } + + branch = simplify(arg_list,side_effect_list); + + sdd.delete_ptr = (0 == branch); + + if (sdd.delete_ptr) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR069 - Failed to parse body of repeat until loop", + exprtk_error_location)); + + return error_node(); + } + } + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR070 - Expected '(' before condition statement of repeat until loop", + exprtk_error_location)); + + free_node(node_allocator_,branch); + return error_node(); + } + else if (0 == (condition = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR071 - Failed to parse condition for repeat until loop", + exprtk_error_location)); + + free_node(node_allocator_,branch); + return error_node(); + } + else if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR072 - Expected ')' after condition of repeat until loop", + exprtk_error_location)); + + free_node(node_allocator_, branch ); + free_node(node_allocator_, condition); + + return error_node(); + } + + expression_node_ptr result_node = + expression_generator_ + .repeat_until_loop( + condition, + branch, + brkcnt_list_.front()); + + if (0 == result_node) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR073 - Failed to synthesize repeat until loop", + exprtk_error_location)); + + free_node(node_allocator_,condition); + + return error_node(); + } + + handle_brkcnt_scope_exit(); + + if (result_node && result_node->valid()) + { + return result_node; + } + + set_error(make_error( + parser_error::e_synthesis, + current_token(), + "ERR074 - Failed to synthesize 'valid' repeat until loop", + exprtk_error_location)); + + free_node(node_allocator_, result_node); + + return error_node(); + } + + inline expression_node_ptr parse_for_loop() + { + expression_node_ptr initialiser = error_node(); + expression_node_ptr condition = error_node(); + expression_node_ptr incrementor = error_node(); + expression_node_ptr loop_body = error_node(); + + scope_element* se = 0; + bool result = true; + + next_token(); + + scope_handler sh(*this); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR075 - Expected '(' at start of for-loop", + exprtk_error_location)); + + return error_node(); + } + + if (!token_is(token_t::e_eof)) + { + if ( + !token_is(token_t::e_symbol,prsrhlpr_t::e_hold) && + details::imatch(current_token().value,"var") + ) + { + next_token(); + + if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR076 - Expected a variable at the start of initialiser section of for-loop", + exprtk_error_location)); + + return error_node(); + } + else if (!peek_token_is(token_t::e_assign)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR077 - Expected variable assignment of initialiser section of for-loop", + exprtk_error_location)); + + return error_node(); + } + + const std::string loop_counter_symbol = current_token().value; + + se = &sem_.get_element(loop_counter_symbol); + + if ((se->name == loop_counter_symbol) && se->active) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR078 - For-loop variable '" + loop_counter_symbol+ "' is being shadowed by a previous declaration", + exprtk_error_location)); + + return error_node(); + } + else if (!symtab_store_.is_variable(loop_counter_symbol)) + { + if ( + !se->active && + (se->name == loop_counter_symbol) && + (se->type == scope_element::e_variable) + ) + { + se->active = true; + se->ref_count++; + } + else + { + scope_element nse; + nse.name = loop_counter_symbol; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_variable; + nse.depth = state_.scope_depth; + nse.data = new T(T(0)); + nse.var_node = node_allocator_.allocate(*reinterpret_cast(nse.data)); + + if (!sem_.add_element(nse)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR079 - Failed to add new local variable '" + loop_counter_symbol + "' to SEM", + exprtk_error_location)); + + sem_.free_element(nse); + + result = false; + } + else + { + exprtk_debug(("parse_for_loop() - INFO - Added new local variable: %s\n", nse.name.c_str())); + + state_.activate_side_effect("parse_for_loop()"); + } + } + } + } + + if (0 == (initialiser = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR080 - Failed to parse initialiser of for-loop", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR081 - Expected ';' after initialiser of for-loop", + exprtk_error_location)); + + result = false; + } + } + + if (!token_is(token_t::e_eof)) + { + if (0 == (condition = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR082 - Failed to parse condition of for-loop", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR083 - Expected ';' after condition section of for-loop", + exprtk_error_location)); + + result = false; + } + } + + if (!token_is(token_t::e_rbracket)) + { + if (0 == (incrementor = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR084 - Failed to parse incrementor of for-loop", + exprtk_error_location)); + + result = false; + } + else if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR085 - Expected ')' after incrementor section of for-loop", + exprtk_error_location)); + + result = false; + } + } + + if (result) + { + brkcnt_list_.push_front(false); + + scoped_inc_dec sid(state_.parsing_loop_stmt_count); + + if (0 == (loop_body = parse_multi_sequence("for-loop", true))) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR086 - Failed to parse body of for-loop", + exprtk_error_location)); + + result = false; + } + } + + if (!result) + { + if (se) + { + se->ref_count--; + } + + free_node(node_allocator_, initialiser); + free_node(node_allocator_, condition ); + free_node(node_allocator_, incrementor); + free_node(node_allocator_, loop_body ); + return error_node(); + } + + expression_node_ptr result_node = + expression_generator_.for_loop(initialiser, + condition, + incrementor, + loop_body, + brkcnt_list_.front()); + handle_brkcnt_scope_exit(); + + if (result_node && result_node->valid()) + { + return result_node; + } + + set_error(make_error( + parser_error::e_synthesis, + current_token(), + "ERR087 - Failed to synthesize 'valid' for-loop", + exprtk_error_location)); + + free_node(node_allocator_, result_node); + + return error_node(); + } + + inline expression_node_ptr parse_switch_statement() + { + std::vector arg_list; + expression_node_ptr result = error_node(); + + if (!details::imatch(current_token().value,"switch")) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR088 - Expected keyword 'switch'", + exprtk_error_location)); + + return error_node(); + } + + scoped_vec_delete svd((*this),arg_list); + + next_token(); + + if (!token_is(token_t::e_lcrlbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR089 - Expected '{' for call to switch statement", + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr default_statement = error_node(); + + scoped_expression_delete defstmt_delete((*this), default_statement); + + for ( ; ; ) + { + if (details::imatch("case",current_token().value)) + { + next_token(); + + expression_node_ptr condition = parse_expression(); + + if (0 == condition) + return error_node(); + else if (!token_is(token_t::e_colon)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR090 - Expected ':' for case of switch statement", + exprtk_error_location)); + + free_node(node_allocator_, condition); + + return error_node(); + } + + expression_node_ptr consequent = + (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) ? + parse_multi_sequence("switch-consequent") : + parse_expression(); + + if (0 == consequent) + { + free_node(node_allocator_, condition); + + return error_node(); + } + else if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR091 - Expected ';' at end of case for switch statement", + exprtk_error_location)); + + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent); + + return error_node(); + } + + // Can we optimise away the case statement? + if (is_constant_node(condition) && is_false(condition)) + { + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent); + } + else + { + arg_list.push_back(condition ); + arg_list.push_back(consequent); + } + + } + else if (details::imatch("default",current_token().value)) + { + if (0 != default_statement) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR092 - Multiple default cases for switch statement", + exprtk_error_location)); + + return error_node(); + } + + next_token(); + + if (!token_is(token_t::e_colon)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR093 - Expected ':' for default of switch statement", + exprtk_error_location)); + + return error_node(); + } + + default_statement = + (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) ? + parse_multi_sequence("switch-default"): + parse_expression(); + + if (0 == default_statement) + return error_node(); + else if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR094 - Expected ';' at end of default for switch statement", + exprtk_error_location)); + + return error_node(); + } + } + else if (token_is(token_t::e_rcrlbracket)) + break; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR095 - Expected '}' at end of switch statement", + exprtk_error_location)); + + return error_node(); + } + } + + const bool default_statement_present = (0 != default_statement); + + if (default_statement_present) + { + arg_list.push_back(default_statement); + } + else + { + arg_list.push_back(node_allocator_.allocate_c(std::numeric_limits::quiet_NaN())); + } + + result = expression_generator_.switch_statement(arg_list, (0 != default_statement)); + + svd.delete_ptr = (0 == result); + defstmt_delete.delete_ptr = (0 == result); + + return result; + } + + inline expression_node_ptr parse_multi_switch_statement() + { + std::vector arg_list; + + if (!details::imatch(current_token().value,"[*]")) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR096 - Expected token '[*]'", + exprtk_error_location)); + + return error_node(); + } + + scoped_vec_delete svd((*this),arg_list); + + next_token(); + + if (!token_is(token_t::e_lcrlbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR097 - Expected '{' for call to [*] statement", + exprtk_error_location)); + + return error_node(); + } + + for ( ; ; ) + { + if (!details::imatch("case",current_token().value)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR098 - Expected a 'case' statement for multi-switch", + exprtk_error_location)); + + return error_node(); + } + + next_token(); + + expression_node_ptr condition = parse_expression(); + + if (0 == condition) + return error_node(); + + if (!token_is(token_t::e_colon)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR099 - Expected ':' for case of [*] statement", + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr consequent = + (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) ? + parse_multi_sequence("multi-switch-consequent") : + parse_expression(); + + if (0 == consequent) + return error_node(); + + if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR100 - Expected ';' at end of case for [*] statement", + exprtk_error_location)); + + return error_node(); + } + + // Can we optimise away the case statement? + if (is_constant_node(condition) && is_false(condition)) + { + free_node(node_allocator_, condition ); + free_node(node_allocator_, consequent); + } + else + { + arg_list.push_back(condition ); + arg_list.push_back(consequent); + } + + if (token_is(token_t::e_rcrlbracket,prsrhlpr_t::e_hold)) + { + break; + } + } + + if (!token_is(token_t::e_rcrlbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR101 - Expected '}' at end of [*] statement", + exprtk_error_location)); + + return error_node(); + } + + const expression_node_ptr result = expression_generator_.multi_switch_statement(arg_list); + + svd.delete_ptr = (0 == result); + + return result; + } + + inline expression_node_ptr parse_vararg_function() + { + std::vector arg_list; + + details::operator_type opt_type = details::e_default; + const std::string symbol = current_token().value; + + if (details::imatch(symbol,"~")) + { + next_token(); + return parse_multi_sequence(); + } + else if (details::imatch(symbol,"[*]")) + { + return parse_multi_switch_statement(); + } + else if (details::imatch(symbol, "avg" )) opt_type = details::e_avg ; + else if (details::imatch(symbol, "mand")) opt_type = details::e_mand; + else if (details::imatch(symbol, "max" )) opt_type = details::e_max ; + else if (details::imatch(symbol, "min" )) opt_type = details::e_min ; + else if (details::imatch(symbol, "mor" )) opt_type = details::e_mor ; + else if (details::imatch(symbol, "mul" )) opt_type = details::e_prod; + else if (details::imatch(symbol, "sum" )) opt_type = details::e_sum ; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR102 - Unsupported built-in vararg function: " + symbol, + exprtk_error_location)); + + return error_node(); + } + + scoped_vec_delete sdd((*this),arg_list); + + lodge_symbol(symbol, e_st_function); + + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR103 - Expected '(' for call to vararg function: " + symbol, + exprtk_error_location)); + + return error_node(); + } + + if (token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR104 - vararg function: " + symbol + + " requires at least one input parameter", + exprtk_error_location)); + + return error_node(); + } + + for ( ; ; ) + { + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + else + arg_list.push_back(arg); + + if (token_is(token_t::e_rbracket)) + break; + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR105 - Expected ',' for call to vararg function: " + symbol, + exprtk_error_location)); + + return error_node(); + } + } + + const expression_node_ptr result = expression_generator_.vararg_function(opt_type,arg_list); + + sdd.delete_ptr = (0 == result); + return result; + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr parse_string_range_statement(expression_node_ptr& expression) + { + if (!token_is(token_t::e_lsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR106 - Expected '[' as start of string range definition", + exprtk_error_location)); + + free_node(node_allocator_,expression); + + return error_node(); + } + else if (token_is(token_t::e_rsqrbracket)) + { + return node_allocator_.allocate >(expression); + } + + range_t rp; + + if (!parse_range(rp,true)) + { + free_node(node_allocator_,expression); + + return error_node(); + } + + expression_node_ptr result = expression_generator_(expression,rp); + + if (0 == result) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR107 - Failed to generate string range node", + exprtk_error_location)); + + free_node(node_allocator_,expression); + rp.free(); + } + + rp.clear(); + + if (result && result->valid()) + { + return result; + } + + set_error(make_error( + parser_error::e_synthesis, + current_token(), + "ERR108 - Failed to synthesize node: string_range_node", + exprtk_error_location)); + + free_node(node_allocator_, result); + rp.free(); + return error_node(); + } + #else + inline expression_node_ptr parse_string_range_statement(expression_node_ptr&) + { + return error_node(); + } + #endif + + inline bool parse_pending_string_rangesize(expression_node_ptr& expression) + { + // Allow no more than 100 range calls, eg: s[][][]...[][] + const std::size_t max_rangesize_parses = 100; + + std::size_t i = 0; + + while + ( + (0 != expression) && + (i++ < max_rangesize_parses) && + error_list_.empty() && + is_generally_string_node(expression) && + token_is(token_t::e_lsqrbracket,prsrhlpr_t::e_hold) + ) + { + expression = parse_string_range_statement(expression); + } + + return (i > 1); + } + + inline void parse_pending_vector_index_operator(expression_node_ptr& expression) + { + if + ( + (0 != expression) && + error_list_.empty() && + is_ivector_node(expression) + ) + { + if ( + settings_.commutative_check_enabled() && + token_is(token_t::e_mul,prsrhlpr_t::e_hold) && + peek_token_is(token_t::e_lsqrbracket) + ) + { + token_is(token_t::e_mul); + token_is(token_t::e_lsqrbracket); + } + else if (token_is(token_t::e_lsqrbracket,prsrhlpr_t::e_hold)) + { + token_is(token_t::e_lsqrbracket); + } + else if ( + token_is(token_t::e_rbracket,prsrhlpr_t::e_hold) && + peek_token_is(token_t::e_lsqrbracket) + ) + { + token_is(token_t::e_rbracket ); + token_is(token_t::e_lsqrbracket); + } + else + return; + + details::vector_interface* vi = dynamic_cast*>(expression); + + if (vi) + { + details::vector_holder& vec = vi->vec()->vec_holder(); + const std::string vector_name = sem_.get_vector_name(vec.data()); + expression_node_ptr index = parse_vector_index(vector_name); + + if (index) + { + expression = synthesize_vector_element(vector_name, &vec, expression, index); + return; + } + } + + free_node(node_allocator_,expression); + expression = error_node(); + } + } + + template class Sequence> + inline expression_node_ptr simplify(Sequence& expression_list, + Sequence& side_effect_list, + const bool specialise_on_final_type = false) + { + if (expression_list.empty()) + return error_node(); + else if (1 == expression_list.size()) + return expression_list[0]; + + Sequence tmp_expression_list; + + bool return_node_present = false; + + for (std::size_t i = 0; i < (expression_list.size() - 1); ++i) + { + if (is_variable_node(expression_list[i])) + continue; + else if ( + is_return_node (expression_list[i]) || + is_break_node (expression_list[i]) || + is_continue_node(expression_list[i]) + ) + { + tmp_expression_list.push_back(expression_list[i]); + + // Remove all subexpressions after first short-circuit + // node has been encountered. + + for (std::size_t j = i + 1; j < expression_list.size(); ++j) + { + free_node(node_allocator_,expression_list[j]); + } + + return_node_present = true; + + break; + } + else if ( + is_constant_node(expression_list[i]) || + is_null_node (expression_list[i]) || + !side_effect_list[i] + ) + { + free_node(node_allocator_,expression_list[i]); + continue; + } + else + tmp_expression_list.push_back(expression_list[i]); + } + + if (!return_node_present) + { + tmp_expression_list.push_back(expression_list.back()); + } + + expression_list.swap(tmp_expression_list); + + if (tmp_expression_list.size() > expression_list.size()) + { + exprtk_debug(("simplify() - Reduced subexpressions from %d to %d\n", + static_cast(tmp_expression_list.size()), + static_cast(expression_list .size()))); + } + + if ( + return_node_present || + side_effect_list.back() || + (expression_list.size() > 1) + ) + state_.activate_side_effect("simplify()"); + + if (1 == expression_list.size()) + return expression_list[0]; + else if (specialise_on_final_type && is_generally_string_node(expression_list.back())) + return expression_generator_.vararg_function(details::e_smulti,expression_list); + else + return expression_generator_.vararg_function(details::e_multi,expression_list); + } + + inline expression_node_ptr parse_multi_sequence(const std::string& source = "", + const bool enforce_crlbrackets = false) + { + token_t::token_type open_bracket = token_t::e_lcrlbracket; + token_t::token_type close_bracket = token_t::e_rcrlbracket; + token_t::token_type separator = token_t::e_eof; + + if (!token_is(open_bracket)) + { + if (!enforce_crlbrackets && token_is(token_t::e_lbracket)) + { + open_bracket = token_t::e_lbracket; + close_bracket = token_t::e_rbracket; + separator = token_t::e_comma; + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR109 - Expected '" + token_t::to_str(open_bracket) + "' for call to multi-sequence" + + ((!source.empty()) ? std::string(" section of " + source): ""), + exprtk_error_location)); + + return error_node(); + } + } + else if (token_is(close_bracket)) + { + return node_allocator_.allocate >(); + } + + std::vector arg_list; + std::vector side_effect_list; + + expression_node_ptr result = error_node(); + + scoped_vec_delete sdd((*this),arg_list); + + scope_handler sh(*this); + + scoped_bool_or_restorer sbr(state_.side_effect_present); + + for ( ; ; ) + { + state_.side_effect_present = false; + + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + else + { + arg_list.push_back(arg); + side_effect_list.push_back(state_.side_effect_present); + } + + if (token_is(close_bracket)) + break; + + const bool is_next_close = peek_token_is(close_bracket); + + if (!token_is(separator) && is_next_close) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR110 - Expected '" + details::to_str(separator) + "' for call to multi-sequence section of " + source, + exprtk_error_location)); + + return error_node(); + } + + if (token_is(close_bracket)) + break; + } + + result = simplify(arg_list, side_effect_list, source.empty()); + + sdd.delete_ptr = (0 == result); + return result; + } + + inline bool parse_range(range_t& rp, const bool skip_lsqr = false) + { + // Examples of valid ranges: + // 1. [1:5] -> [1,5) + // 2. [ :5] -> [0,5) + // 3. [1: ] -> [1,end) + // 4. [x:y] -> [x,y) where x <= y + // 5. [x+1:y/2] -> [x+1,y/2) where x+1 <= y/2 + // 6. [ :y] -> [0,y) where 0 <= y + // 7. [x: ] -> [x,end) where x <= end + + rp.clear(); + + if (!skip_lsqr && !token_is(token_t::e_lsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR111 - Expected '[' for start of range", + exprtk_error_location)); + + return false; + } + + if (token_is(token_t::e_colon)) + { + rp.n0_c.first = true; + rp.n0_c.second = 0; + rp.cache.first = 0; + } + else + { + expression_node_ptr r0 = parse_expression(); + + if (0 == r0) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR112 - Failed parse begin section of range", + exprtk_error_location)); + + return false; + } + else if (is_constant_node(r0)) + { + const T r0_value = r0->value(); + + if (r0_value >= T(0)) + { + rp.n0_c.first = true; + rp.n0_c.second = static_cast(details::numeric::to_int64(r0_value)); + rp.cache.first = rp.n0_c.second; + } + + free_node(node_allocator_,r0); + + if (r0_value < T(0)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR113 - Range lower bound less than zero! Constraint: r0 >= 0", + exprtk_error_location)); + + return false; + } + } + else + { + rp.n0_e.first = true; + rp.n0_e.second = r0; + } + + if (!token_is(token_t::e_colon)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR114 - Expected ':' for break in range", + exprtk_error_location)); + + rp.free(); + + return false; + } + } + + if (token_is(token_t::e_rsqrbracket)) + { + rp.n1_c.first = true; + rp.n1_c.second = std::numeric_limits::max(); + } + else + { + expression_node_ptr r1 = parse_expression(); + + if (0 == r1) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR115 - Failed parse end section of range", + exprtk_error_location)); + + rp.free(); + + return false; + } + else if (is_constant_node(r1)) + { + const T r1_value = r1->value(); + + if (r1_value >= T(0)) + { + rp.n1_c.first = true; + rp.n1_c.second = static_cast(details::numeric::to_int64(r1_value)); + rp.cache.second = rp.n1_c.second; + } + + free_node(node_allocator_,r1); + + if (r1_value < T(0)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR116 - Range upper bound less than zero! Constraint: r1 >= 0", + exprtk_error_location)); + + rp.free(); + + return false; + } + } + else + { + rp.n1_e.first = true; + rp.n1_e.second = r1; + } + + if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR117 - Expected ']' for start of range", + exprtk_error_location)); + + rp.free(); + + return false; + } + } + + if (rp.const_range()) + { + std::size_t r0 = 0; + std::size_t r1 = 0; + + bool rp_result = false; + + try + { + rp_result = rp(r0, r1); + } + catch (std::runtime_error&) + {} + + if (!rp_result || (r0 > r1)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR118 - Invalid range, Constraint: r0 <= r1", + exprtk_error_location)); + + return false; + } + } + + return true; + } + + inline void lodge_symbol(const std::string& symbol, + const symbol_type st) + { + dec_.add_symbol(symbol,st); + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr parse_string() + { + const std::string symbol = current_token().value; + + typedef details::stringvar_node* strvar_node_t; + + expression_node_ptr result = error_node(); + strvar_node_t const_str_node = static_cast(0); + + scope_element& se = sem_.get_active_element(symbol); + + if (scope_element::e_string == se.type) + { + se.active = true; + result = se.str_node; + lodge_symbol(symbol, e_st_local_string); + } + else + { + typedef typename symtab_store::string_context str_ctxt_t; + str_ctxt_t str_ctx = symtab_store_.get_string_context(symbol); + + if ((0 == str_ctx.str_var) || !symtab_store_.is_conststr_stringvar(symbol)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR119 - Unknown string symbol", + exprtk_error_location)); + + return error_node(); + } + + assert(str_ctx.str_var != 0); + assert(str_ctx.symbol_table != 0); + + result = str_ctx.str_var; + + if (symtab_store_.is_constant_string(symbol)) + { + const_str_node = static_cast(result); + result = expression_generator_(const_str_node->str()); + } + else if (symbol_table_t::e_immutable == str_ctx.symbol_table->mutability()) + { + lodge_immutable_symbol( + current_token(), + make_memory_range(str_ctx.str_var->base(), str_ctx.str_var->size())); + } + + lodge_symbol(symbol, e_st_string); + } + + if (peek_token_is(token_t::e_lsqrbracket)) + { + next_token(); + + if (peek_token_is(token_t::e_rsqrbracket)) + { + next_token(); + next_token(); + + if (const_str_node) + { + free_node(node_allocator_,result); + + return expression_generator_(T(const_str_node->size())); + } + else + return node_allocator_.allocate > + (static_cast*>(result)->ref()); + } + + range_t rp; + + if (!parse_range(rp)) + { + free_node(node_allocator_,result); + + return error_node(); + } + else if (const_str_node) + { + free_node(node_allocator_,result); + result = expression_generator_(const_str_node->ref(),rp); + } + else + result = expression_generator_(static_cast*> + (result)->ref(), rp); + + if (result) + rp.clear(); + } + else + next_token(); + + return result; + } + #else + inline expression_node_ptr parse_string() + { + return error_node(); + } + #endif + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr parse_const_string() + { + const std::string const_str = current_token().value; + expression_node_ptr result = expression_generator_(const_str); + + if (peek_token_is(token_t::e_lsqrbracket)) + { + next_token(); + + if (peek_token_is(token_t::e_rsqrbracket)) + { + next_token(); + next_token(); + + free_node(node_allocator_,result); + + return expression_generator_(T(const_str.size())); + } + + range_t rp; + + if (!parse_range(rp)) + { + free_node(node_allocator_,result); + rp.free(); + + return error_node(); + } + + free_node(node_allocator_,result); + + if (rp.n1_c.first && (rp.n1_c.second == std::numeric_limits::max())) + { + rp.n1_c.second = const_str.size() - 1; + rp.cache.second = rp.n1_c.second; + } + + if ( + (rp.n0_c.first && (rp.n0_c.second >= const_str.size())) || + (rp.n1_c.first && (rp.n1_c.second >= const_str.size())) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR120 - Overflow in range for string: '" + const_str + "'[" + + (rp.n0_c.first ? details::to_str(static_cast(rp.n0_c.second)) : "?") + ":" + + (rp.n1_c.first ? details::to_str(static_cast(rp.n1_c.second)) : "?") + "]", + exprtk_error_location)); + + rp.free(); + + return error_node(); + } + + result = expression_generator_(const_str,rp); + + if (result) + rp.clear(); + } + else + next_token(); + + return result; + } + #else + inline expression_node_ptr parse_const_string() + { + return error_node(); + } + #endif + + inline expression_node_ptr parse_vector_index(const std::string& vector_name = "") + { + expression_node_ptr index_expr = error_node(); + + if (0 == (index_expr = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR121 - Failed to parse index for vector: '" + vector_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR122 - Expected ']' for index of vector: '" + vector_name + "'", + exprtk_error_location)); + + free_node(node_allocator_,index_expr); + + return error_node(); + } + + return index_expr; + } + + inline expression_node_ptr parse_vector() + { + const std::string vector_name = current_token().value; + + vector_holder_ptr vec = vector_holder_ptr(0); + + const scope_element& se = sem_.get_active_element(vector_name); + + if ( + !details::imatch(se.name, vector_name) || + (se.depth > state_.scope_depth) || + (scope_element::e_vector != se.type) + ) + { + typedef typename symtab_store::vector_context vec_ctxt_t; + vec_ctxt_t vec_ctx = symtab_store_.get_vector_context(vector_name); + + if (0 == vec_ctx.vector_holder) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR123 - Symbol '" + vector_name + " not a vector", + exprtk_error_location)); + + return error_node(); + } + + assert(0 != vec_ctx.vector_holder); + assert(0 != vec_ctx.symbol_table ); + + vec = vec_ctx.vector_holder; + + if (symbol_table_t::e_immutable == vec_ctx.symbol_table->mutability()) + { + lodge_immutable_symbol( + current_token(), + make_memory_range(vec->data(), vec->size())); + } + } + else + { + vec = se.vec_node; + } + + assert(0 != vec); + + next_token(); + + if (!token_is(token_t::e_lsqrbracket)) + { + return node_allocator_.allocate(vec); + } + else if (token_is(token_t::e_rsqrbracket)) + { + return (vec->rebaseable()) ? + node_allocator_.allocate(vec) : + expression_generator_(T(vec->size())); + } + + expression_node_ptr index_expr = parse_vector_index(vector_name); + + if (index_expr) + { + expression_node_ptr vec_node = node_allocator_.allocate(vec); + + return synthesize_vector_element(vector_name, vec, vec_node, index_expr); + } + + return error_node(); + } + + inline expression_node_ptr synthesize_vector_element(const std::string& vector_name, + vector_holder_ptr vec, + expression_node_ptr vec_node, + expression_node_ptr index_expr) + { + // Perform compile-time range check + if (details::is_constant_node(index_expr)) + { + const std::size_t index = static_cast(details::numeric::to_int32(index_expr->value())); + const std::size_t vec_size = vec->size(); + + if (index >= vec_size) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR124 - Index of " + details::to_str(index) + " out of range for " + "vector '" + vector_name + "' of size " + details::to_str(vec_size), + exprtk_error_location)); + + free_node(node_allocator_, vec_node ); + free_node(node_allocator_, index_expr); + + return error_node(); + } + } + + return expression_generator_.vector_element(vector_name, vec, vec_node, index_expr); + } + + inline expression_node_ptr parse_vararg_function_call(ivararg_function* vararg_function, const std::string& vararg_function_name) + { + std::vector arg_list; + + expression_node_ptr result = error_node(); + + scoped_vec_delete sdd((*this),arg_list); + + next_token(); + + if (token_is(token_t::e_lbracket)) + { + if (token_is(token_t::e_rbracket)) + { + if (!vararg_function->allow_zero_parameters()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR125 - Zero parameter call to vararg function: " + + vararg_function_name + " not allowed", + exprtk_error_location)); + + return error_node(); + } + } + else + { + for ( ; ; ) + { + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + else + arg_list.push_back(arg); + + if (token_is(token_t::e_rbracket)) + break; + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR126 - Expected ',' for call to vararg function: " + + vararg_function_name, + exprtk_error_location)); + + return error_node(); + } + } + } + } + else if (!vararg_function->allow_zero_parameters()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR127 - Zero parameter call to vararg function: " + + vararg_function_name + " not allowed", + exprtk_error_location)); + + return error_node(); + } + + if (arg_list.size() < vararg_function->min_num_args()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR128 - Invalid number of parameters to call to vararg function: " + + vararg_function_name + ", require at least " + + details::to_str(static_cast(vararg_function->min_num_args())) + " parameters", + exprtk_error_location)); + + return error_node(); + } + else if (arg_list.size() > vararg_function->max_num_args()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR129 - Invalid number of parameters to call to vararg function: " + + vararg_function_name + ", require no more than " + + details::to_str(static_cast(vararg_function->max_num_args())) + " parameters", + exprtk_error_location)); + + return error_node(); + } + + result = expression_generator_.vararg_function_call(vararg_function,arg_list); + + sdd.delete_ptr = (0 == result); + + return result; + } + + class type_checker + { + public: + + enum return_type_t + { + e_overload = ' ', + e_numeric = 'T', + e_string = 'S' + }; + + struct function_prototype_t + { + return_type_t return_type; + std::string param_seq; + }; + + typedef parser parser_t; + typedef std::vector function_definition_list_t; + + type_checker(parser_t& p, + const std::string& func_name, + const std::string& func_prototypes, + const return_type_t default_return_type) + : invalid_state_(true) + , parser_(p) + , function_name_(func_name) + , default_return_type_(default_return_type) + { + parse_function_prototypes(func_prototypes); + } + + bool verify(const std::string& param_seq, std::size_t& pseq_index) + { + if (function_definition_list_.empty()) + return true; + + std::vector > error_list; + + for (std::size_t i = 0; i < function_definition_list_.size(); ++i) + { + details::char_t diff_value = 0; + std::size_t diff_index = 0; + + const bool result = details::sequence_match(function_definition_list_[i].param_seq, + param_seq, + diff_index, diff_value); + + if (result) + { + pseq_index = i; + return true; + } + else + error_list.push_back(std::make_pair(diff_index, diff_value)); + } + + if (1 == error_list.size()) + { + parser_.set_error(make_error( + parser_error::e_syntax, + parser_.current_token(), + "ERR130 - Failed parameter type check for function '" + function_name_ + "', " + "Expected '" + function_definition_list_[0].param_seq + + "' call set: '" + param_seq + "'", + exprtk_error_location)); + } + else + { + // find first with largest diff_index; + std::size_t max_diff_index = 0; + + for (std::size_t i = 1; i < error_list.size(); ++i) + { + if (error_list[i].first > error_list[max_diff_index].first) + { + max_diff_index = i; + } + } + + parser_.set_error(make_error( + parser_error::e_syntax, + parser_.current_token(), + "ERR131 - Failed parameter type check for function '" + function_name_ + "', " + "Best match: '" + function_definition_list_[max_diff_index].param_seq + + "' call set: '" + param_seq + "'", + exprtk_error_location)); + } + + return false; + } + + std::size_t paramseq_count() const + { + return function_definition_list_.size(); + } + + std::string paramseq(const std::size_t& index) const + { + return function_definition_list_[index].param_seq; + } + + return_type_t return_type(const std::size_t& index) const + { + return function_definition_list_[index].return_type; + } + + bool invalid() const + { + return !invalid_state_; + } + + bool allow_zero_parameters() const + { + + for (std::size_t i = 0; i < function_definition_list_.size(); ++i) + { + if (std::string::npos != function_definition_list_[i].param_seq.find("Z")) + { + return true; + } + } + + return false; + } + + private: + + std::vector split_param_seq(const std::string& param_seq, const details::char_t delimiter = '|') const + { + std::string::const_iterator current_begin = param_seq.begin(); + std::string::const_iterator iter = param_seq.begin(); + + std::vector result; + + while (iter != param_seq.end()) + { + if (*iter == delimiter) + { + result.push_back(std::string(current_begin, iter)); + current_begin = ++iter; + } + else + ++iter; + } + + if (current_begin != iter) + { + result.push_back(std::string(current_begin, iter)); + } + + return result; + } + + inline bool is_valid_token(std::string param_seq, + function_prototype_t& funcproto) const + { + // Determine return type + funcproto.return_type = default_return_type_; + + if (param_seq.size() > 2) + { + if (':' == param_seq[1]) + { + // Note: Only overloaded igeneric functions can have return + // type definitions. + if (type_checker::e_overload != default_return_type_) + return false; + + switch (param_seq[0]) + { + case 'T' : funcproto.return_type = type_checker::e_numeric; + break; + + case 'S' : funcproto.return_type = type_checker::e_string; + break; + + default : return false; + } + + param_seq.erase(0,2); + } + } + + if ( + (std::string::npos != param_seq.find("?*")) || + (std::string::npos != param_seq.find("**")) + ) + { + return false; + } + else if ( + (std::string::npos == param_seq.find_first_not_of("STV*?|")) || + ("Z" == param_seq) + ) + { + funcproto.param_seq = param_seq; + return true; + } + + return false; + } + + void parse_function_prototypes(const std::string& func_prototypes) + { + if (func_prototypes.empty()) + return; + + std::vector param_seq_list = split_param_seq(func_prototypes); + + typedef std::map param_seq_map_t; + param_seq_map_t param_seq_map; + + for (std::size_t i = 0; i < param_seq_list.size(); ++i) + { + function_prototype_t func_proto; + + if (!is_valid_token(param_seq_list[i], func_proto)) + { + invalid_state_ = false; + + parser_.set_error(make_error( + parser_error::e_syntax, + parser_.current_token(), + "ERR132 - Invalid parameter sequence of '" + param_seq_list[i] + + "' for function: " + function_name_, + exprtk_error_location)); + return; + } + + param_seq_map_t::const_iterator seq_itr = param_seq_map.find(param_seq_list[i]); + + if (param_seq_map.end() != seq_itr) + { + invalid_state_ = false; + + parser_.set_error(make_error( + parser_error::e_syntax, + parser_.current_token(), + "ERR133 - Function '" + function_name_ + "' has a parameter sequence conflict between " + + "pseq_idx[" + details::to_str(seq_itr->second) + "] and" + + "pseq_idx[" + details::to_str(i) + "] " + + "param seq: " + param_seq_list[i], + exprtk_error_location)); + return; + } + + function_definition_list_.push_back(func_proto); + } + } + + type_checker(const type_checker&) exprtk_delete; + type_checker& operator=(const type_checker&) exprtk_delete; + + bool invalid_state_; + parser_t& parser_; + std::string function_name_; + const return_type_t default_return_type_; + function_definition_list_t function_definition_list_; + }; + + inline expression_node_ptr parse_generic_function_call(igeneric_function* function, const std::string& function_name) + { + std::vector arg_list; + + scoped_vec_delete sdd((*this),arg_list); + + next_token(); + + std::string param_type_list; + + type_checker tc( + (*this), + function_name, + function->parameter_sequence, + type_checker::e_string); + + if (tc.invalid()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR134 - Type checker instantiation failure for generic function: " + function_name, + exprtk_error_location)); + + return error_node(); + } + + if (token_is(token_t::e_lbracket)) + { + if (token_is(token_t::e_rbracket)) + { + if ( + !function->allow_zero_parameters() && + !tc .allow_zero_parameters() + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR135 - Zero parameter call to generic function: " + + function_name + " not allowed", + exprtk_error_location)); + + return error_node(); + } + } + else + { + for ( ; ; ) + { + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + + if (is_ivector_node(arg)) + param_type_list += 'V'; + else if (is_generally_string_node(arg)) + param_type_list += 'S'; + else // Everything else is assumed to be a scalar returning expression + param_type_list += 'T'; + + arg_list.push_back(arg); + + if (token_is(token_t::e_rbracket)) + break; + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR136 - Expected ',' for call to generic function: " + function_name, + exprtk_error_location)); + + return error_node(); + } + } + } + } + else if ( + !function->parameter_sequence.empty() && + function->allow_zero_parameters () && + !tc .allow_zero_parameters () + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR137 - Zero parameter call to generic function: " + + function_name + " not allowed", + exprtk_error_location)); + + return error_node(); + } + + std::size_t param_seq_index = 0; + + if ( + state_.type_check_enabled && + !tc.verify(param_type_list, param_seq_index) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR138 - Invalid input parameter sequence for call to generic function: " + function_name, + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr result = error_node(); + + result = (tc.paramseq_count() <= 1) ? + expression_generator_ + .generic_function_call(function, arg_list) : + expression_generator_ + .generic_function_call(function, arg_list, param_seq_index); + + sdd.delete_ptr = (0 == result); + + return result; + } + + inline bool parse_igeneric_function_params(std::string& param_type_list, + std::vector& arg_list, + const std::string& function_name, + igeneric_function* function, + const type_checker& tc) + { + if (token_is(token_t::e_lbracket)) + { + if (token_is(token_t::e_rbracket)) + { + if ( + !function->allow_zero_parameters() && + !tc .allow_zero_parameters() + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR139 - Zero parameter call to generic function: " + + function_name + " not allowed", + exprtk_error_location)); + + return false; + } + } + else + { + for ( ; ; ) + { + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return false; + + if (is_ivector_node(arg)) + param_type_list += 'V'; + else if (is_generally_string_node(arg)) + param_type_list += 'S'; + else // Everything else is a scalar returning expression + param_type_list += 'T'; + + arg_list.push_back(arg); + + if (token_is(token_t::e_rbracket)) + break; + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR140 - Expected ',' for call to string function: " + function_name, + exprtk_error_location)); + + return false; + } + } + } + + return true; + } + else + return false; + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr parse_string_function_call(igeneric_function* function, const std::string& function_name) + { + // Move pass the function name + next_token(); + + std::string param_type_list; + + type_checker tc((*this), function_name, function->parameter_sequence, type_checker::e_string); + + if ( + (!function->parameter_sequence.empty()) && + (0 == tc.paramseq_count()) + ) + { + return error_node(); + } + + std::vector arg_list; + scoped_vec_delete sdd((*this),arg_list); + + if (!parse_igeneric_function_params(param_type_list, arg_list, function_name, function, tc)) + { + return error_node(); + } + + std::size_t param_seq_index = 0; + + if (!tc.verify(param_type_list, param_seq_index)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR141 - Invalid input parameter sequence for call to string function: " + function_name, + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr result = error_node(); + + result = (tc.paramseq_count() <= 1) ? + expression_generator_ + .string_function_call(function, arg_list) : + expression_generator_ + .string_function_call(function, arg_list, param_seq_index); + + sdd.delete_ptr = (0 == result); + + return result; + } + + inline expression_node_ptr parse_overload_function_call(igeneric_function* function, const std::string& function_name) + { + // Move pass the function name + next_token(); + + std::string param_type_list; + + type_checker tc((*this), function_name, function->parameter_sequence, type_checker::e_overload); + + if ( + (!function->parameter_sequence.empty()) && + (0 == tc.paramseq_count()) + ) + { + return error_node(); + } + + std::vector arg_list; + scoped_vec_delete sdd((*this),arg_list); + + if (!parse_igeneric_function_params(param_type_list, arg_list, function_name, function, tc)) + { + return error_node(); + } + + std::size_t param_seq_index = 0; + + if (!tc.verify(param_type_list, param_seq_index)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR142 - Invalid input parameter sequence for call to overloaded function: " + function_name, + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr result = error_node(); + + if (type_checker::e_numeric == tc.return_type(param_seq_index)) + { + if (tc.paramseq_count() <= 1) + result = expression_generator_ + .generic_function_call(function, arg_list); + else + result = expression_generator_ + .generic_function_call(function, arg_list, param_seq_index); + } + else if (type_checker::e_string == tc.return_type(param_seq_index)) + { + if (tc.paramseq_count() <= 1) + result = expression_generator_ + .string_function_call(function, arg_list); + else + result = expression_generator_ + .string_function_call(function, arg_list, param_seq_index); + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR143 - Invalid return type for call to overloaded function: " + function_name, + exprtk_error_location)); + } + + sdd.delete_ptr = (0 == result); + return result; + } + #endif + + template + struct parse_special_function_impl + { + static inline expression_node_ptr process(parser& p, const details::operator_type opt_type, const std::string& sf_name) + { + expression_node_ptr branch[NumberOfParameters]; + expression_node_ptr result = error_node(); + + std::fill_n(branch, NumberOfParameters, reinterpret_cast(0)); + + scoped_delete sd(p,branch); + + p.next_token(); + + if (!p.token_is(token_t::e_lbracket)) + { + p.set_error(make_error( + parser_error::e_syntax, + p.current_token(), + "ERR144 - Expected '(' for special function '" + sf_name + "'", + exprtk_error_location)); + + return error_node(); + } + + for (std::size_t i = 0; i < NumberOfParameters; ++i) + { + branch[i] = p.parse_expression(); + + if (0 == branch[i]) + { + return p.error_node(); + } + else if (i < (NumberOfParameters - 1)) + { + if (!p.token_is(token_t::e_comma)) + { + p.set_error(make_error( + parser_error::e_syntax, + p.current_token(), + "ERR145 - Expected ',' before next parameter of special function '" + sf_name + "'", + exprtk_error_location)); + + return p.error_node(); + } + } + } + + if (!p.token_is(token_t::e_rbracket)) + { + p.set_error(make_error( + parser_error::e_syntax, + p.current_token(), + "ERR146 - Invalid number of parameters for special function '" + sf_name + "'", + exprtk_error_location)); + + return p.error_node(); + } + else + result = p.expression_generator_.special_function(opt_type,branch); + + sd.delete_ptr = (0 == result); + + return result; + } + }; + + inline expression_node_ptr parse_special_function() + { + const std::string sf_name = current_token().value; + + // Expect: $fDD(expr0,expr1,expr2) or $fDD(expr0,expr1,expr2,expr3) + if ( + !details::is_digit(sf_name[2]) || + !details::is_digit(sf_name[3]) + ) + { + set_error(make_error( + parser_error::e_token, + current_token(), + "ERR147 - Invalid special function[1]: " + sf_name, + exprtk_error_location)); + + return error_node(); + } + + const int id = (sf_name[2] - '0') * 10 + + (sf_name[3] - '0'); + + if (id >= details::e_sffinal) + { + set_error(make_error( + parser_error::e_token, + current_token(), + "ERR148 - Invalid special function[2]: " + sf_name, + exprtk_error_location)); + + return error_node(); + } + + const int sf_3_to_4 = details::e_sf48; + const details::operator_type opt_type = details::operator_type(id + 1000); + const std::size_t NumberOfParameters = (id < (sf_3_to_4 - 1000)) ? 3U : 4U; + + switch (NumberOfParameters) + { + case 3 : return parse_special_function_impl::process((*this), opt_type, sf_name); + case 4 : return parse_special_function_impl::process((*this), opt_type, sf_name); + default : return error_node(); + } + } + + inline expression_node_ptr parse_null_statement() + { + next_token(); + return node_allocator_.allocate >(); + } + + #ifndef exprtk_disable_break_continue + inline expression_node_ptr parse_break_statement() + { + if (state_.parsing_break_stmt) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR149 - Invoking 'break' within a break call is not allowed", + exprtk_error_location)); + + return error_node(); + } + else if (0 == state_.parsing_loop_stmt_count) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR150 - Invalid use of 'break', allowed only in the scope of a loop", + exprtk_error_location)); + + return error_node(); + } + + scoped_bool_negator sbn(state_.parsing_break_stmt); + + if (!brkcnt_list_.empty()) + { + next_token(); + + brkcnt_list_.front() = true; + + expression_node_ptr return_expr = error_node(); + + if (token_is(token_t::e_lsqrbracket)) + { + if (0 == (return_expr = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR151 - Failed to parse return expression for 'break' statement", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR152 - Expected ']' at the completion of break's return expression", + exprtk_error_location)); + + free_node(node_allocator_,return_expr); + + return error_node(); + } + } + + state_.activate_side_effect("parse_break_statement()"); + + return node_allocator_.allocate >(return_expr); + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR153 - Invalid use of 'break', allowed only in the scope of a loop", + exprtk_error_location)); + } + + return error_node(); + } + + inline expression_node_ptr parse_continue_statement() + { + if (0 == state_.parsing_loop_stmt_count) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR154 - Invalid use of 'continue', allowed only in the scope of a loop", + exprtk_error_location)); + + return error_node(); + } + else + { + next_token(); + + brkcnt_list_.front() = true; + state_.activate_side_effect("parse_continue_statement()"); + + return node_allocator_.allocate >(); + } + } + #endif + + inline expression_node_ptr parse_define_vector_statement(const std::string& vec_name) + { + expression_node_ptr size_expression_node = error_node(); + + if (!token_is(token_t::e_lsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR155 - Expected '[' as part of vector size definition", + exprtk_error_location)); + + return error_node(); + } + else if (0 == (size_expression_node = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR156 - Failed to determine size of vector '" + vec_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (!is_constant_node(size_expression_node)) + { + const bool is_rebaseble_vector = + (size_expression_node->type() == details::expression_node::e_vecsize) && + static_cast*>(size_expression_node)->vec_holder()->rebaseable(); + + free_node(node_allocator_,size_expression_node); + + const std::string error_msg = (is_rebaseble_vector) ? + std::string("Rebasable/Resizable vector cannot be used to define the size of vector") : + std::string("Expected a constant literal number as size of vector"); + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR157 - " + error_msg + " '" + vec_name + "'", + exprtk_error_location)); + + return error_node(); + } + + const T vector_size = size_expression_node->value(); + + free_node(node_allocator_,size_expression_node); + + const std::size_t max_vector_size = settings_.max_local_vector_size(); + + if ( + (vector_size <= T(0)) || + std::not_equal_to() + (T(0),vector_size - details::numeric::trunc(vector_size)) || + (static_cast(vector_size) > max_vector_size) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR158 - Invalid vector size. Must be an integer in the " + "range [0," + details::to_str(static_cast(max_vector_size)) + "], size: " + + details::to_str(details::numeric::to_int32(vector_size)), + exprtk_error_location)); + + return error_node(); + } + + std::vector vec_initilizer_list; + + scoped_vec_delete svd((*this),vec_initilizer_list); + + bool single_value_initialiser = false; + bool vec_to_vec_initialiser = false; + bool null_initialisation = false; + + if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR159 - Expected ']' as part of vector size definition", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_eof)) + { + if (!token_is(token_t::e_assign)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR160 - Expected ':=' as part of vector definition", + exprtk_error_location)); + + return error_node(); + } + else if (token_is(token_t::e_lsqrbracket)) + { + expression_node_ptr initialiser = parse_expression(); + + if (0 == initialiser) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR161 - Failed to parse single vector initialiser", + exprtk_error_location)); + + return error_node(); + } + + vec_initilizer_list.push_back(initialiser); + + if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR162 - Expected ']' to close single value vector initialiser", + exprtk_error_location)); + + return error_node(); + } + + single_value_initialiser = true; + } + else if (!token_is(token_t::e_lcrlbracket)) + { + expression_node_ptr initialiser = error_node(); + + // Is this a vector to vector assignment and initialisation? + if (token_t::e_symbol == current_token().type) + { + // Is it a locally defined vector? + const scope_element& se = sem_.get_active_element(current_token().value); + + if (scope_element::e_vector == se.type) + { + if (0 != (initialiser = parse_expression())) + vec_initilizer_list.push_back(initialiser); + else + return error_node(); + } + // Are we dealing with a user defined vector? + else if (symtab_store_.is_vector(current_token().value)) + { + lodge_symbol(current_token().value, e_st_vector); + + if (0 != (initialiser = parse_expression())) + vec_initilizer_list.push_back(initialiser); + else + return error_node(); + } + // Are we dealing with a null initialisation vector definition? + else if (token_is(token_t::e_symbol,"null")) + null_initialisation = true; + } + + if (!null_initialisation) + { + if (0 == initialiser) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR163 - Expected '{' as part of vector initialiser list", + exprtk_error_location)); + + return error_node(); + } + else + vec_to_vec_initialiser = true; + } + } + else if (!token_is(token_t::e_rcrlbracket)) + { + for ( ; ; ) + { + expression_node_ptr initialiser = parse_expression(); + + if (0 == initialiser) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR164 - Expected '{' as part of vector initialiser list", + exprtk_error_location)); + + return error_node(); + } + else + vec_initilizer_list.push_back(initialiser); + + if (token_is(token_t::e_rcrlbracket)) + break; + + const bool is_next_close = peek_token_is(token_t::e_rcrlbracket); + + if (!token_is(token_t::e_comma) && is_next_close) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR165 - Expected ',' between vector initialisers", + exprtk_error_location)); + + return error_node(); + } + + if (token_is(token_t::e_rcrlbracket)) + break; + } + } + + if ( + !token_is(token_t::e_rbracket , prsrhlpr_t::e_hold) && + !token_is(token_t::e_rcrlbracket, prsrhlpr_t::e_hold) && + !token_is(token_t::e_rsqrbracket, prsrhlpr_t::e_hold) + ) + { + if (!token_is(token_t::e_eof)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR166 - Expected ';' at end of vector definition", + exprtk_error_location)); + + return error_node(); + } + } + + if (T(vec_initilizer_list.size()) > vector_size) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR167 - Initialiser list larger than the number of elements in the vector: '" + vec_name + "'", + exprtk_error_location)); + + return error_node(); + } + } + + typename symbol_table_t::vector_holder_ptr vec_holder = typename symbol_table_t::vector_holder_ptr(0); + + const std::size_t vec_size = static_cast(details::numeric::to_int32(vector_size)); + + scope_element& se = sem_.get_element(vec_name); + + if (se.name == vec_name) + { + if (se.active) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR168 - Illegal redefinition of local vector: '" + vec_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if ( + (se.size == vec_size) && + (scope_element::e_vector == se.type) + ) + { + vec_holder = se.vec_node; + se.active = true; + se.depth = state_.scope_depth; + se.ref_count++; + } + } + + if (0 == vec_holder) + { + scope_element nse; + nse.name = vec_name; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_vector; + nse.depth = state_.scope_depth; + nse.size = vec_size; + nse.data = new T[vec_size]; + nse.vec_node = new typename scope_element::vector_holder_t(reinterpret_cast(nse.data),nse.size); + + std::memset(nse.data, 0x00, vec_size * sizeof(T)); + + if (!sem_.add_element(nse)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR169 - Failed to add new local vector '" + vec_name + "' to SEM", + exprtk_error_location)); + + sem_.free_element(nse); + + return error_node(); + } + + vec_holder = nse.vec_node; + + exprtk_debug(("parse_define_vector_statement() - INFO - Added new local vector: %s[%d]\n", + nse.name.c_str(), + static_cast(nse.size))); + } + + state_.activate_side_effect("parse_define_vector_statement()"); + + lodge_symbol(vec_name, e_st_local_vector); + + expression_node_ptr result = error_node(); + + if (!single_value_initialiser && vec_initilizer_list.empty()) + { + single_value_initialiser = true; + assert(vec_initilizer_list.size() <= 1); + } + + if (null_initialisation) + result = expression_generator_(T(0.0)); + else if (vec_to_vec_initialiser) + { + expression_node_ptr vec_node = node_allocator_.allocate(vec_holder); + + result = expression_generator_( + details::e_assign, + vec_node, + vec_initilizer_list[0]); + } + else + result = node_allocator_ + .allocate >( + (*vec_holder)[0], + vec_size, + vec_initilizer_list, + single_value_initialiser); + + svd.delete_ptr = (0 == result); + + return result; + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr parse_define_string_statement(const std::string& str_name, expression_node_ptr initialisation_expression) + { + stringvar_node_t* str_node = reinterpret_cast(0); + + scope_element& se = sem_.get_element(str_name); + + if (se.name == str_name) + { + if (se.active) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR170 - Illegal redefinition of local variable: '" + str_name + "'", + exprtk_error_location)); + + free_node(node_allocator_,initialisation_expression); + + return error_node(); + } + else if (scope_element::e_string == se.type) + { + str_node = se.str_node; + se.active = true; + se.depth = state_.scope_depth; + se.ref_count++; + } + } + + if (0 == str_node) + { + scope_element nse; + nse.name = str_name; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_string; + nse.depth = state_.scope_depth; + nse.data = new std::string; + nse.str_node = new stringvar_node_t(*reinterpret_cast(nse.data)); + + if (!sem_.add_element(nse)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR171 - Failed to add new local string variable '" + str_name + "' to SEM", + exprtk_error_location)); + + free_node(node_allocator_,initialisation_expression); + + sem_.free_element(nse); + + return error_node(); + } + + str_node = nse.str_node; + + exprtk_debug(("parse_define_string_statement() - INFO - Added new local string variable: %s\n", nse.name.c_str())); + } + + lodge_symbol(str_name, e_st_local_string); + + state_.activate_side_effect("parse_define_string_statement()"); + + expression_node_ptr branch[2] = {0}; + + branch[0] = str_node; + branch[1] = initialisation_expression; + + return expression_generator_(details::e_assign,branch); + } + #else + inline expression_node_ptr parse_define_string_statement(const std::string&, expression_node_ptr) + { + return error_node(); + } + #endif + + inline bool local_variable_is_shadowed(const std::string& symbol) + { + const scope_element& se = sem_.get_element(symbol); + return (se.name == symbol) && se.active; + } + + inline expression_node_ptr parse_define_var_statement() + { + if (settings_.vardef_disabled()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR172 - Illegal variable definition", + exprtk_error_location)); + + return error_node(); + } + else if (!details::imatch(current_token().value,"var")) + { + return error_node(); + } + else + next_token(); + + const std::string var_name = current_token().value; + + expression_node_ptr initialisation_expression = error_node(); + + if (!token_is(token_t::e_symbol)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR173 - Expected a symbol for variable definition", + exprtk_error_location)); + + return error_node(); + } + else if (details::is_reserved_symbol(var_name)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR174 - Illegal redefinition of reserved keyword: '" + var_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (symtab_store_.symbol_exists(var_name)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR175 - Illegal redefinition of variable '" + var_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (local_variable_is_shadowed(var_name)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR176 - Illegal redefinition of local variable: '" + var_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (token_is(token_t::e_lsqrbracket,prsrhlpr_t::e_hold)) + { + return parse_define_vector_statement(var_name); + } + else if (token_is(token_t::e_lcrlbracket,prsrhlpr_t::e_hold)) + { + return parse_uninitialised_var_statement(var_name); + } + else if (token_is(token_t::e_assign)) + { + if (0 == (initialisation_expression = parse_expression())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR177 - Failed to parse initialisation expression", + exprtk_error_location)); + + return error_node(); + } + } + + if ( + !token_is(token_t::e_rbracket , prsrhlpr_t::e_hold) && + !token_is(token_t::e_rcrlbracket, prsrhlpr_t::e_hold) && + !token_is(token_t::e_rsqrbracket, prsrhlpr_t::e_hold) + ) + { + if (!token_is(token_t::e_eof,prsrhlpr_t::e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR178 - Expected ';' after variable definition", + exprtk_error_location)); + + free_node(node_allocator_,initialisation_expression); + + return error_node(); + } + } + + if ( + (0 != initialisation_expression) && + details::is_generally_string_node(initialisation_expression) + ) + { + return parse_define_string_statement(var_name,initialisation_expression); + } + + expression_node_ptr var_node = reinterpret_cast(0); + + scope_element& se = sem_.get_element(var_name); + + if (se.name == var_name) + { + if (se.active) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR179 - Illegal redefinition of local variable: '" + var_name + "'", + exprtk_error_location)); + + free_node(node_allocator_, initialisation_expression); + + return error_node(); + } + else if (scope_element::e_variable == se.type) + { + var_node = se.var_node; + se.active = true; + se.depth = state_.scope_depth; + se.ref_count++; + } + } + + if (0 == var_node) + { + scope_element nse; + nse.name = var_name; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_variable; + nse.depth = state_.scope_depth; + nse.data = new T(T(0)); + nse.var_node = node_allocator_.allocate(*reinterpret_cast(nse.data)); + + if (!sem_.add_element(nse)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR180 - Failed to add new local variable '" + var_name + "' to SEM", + exprtk_error_location)); + + free_node(node_allocator_, initialisation_expression); + + sem_.free_element(nse); + + return error_node(); + } + + var_node = nse.var_node; + + exprtk_debug(("parse_define_var_statement() - INFO - Added new local variable: %s\n", nse.name.c_str())); + } + + state_.activate_side_effect("parse_define_var_statement()"); + + lodge_symbol(var_name, e_st_local_variable); + + expression_node_ptr branch[2] = {0}; + + branch[0] = var_node; + branch[1] = initialisation_expression ? initialisation_expression : expression_generator_(T(0)); + + return expression_generator_(details::e_assign,branch); + } + + inline expression_node_ptr parse_uninitialised_var_statement(const std::string& var_name) + { + if ( + !token_is(token_t::e_lcrlbracket) || + !token_is(token_t::e_rcrlbracket) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR181 - Expected a '{}' for uninitialised var definition", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_eof,prsrhlpr_t::e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR182 - Expected ';' after uninitialised variable definition", + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr var_node = reinterpret_cast(0); + + scope_element& se = sem_.get_element(var_name); + + if (se.name == var_name) + { + if (se.active) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR183 - Illegal redefinition of local variable: '" + var_name + "'", + exprtk_error_location)); + + return error_node(); + } + else if (scope_element::e_variable == se.type) + { + var_node = se.var_node; + se.active = true; + se.ref_count++; + } + } + + if (0 == var_node) + { + scope_element nse; + nse.name = var_name; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_variable; + nse.depth = state_.scope_depth; + nse.ip_index = sem_.next_ip_index(); + nse.data = new T(T(0)); + nse.var_node = node_allocator_.allocate(*reinterpret_cast(nse.data)); + + if (!sem_.add_element(nse)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR184 - Failed to add new local variable '" + var_name + "' to SEM", + exprtk_error_location)); + + sem_.free_element(nse); + + return error_node(); + } + + exprtk_debug(("parse_uninitialised_var_statement() - INFO - Added new local variable: %s\n", + nse.name.c_str())); + } + + lodge_symbol(var_name, e_st_local_variable); + + state_.activate_side_effect("parse_uninitialised_var_statement()"); + + return expression_generator_(T(0)); + } + + inline expression_node_ptr parse_swap_statement() + { + if (!details::imatch(current_token().value,"swap")) + { + return error_node(); + } + else + next_token(); + + if (!token_is(token_t::e_lbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR185 - Expected '(' at start of swap statement", + exprtk_error_location)); + + return error_node(); + } + + expression_node_ptr variable0 = error_node(); + expression_node_ptr variable1 = error_node(); + + bool variable0_generated = false; + bool variable1_generated = false; + + const std::string var0_name = current_token().value; + + if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR186 - Expected a symbol for variable or vector element definition", + exprtk_error_location)); + + return error_node(); + } + else if (peek_token_is(token_t::e_lsqrbracket)) + { + if (0 == (variable0 = parse_vector())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR187 - First parameter to swap is an invalid vector element: '" + var0_name + "'", + exprtk_error_location)); + + return error_node(); + } + + variable0_generated = true; + } + else + { + if (symtab_store_.is_variable(var0_name)) + { + variable0 = symtab_store_.get_variable(var0_name); + } + + const scope_element& se = sem_.get_element(var0_name); + + if ( + (se.active) && + (se.name == var0_name) && + (scope_element::e_variable == se.type) + ) + { + variable0 = se.var_node; + } + + lodge_symbol(var0_name, e_st_variable); + + if (0 == variable0) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR188 - First parameter to swap is an invalid variable: '" + var0_name + "'", + exprtk_error_location)); + + return error_node(); + } + else + next_token(); + } + + if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR189 - Expected ',' between parameters to swap", + exprtk_error_location)); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + return error_node(); + } + + const std::string var1_name = current_token().value; + + if (!token_is(token_t::e_symbol,prsrhlpr_t::e_hold)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR190 - Expected a symbol for variable or vector element definition", + exprtk_error_location)); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + return error_node(); + } + else if (peek_token_is(token_t::e_lsqrbracket)) + { + if (0 == (variable1 = parse_vector())) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR191 - Second parameter to swap is an invalid vector element: '" + var1_name + "'", + exprtk_error_location)); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + return error_node(); + } + + variable1_generated = true; + } + else + { + if (symtab_store_.is_variable(var1_name)) + { + variable1 = symtab_store_.get_variable(var1_name); + } + + const scope_element& se = sem_.get_element(var1_name); + + if ( + (se.active) && + (se.name == var1_name) && + (scope_element::e_variable == se.type) + ) + { + variable1 = se.var_node; + } + + lodge_symbol(var1_name, e_st_variable); + + if (0 == variable1) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR192 - Second parameter to swap is an invalid variable: '" + var1_name + "'", + exprtk_error_location)); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + return error_node(); + } + else + next_token(); + } + + if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR193 - Expected ')' at end of swap statement", + exprtk_error_location)); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + if (variable1_generated) + { + free_node(node_allocator_,variable1); + } + + return error_node(); + } + + typedef details::variable_node* variable_node_ptr; + + variable_node_ptr v0 = variable_node_ptr(0); + variable_node_ptr v1 = variable_node_ptr(0); + + expression_node_ptr result = error_node(); + + if ( + (0 != (v0 = dynamic_cast(variable0))) && + (0 != (v1 = dynamic_cast(variable1))) + ) + { + result = node_allocator_.allocate >(v0, v1); + + if (variable0_generated) + { + free_node(node_allocator_,variable0); + } + + if (variable1_generated) + { + free_node(node_allocator_,variable1); + } + } + else + result = node_allocator_.allocate > + (variable0, variable1); + + state_.activate_side_effect("parse_swap_statement()"); + + return result; + } + + #ifndef exprtk_disable_return_statement + inline expression_node_ptr parse_return_statement() + { + if (state_.parsing_return_stmt) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR194 - Return call within a return call is not allowed", + exprtk_error_location)); + + return error_node(); + } + + scoped_bool_negator sbn(state_.parsing_return_stmt); + + std::vector arg_list; + + scoped_vec_delete sdd((*this),arg_list); + + if (!details::imatch(current_token().value,"return")) + { + return error_node(); + } + else + next_token(); + + if (!token_is(token_t::e_lsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR195 - Expected '[' at start of return statement", + exprtk_error_location)); + + return error_node(); + } + else if (!token_is(token_t::e_rsqrbracket)) + { + for ( ; ; ) + { + expression_node_ptr arg = parse_expression(); + + if (0 == arg) + return error_node(); + + arg_list.push_back(arg); + + if (token_is(token_t::e_rsqrbracket)) + break; + else if (!token_is(token_t::e_comma)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR196 - Expected ',' between values during call to return", + exprtk_error_location)); + + return error_node(); + } + } + } + else if (settings_.zero_return_disabled()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR197 - Zero parameter return statement not allowed", + exprtk_error_location)); + + return error_node(); + } + + const lexer::token prev_token = current_token(); + + if (token_is(token_t::e_rsqrbracket)) + { + if (!arg_list.empty()) + { + set_error(make_error( + parser_error::e_syntax, + prev_token, + "ERR198 - Invalid ']' found during return call", + exprtk_error_location)); + + return error_node(); + } + } + + std::string ret_param_type_list; + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + if (0 == arg_list[i]) + return error_node(); + else if (is_ivector_node(arg_list[i])) + ret_param_type_list += 'V'; + else if (is_generally_string_node(arg_list[i])) + ret_param_type_list += 'S'; + else + ret_param_type_list += 'T'; + } + + dec_.retparam_list_.push_back(ret_param_type_list); + + expression_node_ptr result = expression_generator_.return_call(arg_list); + + sdd.delete_ptr = (0 == result); + + state_.return_stmt_present = true; + + state_.activate_side_effect("parse_return_statement()"); + + return result; + } + #else + inline expression_node_ptr parse_return_statement() + { + return error_node(); + } + #endif + + inline bool post_variable_process(const std::string& symbol) + { + if ( + peek_token_is(token_t::e_lbracket ) || + peek_token_is(token_t::e_lcrlbracket) || + peek_token_is(token_t::e_lsqrbracket) + ) + { + if (!settings_.commutative_check_enabled()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR199 - Invalid sequence of variable '" + symbol + "' and bracket", + exprtk_error_location)); + + return false; + } + + lexer().insert_front(token_t::e_mul); + } + + return true; + } + + inline bool post_bracket_process(const typename token_t::token_type& token, expression_node_ptr& branch) + { + bool implied_mul = false; + + if (details::is_generally_string_node(branch)) + return true; + + const lexer::parser_helper::token_advance_mode hold = prsrhlpr_t::e_hold; + + switch (token) + { + case token_t::e_lcrlbracket : implied_mul = token_is(token_t::e_lbracket ,hold) || + token_is(token_t::e_lcrlbracket,hold) || + token_is(token_t::e_lsqrbracket,hold) ; + break; + + case token_t::e_lbracket : implied_mul = token_is(token_t::e_lbracket ,hold) || + token_is(token_t::e_lcrlbracket,hold) || + token_is(token_t::e_lsqrbracket,hold) ; + break; + + case token_t::e_lsqrbracket : implied_mul = token_is(token_t::e_lbracket ,hold) || + token_is(token_t::e_lcrlbracket,hold) || + token_is(token_t::e_lsqrbracket,hold) ; + break; + + default : return true; + } + + if (implied_mul) + { + if (!settings_.commutative_check_enabled()) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR200 - Invalid sequence of brackets", + exprtk_error_location)); + + return false; + } + else if (token_t::e_eof != current_token().type) + { + lexer().insert_front(current_token().type); + lexer().insert_front(token_t::e_mul); + next_token(); + } + } + + return true; + } + + typedef typename interval_container_t::interval_t interval_t; + typedef interval_container_t immutable_memory_map_t; + typedef std::map immutable_symtok_map_t; + + inline interval_t make_memory_range(const T& t) + { + const T* begin = reinterpret_cast(&t); + const T* end = begin + 1; + return interval_t(begin, end); + } + + inline interval_t make_memory_range(const T* begin, const std::size_t size) + { + return interval_t(begin, begin + size); + } + + inline interval_t make_memory_range(details::char_cptr begin, const std::size_t size) + { + return interval_t(begin, begin + size); + } + + void lodge_immutable_symbol(const lexer::token& token, const interval_t interval) + { + immutable_memory_map_.add_interval(interval); + immutable_symtok_map_[interval] = token; + } + + inline expression_node_ptr parse_symtab_symbol() + { + const std::string symbol = current_token().value; + + // Are we dealing with a variable or a special constant? + typedef typename symtab_store::variable_context var_ctxt_t; + var_ctxt_t var_ctx = symtab_store_.get_variable_context(symbol); + + if (var_ctx.variable) + { + assert(var_ctx.symbol_table); + + expression_node_ptr result_variable = var_ctx.variable; + + if (symtab_store_.is_constant_node(symbol)) + { + result_variable = expression_generator_(var_ctx.variable->value()); + } + else if (symbol_table_t::e_immutable == var_ctx.symbol_table->mutability()) + { + lodge_immutable_symbol(current_token(), make_memory_range(var_ctx.variable->ref())); + result_variable = var_ctx.variable; + } + + if (!post_variable_process(symbol)) + return error_node(); + + lodge_symbol(symbol, e_st_variable); + + next_token(); + + return result_variable; + } + + // Are we dealing with a locally defined variable, vector or string? + if (!sem_.empty()) + { + scope_element& se = sem_.get_active_element(symbol); + + if (se.active && details::imatch(se.name, symbol)) + { + if (scope_element::e_variable == se.type) + { + se.active = true; + lodge_symbol(symbol, e_st_local_variable); + + if (!post_variable_process(symbol)) + return error_node(); + + next_token(); + + return se.var_node; + } + else if (scope_element::e_vector == se.type) + { + return parse_vector(); + } + #ifndef exprtk_disable_string_capabilities + else if (scope_element::e_string == se.type) + { + return parse_string(); + } + #endif + } + } + + #ifndef exprtk_disable_string_capabilities + // Are we dealing with a string variable? + if (symtab_store_.is_stringvar(symbol)) + { + return parse_string(); + } + #endif + + { + // Are we dealing with a function? + ifunction* function = symtab_store_.get_function(symbol); + + if (function) + { + lodge_symbol(symbol, e_st_function); + + expression_node_ptr func_node = + parse_function_invocation(function,symbol); + + if (func_node) + return func_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR201 - Failed to generate node for function: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + + { + // Are we dealing with a vararg function? + ivararg_function* vararg_function = symtab_store_.get_vararg_function(symbol); + + if (vararg_function) + { + lodge_symbol(symbol, e_st_function); + + expression_node_ptr vararg_func_node = + parse_vararg_function_call(vararg_function, symbol); + + if (vararg_func_node) + return vararg_func_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR202 - Failed to generate node for vararg function: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + + { + // Are we dealing with a vararg generic function? + igeneric_function* generic_function = symtab_store_.get_generic_function(symbol); + + if (generic_function) + { + lodge_symbol(symbol, e_st_function); + + expression_node_ptr genericfunc_node = + parse_generic_function_call(generic_function, symbol); + + if (genericfunc_node) + return genericfunc_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR203 - Failed to generate node for generic function: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + + #ifndef exprtk_disable_string_capabilities + { + // Are we dealing with a vararg string returning function? + igeneric_function* string_function = symtab_store_.get_string_function(symbol); + + if (string_function) + { + lodge_symbol(symbol, e_st_function); + + expression_node_ptr stringfunc_node = + parse_string_function_call(string_function, symbol); + + if (stringfunc_node) + return stringfunc_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR204 - Failed to generate node for string function: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + + { + // Are we dealing with a vararg overloaded scalar/string returning function? + igeneric_function* overload_function = symtab_store_.get_overload_function(symbol); + + if (overload_function) + { + lodge_symbol(symbol, e_st_function); + + expression_node_ptr overloadfunc_node = + parse_overload_function_call(overload_function, symbol); + + if (overloadfunc_node) + return overloadfunc_node; + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR205 - Failed to generate node for overload function: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + } + #endif + + // Are we dealing with a vector? + if (symtab_store_.is_vector(symbol)) + { + lodge_symbol(symbol, e_st_vector); + return parse_vector(); + } + + if (details::is_reserved_symbol(symbol)) + { + if ( + settings_.function_enabled(symbol) || + !details::is_base_function(symbol) + ) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR206 - Invalid use of reserved symbol '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + + // Should we handle unknown symbols? + if (resolve_unknown_symbol_ && unknown_symbol_resolver_) + { + if (!(settings_.rsrvd_sym_usr_disabled() && details::is_reserved_symbol(symbol))) + { + symbol_table_t& symtab = symtab_store_.get_symbol_table(); + + std::string error_message; + + if (unknown_symbol_resolver::e_usrmode_default == unknown_symbol_resolver_->mode) + { + T default_value = T(0); + + typename unknown_symbol_resolver::usr_symbol_type usr_symbol_type = unknown_symbol_resolver::e_usr_unknown_type; + + if (unknown_symbol_resolver_->process(symbol, usr_symbol_type, default_value, error_message)) + { + bool create_result = false; + + switch (usr_symbol_type) + { + case unknown_symbol_resolver::e_usr_variable_type : + create_result = symtab.create_variable(symbol, default_value); + break; + + case unknown_symbol_resolver::e_usr_constant_type : + create_result = symtab.add_constant(symbol, default_value); + break; + + default : create_result = false; + } + + if (create_result) + { + expression_node_ptr var = symtab_store_.get_variable(symbol); + + if (var) + { + if (symtab_store_.is_constant_node(symbol)) + { + var = expression_generator_(var->value()); + } + + lodge_symbol(symbol, e_st_variable); + + if (!post_variable_process(symbol)) + return error_node(); + + next_token(); + + return var; + } + } + } + + set_error(make_error( + parser_error::e_symtab, + current_token(), + "ERR207 - Failed to create variable: '" + symbol + "'" + + (error_message.empty() ? "" : " - " + error_message), + exprtk_error_location)); + + } + else if (unknown_symbol_resolver::e_usrmode_extended == unknown_symbol_resolver_->mode) + { + if (unknown_symbol_resolver_->process(symbol, symtab, error_message)) + { + expression_node_ptr result = parse_symtab_symbol(); + + if (result) + { + return result; + } + } + + set_error(make_error( + parser_error::e_symtab, + current_token(), + "ERR208 - Failed to resolve symbol: '" + symbol + "'" + + (error_message.empty() ? "" : " - " + error_message), + exprtk_error_location)); + } + + return error_node(); + } + } + + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR209 - Undefined symbol: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + + inline expression_node_ptr parse_symbol() + { + static const std::string symbol_if = "if" ; + static const std::string symbol_while = "while" ; + static const std::string symbol_repeat = "repeat" ; + static const std::string symbol_for = "for" ; + static const std::string symbol_switch = "switch" ; + static const std::string symbol_null = "null" ; + static const std::string symbol_break = "break" ; + static const std::string symbol_continue = "continue"; + static const std::string symbol_var = "var" ; + static const std::string symbol_swap = "swap" ; + static const std::string symbol_return = "return" ; + static const std::string symbol_not = "not" ; + + const std::string symbol = current_token().value; + + if (valid_vararg_operation(symbol)) + { + return parse_vararg_function(); + } + else if (details::imatch(symbol, symbol_not)) + { + return parse_not_statement(); + } + else if (valid_base_operation(symbol)) + { + return parse_base_operation(); + } + else if ( + details::imatch(symbol, symbol_if) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_conditional_statement(); + } + else if ( + details::imatch(symbol, symbol_while) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_while_loop(); + } + else if ( + details::imatch(symbol, symbol_repeat) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_repeat_until_loop(); + } + else if ( + details::imatch(symbol, symbol_for) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_for_loop(); + } + else if ( + details::imatch(symbol, symbol_switch) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_switch_statement(); + } + else if (details::is_valid_sf_symbol(symbol)) + { + return parse_special_function(); + } + else if (details::imatch(symbol, symbol_null)) + { + return parse_null_statement(); + } + #ifndef exprtk_disable_break_continue + else if (details::imatch(symbol, symbol_break)) + { + return parse_break_statement(); + } + else if (details::imatch(symbol, symbol_continue)) + { + return parse_continue_statement(); + } + #endif + else if (details::imatch(symbol, symbol_var)) + { + return parse_define_var_statement(); + } + else if (details::imatch(symbol, symbol_swap)) + { + return parse_swap_statement(); + } + #ifndef exprtk_disable_return_statement + else if ( + details::imatch(symbol, symbol_return) && + settings_.control_struct_enabled(symbol) + ) + { + return parse_return_statement(); + } + #endif + else if (symtab_store_.valid() || !sem_.empty()) + { + return parse_symtab_symbol(); + } + else + { + set_error(make_error( + parser_error::e_symtab, + current_token(), + "ERR210 - Unknown variable or function encountered. Symbol table(s) " + "is either invalid or does not contain symbol: '" + symbol + "'", + exprtk_error_location)); + + return error_node(); + } + } + + inline expression_node_ptr parse_branch(precedence_level precedence = e_level00) + { + stack_limit_handler slh(*this); + + if (!slh) + { + return error_node(); + } + + expression_node_ptr branch = error_node(); + + if (token_t::e_number == current_token().type) + { + T numeric_value = T(0); + + if (details::string_to_real(current_token().value, numeric_value)) + { + expression_node_ptr literal_exp = expression_generator_(numeric_value); + + if (0 == literal_exp) + { + set_error(make_error( + parser_error::e_numeric, + current_token(), + "ERR211 - Failed generate node for scalar: '" + current_token().value + "'", + exprtk_error_location)); + + return error_node(); + } + + next_token(); + branch = literal_exp; + } + else + { + set_error(make_error( + parser_error::e_numeric, + current_token(), + "ERR212 - Failed to convert '" + current_token().value + "' to a number", + exprtk_error_location)); + + return error_node(); + } + } + else if (token_t::e_symbol == current_token().type) + { + branch = parse_symbol(); + } + #ifndef exprtk_disable_string_capabilities + else if (token_t::e_string == current_token().type) + { + branch = parse_const_string(); + } + #endif + else if (token_t::e_lbracket == current_token().type) + { + next_token(); + + if (0 == (branch = parse_expression())) + return error_node(); + else if (token_is(token_t::e_eof)) + {} + else if (!token_is(token_t::e_rbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR213 - Expected ')' instead of: '" + current_token().value + "'", + exprtk_error_location)); + + details::free_node(node_allocator_,branch); + + return error_node(); + } + else if (!post_bracket_process(token_t::e_lbracket,branch)) + { + details::free_node(node_allocator_,branch); + + return error_node(); + } + + parse_pending_vector_index_operator(branch); + } + else if (token_t::e_lsqrbracket == current_token().type) + { + next_token(); + + if (0 == (branch = parse_expression())) + return error_node(); + else if (!token_is(token_t::e_rsqrbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR214 - Expected ']' instead of: '" + current_token().value + "'", + exprtk_error_location)); + + details::free_node(node_allocator_,branch); + + return error_node(); + } + else if (!post_bracket_process(token_t::e_lsqrbracket,branch)) + { + details::free_node(node_allocator_,branch); + + return error_node(); + } + } + else if (token_t::e_lcrlbracket == current_token().type) + { + next_token(); + + if (0 == (branch = parse_expression())) + return error_node(); + else if (!token_is(token_t::e_rcrlbracket)) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR215 - Expected '}' instead of: '" + current_token().value + "'", + exprtk_error_location)); + + details::free_node(node_allocator_,branch); + + return error_node(); + } + else if (!post_bracket_process(token_t::e_lcrlbracket,branch)) + { + details::free_node(node_allocator_,branch); + + return error_node(); + } + } + else if (token_t::e_sub == current_token().type) + { + next_token(); + branch = parse_expression(e_level11); + + if ( + branch && + !( + details::is_neg_unary_node (branch) && + simplify_unary_negation_branch(branch) + ) + ) + { + expression_node_ptr result = expression_generator_(details::e_neg,branch); + + if (0 == result) + { + details::free_node(node_allocator_,branch); + + return error_node(); + } + else + branch = result; + } + } + else if (token_t::e_add == current_token().type) + { + next_token(); + branch = parse_expression(e_level13); + } + else if (token_t::e_eof == current_token().type) + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR216 - Premature end of expression[1]", + exprtk_error_location)); + + return error_node(); + } + else + { + set_error(make_error( + parser_error::e_syntax, + current_token(), + "ERR217 - Premature end of expression[2]", + exprtk_error_location)); + + return error_node(); + } + + if ( + branch && + (e_level00 == precedence) && + token_is(token_t::e_ternary,prsrhlpr_t::e_hold) + ) + { + branch = parse_ternary_conditional_statement(branch); + } + + parse_pending_string_rangesize(branch); + + return branch; + } + + template + class expression_generator + { + public: + + typedef details::expression_node* expression_node_ptr; + typedef expression_node_ptr (*synthesize_functor_t)(expression_generator&, const details::operator_type& operation, expression_node_ptr (&branch)[2]); + typedef std::map synthesize_map_t; + typedef typename exprtk::parser parser_t; + typedef const Type& vtype; + typedef const Type ctype; + + inline void init_synthesize_map() + { + #ifndef exprtk_disable_enhanced_features + synthesize_map_["(v)o(v)"] = synthesize_vov_expression::process; + synthesize_map_["(c)o(v)"] = synthesize_cov_expression::process; + synthesize_map_["(v)o(c)"] = synthesize_voc_expression::process; + + #define register_synthezier(S) \ + synthesize_map_[S ::node_type::id()] = S ::process; \ + + register_synthezier(synthesize_vovov_expression0) + register_synthezier(synthesize_vovov_expression1) + register_synthezier(synthesize_vovoc_expression0) + register_synthezier(synthesize_vovoc_expression1) + register_synthezier(synthesize_vocov_expression0) + register_synthezier(synthesize_vocov_expression1) + register_synthezier(synthesize_covov_expression0) + register_synthezier(synthesize_covov_expression1) + register_synthezier(synthesize_covoc_expression0) + register_synthezier(synthesize_covoc_expression1) + register_synthezier(synthesize_cocov_expression1) + register_synthezier(synthesize_vococ_expression0) + + register_synthezier(synthesize_vovovov_expression0) + register_synthezier(synthesize_vovovoc_expression0) + register_synthezier(synthesize_vovocov_expression0) + register_synthezier(synthesize_vocovov_expression0) + register_synthezier(synthesize_covovov_expression0) + register_synthezier(synthesize_covocov_expression0) + register_synthezier(synthesize_vocovoc_expression0) + register_synthezier(synthesize_covovoc_expression0) + register_synthezier(synthesize_vococov_expression0) + + register_synthezier(synthesize_vovovov_expression1) + register_synthezier(synthesize_vovovoc_expression1) + register_synthezier(synthesize_vovocov_expression1) + register_synthezier(synthesize_vocovov_expression1) + register_synthezier(synthesize_covovov_expression1) + register_synthezier(synthesize_covocov_expression1) + register_synthezier(synthesize_vocovoc_expression1) + register_synthezier(synthesize_covovoc_expression1) + register_synthezier(synthesize_vococov_expression1) + + register_synthezier(synthesize_vovovov_expression2) + register_synthezier(synthesize_vovovoc_expression2) + register_synthezier(synthesize_vovocov_expression2) + register_synthezier(synthesize_vocovov_expression2) + register_synthezier(synthesize_covovov_expression2) + register_synthezier(synthesize_covocov_expression2) + register_synthezier(synthesize_vocovoc_expression2) + register_synthezier(synthesize_covovoc_expression2) + + register_synthezier(synthesize_vovovov_expression3) + register_synthezier(synthesize_vovovoc_expression3) + register_synthezier(synthesize_vovocov_expression3) + register_synthezier(synthesize_vocovov_expression3) + register_synthezier(synthesize_covovov_expression3) + register_synthezier(synthesize_covocov_expression3) + register_synthezier(synthesize_vocovoc_expression3) + register_synthezier(synthesize_covovoc_expression3) + register_synthezier(synthesize_vococov_expression3) + + register_synthezier(synthesize_vovovov_expression4) + register_synthezier(synthesize_vovovoc_expression4) + register_synthezier(synthesize_vovocov_expression4) + register_synthezier(synthesize_vocovov_expression4) + register_synthezier(synthesize_covovov_expression4) + register_synthezier(synthesize_covocov_expression4) + register_synthezier(synthesize_vocovoc_expression4) + register_synthezier(synthesize_covovoc_expression4) + + #undef register_synthezier + #endif + } + + inline void set_parser(parser_t& p) + { + parser_ = &p; + } + + inline void set_uom(unary_op_map_t& unary_op_map) + { + unary_op_map_ = &unary_op_map; + } + + inline void set_bom(binary_op_map_t& binary_op_map) + { + binary_op_map_ = &binary_op_map; + } + + inline void set_ibom(inv_binary_op_map_t& inv_binary_op_map) + { + inv_binary_op_map_ = &inv_binary_op_map; + } + + inline void set_sf3m(sf3_map_t& sf3_map) + { + sf3_map_ = &sf3_map; + } + + inline void set_sf4m(sf4_map_t& sf4_map) + { + sf4_map_ = &sf4_map; + } + + inline void set_allocator(details::node_allocator& na) + { + node_allocator_ = &na; + } + + inline void set_strength_reduction_state(const bool enabled) + { + strength_reduction_enabled_ = enabled; + } + + inline bool strength_reduction_enabled() const + { + return strength_reduction_enabled_; + } + + inline bool valid_operator(const details::operator_type& operation, binary_functor_t& bop) + { + typename binary_op_map_t::iterator bop_itr = binary_op_map_->find(operation); + + if (binary_op_map_->end() == bop_itr) + return false; + + bop = bop_itr->second; + + return true; + } + + inline bool valid_operator(const details::operator_type& operation, unary_functor_t& uop) + { + typename unary_op_map_t::iterator uop_itr = unary_op_map_->find(operation); + + if ((*unary_op_map_).end() == uop_itr) + return false; + + uop = uop_itr->second; + + return true; + } + + inline details::operator_type get_operator(const binary_functor_t& bop) const + { + return (*inv_binary_op_map_).find(bop)->second; + } + + inline expression_node_ptr operator() (const Type& v) const + { + return node_allocator_->allocate(v); + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr operator() (const std::string& s) const + { + return node_allocator_->allocate(s); + } + + inline expression_node_ptr operator() (std::string& s, range_t& rp) const + { + return node_allocator_->allocate_rr(s,rp); + } + + inline expression_node_ptr operator() (const std::string& s, range_t& rp) const + { + return node_allocator_->allocate_tt(s,rp); + } + + inline expression_node_ptr operator() (expression_node_ptr branch, range_t& rp) const + { + if (is_generally_string_node(branch)) + return node_allocator_->allocate_tt(branch,rp); + else + return error_node(); + } + #endif + + inline bool unary_optimisable(const details::operator_type& operation) const + { + return (details::e_abs == operation) || (details::e_acos == operation) || + (details::e_acosh == operation) || (details::e_asin == operation) || + (details::e_asinh == operation) || (details::e_atan == operation) || + (details::e_atanh == operation) || (details::e_ceil == operation) || + (details::e_cos == operation) || (details::e_cosh == operation) || + (details::e_exp == operation) || (details::e_expm1 == operation) || + (details::e_floor == operation) || (details::e_log == operation) || + (details::e_log10 == operation) || (details::e_log2 == operation) || + (details::e_log1p == operation) || (details::e_neg == operation) || + (details::e_pos == operation) || (details::e_round == operation) || + (details::e_sin == operation) || (details::e_sinc == operation) || + (details::e_sinh == operation) || (details::e_sqrt == operation) || + (details::e_tan == operation) || (details::e_tanh == operation) || + (details::e_cot == operation) || (details::e_sec == operation) || + (details::e_csc == operation) || (details::e_r2d == operation) || + (details::e_d2r == operation) || (details::e_d2g == operation) || + (details::e_g2d == operation) || (details::e_notl == operation) || + (details::e_sgn == operation) || (details::e_erf == operation) || + (details::e_erfc == operation) || (details::e_ncdf == operation) || + (details::e_frac == operation) || (details::e_trunc == operation) ; + } + + inline bool sf3_optimisable(const std::string& sf3id, trinary_functor_t& tfunc) const + { + typename sf3_map_t::const_iterator itr = sf3_map_->find(sf3id); + + if (sf3_map_->end() == itr) + return false; + else + tfunc = itr->second.first; + + return true; + } + + inline bool sf4_optimisable(const std::string& sf4id, quaternary_functor_t& qfunc) const + { + typename sf4_map_t::const_iterator itr = sf4_map_->find(sf4id); + + if (sf4_map_->end() == itr) + return false; + else + qfunc = itr->second.first; + + return true; + } + + inline bool sf3_optimisable(const std::string& sf3id, details::operator_type& operation) const + { + typename sf3_map_t::const_iterator itr = sf3_map_->find(sf3id); + + if (sf3_map_->end() == itr) + return false; + else + operation = itr->second.second; + + return true; + } + + inline bool sf4_optimisable(const std::string& sf4id, details::operator_type& operation) const + { + typename sf4_map_t::const_iterator itr = sf4_map_->find(sf4id); + + if (sf4_map_->end() == itr) + return false; + else + operation = itr->second.second; + + return true; + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr (&branch)[1]) + { + if (0 == branch[0]) + { + return error_node(); + } + else if (details::is_null_node(branch[0])) + { + return branch[0]; + } + else if (details::is_break_node(branch[0])) + { + return error_node(); + } + else if (details::is_continue_node(branch[0])) + { + return error_node(); + } + else if (details::is_constant_node(branch[0])) + { + return synthesize_expression(operation,branch); + } + else if (unary_optimisable(operation) && details::is_variable_node(branch[0])) + { + return synthesize_uv_expression(operation,branch); + } + else if (unary_optimisable(operation) && details::is_ivector_node(branch[0])) + { + return synthesize_uvec_expression(operation,branch); + } + else + return synthesize_unary_expression(operation,branch); + } + + inline bool is_assignment_operation(const details::operator_type& operation) const + { + return ( + (details::e_addass == operation) || + (details::e_subass == operation) || + (details::e_mulass == operation) || + (details::e_divass == operation) || + (details::e_modass == operation) + ) && + parser_->settings_.assignment_enabled(operation); + } + + #ifndef exprtk_disable_string_capabilities + inline bool valid_string_operation(const details::operator_type& operation) const + { + return (details::e_add == operation) || + (details::e_lt == operation) || + (details::e_lte == operation) || + (details::e_gt == operation) || + (details::e_gte == operation) || + (details::e_eq == operation) || + (details::e_ne == operation) || + (details::e_in == operation) || + (details::e_like == operation) || + (details::e_ilike == operation) || + (details::e_assign == operation) || + (details::e_addass == operation) || + (details::e_swap == operation) ; + } + #else + inline bool valid_string_operation(const details::operator_type&) const + { + return false; + } + #endif + + inline std::string to_str(const details::operator_type& operation) const + { + switch (operation) + { + case details::e_add : return "+" ; + case details::e_sub : return "-" ; + case details::e_mul : return "*" ; + case details::e_div : return "/" ; + case details::e_mod : return "%" ; + case details::e_pow : return "^" ; + case details::e_lt : return "<" ; + case details::e_lte : return "<=" ; + case details::e_gt : return ">" ; + case details::e_gte : return ">=" ; + case details::e_eq : return "==" ; + case details::e_ne : return "!=" ; + case details::e_and : return "and" ; + case details::e_nand : return "nand" ; + case details::e_or : return "or" ; + case details::e_nor : return "nor" ; + case details::e_xor : return "xor" ; + case details::e_xnor : return "xnor" ; + default : return "UNKNOWN"; + } + } + + inline bool operation_optimisable(const details::operator_type& operation) const + { + return (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) || + (details::e_mod == operation) || + (details::e_pow == operation) || + (details::e_lt == operation) || + (details::e_lte == operation) || + (details::e_gt == operation) || + (details::e_gte == operation) || + (details::e_eq == operation) || + (details::e_ne == operation) || + (details::e_and == operation) || + (details::e_nand == operation) || + (details::e_or == operation) || + (details::e_nor == operation) || + (details::e_xor == operation) || + (details::e_xnor == operation) ; + } + + inline std::string branch_to_id(expression_node_ptr branch) const + { + static const std::string null_str ("(null)" ); + static const std::string const_str ("(c)" ); + static const std::string var_str ("(v)" ); + static const std::string vov_str ("(vov)" ); + static const std::string cov_str ("(cov)" ); + static const std::string voc_str ("(voc)" ); + static const std::string str_str ("(s)" ); + static const std::string strrng_str ("(rngs)" ); + static const std::string cs_str ("(cs)" ); + static const std::string cstrrng_str("(crngs)"); + + if (details::is_null_node(branch)) + return null_str; + else if (details::is_constant_node(branch)) + return const_str; + else if (details::is_variable_node(branch)) + return var_str; + else if (details::is_vov_node(branch)) + return vov_str; + else if (details::is_cov_node(branch)) + return cov_str; + else if (details::is_voc_node(branch)) + return voc_str; + else if (details::is_string_node(branch)) + return str_str; + else if (details::is_const_string_node(branch)) + return cs_str; + else if (details::is_string_range_node(branch)) + return strrng_str; + else if (details::is_const_string_range_node(branch)) + return cstrrng_str; + else if (details::is_t0ot1ot2_node(branch)) + return "(" + dynamic_cast*>(branch)->type_id() + ")"; + else if (details::is_t0ot1ot2ot3_node(branch)) + return "(" + dynamic_cast*>(branch)->type_id() + ")"; + else + return "ERROR"; + } + + inline std::string branch_to_id(expression_node_ptr (&branch)[2]) const + { + return branch_to_id(branch[0]) + std::string("o") + branch_to_id(branch[1]); + } + + inline bool cov_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_constant_node(branch[0]) && + details::is_variable_node(branch[1]) ; + } + + inline bool voc_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_variable_node(branch[0]) && + details::is_constant_node(branch[1]) ; + } + + inline bool vov_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_variable_node(branch[0]) && + details::is_variable_node(branch[1]) ; + } + + inline bool cob_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_constant_node(branch[0]) && + !details::is_constant_node(branch[1]) ; + } + + inline bool boc_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return !details::is_constant_node(branch[0]) && + details::is_constant_node(branch[1]) ; + } + + inline bool cocob_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + return (details::is_constant_node(branch[0]) && details::is_cob_node(branch[1])) || + (details::is_constant_node(branch[1]) && details::is_cob_node(branch[0])) ; + } + else + return false; + } + + inline bool coboc_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + return (details::is_constant_node(branch[0]) && details::is_boc_node(branch[1])) || + (details::is_constant_node(branch[1]) && details::is_boc_node(branch[0])) ; + } + else + return false; + } + + inline bool uvouv_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_uv_node(branch[0]) && + details::is_uv_node(branch[1]) ; + } + + inline bool vob_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return details::is_variable_node(branch[0]) && + !details::is_variable_node(branch[1]) ; + } + + inline bool bov_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return !details::is_variable_node(branch[0]) && + details::is_variable_node(branch[1]) ; + } + + inline bool binext_optimisable(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!operation_optimisable(operation)) + return false; + else + return !details::is_constant_node(branch[0]) || + !details::is_constant_node(branch[1]) ; + } + + inline bool is_invalid_assignment_op(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (is_assignment_operation(operation)) + { + const bool b1_is_genstring = details::is_generally_string_node(branch[1]); + + if (details::is_string_node(branch[0])) + return !b1_is_genstring; + else + return ( + !details::is_variable_node (branch[0]) && + !details::is_vector_elem_node (branch[0]) && + !details::is_vector_celem_node (branch[0]) && + !details::is_vector_elem_rtc_node (branch[0]) && + !details::is_vector_celem_rtc_node (branch[0]) && + !details::is_rebasevector_elem_node (branch[0]) && + !details::is_rebasevector_celem_node (branch[0]) && + !details::is_rebasevector_elem_rtc_node (branch[0]) && + !details::is_rebasevector_celem_rtc_node(branch[0]) && + !details::is_vector_node (branch[0]) + ) + || b1_is_genstring; + } + else + return false; + } + + inline bool is_constpow_operation(const details::operator_type& operation, expression_node_ptr(&branch)[2]) const + { + if ( + !details::is_constant_node(branch[1]) || + details::is_constant_node(branch[0]) || + details::is_variable_node(branch[0]) || + details::is_vector_node (branch[0]) || + details::is_generally_string_node(branch[0]) + ) + return false; + + const Type c = static_cast*>(branch[1])->value(); + + return cardinal_pow_optimisable(operation, c); + } + + inline bool is_invalid_break_continue_op(expression_node_ptr (&branch)[2]) const + { + return ( + details::is_break_node (branch[0]) || + details::is_break_node (branch[1]) || + details::is_continue_node(branch[0]) || + details::is_continue_node(branch[1]) + ); + } + + inline bool is_invalid_string_op(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + const bool b0_string = is_generally_string_node(branch[0]); + const bool b1_string = is_generally_string_node(branch[1]); + + bool result = false; + + if (b0_string != b1_string) + result = true; + else if (!valid_string_operation(operation) && b0_string && b1_string) + result = true; + + if (result) + { + parser_->set_synthesis_error("Invalid string operation"); + } + + return result; + } + + inline bool is_invalid_string_op(const details::operator_type& operation, expression_node_ptr (&branch)[3]) const + { + const bool b0_string = is_generally_string_node(branch[0]); + const bool b1_string = is_generally_string_node(branch[1]); + const bool b2_string = is_generally_string_node(branch[2]); + + bool result = false; + + if ((b0_string != b1_string) || (b1_string != b2_string)) + result = true; + else if ((details::e_inrange != operation) && b0_string && b1_string && b2_string) + result = true; + + if (result) + { + parser_->set_synthesis_error("Invalid string operation"); + } + + return result; + } + + inline bool is_string_operation(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + const bool b0_string = is_generally_string_node(branch[0]); + const bool b1_string = is_generally_string_node(branch[1]); + + return (b0_string && b1_string && valid_string_operation(operation)); + } + + inline bool is_string_operation(const details::operator_type& operation, expression_node_ptr (&branch)[3]) const + { + const bool b0_string = is_generally_string_node(branch[0]); + const bool b1_string = is_generally_string_node(branch[1]); + const bool b2_string = is_generally_string_node(branch[2]); + + return (b0_string && b1_string && b2_string && (details::e_inrange == operation)); + } + + #ifndef exprtk_disable_sc_andor + inline bool is_shortcircuit_expression(const details::operator_type& operation) const + { + return ( + (details::e_scand == operation) || + (details::e_scor == operation) + ); + } + #else + inline bool is_shortcircuit_expression(const details::operator_type&) const + { + return false; + } + #endif + + inline bool is_null_present(expression_node_ptr (&branch)[2]) const + { + return ( + details::is_null_node(branch[0]) || + details::is_null_node(branch[1]) + ); + } + + inline bool is_vector_eqineq_logic_operation(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!is_ivector_node(branch[0]) && !is_ivector_node(branch[1])) + return false; + else + return ( + (details::e_lt == operation) || + (details::e_lte == operation) || + (details::e_gt == operation) || + (details::e_gte == operation) || + (details::e_eq == operation) || + (details::e_ne == operation) || + (details::e_equal == operation) || + (details::e_and == operation) || + (details::e_nand == operation) || + (details::e_or == operation) || + (details::e_nor == operation) || + (details::e_xor == operation) || + (details::e_xnor == operation) + ); + } + + inline bool is_vector_arithmetic_operation(const details::operator_type& operation, expression_node_ptr (&branch)[2]) const + { + if (!is_ivector_node(branch[0]) && !is_ivector_node(branch[1])) + return false; + else + return ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) || + (details::e_pow == operation) + ); + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr (&branch)[2]) + { + if ((0 == branch[0]) || (0 == branch[1])) + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR218 - Invalid branches received for operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_string_op(operation,branch)) + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR219 - Invalid branch pair for string operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_assignment_op(operation,branch)) + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR220 - Invalid branch pair for assignment operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_break_continue_op(branch)) + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR221 - Invalid branch pair for break/continue operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (details::e_assign == operation) + { + return synthesize_assignment_expression(operation, branch); + } + else if (details::e_swap == operation) + { + return synthesize_swap_expression(branch); + } + else if (is_assignment_operation(operation)) + { + return synthesize_assignment_operation_expression(operation, branch); + } + else if (is_vector_eqineq_logic_operation(operation, branch)) + { + return synthesize_veceqineqlogic_operation_expression(operation, branch); + } + else if (is_vector_arithmetic_operation(operation, branch)) + { + return synthesize_vecarithmetic_operation_expression(operation, branch); + } + else if (is_shortcircuit_expression(operation)) + { + return synthesize_shortcircuit_expression(operation, branch); + } + else if (is_string_operation(operation, branch)) + { + return synthesize_string_expression(operation, branch); + } + else if (is_null_present(branch)) + { + return synthesize_null_expression(operation, branch); + } + #ifndef exprtk_disable_cardinal_pow_optimisation + else if (is_constpow_operation(operation, branch)) + { + return cardinal_pow_optimisation(branch); + } + #endif + + expression_node_ptr result = error_node(); + + #ifndef exprtk_disable_enhanced_features + if (synthesize_expression(operation, branch, result)) + { + return result; + } + else + #endif + + { + /* + Possible reductions: + 1. c o cob -> cob + 2. cob o c -> cob + 3. c o boc -> boc + 4. boc o c -> boc + */ + result = error_node(); + + if (cocob_optimisable(operation, branch)) + { + result = synthesize_cocob_expression::process((*this), operation, branch); + } + else if (coboc_optimisable(operation, branch) && (0 == result)) + { + result = synthesize_coboc_expression::process((*this), operation, branch); + } + + if (result) + return result; + } + + if (uvouv_optimisable(operation, branch)) + { + return synthesize_uvouv_expression(operation, branch); + } + else if (vob_optimisable(operation, branch)) + { + return synthesize_vob_expression::process((*this), operation, branch); + } + else if (bov_optimisable(operation, branch)) + { + return synthesize_bov_expression::process((*this), operation, branch); + } + else if (cob_optimisable(operation, branch)) + { + return synthesize_cob_expression::process((*this), operation, branch); + } + else if (boc_optimisable(operation, branch)) + { + return synthesize_boc_expression::process((*this), operation, branch); + } + #ifndef exprtk_disable_enhanced_features + else if (cov_optimisable(operation, branch)) + { + return synthesize_cov_expression::process((*this), operation, branch); + } + #endif + else if (binext_optimisable(operation, branch)) + { + return synthesize_binary_ext_expression::process((*this), operation, branch); + } + else + return synthesize_expression(operation, branch); + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr (&branch)[3]) + { + if ( + (0 == branch[0]) || + (0 == branch[1]) || + (0 == branch[2]) + ) + { + details::free_all_nodes(*node_allocator_,branch); + + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR222 - Invalid branches operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_invalid_string_op(operation, branch)) + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR223 - Invalid branches for string operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + else if (is_string_operation(operation, branch)) + { + return synthesize_string_expression(operation, branch); + } + else + return synthesize_expression(operation, branch); + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr (&branch)[4]) + { + return synthesize_expression(operation,branch); + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr b0) + { + expression_node_ptr branch[1] = { b0 }; + return (*this)(operation,branch); + } + + inline expression_node_ptr operator() (const details::operator_type& operation, expression_node_ptr& b0, expression_node_ptr& b1) + { + expression_node_ptr result = error_node(); + + if ((0 != b0) && (0 != b1)) + { + expression_node_ptr branch[2] = { b0, b1 }; + result = expression_generator::operator()(operation, branch); + b0 = branch[0]; + b1 = branch[1]; + } + + return result; + } + + inline expression_node_ptr conditional(expression_node_ptr condition, + expression_node_ptr consequent, + expression_node_ptr alternative) const + { + if ((0 == condition) || (0 == consequent)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent ); + details::free_node(*node_allocator_, alternative); + + const std::string invalid_branches = + ((0 == condition ) ? std::string("condition ") : "") + + ((0 == consequent) ? std::string("consequent") : "") ; + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + parser_->current_state().token, + "ERR224 - Invalid " + invalid_branches + " for conditional statement", + exprtk_error_location)); + + return error_node(); + } + // Can the condition be immediately evaluated? if so optimise. + else if (details::is_constant_node(condition)) + { + // True branch + if (details::is_true(condition)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, alternative); + + return consequent; + } + // False branch + else + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent); + + if (alternative) + return alternative; + else + return node_allocator_->allocate >(); + } + } + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown!"; + + if ((0 != consequent) && (0 != alternative)) + { + result = node_allocator_->allocate(condition, consequent, alternative); + node_name = "conditional_node_t"; + } + else + { + result = node_allocator_->allocate(condition, consequent); + node_name = "cons_conditional_node_t"; + } + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + token_t(), + "ERR225 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr conditional_string(expression_node_ptr condition, + expression_node_ptr consequent, + expression_node_ptr alternative) const + { + if ((0 == condition) || (0 == consequent)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent ); + details::free_node(*node_allocator_, alternative); + + const std::string invalid_branches = + ((0 == condition ) ? std::string("condition ") : "") + + ((0 == consequent) ? std::string("consequent") : "") ; + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + parser_->current_state().token, + "ERR226 - Invalid " + invalid_branches + " for string conditional statement", + exprtk_error_location)); + + return error_node(); + } + // Can the condition be immediately evaluated? if so optimise. + else if (details::is_constant_node(condition)) + { + // True branch + if (details::is_true(condition)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, alternative); + + return consequent; + } + // False branch + else + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent); + + if (alternative) + return alternative; + else + return node_allocator_-> + allocate_c >(""); + } + } + else if ((0 != consequent) && (0 != alternative)) + { + expression_node_ptr result = + node_allocator_->allocate(condition, consequent, alternative); + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + token_t(), + "ERR227 - Failed to synthesize node: conditional_string_node_t", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + } + + return error_node(); + } + #else + inline expression_node_ptr conditional_string(expression_node_ptr, + expression_node_ptr, + expression_node_ptr) const + { + return error_node(); + } + #endif + + inline expression_node_ptr conditional_vector(expression_node_ptr condition, + expression_node_ptr consequent, + expression_node_ptr alternative) const + { + if ((0 == condition) || (0 == consequent)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent ); + details::free_node(*node_allocator_, alternative); + + const std::string invalid_branches = + ((0 == condition ) ? std::string("condition ") : "") + + ((0 == consequent) ? std::string("consequent") : "") ; + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + parser_->current_state().token, + "ERR228 - Invalid " + invalid_branches + " for vector conditional statement", + exprtk_error_location)); + + return error_node(); + } + // Can the condition be immediately evaluated? if so optimise. + else if (details::is_constant_node(condition)) + { + // True branch + if (details::is_true(condition)) + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, alternative); + + return consequent; + } + // False branch + else + { + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, consequent); + + if (alternative) + return alternative; + else + return node_allocator_->allocate >(); + + } + } + else if ((0 != consequent) && (0 != alternative)) + { + return node_allocator_-> + allocate(condition, consequent, alternative); + } + else + return error_node(); + } + + inline loop_runtime_check_ptr get_loop_runtime_check(const loop_runtime_check::loop_types loop_type) const + { + if ( + parser_->loop_runtime_check_ && + (loop_type == (parser_->loop_runtime_check_->loop_set & loop_type)) + ) + { + return parser_->loop_runtime_check_; + } + + return loop_runtime_check_ptr(0); + } + + inline vector_access_runtime_check_ptr get_vector_access_runtime_check() const + { + return parser_->vector_access_runtime_check_; + } + + inline expression_node_ptr while_loop(expression_node_ptr& condition, + expression_node_ptr& branch, + const bool break_continue_present = false) const + { + if (!break_continue_present && details::is_constant_node(condition)) + { + expression_node_ptr result = error_node(); + if (details::is_true(condition)) + { + // Infinite loops are not allowed. + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + parser_->current_state().token, + "ERR229 - Infinite loop condition with 'break' not allowed in while-loops", + exprtk_error_location)); + + result = error_node(); + } + else + result = node_allocator_->allocate >(); + + details::free_node(*node_allocator_, condition); + details::free_node(*node_allocator_, branch ); + + return result; + } + else if (details::is_null_node(condition)) + { + details::free_node(*node_allocator_,condition); + + return branch; + } + + loop_runtime_check_ptr rtc = get_loop_runtime_check(loop_runtime_check::e_while_loop); + + if (!break_continue_present) + { + if (rtc) + return node_allocator_->allocate + (condition, branch, rtc); + else + return node_allocator_->allocate + (condition, branch); + } + #ifndef exprtk_disable_break_continue + else + { + if (rtc) + return node_allocator_->allocate + (condition, branch, rtc); + else + return node_allocator_->allocate + (condition, branch); + } + #else + return error_node(); + #endif + } + + inline expression_node_ptr repeat_until_loop(expression_node_ptr& condition, + expression_node_ptr& branch, + const bool break_continue_present = false) const + { + if (!break_continue_present && details::is_constant_node(condition)) + { + if ( + details::is_true(condition) && + details::is_constant_node(branch) + ) + { + free_node(*node_allocator_,condition); + + return branch; + } + + details::free_node(*node_allocator_, condition); + details::free_node(*node_allocator_, branch ); + + return error_node(); + } + else if (details::is_null_node(condition)) + { + details::free_node(*node_allocator_,condition); + + return branch; + } + + loop_runtime_check_ptr rtc = get_loop_runtime_check(loop_runtime_check::e_repeat_until_loop); + + if (!break_continue_present) + { + if (rtc) + return node_allocator_->allocate + (condition, branch, rtc); + else + return node_allocator_->allocate + (condition, branch); + } + #ifndef exprtk_disable_break_continue + else + { + if (rtc) + return node_allocator_->allocate + (condition, branch, rtc); + else + return node_allocator_->allocate + (condition, branch); + } + #else + return error_node(); + #endif + } + + inline expression_node_ptr for_loop(expression_node_ptr& initialiser, + expression_node_ptr& condition, + expression_node_ptr& incrementor, + expression_node_ptr& loop_body, + bool break_continue_present = false) const + { + if (!break_continue_present && details::is_constant_node(condition)) + { + expression_node_ptr result = error_node(); + + if (details::is_true(condition)) + { + // Infinite loops are not allowed. + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + parser_->current_state().token, + "ERR230 - Infinite loop condition without 'break' not allowed in for-loop", + exprtk_error_location)); + + result = error_node(); + } + else + result = node_allocator_->allocate >(); + + details::free_node(*node_allocator_, initialiser); + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, incrementor); + details::free_node(*node_allocator_, loop_body ); + + return result; + } + else if (details::is_null_node(condition) || (0 == condition)) + { + details::free_node(*node_allocator_, initialiser); + details::free_node(*node_allocator_, condition ); + details::free_node(*node_allocator_, incrementor); + + return loop_body; + } + + loop_runtime_check_ptr rtc = get_loop_runtime_check(loop_runtime_check::e_for_loop); + + if (!break_continue_present) + { + if (rtc) + return node_allocator_->allocate + ( + initialiser, + condition, + incrementor, + loop_body, + rtc + ); + else + return node_allocator_->allocate + ( + initialiser, + condition, + incrementor, + loop_body + ); + } + #ifndef exprtk_disable_break_continue + else + { + if (rtc) + return node_allocator_->allocate + ( + initialiser, + condition, + incrementor, + loop_body, + rtc + ); + else + return node_allocator_->allocate + ( + initialiser, + condition, + incrementor, + loop_body + ); + } + #else + return error_node(); + #endif + } + + template class Sequence> + inline expression_node_ptr const_optimise_switch(Sequence& arg_list) + { + expression_node_ptr result = error_node(); + + for (std::size_t i = 0; i < (arg_list.size() / 2); ++i) + { + expression_node_ptr condition = arg_list[(2 * i) ]; + expression_node_ptr consequent = arg_list[(2 * i) + 1]; + + if ((0 == result) && details::is_true(condition)) + { + result = consequent; + break; + } + } + + if (0 == result) + { + result = arg_list.back(); + } + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + expression_node_ptr current_expr = arg_list[i]; + + if (current_expr && (current_expr != result)) + { + free_node(*node_allocator_,current_expr); + } + } + + return result; + } + + template class Sequence> + inline expression_node_ptr const_optimise_mswitch(Sequence& arg_list) + { + expression_node_ptr result = error_node(); + + for (std::size_t i = 0; i < (arg_list.size() / 2); ++i) + { + expression_node_ptr condition = arg_list[(2 * i) ]; + expression_node_ptr consequent = arg_list[(2 * i) + 1]; + + if (details::is_true(condition)) + { + result = consequent; + } + } + + if (0 == result) + { + const T zero = T(0); + result = node_allocator_->allocate(zero); + } + + for (std::size_t i = 0; i < arg_list.size(); ++i) + { + expression_node_ptr& current_expr = arg_list[i]; + + if (current_expr && (current_expr != result)) + { + details::free_node(*node_allocator_,current_expr); + } + } + + return result; + } + + struct switch_nodes + { + typedef std::vector > arg_list_t; + + #define case_stmt(N) \ + if (is_true(arg[(2 * N)].first)) { return arg[(2 * N) + 1].first->value(); } \ + + struct switch_impl_1 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) + + assert(arg.size() == ((2 * 1) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_2 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + + assert(arg.size() == ((2 * 2) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_3 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + case_stmt(2) + + assert(arg.size() == ((2 * 3) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_4 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + case_stmt(2) case_stmt(3) + + assert(arg.size() == ((2 * 4) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_5 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + case_stmt(2) case_stmt(3) + case_stmt(4) + + assert(arg.size() == ((2 * 5) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_6 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + case_stmt(2) case_stmt(3) + case_stmt(4) case_stmt(5) + + assert(arg.size() == ((2 * 6) + 1)); + + return arg.back().first->value(); + } + }; + + struct switch_impl_7 + { + static inline T process(const arg_list_t& arg) + { + case_stmt(0) case_stmt(1) + case_stmt(2) case_stmt(3) + case_stmt(4) case_stmt(5) + case_stmt(6) + + assert(arg.size() == ((2 * 7) + 1)); + + return arg.back().first->value(); + } + }; + + #undef case_stmt + }; + + template class Sequence> + inline expression_node_ptr switch_statement(Sequence& arg_list, const bool default_statement_present) + { + if (arg_list.empty()) + return error_node(); + else if ( + !all_nodes_valid(arg_list) || + (!default_statement_present && (arg_list.size() < 2)) + ) + { + details::free_all_nodes(*node_allocator_,arg_list); + + return error_node(); + } + else if (is_constant_foldable(arg_list)) + return const_optimise_switch(arg_list); + + switch ((arg_list.size() - 1) / 2) + { + #define case_stmt(N) \ + case N : \ + return node_allocator_-> \ + allocate >(arg_list); \ + + case_stmt(1) + case_stmt(2) + case_stmt(3) + case_stmt(4) + case_stmt(5) + case_stmt(6) + case_stmt(7) + #undef case_stmt + + default : return node_allocator_->allocate >(arg_list); + } + } + + template class Sequence> + inline expression_node_ptr multi_switch_statement(Sequence& arg_list) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + + return error_node(); + } + else if (is_constant_foldable(arg_list)) + return const_optimise_mswitch(arg_list); + else + return node_allocator_->allocate >(arg_list); + } + + #define unary_opr_switch_statements \ + case_stmt(details::e_abs , details::abs_op ) \ + case_stmt(details::e_acos , details::acos_op ) \ + case_stmt(details::e_acosh , details::acosh_op) \ + case_stmt(details::e_asin , details::asin_op ) \ + case_stmt(details::e_asinh , details::asinh_op) \ + case_stmt(details::e_atan , details::atan_op ) \ + case_stmt(details::e_atanh , details::atanh_op) \ + case_stmt(details::e_ceil , details::ceil_op ) \ + case_stmt(details::e_cos , details::cos_op ) \ + case_stmt(details::e_cosh , details::cosh_op ) \ + case_stmt(details::e_exp , details::exp_op ) \ + case_stmt(details::e_expm1 , details::expm1_op) \ + case_stmt(details::e_floor , details::floor_op) \ + case_stmt(details::e_log , details::log_op ) \ + case_stmt(details::e_log10 , details::log10_op) \ + case_stmt(details::e_log2 , details::log2_op ) \ + case_stmt(details::e_log1p , details::log1p_op) \ + case_stmt(details::e_neg , details::neg_op ) \ + case_stmt(details::e_pos , details::pos_op ) \ + case_stmt(details::e_round , details::round_op) \ + case_stmt(details::e_sin , details::sin_op ) \ + case_stmt(details::e_sinc , details::sinc_op ) \ + case_stmt(details::e_sinh , details::sinh_op ) \ + case_stmt(details::e_sqrt , details::sqrt_op ) \ + case_stmt(details::e_tan , details::tan_op ) \ + case_stmt(details::e_tanh , details::tanh_op ) \ + case_stmt(details::e_cot , details::cot_op ) \ + case_stmt(details::e_sec , details::sec_op ) \ + case_stmt(details::e_csc , details::csc_op ) \ + case_stmt(details::e_r2d , details::r2d_op ) \ + case_stmt(details::e_d2r , details::d2r_op ) \ + case_stmt(details::e_d2g , details::d2g_op ) \ + case_stmt(details::e_g2d , details::g2d_op ) \ + case_stmt(details::e_notl , details::notl_op ) \ + case_stmt(details::e_sgn , details::sgn_op ) \ + case_stmt(details::e_erf , details::erf_op ) \ + case_stmt(details::e_erfc , details::erfc_op ) \ + case_stmt(details::e_ncdf , details::ncdf_op ) \ + case_stmt(details::e_frac , details::frac_op ) \ + case_stmt(details::e_trunc , details::trunc_op) \ + + inline expression_node_ptr synthesize_uv_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[1]) + { + T& v = static_cast*>(branch[0])->ref(); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate > >(v); \ + + unary_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr synthesize_uvec_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[1]) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate > > \ + (operation, branch[0]); \ + + unary_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr synthesize_unary_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[1]) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate > >(branch[0]); \ + + unary_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr const_optimise_sf3(const details::operator_type& operation, + expression_node_ptr (&branch)[3]) + { + expression_node_ptr temp_node = error_node(); + + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : temp_node = node_allocator_-> \ + allocate > > \ + (operation, branch); \ + break; \ + + case_stmt(00) case_stmt(01) case_stmt(02) case_stmt(03) + case_stmt(04) case_stmt(05) case_stmt(06) case_stmt(07) + case_stmt(08) case_stmt(09) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + case_stmt(20) case_stmt(21) case_stmt(22) case_stmt(23) + case_stmt(24) case_stmt(25) case_stmt(26) case_stmt(27) + case_stmt(28) case_stmt(29) case_stmt(30) case_stmt(31) + case_stmt(32) case_stmt(33) case_stmt(34) case_stmt(35) + case_stmt(36) case_stmt(37) case_stmt(38) case_stmt(39) + case_stmt(40) case_stmt(41) case_stmt(42) case_stmt(43) + case_stmt(44) case_stmt(45) case_stmt(46) case_stmt(47) + #undef case_stmt + default : return error_node(); + } + + assert(temp_node); + + const T v = temp_node->value(); + + details::free_node(*node_allocator_,temp_node); + + return node_allocator_->allocate(v); + } + + inline expression_node_ptr varnode_optimise_sf3(const details::operator_type& operation, expression_node_ptr (&branch)[3]) + { + typedef details::variable_node* variable_ptr; + + const Type& v0 = static_cast(branch[0])->ref(); + const Type& v1 = static_cast(branch[1])->ref(); + const Type& v2 = static_cast(branch[2])->ref(); + + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : return node_allocator_-> \ + allocate_rrr > > \ + (v0, v1, v2); \ + + case_stmt(00) case_stmt(01) case_stmt(02) case_stmt(03) + case_stmt(04) case_stmt(05) case_stmt(06) case_stmt(07) + case_stmt(08) case_stmt(09) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + case_stmt(20) case_stmt(21) case_stmt(22) case_stmt(23) + case_stmt(24) case_stmt(25) case_stmt(26) case_stmt(27) + case_stmt(28) case_stmt(29) case_stmt(30) case_stmt(31) + case_stmt(32) case_stmt(33) case_stmt(34) case_stmt(35) + case_stmt(36) case_stmt(37) case_stmt(38) case_stmt(39) + case_stmt(40) case_stmt(41) case_stmt(42) case_stmt(43) + case_stmt(44) case_stmt(45) case_stmt(46) case_stmt(47) + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr special_function(const details::operator_type& operation, expression_node_ptr (&branch)[3]) + { + if (!all_nodes_valid(branch)) + return error_node(); + else if (is_constant_foldable(branch)) + return const_optimise_sf3(operation,branch); + else if (all_nodes_variables(branch)) + return varnode_optimise_sf3(operation,branch); + else + { + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : return node_allocator_-> \ + allocate > > \ + (operation, branch); \ + + case_stmt(00) case_stmt(01) case_stmt(02) case_stmt(03) + case_stmt(04) case_stmt(05) case_stmt(06) case_stmt(07) + case_stmt(08) case_stmt(09) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + case_stmt(20) case_stmt(21) case_stmt(22) case_stmt(23) + case_stmt(24) case_stmt(25) case_stmt(26) case_stmt(27) + case_stmt(28) case_stmt(29) case_stmt(30) case_stmt(31) + case_stmt(32) case_stmt(33) case_stmt(34) case_stmt(35) + case_stmt(36) case_stmt(37) case_stmt(38) case_stmt(39) + case_stmt(40) case_stmt(41) case_stmt(42) case_stmt(43) + case_stmt(44) case_stmt(45) case_stmt(46) case_stmt(47) + #undef case_stmt + default : return error_node(); + } + } + } + + inline expression_node_ptr const_optimise_sf4(const details::operator_type& operation, expression_node_ptr (&branch)[4]) + { + expression_node_ptr temp_node = error_node(); + + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : temp_node = node_allocator_-> \ + allocate > > \ + (operation, branch); \ + break; \ + + case_stmt(48) case_stmt(49) case_stmt(50) case_stmt(51) + case_stmt(52) case_stmt(53) case_stmt(54) case_stmt(55) + case_stmt(56) case_stmt(57) case_stmt(58) case_stmt(59) + case_stmt(60) case_stmt(61) case_stmt(62) case_stmt(63) + case_stmt(64) case_stmt(65) case_stmt(66) case_stmt(67) + case_stmt(68) case_stmt(69) case_stmt(70) case_stmt(71) + case_stmt(72) case_stmt(73) case_stmt(74) case_stmt(75) + case_stmt(76) case_stmt(77) case_stmt(78) case_stmt(79) + case_stmt(80) case_stmt(81) case_stmt(82) case_stmt(83) + case_stmt(84) case_stmt(85) case_stmt(86) case_stmt(87) + case_stmt(88) case_stmt(89) case_stmt(90) case_stmt(91) + case_stmt(92) case_stmt(93) case_stmt(94) case_stmt(95) + case_stmt(96) case_stmt(97) case_stmt(98) case_stmt(99) + #undef case_stmt + default : return error_node(); + } + + assert(temp_node); + + const T v = temp_node->value(); + + details::free_node(*node_allocator_,temp_node); + + return node_allocator_->allocate(v); + } + + inline expression_node_ptr varnode_optimise_sf4(const details::operator_type& operation, expression_node_ptr (&branch)[4]) + { + typedef details::variable_node* variable_ptr; + + const Type& v0 = static_cast(branch[0])->ref(); + const Type& v1 = static_cast(branch[1])->ref(); + const Type& v2 = static_cast(branch[2])->ref(); + const Type& v3 = static_cast(branch[3])->ref(); + + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : return node_allocator_-> \ + allocate_rrrr > > \ + (v0, v1, v2, v3); \ + + case_stmt(48) case_stmt(49) case_stmt(50) case_stmt(51) + case_stmt(52) case_stmt(53) case_stmt(54) case_stmt(55) + case_stmt(56) case_stmt(57) case_stmt(58) case_stmt(59) + case_stmt(60) case_stmt(61) case_stmt(62) case_stmt(63) + case_stmt(64) case_stmt(65) case_stmt(66) case_stmt(67) + case_stmt(68) case_stmt(69) case_stmt(70) case_stmt(71) + case_stmt(72) case_stmt(73) case_stmt(74) case_stmt(75) + case_stmt(76) case_stmt(77) case_stmt(78) case_stmt(79) + case_stmt(80) case_stmt(81) case_stmt(82) case_stmt(83) + case_stmt(84) case_stmt(85) case_stmt(86) case_stmt(87) + case_stmt(88) case_stmt(89) case_stmt(90) case_stmt(91) + case_stmt(92) case_stmt(93) case_stmt(94) case_stmt(95) + case_stmt(96) case_stmt(97) case_stmt(98) case_stmt(99) + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr special_function(const details::operator_type& operation, expression_node_ptr (&branch)[4]) + { + if (!all_nodes_valid(branch)) + return error_node(); + else if (is_constant_foldable(branch)) + return const_optimise_sf4(operation,branch); + else if (all_nodes_variables(branch)) + return varnode_optimise_sf4(operation,branch); + switch (operation) + { + #define case_stmt(op) \ + case details::e_sf##op : return node_allocator_-> \ + allocate > > \ + (operation, branch); \ + + case_stmt(48) case_stmt(49) case_stmt(50) case_stmt(51) + case_stmt(52) case_stmt(53) case_stmt(54) case_stmt(55) + case_stmt(56) case_stmt(57) case_stmt(58) case_stmt(59) + case_stmt(60) case_stmt(61) case_stmt(62) case_stmt(63) + case_stmt(64) case_stmt(65) case_stmt(66) case_stmt(67) + case_stmt(68) case_stmt(69) case_stmt(70) case_stmt(71) + case_stmt(72) case_stmt(73) case_stmt(74) case_stmt(75) + case_stmt(76) case_stmt(77) case_stmt(78) case_stmt(79) + case_stmt(80) case_stmt(81) case_stmt(82) case_stmt(83) + case_stmt(84) case_stmt(85) case_stmt(86) case_stmt(87) + case_stmt(88) case_stmt(89) case_stmt(90) case_stmt(91) + case_stmt(92) case_stmt(93) case_stmt(94) case_stmt(95) + case_stmt(96) case_stmt(97) case_stmt(98) case_stmt(99) + #undef case_stmt + default : return error_node(); + } + } + + template class Sequence> + inline expression_node_ptr const_optimise_varargfunc(const details::operator_type& operation, Sequence& arg_list) + { + expression_node_ptr temp_node = error_node(); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : temp_node = node_allocator_-> \ + allocate > > \ + (arg_list); \ + break; \ + + case_stmt(details::e_sum , details::vararg_add_op ) + case_stmt(details::e_prod , details::vararg_mul_op ) + case_stmt(details::e_avg , details::vararg_avg_op ) + case_stmt(details::e_min , details::vararg_min_op ) + case_stmt(details::e_max , details::vararg_max_op ) + case_stmt(details::e_mand , details::vararg_mand_op ) + case_stmt(details::e_mor , details::vararg_mor_op ) + case_stmt(details::e_multi , details::vararg_multi_op) + #undef case_stmt + default : return error_node(); + } + + const T v = temp_node->value(); + + details::free_node(*node_allocator_,temp_node); + + return node_allocator_->allocate(v); + } + + inline bool special_one_parameter_vararg(const details::operator_type& operation) const + { + return ( + (details::e_sum == operation) || + (details::e_prod == operation) || + (details::e_avg == operation) || + (details::e_min == operation) || + (details::e_max == operation) + ); + } + + template class Sequence> + inline expression_node_ptr varnode_optimise_varargfunc(const details::operator_type& operation, Sequence& arg_list) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate > >(arg_list); \ + + case_stmt(details::e_sum , details::vararg_add_op ) + case_stmt(details::e_prod , details::vararg_mul_op ) + case_stmt(details::e_avg , details::vararg_avg_op ) + case_stmt(details::e_min , details::vararg_min_op ) + case_stmt(details::e_max , details::vararg_max_op ) + case_stmt(details::e_mand , details::vararg_mand_op ) + case_stmt(details::e_mor , details::vararg_mor_op ) + case_stmt(details::e_multi , details::vararg_multi_op) + #undef case_stmt + default : return error_node(); + } + } + + template class Sequence> + inline expression_node_ptr vectorize_func(const details::operator_type& operation, Sequence& arg_list) + { + if (1 == arg_list.size()) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate > >(arg_list[0]); \ + + case_stmt(details::e_sum , details::vec_add_op) + case_stmt(details::e_prod , details::vec_mul_op) + case_stmt(details::e_avg , details::vec_avg_op) + case_stmt(details::e_min , details::vec_min_op) + case_stmt(details::e_max , details::vec_max_op) + #undef case_stmt + default : return error_node(); + } + } + else + return error_node(); + } + + template class Sequence> + inline expression_node_ptr vararg_function(const details::operator_type& operation, Sequence& arg_list) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + + return error_node(); + } + else if (is_constant_foldable(arg_list)) + return const_optimise_varargfunc(operation,arg_list); + else if ((1 == arg_list.size()) && details::is_ivector_node(arg_list[0])) + return vectorize_func(operation,arg_list); + else if ((1 == arg_list.size()) && special_one_parameter_vararg(operation)) + return arg_list[0]; + else if (all_nodes_variables(arg_list)) + return varnode_optimise_varargfunc(operation,arg_list); + + #ifndef exprtk_disable_string_capabilities + if (details::e_smulti == operation) + { + expression_node_ptr result = node_allocator_-> + allocate > >(arg_list); + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR231 - Failed to synthesize node: str_vararg_node", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + } + else + #endif + { + expression_node_ptr result = error_node(); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + allocate > >(arg_list); \ + break; \ + + case_stmt(details::e_sum , details::vararg_add_op ) + case_stmt(details::e_prod , details::vararg_mul_op ) + case_stmt(details::e_avg , details::vararg_avg_op ) + case_stmt(details::e_min , details::vararg_min_op ) + case_stmt(details::e_max , details::vararg_max_op ) + case_stmt(details::e_mand , details::vararg_mand_op ) + case_stmt(details::e_mor , details::vararg_mor_op ) + case_stmt(details::e_multi , details::vararg_multi_op) + #undef case_stmt + default : return error_node(); + } + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR232 - Failed to synthesize node: vararg_node", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + } + + return error_node(); + } + + template + inline expression_node_ptr function(ifunction_t* f, expression_node_ptr (&b)[N]) + { + typedef typename details::function_N_node function_N_node_t; + expression_node_ptr result = synthesize_expression(f,b); + + if (0 == result) + return error_node(); + else + { + // Can the function call be completely optimised? + if (details::is_constant_node(result)) + return result; + else if (!all_nodes_valid(b)) + { + details::free_node(*node_allocator_,result); + std::fill_n(b, N, reinterpret_cast(0)); + + return error_node(); + } + else if (N != f->param_count) + { + details::free_node(*node_allocator_,result); + std::fill_n(b, N, reinterpret_cast(0)); + + return error_node(); + } + + function_N_node_t* func_node_ptr = reinterpret_cast(result); + + if (!func_node_ptr->init_branches(b)) + { + details::free_node(*node_allocator_,result); + std::fill_n(b, N, reinterpret_cast(0)); + + return error_node(); + } + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR233 - Failed to synthesize node: function_N_node_t", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + } + + inline expression_node_ptr function(ifunction_t* f) + { + typedef typename details::function_N_node function_N_node_t; + return node_allocator_->allocate(f); + } + + inline expression_node_ptr vararg_function_call(ivararg_function_t* vaf, + std::vector& arg_list) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + + return error_node(); + } + + typedef details::vararg_function_node alloc_type; + + expression_node_ptr result = node_allocator_->allocate(vaf,arg_list); + + if ( + !arg_list.empty() && + !vaf->has_side_effects() && + is_constant_foldable(arg_list) + ) + { + const Type v = result->value(); + details::free_node(*node_allocator_,result); + result = node_allocator_->allocate(v); + } + + parser_->state_.activate_side_effect("vararg_function_call()"); + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR234 - Failed to synthesize node: vararg_function_node", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + inline expression_node_ptr generic_function_call(igeneric_function_t* gf, + std::vector& arg_list, + const std::size_t& param_seq_index = std::numeric_limits::max()) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + return error_node(); + } + + typedef details::generic_function_node alloc_type1; + typedef details::multimode_genfunction_node alloc_type2; + + const std::size_t no_psi = std::numeric_limits::max(); + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (no_psi == param_seq_index) + { + result = node_allocator_->allocate(arg_list,gf); + node_name = "generic_function_node"; + } + else + { + result = node_allocator_->allocate(gf, param_seq_index, arg_list); + node_name = "multimode_genfunction_node"; + } + + alloc_type1* genfunc_node_ptr = static_cast(result); + + assert(genfunc_node_ptr); + + if ( + !arg_list.empty() && + !gf->has_side_effects() && + parser_->state_.type_check_enabled && + is_constant_foldable(arg_list) + ) + { + genfunc_node_ptr->init_branches(); + + const Type v = result->value(); + + details::free_node(*node_allocator_,result); + + return node_allocator_->allocate(v); + } + else if (genfunc_node_ptr->init_branches()) + { + if (result && result->valid()) + { + parser_->state_.activate_side_effect("generic_function_call()"); + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR235 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + else + { + details::free_node(*node_allocator_, result); + details::free_all_nodes(*node_allocator_, arg_list); + + return error_node(); + } + } + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr string_function_call(igeneric_function_t* gf, + std::vector& arg_list, + const std::size_t& param_seq_index = std::numeric_limits::max()) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + return error_node(); + } + + typedef details::string_function_node alloc_type1; + typedef details::multimode_strfunction_node alloc_type2; + + const std::size_t no_psi = std::numeric_limits::max(); + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (no_psi == param_seq_index) + { + result = node_allocator_->allocate(gf,arg_list); + node_name = "string_function_node"; + } + else + { + result = node_allocator_->allocate(gf, param_seq_index, arg_list); + node_name = "multimode_strfunction_node"; + } + + alloc_type1* strfunc_node_ptr = static_cast(result); + + assert(strfunc_node_ptr); + + if ( + !arg_list.empty() && + !gf->has_side_effects() && + is_constant_foldable(arg_list) + ) + { + strfunc_node_ptr->init_branches(); + + const Type v = result->value(); + + details::free_node(*node_allocator_,result); + + return node_allocator_->allocate(v); + } + else if (strfunc_node_ptr->init_branches()) + { + if (result && result->valid()) + { + parser_->state_.activate_side_effect("string_function_call()"); + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR236 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + else + { + details::free_node (*node_allocator_,result ); + details::free_all_nodes(*node_allocator_,arg_list); + + return error_node(); + } + } + #endif + + #ifndef exprtk_disable_return_statement + inline expression_node_ptr return_call(std::vector& arg_list) + { + if (!all_nodes_valid(arg_list)) + { + details::free_all_nodes(*node_allocator_,arg_list); + return error_node(); + } + + typedef details::return_node alloc_type; + + expression_node_ptr result = node_allocator_-> + allocate_rr(arg_list,parser_->results_ctx()); + + alloc_type* return_node_ptr = static_cast(result); + + assert(return_node_ptr); + + if (return_node_ptr->init_branches()) + { + if (result && result->valid()) + { + parser_->state_.activate_side_effect("return_call()"); + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR237 - Failed to synthesize node: return_node", + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + else + { + details::free_node (*node_allocator_, result ); + details::free_all_nodes(*node_allocator_, arg_list); + + return error_node(); + } + } + + inline expression_node_ptr return_envelope(expression_node_ptr body, + results_context_t* rc, + bool*& return_invoked) + { + typedef details::return_envelope_node alloc_type; + + expression_node_ptr result = node_allocator_-> + allocate_cr(body,(*rc)); + + return_invoked = static_cast(result)->retinvk_ptr(); + + return result; + } + #else + inline expression_node_ptr return_call(std::vector&) + { + return error_node(); + } + + inline expression_node_ptr return_envelope(expression_node_ptr, + results_context_t*, + bool*&) + { + return error_node(); + } + #endif + + inline expression_node_ptr vector_element(const std::string& symbol, + vector_holder_ptr vector_base, + expression_node_ptr vec_node, + expression_node_ptr index) + { + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (details::is_constant_node(index)) + { + const std::size_t vec_index = static_cast(details::numeric::to_int64(index->value())); + + details::free_node(*node_allocator_,index); + + if (vec_index >= vector_base->size()) + { + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + token_t(), + "ERR238 - Index of " + details::to_str(vec_index) + " out of range for " + "vector '" + symbol + "' of size " + details::to_str(vector_base->size()), + exprtk_error_location)); + + details::free_node(*node_allocator_,vec_node); + + return error_node(); + } + + if (vector_base->rebaseable()) + { + vector_access_runtime_check_ptr rtc = get_vector_access_runtime_check(); + + result = (rtc) ? + node_allocator_->allocate(vec_node, vec_index, vector_base, rtc) : + node_allocator_->allocate(vec_node, vec_index, vector_base ) ; + + node_name = (rtc) ? + "rebasevector_elem_rtc_node_t" : + "rebasevector_elem_node_t" ; + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR239 - Failed to synthesize node: " + node_name + " for vector: " + symbol, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + else if (details::is_ivector_node(vec_node) && !details::is_vector_node(vec_node)) + { + vector_access_runtime_check_ptr rtc = get_vector_access_runtime_check(); + + result = (rtc) ? + node_allocator_->allocate(vec_node, vec_index, vector_base, rtc) : + node_allocator_->allocate(vec_node, vec_index, vector_base ) ; + + node_name = (rtc) ? + "vector_elem_rtc_node_t" : + "vector_elem_node_t" ; + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR240 - Failed to synthesize node: " + node_name + " for vector: " + symbol, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + const scope_element& se = parser_->sem_.get_element(symbol,vec_index); + + if (se.index == vec_index) + { + result = se.var_node; + details::free_node(*node_allocator_,vec_node); + } + else + { + scope_element nse; + nse.name = symbol; + nse.active = true; + nse.ref_count = 1; + nse.type = scope_element::e_vecelem; + nse.index = vec_index; + nse.depth = parser_->state_.scope_depth; + nse.data = 0; + nse.var_node = node_allocator_->allocate((*(*vector_base)[vec_index])); + + if (!parser_->sem_.add_element(nse)) + { + parser_->set_synthesis_error("Failed to add new local vector element to SEM [1]"); + + parser_->sem_.free_element(nse); + + result = error_node(); + } + + details::free_node(*node_allocator_,vec_node); + + exprtk_debug(("vector_element() - INFO - Added new local vector element: %s\n", nse.name.c_str())); + + parser_->state_.activate_side_effect("vector_element()"); + + result = nse.var_node; + node_name = "variable_node_t"; + } + } + else + { + vector_access_runtime_check_ptr rtc = get_vector_access_runtime_check(); + + if (vector_base->rebaseable()) + { + result = (rtc) ? + node_allocator_->allocate(vec_node, index, vector_base, rtc) : + node_allocator_->allocate(vec_node, index, vector_base ) ; + + node_name = (rtc) ? + "rebasevector_elem_rtc_node_t" : + "rebasevector_elem_node_t" ; + } + else + { + result = rtc ? + node_allocator_->allocate(vec_node, index, vector_base, rtc) : + node_allocator_->allocate(vec_node, index, vector_base ) ; + + node_name = (rtc) ? + "vector_elem_rtc_node_t" : + "vector_elem_node_t" ; + } + } + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR241 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + private: + + template + inline bool is_constant_foldable(NodePtr (&b)[N]) const + { + for (std::size_t i = 0; i < N; ++i) + { + if (0 == b[i]) + return false; + else if (!details::is_constant_node(b[i])) + return false; + } + + return true; + } + + template class Sequence> + inline bool is_constant_foldable(const Sequence& b) const + { + for (std::size_t i = 0; i < b.size(); ++i) + { + if (0 == b[i]) + return false; + else if (!details::is_constant_node(b[i])) + return false; + } + + return true; + } + + void lodge_assignment(symbol_type cst, expression_node_ptr node) + { + parser_->state_.activate_side_effect("lodge_assignment()"); + + if (!parser_->dec_.collect_assignments()) + return; + + std::string symbol_name; + + switch (cst) + { + case e_st_variable : symbol_name = parser_->symtab_store_ + .get_variable_name(node); + break; + + #ifndef exprtk_disable_string_capabilities + case e_st_string : symbol_name = parser_->symtab_store_ + .get_stringvar_name(node); + break; + #endif + + case e_st_vector : { + typedef details::vector_holder vector_holder_t; + + vector_holder_t& vh = static_cast(node)->vec_holder(); + + symbol_name = parser_->symtab_store_.get_vector_name(&vh); + } + break; + + case e_st_vecelem : { + typedef details::vector_holder vector_holder_t; + + vector_holder_t& vh = static_cast(node)->vec_holder(); + + symbol_name = parser_->symtab_store_.get_vector_name(&vh); + + cst = e_st_vector; + } + break; + + default : return; + } + + if (!symbol_name.empty()) + { + parser_->dec_.add_assignment(symbol_name,cst); + } + } + + const void* base_ptr(expression_node_ptr node) + { + if (node) + { + switch(node->type()) + { + case details::expression_node::e_variable: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_vecelem: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_veccelem: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_vecelemrtc: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_veccelemrtc: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_rbvecelem: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_rbvecelemrtc: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_rbveccelem: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_rbveccelemrtc: + return reinterpret_cast(&static_cast(node)->ref()); + + case details::expression_node::e_vector: + return reinterpret_cast(static_cast(node)->vec_holder().data()); + + #ifndef exprtk_disable_string_capabilities + case details::expression_node::e_stringvar: + return reinterpret_cast((static_cast(node)->base())); + + case details::expression_node::e_stringvarrng: + return reinterpret_cast((static_cast(node)->base())); + #endif + default : return reinterpret_cast(0); + } + } + + return reinterpret_cast(0); + } + + bool assign_immutable_symbol(expression_node_ptr node) + { + interval_t interval; + const void* baseptr_addr = base_ptr(node); + + exprtk_debug(("assign_immutable_symbol - base ptr addr: %p\n", baseptr_addr)); + + if (parser_->immutable_memory_map_.in_interval(baseptr_addr,interval)) + { + typename immutable_symtok_map_t::iterator itr = parser_->immutable_symtok_map_.find(interval); + + if (parser_->immutable_symtok_map_.end() != itr) + { + token_t& token = itr->second; + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + token, + "ERR242 - Symbol '" + token.value + "' cannot be assigned-to as it is immutable.", + exprtk_error_location)); + } + else + parser_->set_synthesis_error("Unable to assign symbol is immutable."); + + return true; + } + + return false; + } + + inline expression_node_ptr synthesize_assignment_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2]) + { + if (assign_immutable_symbol(branch[0])) + { + return error_node(); + } + else if (details::is_variable_node(branch[0])) + { + lodge_assignment(e_st_variable,branch[0]); + return synthesize_expression(operation,branch); + } + else if (details::is_vector_elem_node(branch[0]) || details::is_vector_celem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + return synthesize_expression(operation, branch); + } + else if (details::is_vector_elem_rtc_node(branch[0]) || details::is_vector_celem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + return synthesize_expression(operation, branch); + } + else if (details::is_rebasevector_elem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + return synthesize_expression(operation, branch); + } + else if (details::is_rebasevector_elem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + return synthesize_expression(operation, branch); + } + else if (details::is_rebasevector_celem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + return synthesize_expression(operation, branch); + } + #ifndef exprtk_disable_string_capabilities + else if (details::is_string_node(branch[0])) + { + lodge_assignment(e_st_string,branch[0]); + return synthesize_expression(operation, branch); + } + else if (details::is_string_range_node(branch[0])) + { + lodge_assignment(e_st_string,branch[0]); + return synthesize_expression(operation, branch); + } + #endif + else if (details::is_vector_node(branch[0])) + { + lodge_assignment(e_st_vector,branch[0]); + + if (details::is_ivector_node(branch[1])) + return synthesize_expression(operation, branch); + else + return synthesize_expression(operation, branch); + } + else + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR243 - Invalid branches for assignment operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + } + + inline expression_node_ptr synthesize_assignment_operation_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + if (assign_immutable_symbol(branch[0])) + { + return error_node(); + } + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (details::is_variable_node(branch[0])) + { + lodge_assignment(e_st_variable,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_vector_elem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_vec_elem_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_vector_elem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_vec_elem_op_rtc_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_vector_celem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_vec_celem_op_rtc_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_rebasevector_elem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_rebasevec_elem_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_rebasevector_celem_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_rebasevec_celem_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_rebasevector_elem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_rebasevec_elem_op_rtc_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_rebasevector_celem_rtc_node(branch[0])) + { + lodge_assignment(e_st_vecelem,branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_rebasevec_celem_op_rtc_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else if (details::is_vector_node(branch[0])) + { + lodge_assignment(e_st_vector,branch[0]); + + if (details::is_ivector_node(branch[1])) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_rebasevec_celem_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + else + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "assignment_vec_op_node"; \ + break; \ + + case_stmt(details::e_addass , details::add_op) + case_stmt(details::e_subass , details::sub_op) + case_stmt(details::e_mulass , details::mul_op) + case_stmt(details::e_divass , details::div_op) + case_stmt(details::e_modass , details::mod_op) + #undef case_stmt + default : return error_node(); + } + } + } + #ifndef exprtk_disable_string_capabilities + else if ( + (details::e_addass == operation) && + details::is_string_node(branch[0]) + ) + { + typedef details::assignment_string_node addass_t; + + lodge_assignment(e_st_string,branch[0]); + + result = synthesize_expression(operation,branch); + node_name = "assignment_string_node"; + } + #endif + else + { + parser_->set_error(parser_error::make_error( + parser_error::e_syntax, + parser_->current_state().token, + "ERR244 - Invalid branches for assignment operator '" + details::to_str(operation) + "'", + exprtk_error_location)); + + return error_node(); + } + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR245 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + inline expression_node_ptr synthesize_veceqineqlogic_operation_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const bool is_b0_ivec = details::is_ivector_node(branch[0]); + const bool is_b1_ivec = details::is_ivector_node(branch[1]); + + #define batch_eqineq_logic_case \ + case_stmt(details::e_lt , details::lt_op ) \ + case_stmt(details::e_lte , details::lte_op ) \ + case_stmt(details::e_gt , details::gt_op ) \ + case_stmt(details::e_gte , details::gte_op ) \ + case_stmt(details::e_eq , details::eq_op ) \ + case_stmt(details::e_ne , details::ne_op ) \ + case_stmt(details::e_equal , details::equal_op) \ + case_stmt(details::e_and , details::and_op ) \ + case_stmt(details::e_nand , details::nand_op ) \ + case_stmt(details::e_or , details::or_op ) \ + case_stmt(details::e_nor , details::nor_op ) \ + case_stmt(details::e_xor , details::xor_op ) \ + case_stmt(details::e_xnor , details::xnor_op ) \ + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (is_b0_ivec && is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_vecvec_node"; \ + break; \ + + batch_eqineq_logic_case + #undef case_stmt + default : return error_node(); + } + } + else if (is_b0_ivec && !is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_vecval_node"; \ + break; \ + + batch_eqineq_logic_case + #undef case_stmt + default : return error_node(); + } + } + else if (!is_b0_ivec && is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_valvec_node"; \ + break; \ + + batch_eqineq_logic_case + #undef case_stmt + default : return error_node(); + } + } + else + return error_node(); + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR246 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + + #undef batch_eqineq_logic_case + } + + inline expression_node_ptr synthesize_vecarithmetic_operation_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const bool is_b0_ivec = details::is_ivector_node(branch[0]); + const bool is_b1_ivec = details::is_ivector_node(branch[1]); + + #define vector_ops \ + case_stmt(details::e_add , details::add_op) \ + case_stmt(details::e_sub , details::sub_op) \ + case_stmt(details::e_mul , details::mul_op) \ + case_stmt(details::e_div , details::div_op) \ + case_stmt(details::e_mod , details::mod_op) \ + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (is_b0_ivec && is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_vecvec_node"; \ + break; \ + + vector_ops + case_stmt(details::e_pow,details:: pow_op) + #undef case_stmt + default : return error_node(); + } + } + else if (is_b0_ivec && !is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_vecval_node(b0ivec,!b1ivec)"; \ + break; \ + + vector_ops + case_stmt(details::e_pow,details:: pow_op) + #undef case_stmt + default : return error_node(); + } + } + else if (!is_b0_ivec && is_b1_ivec) + { + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : result = node_allocator_-> \ + template allocate_rrr > > \ + (operation, branch[0], branch[1]); \ + node_name = "vec_binop_vecval_node(!b0ivec,b1ivec)"; \ + break; \ + + vector_ops + #undef case_stmt + default : return error_node(); + } + } + else + return error_node(); + + if (result && result->valid()) + { + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR247 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + + #undef vector_ops + } + + inline expression_node_ptr synthesize_swap_expression(expression_node_ptr (&branch)[2]) + { + const bool v0_is_ivar = details::is_ivariable_node(branch[0]); + const bool v1_is_ivar = details::is_ivariable_node(branch[1]); + + const bool v0_is_ivec = details::is_ivector_node (branch[0]); + const bool v1_is_ivec = details::is_ivector_node (branch[1]); + + #ifndef exprtk_disable_string_capabilities + const bool v0_is_str = details::is_generally_string_node(branch[0]); + const bool v1_is_str = details::is_generally_string_node(branch[1]); + #endif + + expression_node_ptr result = error_node(); + std::string node_name = "Unknown"; + + if (v0_is_ivar && v1_is_ivar) + { + typedef details::variable_node* variable_node_ptr; + + variable_node_ptr v0 = variable_node_ptr(0); + variable_node_ptr v1 = variable_node_ptr(0); + + if ( + (0 != (v0 = dynamic_cast(branch[0]))) && + (0 != (v1 = dynamic_cast(branch[1]))) + ) + { + result = node_allocator_->allocate >(v0,v1); + node_name = "swap_node"; + } + else + { + result = node_allocator_->allocate >(branch[0],branch[1]); + node_name = "swap_generic_node"; + } + } + else if (v0_is_ivec && v1_is_ivec) + { + result = node_allocator_->allocate >(branch[0],branch[1]); + node_name = "swap_vecvec_node"; + } + #ifndef exprtk_disable_string_capabilities + else if (v0_is_str && v1_is_str) + { + if (is_string_node(branch[0]) && is_string_node(branch[1])) + { + result = node_allocator_->allocate > + (branch[0], branch[1]); + node_name = "swap_string_node"; + } + else + { + result = node_allocator_->allocate > + (branch[0], branch[1]); + node_name = "swap_genstrings_node"; + } + } + #endif + else + { + parser_->set_synthesis_error("Only variables, strings, vectors or vector elements can be swapped"); + return error_node(); + } + + if (result && result->valid()) + { + parser_->state_.activate_side_effect("synthesize_swap_expression()"); + return result; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_synthesis, + token_t(), + "ERR248 - Failed to synthesize node: " + node_name, + exprtk_error_location)); + + details::free_node(*node_allocator_, result); + return error_node(); + } + + #ifndef exprtk_disable_sc_andor + inline expression_node_ptr synthesize_shortcircuit_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2]) + { + expression_node_ptr result = error_node(); + + if (details::is_constant_node(branch[0])) + { + if ( + (details::e_scand == operation) && + std::equal_to()(T(0),branch[0]->value()) + ) + result = node_allocator_->allocate_c(T(0)); + else if ( + (details::e_scor == operation) && + std::not_equal_to()(T(0),branch[0]->value()) + ) + result = node_allocator_->allocate_c(T(1)); + } + + if (details::is_constant_node(branch[1]) && (0 == result)) + { + if ( + (details::e_scand == operation) && + std::equal_to()(T(0),branch[1]->value()) + ) + result = node_allocator_->allocate_c(T(0)); + else if ( + (details::e_scor == operation) && + std::not_equal_to()(T(0),branch[1]->value()) + ) + result = node_allocator_->allocate_c(T(1)); + } + + if (result) + { + details::free_node(*node_allocator_, branch[0]); + details::free_node(*node_allocator_, branch[1]); + + return result; + } + else if (details::e_scand == operation) + { + return synthesize_expression(operation, branch); + } + else if (details::e_scor == operation) + { + return synthesize_expression(operation, branch); + } + else + return error_node(); + } + #else + inline expression_node_ptr synthesize_shortcircuit_expression(const details::operator_type&, expression_node_ptr (&)[2]) + { + return error_node(); + } + #endif + + #define basic_opr_switch_statements \ + case_stmt(details::e_add , details::add_op) \ + case_stmt(details::e_sub , details::sub_op) \ + case_stmt(details::e_mul , details::mul_op) \ + case_stmt(details::e_div , details::div_op) \ + case_stmt(details::e_mod , details::mod_op) \ + case_stmt(details::e_pow , details::pow_op) \ + + #define extended_opr_switch_statements \ + case_stmt(details::e_lt , details::lt_op ) \ + case_stmt(details::e_lte , details::lte_op ) \ + case_stmt(details::e_gt , details::gt_op ) \ + case_stmt(details::e_gte , details::gte_op ) \ + case_stmt(details::e_eq , details::eq_op ) \ + case_stmt(details::e_ne , details::ne_op ) \ + case_stmt(details::e_and , details::and_op ) \ + case_stmt(details::e_nand , details::nand_op) \ + case_stmt(details::e_or , details::or_op ) \ + case_stmt(details::e_nor , details::nor_op ) \ + case_stmt(details::e_xor , details::xor_op ) \ + case_stmt(details::e_xnor , details::xnor_op) \ + + #ifndef exprtk_disable_cardinal_pow_optimisation + template class IPowNode> + inline expression_node_ptr cardinal_pow_optimisation_impl(const TType& v, const unsigned int& p) + { + switch (p) + { + #define case_stmt(cp) \ + case cp : return node_allocator_-> \ + allocate > >(v); \ + + case_stmt( 1) case_stmt( 2) case_stmt( 3) case_stmt( 4) + case_stmt( 5) case_stmt( 6) case_stmt( 7) case_stmt( 8) + case_stmt( 9) case_stmt(10) case_stmt(11) case_stmt(12) + case_stmt(13) case_stmt(14) case_stmt(15) case_stmt(16) + case_stmt(17) case_stmt(18) case_stmt(19) case_stmt(20) + case_stmt(21) case_stmt(22) case_stmt(23) case_stmt(24) + case_stmt(25) case_stmt(26) case_stmt(27) case_stmt(28) + case_stmt(29) case_stmt(30) case_stmt(31) case_stmt(32) + case_stmt(33) case_stmt(34) case_stmt(35) case_stmt(36) + case_stmt(37) case_stmt(38) case_stmt(39) case_stmt(40) + case_stmt(41) case_stmt(42) case_stmt(43) case_stmt(44) + case_stmt(45) case_stmt(46) case_stmt(47) case_stmt(48) + case_stmt(49) case_stmt(50) case_stmt(51) case_stmt(52) + case_stmt(53) case_stmt(54) case_stmt(55) case_stmt(56) + case_stmt(57) case_stmt(58) case_stmt(59) case_stmt(60) + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr cardinal_pow_optimisation(const T& v, const T& c) + { + const bool not_recipricol = (c >= T(0)); + const unsigned int p = static_cast(details::numeric::to_int32(details::numeric::abs(c))); + + if (0 == p) + return node_allocator_->allocate_c(T(1)); + else if (std::equal_to()(T(2),c)) + { + return node_allocator_-> + template allocate_rr > >(v,v); + } + else + { + if (not_recipricol) + return cardinal_pow_optimisation_impl(v,p); + else + return cardinal_pow_optimisation_impl(v,p); + } + } + + inline bool cardinal_pow_optimisable(const details::operator_type& operation, const T& c) const + { + return (details::e_pow == operation) && (details::numeric::abs(c) <= T(60)) && details::numeric::is_integer(c); + } + + inline expression_node_ptr cardinal_pow_optimisation(expression_node_ptr (&branch)[2]) + { + const Type c = static_cast*>(branch[1])->value(); + const bool not_recipricol = (c >= T(0)); + const unsigned int p = static_cast(details::numeric::to_int32(details::numeric::abs(c))); + + node_allocator_->free(branch[1]); + + if (0 == p) + { + details::free_all_nodes(*node_allocator_, branch); + + return node_allocator_->allocate_c(T(1)); + } + else if (not_recipricol) + return cardinal_pow_optimisation_impl(branch[0],p); + else + return cardinal_pow_optimisation_impl(branch[0],p); + } + #else + inline expression_node_ptr cardinal_pow_optimisation(T&, const T&) + { + return error_node(); + } + + inline bool cardinal_pow_optimisable(const details::operator_type&, const T&) + { + return false; + } + + inline expression_node_ptr cardinal_pow_optimisation(expression_node_ptr(&)[2]) + { + return error_node(); + } + #endif + + struct synthesize_binary_ext_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const bool left_neg = is_neg_unary_node(branch[0]); + const bool right_neg = is_neg_unary_node(branch[1]); + + if (left_neg && right_neg) + { + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + if ( + !expr_gen.parser_->simplify_unary_negation_branch(branch[0]) || + !expr_gen.parser_->simplify_unary_negation_branch(branch[1]) + ) + { + details::free_all_nodes(*expr_gen.node_allocator_,branch); + + return error_node(); + } + } + + switch (operation) + { + // -f(x + 1) + -g(y + 1) --> -(f(x + 1) + g(y + 1)) + case details::e_add : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0],branch[1])); + + // -f(x + 1) - -g(y + 1) --> g(y + 1) - f(x + 1) + case details::e_sub : return expr_gen.node_allocator_-> + template allocate > > + (branch[1],branch[0]); + + default : break; + } + } + else if (left_neg && !right_neg) + { + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + if (!expr_gen.parser_->simplify_unary_negation_branch(branch[0])) + { + details::free_all_nodes(*expr_gen.node_allocator_,branch); + + return error_node(); + } + + switch (operation) + { + // -f(x + 1) + g(y + 1) --> g(y + 1) - f(x + 1) + case details::e_add : return expr_gen.node_allocator_-> + template allocate > > + (branch[1], branch[0]); + + // -f(x + 1) - g(y + 1) --> -(f(x + 1) + g(y + 1)) + case details::e_sub : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1])); + + // -f(x + 1) * g(y + 1) --> -(f(x + 1) * g(y + 1)) + case details::e_mul : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1])); + + // -f(x + 1) / g(y + 1) --> -(f(x + 1) / g(y + 1)) + case details::e_div : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1])); + + default : return error_node(); + } + } + } + else if (!left_neg && right_neg) + { + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + if (!expr_gen.parser_->simplify_unary_negation_branch(branch[1])) + { + details::free_all_nodes(*expr_gen.node_allocator_,branch); + + return error_node(); + } + + switch (operation) + { + // f(x + 1) + -g(y + 1) --> f(x + 1) - g(y + 1) + case details::e_add : return expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1]); + + // f(x + 1) - - g(y + 1) --> f(x + 1) + g(y + 1) + case details::e_sub : return expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1]); + + // f(x + 1) * -g(y + 1) --> -(f(x + 1) * g(y + 1)) + case details::e_mul : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1])); + + // f(x + 1) / -g(y + 1) --> -(f(x + 1) / g(y + 1)) + case details::e_div : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate > > + (branch[0], branch[1])); + + default : return error_node(); + } + } + } + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate > > \ + (branch[0], branch[1]); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_vob_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type& v = static_cast*>(branch[0])->ref(); + + #ifndef exprtk_disable_enhanced_features + if (details::is_sf3ext_node(branch[1])) + { + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile_right + (expr_gen, v, operation, branch[1], result); + + if (synthesis_result) + { + details::free_node(*expr_gen.node_allocator_,branch[1]); + return result; + } + } + #endif + + if ( + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + if (details::is_uv_node(branch[1])) + { + typedef details::uv_base_node* uvbn_ptr_t; + + details::operator_type o = static_cast(branch[1])->operation(); + + if (details::e_neg == o) + { + const Type& v1 = static_cast(branch[1])->v(); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + + switch (operation) + { + case details::e_mul : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate_rr > >(v,v1)); + + case details::e_div : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate_rr > >(v,v1)); + + default : break; + } + } + } + } + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_rc > > \ + (v, branch[1]); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_bov_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type& v = static_cast*>(branch[1])->ref(); + + #ifndef exprtk_disable_enhanced_features + if (details::is_sf3ext_node(branch[0])) + { + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile_left + (expr_gen, v, operation, branch[0], result); + + if (synthesis_result) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + + return result; + } + } + #endif + + if ( + (details::e_add == operation) || + (details::e_sub == operation) || + (details::e_mul == operation) || + (details::e_div == operation) + ) + { + if (details::is_uv_node(branch[0])) + { + typedef details::uv_base_node* uvbn_ptr_t; + + details::operator_type o = static_cast(branch[0])->operation(); + + if (details::e_neg == o) + { + const Type& v0 = static_cast(branch[0])->v(); + + details::free_node(*expr_gen.node_allocator_,branch[0]); + + switch (operation) + { + case details::e_add : return expr_gen.node_allocator_-> + template allocate_rr > >(v,v0); + + case details::e_sub : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate_rr > >(v0,v)); + + case details::e_mul : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate_rr > >(v0,v)); + + case details::e_div : return expr_gen(details::e_neg, + expr_gen.node_allocator_-> + template allocate_rr > >(v0,v)); + default : break; + } + } + } + } + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_cr > > \ + (branch[0], v); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_cob_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type c = static_cast*>(branch[0])->value(); + + details::free_node(*expr_gen.node_allocator_,branch[0]); + + if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_,branch[1]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + return branch[1]; + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + return branch[1]; + + if (details::is_cob_node(branch[1])) + { + // Simplify expressions of the form: + // 1. (1 * (2 * (3 * (4 * (5 * (6 * (7 * (8 * (9 + x))))))))) --> 40320 * (9 + x) + // 2. (1 + (2 + (3 + (4 + (5 + (6 + (7 + (8 + (9 + x))))))))) --> 45 + x + if ( + (details::e_mul == operation) || + (details::e_add == operation) + ) + { + details::cob_base_node* cobnode = static_cast*>(branch[1]); + + if (operation == cobnode->operation()) + { + switch (operation) + { + case details::e_add : cobnode->set_c(c + cobnode->c()); break; + case details::e_mul : cobnode->set_c(c * cobnode->c()); break; + default : return error_node(); + } + + return cobnode; + } + } + + if (operation == details::e_mul) + { + details::cob_base_node* cobnode = static_cast*>(branch[1]); + details::operator_type cob_opr = cobnode->operation(); + + if ( + (details::e_div == cob_opr) || + (details::e_mul == cob_opr) + ) + { + switch (cob_opr) + { + case details::e_div : cobnode->set_c(c * cobnode->c()); break; + case details::e_mul : cobnode->set_c(cobnode->c() / c); break; + default : return error_node(); + } + + return cobnode; + } + } + else if (operation == details::e_div) + { + details::cob_base_node* cobnode = static_cast*>(branch[1]); + details::operator_type cob_opr = cobnode->operation(); + + if ( + (details::e_div == cob_opr) || + (details::e_mul == cob_opr) + ) + { + details::expression_node* new_cobnode = error_node(); + + switch (cob_opr) + { + case details::e_div : new_cobnode = expr_gen.node_allocator_-> + template allocate_tt > > + (c / cobnode->c(), cobnode->move_branch(0)); + break; + + case details::e_mul : new_cobnode = expr_gen.node_allocator_-> + template allocate_tt > > + (c / cobnode->c(), cobnode->move_branch(0)); + break; + + default : return error_node(); + } + + details::free_node(*expr_gen.node_allocator_,branch[1]); + + return new_cobnode; + } + } + } + #ifndef exprtk_disable_enhanced_features + else if (details::is_sf3ext_node(branch[1])) + { + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile_right + (expr_gen, c, operation, branch[1], result); + + if (synthesis_result) + { + details::free_node(*expr_gen.node_allocator_,branch[1]); + + return result; + } + } + #endif + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_tt > > \ + (c, branch[1]); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_boc_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type c = static_cast*>(branch[1])->value(); + + details::free_node(*(expr_gen.node_allocator_), branch[1]); + + if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + + return expr_gen(std::numeric_limits::quiet_NaN()); + } + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + return branch[0]; + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + return branch[0]; + + if (details::is_boc_node(branch[0])) + { + // Simplify expressions of the form: + // 1. (((((((((x + 9) * 8) * 7) * 6) * 5) * 4) * 3) * 2) * 1) --> (x + 9) * 40320 + // 2. (((((((((x + 9) + 8) + 7) + 6) + 5) + 4) + 3) + 2) + 1) --> x + 45 + if ( + (details::e_mul == operation) || + (details::e_add == operation) + ) + { + details::boc_base_node* bocnode = static_cast*>(branch[0]); + + if (operation == bocnode->operation()) + { + switch (operation) + { + case details::e_add : bocnode->set_c(c + bocnode->c()); break; + case details::e_mul : bocnode->set_c(c * bocnode->c()); break; + default : return error_node(); + } + + return bocnode; + } + } + else if (operation == details::e_div) + { + details::boc_base_node* bocnode = static_cast*>(branch[0]); + details::operator_type boc_opr = bocnode->operation(); + + if ( + (details::e_div == boc_opr) || + (details::e_mul == boc_opr) + ) + { + switch (boc_opr) + { + case details::e_div : bocnode->set_c(c * bocnode->c()); break; + case details::e_mul : bocnode->set_c(bocnode->c() / c); break; + default : return error_node(); + } + + return bocnode; + } + } + else if (operation == details::e_pow) + { + // (v ^ c0) ^ c1 --> v ^(c0 * c1) + details::boc_base_node* bocnode = static_cast*>(branch[0]); + details::operator_type boc_opr = bocnode->operation(); + + if (details::e_pow == boc_opr) + { + bocnode->set_c(bocnode->c() * c); + + return bocnode; + } + } + } + + #ifndef exprtk_disable_enhanced_features + if (details::is_sf3ext_node(branch[0])) + { + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile_left + (expr_gen, c, operation, branch[0], result); + + if (synthesis_result) + { + free_node(*expr_gen.node_allocator_, branch[0]); + + return result; + } + } + #endif + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_cr > > \ + (branch[0], c); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_cocob_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + expression_node_ptr result = error_node(); + + // (cob) o c --> cob + if (details::is_cob_node(branch[0])) + { + details::cob_base_node* cobnode = static_cast*>(branch[0]); + + const Type c = static_cast*>(branch[1])->value(); + + if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return expr_gen(T(std::numeric_limits::quiet_NaN())); + } + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return branch[0]; + } + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return branch[0]; + } + else if (std::equal_to()(T(1),c) && (details::e_div == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return branch[0]; + } + + const bool op_addsub = (details::e_add == cobnode->operation()) || + (details::e_sub == cobnode->operation()) ; + + if (op_addsub) + { + switch (operation) + { + case details::e_add : cobnode->set_c(cobnode->c() + c); break; + case details::e_sub : cobnode->set_c(cobnode->c() - c); break; + default : return error_node(); + } + + result = cobnode; + } + else if (details::e_mul == cobnode->operation()) + { + switch (operation) + { + case details::e_mul : cobnode->set_c(cobnode->c() * c); break; + case details::e_div : cobnode->set_c(cobnode->c() / c); break; + default : return error_node(); + } + + result = cobnode; + } + else if (details::e_div == cobnode->operation()) + { + if (details::e_mul == operation) + { + cobnode->set_c(cobnode->c() * c); + result = cobnode; + } + else if (details::e_div == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (cobnode->c() / c, cobnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_, branch[0]); + } + } + + if (result) + { + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + + // c o (cob) --> cob + else if (details::is_cob_node(branch[1])) + { + details::cob_base_node* cobnode = static_cast*>(branch[1]); + + const Type c = static_cast*>(branch[0])->value(); + + if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + details::free_node(*expr_gen.node_allocator_, branch[1]); + + return expr_gen(T(0)); + } + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + + return branch[1]; + } + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + { + details::free_node(*expr_gen.node_allocator_, branch[0]); + + return branch[1]; + } + + if (details::e_add == cobnode->operation()) + { + if (details::e_add == operation) + { + cobnode->set_c(c + cobnode->c()); + result = cobnode; + } + else if (details::e_sub == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c - cobnode->c(), cobnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_sub == cobnode->operation()) + { + if (details::e_add == operation) + { + cobnode->set_c(c + cobnode->c()); + result = cobnode; + } + else if (details::e_sub == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c - cobnode->c(), cobnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_mul == cobnode->operation()) + { + if (details::e_mul == operation) + { + cobnode->set_c(c * cobnode->c()); + result = cobnode; + } + else if (details::e_div == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c / cobnode->c(), cobnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_div == cobnode->operation()) + { + if (details::e_mul == operation) + { + cobnode->set_c(c * cobnode->c()); + result = cobnode; + } + else if (details::e_div == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c / cobnode->c(), cobnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + + if (result) + { + details::free_node(*expr_gen.node_allocator_,branch[0]); + } + } + + return result; + } + }; + + struct synthesize_coboc_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + expression_node_ptr result = error_node(); + + // (boc) o c --> boc + if (details::is_boc_node(branch[0])) + { + details::boc_base_node* bocnode = static_cast*>(branch[0]); + + const Type c = static_cast*>(branch[1])->value(); + + if (details::e_add == bocnode->operation()) + { + switch (operation) + { + case details::e_add : bocnode->set_c(bocnode->c() + c); break; + case details::e_sub : bocnode->set_c(bocnode->c() - c); break; + default : return error_node(); + } + + result = bocnode; + } + else if (details::e_mul == bocnode->operation()) + { + switch (operation) + { + case details::e_mul : bocnode->set_c(bocnode->c() * c); break; + case details::e_div : bocnode->set_c(bocnode->c() / c); break; + default : return error_node(); + } + + result = bocnode; + } + else if (details::e_sub == bocnode->operation()) + { + if (details::e_add == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (bocnode->move_branch(0), c - bocnode->c()); + + details::free_node(*expr_gen.node_allocator_,branch[0]); + } + else if (details::e_sub == operation) + { + bocnode->set_c(bocnode->c() + c); + result = bocnode; + } + } + else if (details::e_div == bocnode->operation()) + { + switch (operation) + { + case details::e_div : bocnode->set_c(bocnode->c() * c); break; + case details::e_mul : bocnode->set_c(bocnode->c() / c); break; + default : return error_node(); + } + + result = bocnode; + } + + if (result) + { + details::free_node(*expr_gen.node_allocator_, branch[1]); + } + } + + // c o (boc) --> boc + else if (details::is_boc_node(branch[1])) + { + details::boc_base_node* bocnode = static_cast*>(branch[1]); + + const Type c = static_cast*>(branch[0])->value(); + + if (details::e_add == bocnode->operation()) + { + if (details::e_add == operation) + { + bocnode->set_c(c + bocnode->c()); + result = bocnode; + } + else if (details::e_sub == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c - bocnode->c(), bocnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_sub == bocnode->operation()) + { + if (details::e_add == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (bocnode->move_branch(0), c - bocnode->c()); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + else if (details::e_sub == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c + bocnode->c(), bocnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_mul == bocnode->operation()) + { + if (details::e_mul == operation) + { + bocnode->set_c(c * bocnode->c()); + result = bocnode; + } + else if (details::e_div == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c / bocnode->c(), bocnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + else if (details::e_div == bocnode->operation()) + { + if (details::e_mul == operation) + { + bocnode->set_c(bocnode->c() / c); + result = bocnode; + } + else if (details::e_div == operation) + { + result = expr_gen.node_allocator_-> + template allocate_tt > > + (c * bocnode->c(), bocnode->move_branch(0)); + + details::free_node(*expr_gen.node_allocator_,branch[1]); + } + } + + if (result) + { + details::free_node(*expr_gen.node_allocator_,branch[0]); + } + } + + return result; + } + }; + + #ifndef exprtk_disable_enhanced_features + inline bool synthesize_expression(const details::operator_type& operation, + expression_node_ptr (&branch)[2], + expression_node_ptr& result) + { + result = error_node(); + + if (!operation_optimisable(operation)) + return false; + + const std::string node_id = branch_to_id(branch); + + const typename synthesize_map_t::iterator itr = synthesize_map_.find(node_id); + + if (synthesize_map_.end() != itr) + { + result = itr->second((*this), operation, branch); + + return true; + } + else + return false; + } + + struct synthesize_vov_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type& v1 = static_cast*>(branch[0])->ref(); + const Type& v2 = static_cast*>(branch[1])->ref(); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_rr > > \ + (v1, v2); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_cov_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type c = static_cast*> (branch[0])->value(); + const Type& v = static_cast*>(branch[1])->ref (); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + return expr_gen(T(0)); + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + return expr_gen(T(0)); + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + return static_cast*>(branch[1]); + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + return static_cast*>(branch[1]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_cr > > \ + (c, v); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_voc_expression + { + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + const Type& v = static_cast*>(branch[0])->ref (); + const Type c = static_cast*> (branch[1])->value(); + + details::free_node(*(expr_gen.node_allocator_), branch[1]); + + if (expr_gen.cardinal_pow_optimisable(operation,c)) + { + if (std::equal_to()(T(1),c)) + return branch[0]; + else + return expr_gen.cardinal_pow_optimisation(v,c); + } + else if (std::equal_to()(T(0),c) && (details::e_mul == operation)) + return expr_gen(T(0)); + else if (std::equal_to()(T(0),c) && (details::e_div == operation)) + return expr_gen(std::numeric_limits::quiet_NaN()); + else if (std::equal_to()(T(0),c) && (details::e_add == operation)) + return static_cast*>(branch[0]); + else if (std::equal_to()(T(1),c) && (details::e_mul == operation)) + return static_cast*>(branch[0]); + else if (std::equal_to()(T(1),c) && (details::e_div == operation)) + return static_cast*>(branch[0]); + + switch (operation) + { + #define case_stmt(op0, op1) \ + case op0 : return expr_gen.node_allocator_-> \ + template allocate_rc > > \ + (v, c); \ + + basic_opr_switch_statements + extended_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + }; + + struct synthesize_sf3ext_expression + { + template + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& sf3opr, + T0 t0, T1 t1, T2 t2) + { + switch (sf3opr) + { + #define case_stmt(op) \ + case details::e_sf##op : return details::T0oT1oT2_sf3ext >:: \ + allocate(*(expr_gen.node_allocator_), t0, t1, t2); \ + + case_stmt(00) case_stmt(01) case_stmt(02) case_stmt(03) + case_stmt(04) case_stmt(05) case_stmt(06) case_stmt(07) + case_stmt(08) case_stmt(09) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + case_stmt(20) case_stmt(21) case_stmt(22) case_stmt(23) + case_stmt(24) case_stmt(25) case_stmt(26) case_stmt(27) + case_stmt(28) case_stmt(29) case_stmt(30) + #undef case_stmt + default : return error_node(); + } + } + + template + static inline bool compile(expression_generator& expr_gen, const std::string& id, + T0 t0, T1 t1, T2 t2, + expression_node_ptr& result) + { + details::operator_type sf3opr; + + if (!expr_gen.sf3_optimisable(id,sf3opr)) + return false; + else + result = synthesize_sf3ext_expression::template process + (expr_gen, sf3opr, t0, t1, t2); + + return true; + } + }; + + struct synthesize_sf4ext_expression + { + template + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& sf4opr, + T0 t0, T1 t1, T2 t2, T3 t3) + { + switch (sf4opr) + { + #define case_stmt0(op) \ + case details::e_sf##op : return details::T0oT1oT2oT3_sf4ext >:: \ + allocate(*(expr_gen.node_allocator_), t0, t1, t2, t3); \ + + #define case_stmt1(op) \ + case details::e_sf4ext##op : return details::T0oT1oT2oT3_sf4ext >:: \ + allocate(*(expr_gen.node_allocator_), t0, t1, t2, t3); \ + + case_stmt0(48) case_stmt0(49) case_stmt0(50) case_stmt0(51) + case_stmt0(52) case_stmt0(53) case_stmt0(54) case_stmt0(55) + case_stmt0(56) case_stmt0(57) case_stmt0(58) case_stmt0(59) + case_stmt0(60) case_stmt0(61) case_stmt0(62) case_stmt0(63) + case_stmt0(64) case_stmt0(65) case_stmt0(66) case_stmt0(67) + case_stmt0(68) case_stmt0(69) case_stmt0(70) case_stmt0(71) + case_stmt0(72) case_stmt0(73) case_stmt0(74) case_stmt0(75) + case_stmt0(76) case_stmt0(77) case_stmt0(78) case_stmt0(79) + case_stmt0(80) case_stmt0(81) case_stmt0(82) case_stmt0(83) + + case_stmt1(00) case_stmt1(01) case_stmt1(02) case_stmt1(03) + case_stmt1(04) case_stmt1(05) case_stmt1(06) case_stmt1(07) + case_stmt1(08) case_stmt1(09) case_stmt1(10) case_stmt1(11) + case_stmt1(12) case_stmt1(13) case_stmt1(14) case_stmt1(15) + case_stmt1(16) case_stmt1(17) case_stmt1(18) case_stmt1(19) + case_stmt1(20) case_stmt1(21) case_stmt1(22) case_stmt1(23) + case_stmt1(24) case_stmt1(25) case_stmt1(26) case_stmt1(27) + case_stmt1(28) case_stmt1(29) case_stmt1(30) case_stmt1(31) + case_stmt1(32) case_stmt1(33) case_stmt1(34) case_stmt1(35) + case_stmt1(36) case_stmt1(37) case_stmt1(38) case_stmt1(39) + case_stmt1(40) case_stmt1(41) case_stmt1(42) case_stmt1(43) + case_stmt1(44) case_stmt1(45) case_stmt1(46) case_stmt1(47) + case_stmt1(48) case_stmt1(49) case_stmt1(50) case_stmt1(51) + case_stmt1(52) case_stmt1(53) case_stmt1(54) case_stmt1(55) + case_stmt1(56) case_stmt1(57) case_stmt1(58) case_stmt1(59) + case_stmt1(60) case_stmt1(61) + + #undef case_stmt0 + #undef case_stmt1 + default : return error_node(); + } + } + + template + static inline bool compile(expression_generator& expr_gen, const std::string& id, + T0 t0, T1 t1, T2 t2, T3 t3, + expression_node_ptr& result) + { + details::operator_type sf4opr; + + if (!expr_gen.sf4_optimisable(id,sf4opr)) + return false; + else + result = synthesize_sf4ext_expression::template process + (expr_gen, sf4opr, t0, t1, t2, t3); + + return true; + } + + // T o (sf3ext) + template + static inline bool compile_right(expression_generator& expr_gen, + ExternalType t, + const details::operator_type& operation, + expression_node_ptr& sf3node, + expression_node_ptr& result) + { + if (!details::is_sf3ext_node(sf3node)) + return false; + + typedef details::T0oT1oT2_base_node* sf3ext_base_ptr; + + sf3ext_base_ptr n = static_cast(sf3node); + const std::string id = "t" + expr_gen.to_str(operation) + "(" + n->type_id() + ")"; + + switch (n->type()) + { + case details::expression_node::e_covoc : return compile_right_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_covov : return compile_right_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vocov : return compile_right_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vovoc : return compile_right_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vovov : return compile_right_impl + + (expr_gen, id, t, sf3node, result); + + default : return false; + } + } + + // (sf3ext) o T + template + static inline bool compile_left(expression_generator& expr_gen, + ExternalType t, + const details::operator_type& operation, + expression_node_ptr& sf3node, + expression_node_ptr& result) + { + if (!details::is_sf3ext_node(sf3node)) + return false; + + typedef details::T0oT1oT2_base_node* sf3ext_base_ptr; + + sf3ext_base_ptr n = static_cast(sf3node); + + const std::string id = "(" + n->type_id() + ")" + expr_gen.to_str(operation) + "t"; + + switch (n->type()) + { + case details::expression_node::e_covoc : return compile_left_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_covov : return compile_left_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vocov : return compile_left_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vovoc : return compile_left_impl + + (expr_gen, id, t, sf3node, result); + + case details::expression_node::e_vovov : return compile_left_impl + + (expr_gen, id, t, sf3node, result); + + default : return false; + } + } + + template + static inline bool compile_right_impl(expression_generator& expr_gen, + const std::string& id, + ExternalType t, + expression_node_ptr& node, + expression_node_ptr& result) + { + SF3TypeNode* n = dynamic_cast(node); + + if (n) + { + T0 t0 = n->t0(); + T1 t1 = n->t1(); + T2 t2 = n->t2(); + + return synthesize_sf4ext_expression::template compile + (expr_gen, id, t, t0, t1, t2, result); + } + else + return false; + } + + template + static inline bool compile_left_impl(expression_generator& expr_gen, + const std::string& id, + ExternalType t, + expression_node_ptr& node, + expression_node_ptr& result) + { + SF3TypeNode* n = dynamic_cast(node); + + if (n) + { + T0 t0 = n->t0(); + T1 t1 = n->t1(); + T2 t2 = n->t2(); + + return synthesize_sf4ext_expression::template compile + (expr_gen, id, t0, t1, t2, t, result); + } + else + return false; + } + }; + + struct synthesize_vovov_expression0 + { + typedef typename vovov_t::type0 node_type; + typedef typename vovov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 v1) o1 (v2) + const details::vov_base_node* vov = static_cast*>(branch[0]); + const Type& v0 = vov->v0(); + const Type& v1 = vov->v1(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = vov->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / v1) / v2 --> (vovov) v0 / (v1 * v2) + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", v0, v1, v2, result); + + exprtk_debug(("(v0 / v1) / v2 --> (vovov) v0 / (v1 * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, v1, v2, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_vovov_expression1 + { + typedef typename vovov_t::type1 node_type; + typedef typename vovov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0) o0 (v1 o1 v2) + const details::vov_base_node* vov = static_cast*>(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vov->v0(); + const Type& v2 = vov->v1(); + const details::operator_type o0 = operation; + const details::operator_type o1 = vov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // v0 / (v1 / v2) --> (vovov) (v0 * v2) / v1 + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", v0, v2, v1, result); + + exprtk_debug(("v0 / (v1 / v2) --> (vovov) (v0 * v2) / v1\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, v1, v2, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_vovoc_expression0 + { + typedef typename vovoc_t::type0 node_type; + typedef typename vovoc_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 v1) o1 (c) + const details::vov_base_node* vov = static_cast*>(branch[0]); + const Type& v0 = vov->v0(); + const Type& v1 = vov->v1(); + const Type c = static_cast*>(branch[1])->value(); + const details::operator_type o0 = vov->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / v1) / c --> (vovoc) v0 / (v1 * c) + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", v0, v1, c, result); + + exprtk_debug(("(v0 / v1) / c --> (vovoc) v0 / (v1 * c)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, v1, c, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_vovoc_expression1 + { + typedef typename vovoc_t::type1 node_type; + typedef typename vovoc_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0) o0 (v1 o1 c) + const details::voc_base_node* voc = static_cast*>(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = voc->v(); + const Type c = voc->c(); + const details::operator_type o0 = operation; + const details::operator_type o1 = voc->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // v0 / (v1 / c) --> (vocov) (v0 * c) / v1 + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", v0, c, v1, result); + + exprtk_debug(("v0 / (v1 / c) --> (vocov) (v0 * c) / v1\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, v1, c, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_vocov_expression0 + { + typedef typename vocov_t::type0 node_type; + typedef typename vocov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 c) o1 (v1) + const details::voc_base_node* voc = static_cast*>(branch[0]); + const Type& v0 = voc->v(); + const Type c = voc->c(); + const Type& v1 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = voc->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / c) / v1 --> (vovoc) v0 / (v1 * c) + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", v0, v1, c, result); + + exprtk_debug(("(v0 / c) / v1 --> (vovoc) v0 / (v1 * c)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, c, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_vocov_expression1 + { + typedef typename vocov_t::type1 node_type; + typedef typename vocov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0) o0 (c o1 v1) + const details::cov_base_node* cov = static_cast*>(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c = cov->c(); + const Type& v1 = cov->v(); + const details::operator_type o0 = operation; + const details::operator_type o1 = cov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // v0 / (c / v1) --> (vovoc) (v0 * v1) / c + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", v0, v1, c, result); + + exprtk_debug(("v0 / (c / v1) --> (vovoc) (v0 * v1) / c\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v0, c, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_covov_expression0 + { + typedef typename covov_t::type0 node_type; + typedef typename covov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c o0 v0) o1 (v1) + const details::cov_base_node* cov = static_cast*>(branch[0]); + const Type c = cov->c(); + const Type& v0 = cov->v(); + const Type& v1 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = cov->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c / v0) / v1 --> (covov) c / (v0 * v1) + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", c, v0, v1, result); + + exprtk_debug(("(c / v0) / v1 --> (covov) c / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), c, v0, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_covov_expression1 + { + typedef typename covov_t::type1 node_type; + typedef typename covov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c) o0 (v0 o1 v1) + const details::vov_base_node* vov = static_cast*>(branch[1]); + const Type c = static_cast*>(branch[0])->value(); + const Type& v0 = vov->v0(); + const Type& v1 = vov->v1(); + const details::operator_type o0 = operation; + const details::operator_type o1 = vov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // c / (v0 / v1) --> (covov) (c * v1) / v0 + if ((details::e_div == o0) && (details::e_div == o1)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", c, v1, v0, result); + + exprtk_debug(("c / (v0 / v1) --> (covov) (c * v1) / v0\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), c, v0, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_covoc_expression0 + { + typedef typename covoc_t::type0 node_type; + typedef typename covoc_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c0 o0 v) o1 (c1) + const details::cov_base_node* cov = static_cast*>(branch[0]); + const Type c0 = cov->c(); + const Type& v = cov->v(); + const Type c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = cov->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c0 + v) + c1 --> (cov) (c0 + c1) + v + if ((details::e_add == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0 + v) + c1 --> (cov) (c0 + c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0 + v) - c1 --> (cov) (c0 - c1) + v + else if ((details::e_add == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0 + v) - c1 --> (cov) (c0 - c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0 - v) + c1 --> (cov) (c0 + c1) - v + else if ((details::e_sub == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0 - v) + c1 --> (cov) (c0 + c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0 - v) - c1 --> (cov) (c0 - c1) - v + else if ((details::e_sub == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0 - v) - c1 --> (cov) (c0 - c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0 * v) * c1 --> (cov) (c0 * c1) * v + else if ((details::e_mul == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0 * v) * c1 --> (cov) (c0 * c1) * v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + // (c0 * v) / c1 --> (cov) (c0 / c1) * v + else if ((details::e_mul == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0 * v) / c1 --> (cov) (c0 / c1) * v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + // (c0 / v) * c1 --> (cov) (c0 * c1) / v + else if ((details::e_div == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0 / v) * c1 --> (cov) (c0 * c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + // (c0 / v) / c1 --> (cov) (c0 / c1) / v + else if ((details::e_div == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0 / v) / c1 --> (cov) (c0 / c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), c0, v, c1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c0, v, c1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_covoc_expression1 + { + typedef typename covoc_t::type1 node_type; + typedef typename covoc_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c0) o0 (v o1 c1) + const details::voc_base_node* voc = static_cast*>(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type& v = voc->v(); + const Type c1 = voc->c(); + const details::operator_type o0 = operation; + const details::operator_type o1 = voc->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c0) + (v + c1) --> (cov) (c0 + c1) + v + if ((details::e_add == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0) + (v + c1) --> (cov) (c0 + c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0) + (v - c1) --> (cov) (c0 - c1) + v + else if ((details::e_add == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0) + (v - c1) --> (cov) (c0 - c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0) - (v + c1) --> (cov) (c0 - c1) - v + else if ((details::e_sub == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0) - (v + c1) --> (cov) (c0 - c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0) - (v - c1) --> (cov) (c0 + c1) - v + else if ((details::e_sub == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0) - (v - c1) --> (cov) (c0 + c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0) * (v * c1) --> (voc) v * (c0 * c1) + else if ((details::e_mul == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0) * (v * c1) --> (voc) v * (c0 * c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + // (c0) * (v / c1) --> (cov) (c0 / c1) * v + else if ((details::e_mul == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0) * (v / c1) --> (cov) (c0 / c1) * v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + // (c0) / (v * c1) --> (cov) (c0 / c1) / v + else if ((details::e_div == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0) / (v * c1) --> (cov) (c0 / c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + // (c0) / (v / c1) --> (cov) (c0 * c1) / v + else if ((details::e_div == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0) / (v / c1) --> (cov) (c0 * c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), c0, v, c1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c0, v, c1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_cocov_expression0 + { + typedef typename cocov_t::type0 node_type; + static inline expression_node_ptr process(expression_generator&, + const details::operator_type&, + expression_node_ptr (&)[2]) + { + // (c0 o0 c1) o1 (v) - Not possible. + return error_node(); + } + }; + + struct synthesize_cocov_expression1 + { + typedef typename cocov_t::type1 node_type; + typedef typename cocov_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c0) o0 (c1 o1 v) + const details::cov_base_node* cov = static_cast*>(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type c1 = cov->c(); + const Type& v = cov->v(); + const details::operator_type o0 = operation; + const details::operator_type o1 = cov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c0) + (c1 + v) --> (cov) (c0 + c1) + v + if ((details::e_add == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0) + (c1 + v) --> (cov) (c0 + c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0) + (c1 - v) --> (cov) (c0 + c1) - v + else if ((details::e_add == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0) + (c1 - v) --> (cov) (c0 + c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 + c1, v); + } + // (c0) - (c1 + v) --> (cov) (c0 - c1) - v + else if ((details::e_sub == o0) && (details::e_add == o1)) + { + exprtk_debug(("(c0) - (c1 + v) --> (cov) (c0 - c1) - v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0) - (c1 - v) --> (cov) (c0 - c1) + v + else if ((details::e_sub == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(c0) - (c1 - v) --> (cov) (c0 - c1) + v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 - c1, v); + } + // (c0) * (c1 * v) --> (cov) (c0 * c1) * v + else if ((details::e_mul == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0) * (c1 * v) --> (cov) (c0 * c1) * v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + // (c0) * (c1 / v) --> (cov) (c0 * c1) / v + else if ((details::e_mul == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0) * (c1 / v) --> (cov) (c0 * c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 * c1, v); + } + // (c0) / (c1 * v) --> (cov) (c0 / c1) / v + else if ((details::e_div == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(c0) / (c1 * v) --> (cov) (c0 / c1) / v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + // (c0) / (c1 / v) --> (cov) (c0 / c1) * v + else if ((details::e_div == o0) && (details::e_div == o1)) + { + exprtk_debug(("(c0) / (c1 / v) --> (cov) (c0 / c1) * v\n")); + + return expr_gen.node_allocator_-> + template allocate_cr > >(c0 / c1, v); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), c0, c1, v, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c0, c1, v, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)"; + } + }; + + struct synthesize_vococ_expression0 + { + typedef typename vococ_t::type0 node_type; + typedef typename vococ_t::sf3_type sf3_type; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v o0 c0) o1 (c1) + const details::voc_base_node* voc = static_cast*>(branch[0]); + const Type& v = voc->v(); + const Type& c0 = voc->c(); + const Type& c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = voc->operation(); + const details::operator_type o1 = operation; + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v + c0) + c1 --> (voc) v + (c0 + c1) + if ((details::e_add == o0) && (details::e_add == o1)) + { + exprtk_debug(("(v + c0) + c1 --> (voc) v + (c0 + c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 + c1); + } + // (v + c0) - c1 --> (voc) v + (c0 - c1) + else if ((details::e_add == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(v + c0) - c1 --> (voc) v + (c0 - c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 - c1); + } + // (v - c0) + c1 --> (voc) v - (c0 + c1) + else if ((details::e_sub == o0) && (details::e_add == o1)) + { + exprtk_debug(("(v - c0) + c1 --> (voc) v - (c0 + c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c1 - c0); + } + // (v - c0) - c1 --> (voc) v - (c0 + c1) + else if ((details::e_sub == o0) && (details::e_sub == o1)) + { + exprtk_debug(("(v - c0) - c1 --> (voc) v - (c0 + c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 + c1); + } + // (v * c0) * c1 --> (voc) v * (c0 * c1) + else if ((details::e_mul == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(v * c0) * c1 --> (voc) v * (c0 * c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 * c1); + } + // (v * c0) / c1 --> (voc) v * (c0 / c1) + else if ((details::e_mul == o0) && (details::e_div == o1)) + { + exprtk_debug(("(v * c0) / c1 --> (voc) v * (c0 / c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 / c1); + } + // (v / c0) * c1 --> (voc) v * (c1 / c0) + else if ((details::e_div == o0) && (details::e_mul == o1)) + { + exprtk_debug(("(v / c0) * c1 --> (voc) v * (c1 / c0)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c1 / c0); + } + // (v / c0) / c1 --> (voc) v / (c0 * c1) + else if ((details::e_div == o0) && (details::e_div == o1)) + { + exprtk_debug(("(v / c0) / c1 --> (voc) v / (c0 * c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 * c1); + } + // (v ^ c0) ^ c1 --> (voc) v ^ (c0 * c1) + else if ((details::e_pow == o0) && (details::e_pow == o1)) + { + exprtk_debug(("(v ^ c0) ^ c1 --> (voc) v ^ (c0 * c1)\n")); + + return expr_gen.node_allocator_-> + template allocate_rc > >(v, c0 * c1); + } + } + + const bool synthesis_result = + synthesize_sf3ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1), v, c0, c1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v, c0, c1, f0, f1); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t"; + } + }; + + struct synthesize_vococ_expression1 + { + typedef typename vococ_t::type0 node_type; + + static inline expression_node_ptr process(expression_generator&, + const details::operator_type&, + expression_node_ptr (&)[2]) + { + // (v) o0 (c0 o1 c1) - Not possible. + exprtk_debug(("(v) o0 (c0 o1 c1) - Not possible.\n")); + return error_node(); + } + }; + + struct synthesize_vovovov_expression0 + { + typedef typename vovovov_t::type0 node_type; + typedef typename vovovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 v1) o1 (v2 o2 v3) + const details::vov_base_node* vov0 = static_cast*>(branch[0]); + const details::vov_base_node* vov1 = static_cast*>(branch[1]); + const Type& v0 = vov0->v0(); + const Type& v1 = vov0->v1(); + const Type& v2 = vov1->v0(); + const Type& v3 = vov1->v1(); + const details::operator_type o0 = vov0->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = vov1->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / v1) * (v2 / v3) --> (vovovov) (v0 * v2) / (v1 * v3) + if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v2, v1, v3, result); + + exprtk_debug(("(v0 / v1) * (v2 / v3) --> (vovovov) (v0 * v2) / (v1 * v3)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / v1) / (v2 / v3) --> (vovovov) (v0 * v3) / (v1 * v2) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v3, v1, v2, result); + + exprtk_debug(("(v0 / v1) / (v2 / v3) --> (vovovov) (v0 * v3) / (v1 * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 + v1) / (v2 / v3) --> (vovovov) (v0 + v1) * (v3 / v2) + else if ((details::e_add == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t+t)*(t/t)", v0, v1, v3, v2, result); + + exprtk_debug(("(v0 + v1) / (v2 / v3) --> (vovovov) (v0 + v1) * (v3 / v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 - v1) / (v2 / v3) --> (vovovov) (v0 + v1) * (v3 / v2) + else if ((details::e_sub == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t-t)*(t/t)", v0, v1, v3, v2, result); + + exprtk_debug(("(v0 - v1) / (v2 / v3) --> (vovovov) (v0 - v1) * (v3 / v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * v1) / (v2 / v3) --> (vovovov) ((v0 * v1) * v3) / v2 + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "((t*t)*t)/t", v0, v1, v3, v2, result); + + exprtk_debug(("(v0 * v1) / (v2 / v3) --> (vovovov) ((v0 * v1) * v3) / v2\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, v3, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, v3, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vovovoc_expression0 + { + typedef typename vovovoc_t::type0 node_type; + typedef typename vovovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 v1) o1 (v2 o2 c) + const details::vov_base_node* vov = static_cast*>(branch[0]); + const details::voc_base_node* voc = static_cast*>(branch[1]); + const Type& v0 = vov->v0(); + const Type& v1 = vov->v1(); + const Type& v2 = voc->v (); + const Type c = voc->c (); + const details::operator_type o0 = vov->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = voc->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / v1) * (v2 / c) --> (vovovoc) (v0 * v2) / (v1 * c) + if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v2, v1, c, result); + + exprtk_debug(("(v0 / v1) * (v2 / c) --> (vovovoc) (v0 * v2) / (v1 * c)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / v1) / (v2 / c) --> (vocovov) (v0 * c) / (v1 * v2) + if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, c, v1, v2, result); + + exprtk_debug(("(v0 / v1) / (v2 / c) --> (vocovov) (v0 * c) / (v1 * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, c, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, c, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vovocov_expression0 + { + typedef typename vovocov_t::type0 node_type; + typedef typename vovocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 v1) o1 (c o2 v2) + const details::vov_base_node* vov = static_cast*>(branch[0]); + const details::cov_base_node* cov = static_cast*>(branch[1]); + const Type& v0 = vov->v0(); + const Type& v1 = vov->v1(); + const Type& v2 = cov->v (); + const Type c = cov->c (); + const details::operator_type o0 = vov->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = cov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / v1) * (c / v2) --> (vocovov) (v0 * c) / (v1 * v2) + if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, c, v1, v2, result); + + exprtk_debug(("(v0 / v1) * (c / v2) --> (vocovov) (v0 * c) / (v1 * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / v1) / (c / v2) --> (vovovoc) (v0 * v2) / (v1 * c) + if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v2, v1, c, result); + + exprtk_debug(("(v0 / v1) / (c / v2) --> (vovovoc) (v0 * v2) / (v1 * c)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, c, v2, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vocovov_expression0 + { + typedef typename vocovov_t::type0 node_type; + typedef typename vocovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 c) o1 (v1 o2 v2) + const details::voc_base_node* voc = static_cast*>(branch[0]); + const details::vov_base_node* vov = static_cast*>(branch[1]); + const Type c = voc->c (); + const Type& v0 = voc->v (); + const Type& v1 = vov->v0(); + const Type& v2 = vov->v1(); + const details::operator_type o0 = voc->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = vov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 / c) * (v1 / v2) --> (vovocov) (v0 * v1) / (c * v2) + if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v1, c, v2, result); + + exprtk_debug(("(v0 / c) * (v1 / v2) --> (vovocov) (v0 * v1) / (c * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c) / (v1 / v2) --> (vovocov) (v0 * v2) / (c * v1) + if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", v0, v2, c, v1, result); + + exprtk_debug(("(v0 / c) / (v1 / v2) --> (vovocov) (v0 * v2) / (c * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c, v1, v2, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covovov_expression0 + { + typedef typename covovov_t::type0 node_type; + typedef typename covovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c o0 v0) o1 (v1 o2 v2) + const details::cov_base_node* cov = static_cast*>(branch[0]); + const details::vov_base_node* vov = static_cast*>(branch[1]); + const Type c = cov->c (); + const Type& v0 = cov->v (); + const Type& v1 = vov->v0(); + const Type& v2 = vov->v1(); + const details::operator_type o0 = cov->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = vov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c / v0) * (v1 / v2) --> (covovov) (c * v1) / (v0 * v2) + if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", c, v1, v0, v2, result); + + exprtk_debug(("(c / v0) * (v1 / v2) --> (covovov) (c * v1) / (v0 * v2)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c / v0) / (v1 / v2) --> (covovov) (c * v2) / (v0 * v1) + if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)/(t*t)", c, v2, v0, v1, result); + + exprtk_debug(("(c / v0) / (v1 / v2) --> (covovov) (c * v2) / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c, v0, v1, v2, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covocov_expression0 + { + typedef typename covocov_t::type0 node_type; + typedef typename covocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c0 o0 v0) o1 (c1 o2 v1) + const details::cov_base_node* cov0 = static_cast*>(branch[0]); + const details::cov_base_node* cov1 = static_cast*>(branch[1]); + const Type c0 = cov0->c(); + const Type& v0 = cov0->v(); + const Type c1 = cov1->c(); + const Type& v1 = cov1->v(); + const details::operator_type o0 = cov0->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = cov1->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c0 + v0) + (c1 + v1) --> (covov) (c0 + c1) + v0 + v1 + if ((details::e_add == o0) && (details::e_add == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)+t", (c0 + c1), v0, v1, result); + + exprtk_debug(("(c0 + v0) + (c1 + v1) --> (covov) (c0 + c1) + v0 + v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 + v0) - (c1 + v1) --> (covov) (c0 - c1) + v0 - v1 + else if ((details::e_add == o0) && (details::e_sub == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", (c0 - c1), v0, v1, result); + + exprtk_debug(("(c0 + v0) - (c1 + v1) --> (covov) (c0 - c1) + v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 - v0) - (c1 - v1) --> (covov) (c0 - c1) - v0 + v1 + else if ((details::e_sub == o0) && (details::e_sub == o1) && (details::e_sub == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t-t)+t", (c0 - c1), v0, v1, result); + + exprtk_debug(("(c0 - v0) - (c1 - v1) --> (covov) (c0 - c1) - v0 + v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) * (c1 * v1) --> (covov) (c0 * c1) * v0 * v1 + else if ((details::e_mul == o0) && (details::e_mul == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", (c0 * c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) * (c1 * v1) --> (covov) (c0 * c1) * v0 * v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) / (c1 * v1) --> (covov) (c0 / c1) * (v0 / v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 / c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) / (c1 * v1) --> (covov) (c0 / c1) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) * (c1 / v1) --> (covov) (c0 * c1) / (v0 * v1) + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", (c0 * c1), v0, v1, result); + + exprtk_debug(("(c0 / v0) * (c1 / v1) --> (covov) (c0 * c1) / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) / (c1 / v1) --> (covov) ((c0 / c1) * v1) / v0 + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 / c1), v1, v0, result); + + exprtk_debug(("(c0 / v0) / (c1 / v1) --> (covov) ((c0 / c1) * v1) / v0\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) / (c1 / v1) --> (covov) (c0 / c1) * (v0 * v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t*(t*t)", (c0 / c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) / (c1 / v1) --> (covov) (c0 / c1) * (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) / (c1 * v1) --> (covov) (c0 / c1) / (v0 * v1) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", (c0 / c1), v0, v1, result); + + exprtk_debug(("(c0 / v0) / (c1 * v1) --> (covov) (c0 / c1) / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c * v0) +/- (c * v1) --> (covov) c * (v0 +/- v1) + else if ( + (std::equal_to()(c0,c1)) && + (details::e_mul == o0) && + (details::e_mul == o2) && + ( + (details::e_add == o1) || + (details::e_sub == o1) + ) + ) + { + std::string specfunc; + + switch (o1) + { + case details::e_add : specfunc = "t*(t+t)"; break; + case details::e_sub : specfunc = "t*(t-t)"; break; + default : return error_node(); + } + + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, specfunc, c0, v0, v1, result); + + exprtk_debug(("(c * v0) +/- (c * v1) --> (covov) c * (v0 +/- v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, c1, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vocovoc_expression0 + { + typedef typename vocovoc_t::type0 node_type; + typedef typename vocovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 c0) o1 (v1 o2 c1) + const details::voc_base_node* voc0 = static_cast*>(branch[0]); + const details::voc_base_node* voc1 = static_cast*>(branch[1]); + const Type c0 = voc0->c(); + const Type& v0 = voc0->v(); + const Type c1 = voc1->c(); + const Type& v1 = voc1->v(); + const details::operator_type o0 = voc0->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = voc1->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 + c0) + (v1 + c1) --> (covov) (c0 + c1) + v0 + v1 + if ((details::e_add == o0) && (details::e_add == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)+t", (c0 + c1), v0, v1, result); + + exprtk_debug(("(v0 + c0) + (v1 + c1) --> (covov) (c0 + c1) + v0 + v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 + c0) - (v1 + c1) --> (covov) (c0 - c1) + v0 - v1 + else if ((details::e_add == o0) && (details::e_sub == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", (c0 - c1), v0, v1, result); + + exprtk_debug(("(v0 + c0) - (v1 + c1) --> (covov) (c0 - c1) + v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 - c0) - (v1 - c1) --> (covov) (c1 - c0) + v0 - v1 + else if ((details::e_sub == o0) && (details::e_sub == o1) && (details::e_sub == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", (c1 - c0), v0, v1, result); + + exprtk_debug(("(v0 - c0) - (v1 - c1) --> (covov) (c1 - c0) + v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) * (v1 * c1) --> (covov) (c0 * c1) * v0 * v1 + else if ((details::e_mul == o0) && (details::e_mul == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) * (v1 * c1) --> (covov) (c0 * c1) * v0 * v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) / (v1 * c1) --> (covov) (c0 / c1) * (v0 / v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 / c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) / (v1 * c1) --> (covov) (c0 / c1) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) * (v1 / c1) --> (covov) (1 / (c0 * c1)) * v0 * v1 + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", Type(1) / (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 / c0) * (v1 / c1) --> (covov) (1 / (c0 * c1)) * v0 * v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) / (v1 / c1) --> (covov) ((c1 / c0) * v0) / v1 + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c1 / c0), v0, v1, result); + + exprtk_debug(("(v0 / c0) / (v1 / c1) --> (covov) ((c1 / c0) * v0) / v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) / (v1 / c1) --> (covov) (c0 * c1) * (v0 / v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t*(t/t)", (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) / (v1 / c1) --> (covov) (c0 * c1) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) / (v1 * c1) --> (covov) (1 / (c0 * c1)) * v0 / v1 + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t*(t/t)", Type(1) / (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 / c0) / (v1 * c1) --> (covov) (1 / (c0 * c1)) * v0 / v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) * (v1 + c1) --> (vocovoc) (v0 * (1 / c0)) * (v1 + c1) + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)*(t+t)", v0, T(1) / c0, v1, c1, result); + + exprtk_debug(("(v0 / c0) * (v1 + c1) --> (vocovoc) (v0 * (1 / c0)) * (v1 + c1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) * (v1 - c1) --> (vocovoc) (v0 * (1 / c0)) * (v1 - c1) + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_sub == o2)) + { + const bool synthesis_result = + synthesize_sf4ext_expression:: + template compile(expr_gen, "(t*t)*(t-t)", v0, T(1) / c0, v1, c1, result); + + exprtk_debug(("(v0 / c0) * (v1 - c1) --> (vocovoc) (v0 * (1 / c0)) * (v1 - c1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c) +/- (v1 * c) --> (covov) c * (v0 +/- v1) + else if ( + (std::equal_to()(c0,c1)) && + (details::e_mul == o0) && + (details::e_mul == o2) && + ( + (details::e_add == o1) || + (details::e_sub == o1) + ) + ) + { + std::string specfunc; + + switch (o1) + { + case details::e_add : specfunc = "t*(t+t)"; break; + case details::e_sub : specfunc = "t*(t-t)"; break; + default : return error_node(); + } + + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, specfunc, c0, v0, v1, result); + + exprtk_debug(("(v0 * c) +/- (v1 * c) --> (covov) c * (v0 +/- v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c) +/- (v1 / c) --> (vovoc) (v0 +/- v1) / c + else if ( + (std::equal_to()(c0,c1)) && + (details::e_div == o0) && + (details::e_div == o2) && + ( + (details::e_add == o1) || + (details::e_sub == o1) + ) + ) + { + std::string specfunc; + + switch (o1) + { + case details::e_add : specfunc = "(t+t)/t"; break; + case details::e_sub : specfunc = "(t-t)/t"; break; + default : return error_node(); + } + + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, specfunc, v0, v1, c0, result); + + exprtk_debug(("(v0 / c) +/- (v1 / c) --> (vovoc) (v0 +/- v1) / c\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, v1, c1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covovoc_expression0 + { + typedef typename covovoc_t::type0 node_type; + typedef typename covovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (c0 o0 v0) o1 (v1 o2 c1) + const details::cov_base_node* cov = static_cast*>(branch[0]); + const details::voc_base_node* voc = static_cast*>(branch[1]); + const Type c0 = cov->c(); + const Type& v0 = cov->v(); + const Type c1 = voc->c(); + const Type& v1 = voc->v(); + const details::operator_type o0 = cov->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = voc->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (c0 + v0) + (v1 + c1) --> (covov) (c0 + c1) + v0 + v1 + if ((details::e_add == o0) && (details::e_add == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)+t", (c0 + c1), v0, v1, result); + + exprtk_debug(("(c0 + v0) + (v1 + c1) --> (covov) (c0 + c1) + v0 + v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 + v0) - (v1 + c1) --> (covov) (c0 - c1) + v0 - v1 + else if ((details::e_add == o0) && (details::e_sub == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", (c0 - c1), v0, v1, result); + + exprtk_debug(("(c0 + v0) - (v1 + c1) --> (covov) (c0 - c1) + v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 - v0) - (v1 - c1) --> (covov) (c0 + c1) - v0 - v1 + else if ((details::e_sub == o0) && (details::e_sub == o1) && (details::e_sub == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t-(t+t)", (c0 + c1), v0, v1, result); + + exprtk_debug(("(c0 - v0) - (v1 - c1) --> (covov) (c0 + c1) - v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) * (v1 * c1) --> (covov) (c0 * c1) * v0 * v1 + else if ((details::e_mul == o0) && (details::e_mul == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", (c0 * c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) * (v1 * c1) --> (covov) (c0 * c1) * v0 * v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) / (v1 * c1) --> (covov) (c0 / c1) * (v0 / v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 / c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) / (v1 * c1) --> (covov) (c0 / c1) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) * (v1 / c1) --> (covov) (c0 / c1) * (v1 / v0) + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t*(t/t)", (c0 / c1), v1, v0, result); + + exprtk_debug(("(c0 / v0) * (v1 / c1) --> (covov) (c0 / c1) * (v1 / v0)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) / (v1 / c1) --> (covov) (c0 * c1) / (v0 * v1) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", (c0 * c1), v0, v1, result); + + exprtk_debug(("(c0 / v0) / (v1 / c1) --> (covov) (c0 * c1) / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 * v0) / (v1 / c1) --> (covov) (c0 * c1) * (v0 / v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 * c1), v0, v1, result); + + exprtk_debug(("(c0 * v0) / (v1 / c1) --> (covov) (c0 * c1) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c0 / v0) / (v1 * c1) --> (covov) (c0 / c1) / (v0 * v1) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "t/(t*t)", (c0 / c1), v0, v1, result); + + exprtk_debug(("(c0 / v0) / (v1 * c1) --> (covov) (c0 / c1) / (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (c * v0) +/- (v1 * c) --> (covov) c * (v0 +/- v1) + else if ( + (std::equal_to()(c0,c1)) && + (details::e_mul == o0) && + (details::e_mul == o2) && + ( + (details::e_add == o1) || + (details::e_sub == o1) + ) + ) + { + std::string specfunc; + + switch (o1) + { + case details::e_add : specfunc = "t*(t+t)"; break; + case details::e_sub : specfunc = "t*(t-t)"; break; + default : return error_node(); + } + + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, specfunc, c0, v0, v1, result); + + exprtk_debug(("(c * v0) +/- (v1 * c) --> (covov) c * (v0 +/- v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, v1, c1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vococov_expression0 + { + typedef typename vococov_t::type0 node_type; + typedef typename vococov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 c0) o1 (c1 o2 v1) + const details::voc_base_node* voc = static_cast*>(branch[0]); + const details::cov_base_node* cov = static_cast*>(branch[1]); + const Type c0 = voc->c(); + const Type& v0 = voc->v(); + const Type c1 = cov->c(); + const Type& v1 = cov->v(); + const details::operator_type o0 = voc->operation(); + const details::operator_type o1 = operation; + const details::operator_type o2 = cov->operation(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + if (expr_gen.parser_->settings_.strength_reduction_enabled()) + { + // (v0 + c0) + (c1 + v1) --> (covov) (c0 + c1) + v0 + v1 + if ((details::e_add == o0) && (details::e_add == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)+t", (c0 + c1), v0, v1, result); + + exprtk_debug(("(v0 + c0) + (c1 + v1) --> (covov) (c0 + c1) + v0 + v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 + c0) - (c1 + v1) --> (covov) (c0 - c1) + v0 - v1 + else if ((details::e_add == o0) && (details::e_sub == o1) && (details::e_add == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", (c0 - c1), v0, v1, result); + + exprtk_debug(("(v0 + c0) - (c1 + v1) --> (covov) (c0 - c1) + v0 - v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 - c0) - (c1 - v1) --> (vovoc) v0 + v1 - (c1 + c0) + else if ((details::e_sub == o0) && (details::e_sub == o1) && (details::e_sub == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t+t)-t", v0, v1, (c1 + c0), result); + + exprtk_debug(("(v0 - c0) - (c1 - v1) --> (vovoc) v0 + v1 - (c1 + c0)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) * (c1 * v1) --> (covov) (c0 * c1) * v0 * v1 + else if ((details::e_mul == o0) && (details::e_mul == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) * (c1 * v1) --> (covov) (c0 * c1) * v0 * v1\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) / (c1 * v1) --> (covov) (c0 / c1) * (v0 * v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c0 / c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) / (c1 * v1) --> (covov) (c0 / c1) * (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) * (c1 / v1) --> (covov) (c1 / c0) * (v0 / v1) + else if ((details::e_div == o0) && (details::e_mul == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", (c1 / c0), v0, v1, result); + + exprtk_debug(("(v0 / c0) * (c1 / v1) --> (covov) (c1 / c0) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c0) / (c1 / v1) --> (covov) (c0 / c1) * (v0 * v1) + else if ((details::e_mul == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", (c0 / c1), v0, v1, result); + + exprtk_debug(("(v0 * c0) / (c1 / v1) --> (covov) (c0 / c1) * (v0 * v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) / (c1 * v1) --> (covov) (1 / (c0 * c1)) * (v0 / v1) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_mul == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)/t", Type(1) / (c0 * c1), v0, v1, result); + + exprtk_debug(("(v0 / c0) / (c1 * v1) --> (covov) (1 / (c0 * c1)) * (v0 / v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 / c0) / (c1 / v1) --> (vovoc) (v0 * v1) * (1 / (c0 * c1)) + else if ((details::e_div == o0) && (details::e_div == o1) && (details::e_div == o2)) + { + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, "(t*t)*t", v0, v1, Type(1) / (c0 * c1), result); + + exprtk_debug(("(v0 / c0) / (c1 / v1) --> (vovoc) (v0 * v1) * (1 / (c0 * c1))\n")); + + return (synthesis_result) ? result : error_node(); + } + // (v0 * c) +/- (c * v1) --> (covov) c * (v0 +/- v1) + else if ( + (std::equal_to()(c0,c1)) && + (details::e_mul == o0) && + (details::e_mul == o2) && + ( + (details::e_add == o1) || (details::e_sub == o1) + ) + ) + { + std::string specfunc; + + switch (o1) + { + case details::e_add : specfunc = "t*(t+t)"; break; + case details::e_sub : specfunc = "t*(t-t)"; break; + default : return error_node(); + } + + const bool synthesis_result = + synthesize_sf3ext_expression:: + template compile(expr_gen, specfunc, c0, v0, v1, result); + + exprtk_debug(("(v0 * c) +/- (c * v1) --> (covov) c * (v0 +/- v1)\n")); + + return (synthesis_result) ? result : error_node(); + } + } + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, c1, v1, result); + + if (synthesis_result) + return result; + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = reinterpret_cast(0); + binary_functor_t f2 = reinterpret_cast(0); + + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + else if (!expr_gen.valid_operator(o1,f1)) + return error_node(); + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + else + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vovovov_expression1 + { + typedef typename vovovov_t::type1 node_type; + typedef typename vovovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (v1 o1 (v2 o2 v3)) + typedef typename synthesize_vovov_expression1::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vovov->t0(); + const Type& v2 = vovov->t1(); + const Type& v3 = vovov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovov->f0(); + binary_functor_t f2 = vovov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen,id(expr_gen, o0, o1, o2), v0, v1, v2, v3, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (v1 o1 (v2 o2 v3))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, v3, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vovovoc_expression1 + { + typedef typename vovovoc_t::type1 node_type; + typedef typename vovovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (v1 o1 (v2 o2 c)) + typedef typename synthesize_vovoc_expression1::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vovoc->t0(); + const Type& v2 = vovoc->t1(); + const Type c = vovoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovoc->f0(); + binary_functor_t f2 = vovoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, c, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (v1 o1 (v2 o2 c))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, c, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vovocov_expression1 + { + typedef typename vovocov_t::type1 node_type; + typedef typename vovocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (v1 o1 (c o2 v2)) + typedef typename synthesize_vocov_expression1::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vocov->t0(); + const Type c = vocov->t1(); + const Type& v2 = vocov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vocov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vocov->f0(); + binary_functor_t f2 = vocov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, c, v2, result); + + if (synthesis_result) + return result; + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (v1 o1 (c o2 v2))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vocovov_expression1 + { + typedef typename vocovov_t::type1 node_type; + typedef typename vocovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (c o1 (v1 o2 v2)) + typedef typename synthesize_covov_expression1::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c = covov->t0(); + const Type& v1 = covov->t1(); + const Type& v2 = covov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(covov->f0()); + const details::operator_type o2 = expr_gen.get_operator(covov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = covov->f0(); + binary_functor_t f2 = covov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (c o1 (v1 o2 v2))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_covovov_expression1 + { + typedef typename covovov_t::type1 node_type; + typedef typename covovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c o0 (v0 o1 (v1 o2 v2)) + typedef typename synthesize_vovov_expression1::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[1]); + const Type c = static_cast*>(branch[0])->value(); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovov->f0(); + binary_functor_t f2 = vovov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c, v0, v1, v2, result); + + if (synthesis_result) + return result; + if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c o0 (v0 o1 (v1 o2 v2))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_covocov_expression1 + { + typedef typename covocov_t::type1 node_type; + typedef typename covocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c0 o0 (v0 o1 (c1 o2 v1)) + typedef typename synthesize_vocov_expression1::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type& v0 = vocov->t0(); + const Type c1 = vocov->t1(); + const Type& v1 = vocov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vocov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vocov->f0(); + binary_functor_t f2 = vocov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c0 o0 (v0 o1 (c1 o2 v1))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vocovoc_expression1 + { + typedef typename vocovoc_t::type1 node_type; + typedef typename vocovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (c0 o1 (v1 o2 c2)) + typedef typename synthesize_covoc_expression1::node_type lcl_covoc_t; + + const lcl_covoc_t* covoc = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c0 = covoc->t0(); + const Type& v1 = covoc->t1(); + const Type c1 = covoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(covoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(covoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = covoc->f0(); + binary_functor_t f2 = covoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (c0 o1 (v1 o2 c2))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_covovoc_expression1 + { + typedef typename covovoc_t::type1 node_type; + typedef typename covovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c0 o0 (v0 o1 (v1 o2 c1)) + typedef typename synthesize_vovoc_expression1::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type& v0 = vovoc->t0(); + const Type& v1 = vovoc->t1(); + const Type c1 = vovoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovoc->f0(); + binary_functor_t f2 = vovoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c0 o0 (v0 o1 (v1 o2 c1))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vococov_expression1 + { + typedef typename vococov_t::type1 node_type; + typedef typename vococov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 (c0 o1 (c1 o2 v1)) + typedef typename synthesize_cocov_expression1::node_type lcl_cocov_t; + + const lcl_cocov_t* cocov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c0 = cocov->t0(); + const Type c1 = cocov->t1(); + const Type& v1 = cocov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(cocov->f0()); + const details::operator_type o2 = expr_gen.get_operator(cocov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = cocov->f0(); + binary_functor_t f2 = cocov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 (c0 o1 (c1 o2 v1))\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "(t" << expr_gen.to_str(o2) + << "t))"; + } + }; + + struct synthesize_vovovov_expression2 + { + typedef typename vovovov_t::type2 node_type; + typedef typename vovovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 ((v1 o1 v2) o2 v3) + typedef typename synthesize_vovov_expression0::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vovov->t0(); + const Type& v2 = vovov->t1(); + const Type& v3 = vovov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovov->f0(); + binary_functor_t f2 = vovov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, v3, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 ((v1 o1 v2) o2 v3)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, v3, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vovovoc_expression2 + { + typedef typename vovovoc_t::type2 node_type; + typedef typename vovovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 ((v1 o1 v2) o2 c) + typedef typename synthesize_vovoc_expression0::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vovoc->t0(); + const Type& v2 = vovoc->t1(); + const Type c = vovoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovoc->f0(); + binary_functor_t f2 = vovoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, c, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 ((v1 o1 v2) o2 c)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, c, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vovocov_expression2 + { + typedef typename vovocov_t::type2 node_type; + typedef typename vovocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 ((v1 o1 c) o2 v2) + typedef typename synthesize_vocov_expression0::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type& v1 = vocov->t0(); + const Type c = vocov->t1(); + const Type& v2 = vocov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vocov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vocov->f0(); + binary_functor_t f2 = vocov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, c, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 ((v1 o1 c) o2 v2)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vocovov_expression2 + { + typedef typename vocovov_t::type2 node_type; + typedef typename vocovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 ((c o1 v1) o2 v2) + typedef typename synthesize_covov_expression0::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c = covov->t0(); + const Type& v1 = covov->t1(); + const Type& v2 = covov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(covov->f0()); + const details::operator_type o2 = expr_gen.get_operator(covov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = covov->f0(); + binary_functor_t f2 = covov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 ((c o1 v1) o2 v2)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covovov_expression2 + { + typedef typename covovov_t::type2 node_type; + typedef typename covovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c o0 ((v1 o1 v2) o2 v3) + typedef typename synthesize_vovov_expression0::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[1]); + const Type c = static_cast*>(branch[0])->value(); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovov->f0(); + binary_functor_t f2 = vovov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c, v0, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c o0 ((v1 o1 v2) o2 v3)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covocov_expression2 + { + typedef typename covocov_t::type2 node_type; + typedef typename covocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c0 o0 ((v0 o1 c1) o2 v1) + typedef typename synthesize_vocov_expression0::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type& v0 = vocov->t0(); + const Type c1 = vocov->t1(); + const Type& v1 = vocov->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o2 = expr_gen.get_operator(vocov->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vocov->f0(); + binary_functor_t f2 = vocov->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c0 o0 ((v0 o1 c1) o2 v1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vocovoc_expression2 + { + typedef typename vocovoc_t::type2 node_type; + typedef typename vocovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // v0 o0 ((c0 o1 v1) o2 c1) + typedef typename synthesize_covoc_expression0::node_type lcl_covoc_t; + + const lcl_covoc_t* covoc = static_cast(branch[1]); + const Type& v0 = static_cast*>(branch[0])->ref(); + const Type c0 = covoc->t0(); + const Type& v1 = covoc->t1(); + const Type c1 = covoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(covoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(covoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = covoc->f0(); + binary_functor_t f2 = covoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("v0 o0 ((c0 o1 v1) o2 c1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_covovoc_expression2 + { + typedef typename covovoc_t::type2 node_type; + typedef typename covovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // c0 o0 ((v0 o1 v1) o2 c1) + typedef typename synthesize_vovoc_expression0::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[1]); + const Type c0 = static_cast*>(branch[0])->value(); + const Type& v0 = vovoc->t0(); + const Type& v1 = vovoc->t1(); + const Type c1 = vovoc->t2(); + const details::operator_type o0 = operation; + const details::operator_type o1 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o2 = expr_gen.get_operator(vovoc->f1()); + + binary_functor_t f0 = reinterpret_cast(0); + binary_functor_t f1 = vovoc->f0(); + binary_functor_t f2 = vovoc->f1(); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o0,f0)) + return error_node(); + + exprtk_debug(("c0 o0 ((v0 o1 v1) o2 c1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "t" << expr_gen.to_str(o0) + << "((t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t)"; + } + }; + + struct synthesize_vococov_expression2 + { + typedef typename vococov_t::type2 node_type; + static inline expression_node_ptr process(expression_generator&, + const details::operator_type&, + expression_node_ptr (&)[2]) + { + // v0 o0 ((c0 o1 c1) o2 v1) - Not possible + exprtk_debug(("v0 o0 ((c0 o1 c1) o2 v1) - Not possible\n")); + return error_node(); + } + + static inline std::string id(expression_generator&, + const details::operator_type, + const details::operator_type, + const details::operator_type) + { + return "INVALID"; + } + }; + + struct synthesize_vovovov_expression3 + { + typedef typename vovovov_t::type3 node_type; + typedef typename vovovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 v1) o1 v2) o2 v3 + typedef typename synthesize_vovov_expression0::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[0]); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const Type& v3 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovov->f0(); + binary_functor_t f1 = vovov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, v3, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 v1) o1 v2) o2 v3\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, v3, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vovovoc_expression3 + { + typedef typename vovovoc_t::type3 node_type; + typedef typename vovovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 v1) o1 v2) o2 c + typedef typename synthesize_vovov_expression0::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[0]); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const Type c = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovov->f0(); + binary_functor_t f1 = vovov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, c, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 v1) o1 v2) o2 c\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, c, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vovocov_expression3 + { + typedef typename vovocov_t::type3 node_type; + typedef typename vovocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 v1) o1 c) o2 v2 + typedef typename synthesize_vovoc_expression0::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[0]); + const Type& v0 = vovoc->t0(); + const Type& v1 = vovoc->t1(); + const Type c = vovoc->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovoc->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovoc->f0(); + binary_functor_t f1 = vovoc->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, c, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 v1) o1 c) o2 v2\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vocovov_expression3 + { + typedef typename vocovov_t::type3 node_type; + typedef typename vocovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 c) o1 v1) o2 v2 + typedef typename synthesize_vocov_expression0::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[0]); + const Type& v0 = vocov->t0(); + const Type c = vocov->t1(); + const Type& v1 = vocov->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vocov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vocov->f0(); + binary_functor_t f1 = vocov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 c) o1 v1) o2 v2\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covovov_expression3 + { + typedef typename covovov_t::type3 node_type; + typedef typename covovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c o0 v0) o1 v1) o2 v2 + typedef typename synthesize_covov_expression0::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[0]); + const Type c = covov->t0(); + const Type& v0 = covov->t1(); + const Type& v1 = covov->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(covov->f0()); + const details::operator_type o1 = expr_gen.get_operator(covov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covov->f0(); + binary_functor_t f1 = covov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c, v0, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c o0 v0) o1 v1) o2 v2\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covocov_expression3 + { + typedef typename covocov_t::type3 node_type; + typedef typename covocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c0 o0 v0) o1 c1) o2 v1 + typedef typename synthesize_covoc_expression0::node_type lcl_covoc_t; + + const lcl_covoc_t* covoc = static_cast(branch[0]); + const Type c0 = covoc->t0(); + const Type& v0 = covoc->t1(); + const Type c1 = covoc->t2(); + const Type& v1 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(covoc->f0()); + const details::operator_type o1 = expr_gen.get_operator(covoc->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covoc->f0(); + binary_functor_t f1 = covoc->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c0 o0 v0) o1 c1) o2 v1\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vocovoc_expression3 + { + typedef typename vocovoc_t::type3 node_type; + typedef typename vocovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 c0) o1 v1) o2 c1 + typedef typename synthesize_vocov_expression0::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[0]); + const Type& v0 = vocov->t0(); + const Type c0 = vocov->t1(); + const Type& v1 = vocov->t2(); + const Type c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vocov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vocov->f0(); + binary_functor_t f1 = vocov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 c0) o1 v1) o2 c1\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covovoc_expression3 + { + typedef typename covovoc_t::type3 node_type; + typedef typename covovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c0 o0 v0) o1 v1) o2 c1 + typedef typename synthesize_covov_expression0::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[0]); + const Type c0 = covov->t0(); + const Type& v0 = covov->t1(); + const Type& v1 = covov->t2(); + const Type c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(covov->f0()); + const details::operator_type o1 = expr_gen.get_operator(covov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covov->f0(); + binary_functor_t f1 = covov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c0 o0 v0) o1 v1) o2 c1\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vococov_expression3 + { + typedef typename vococov_t::type3 node_type; + typedef typename vococov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 c0) o1 c1) o2 v1 + typedef typename synthesize_vococ_expression0::node_type lcl_vococ_t; + + const lcl_vococ_t* vococ = static_cast(branch[0]); + const Type& v0 = vococ->t0(); + const Type c0 = vococ->t1(); + const Type c1 = vococ->t2(); + const Type& v1 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vococ->f0()); + const details::operator_type o1 = expr_gen.get_operator(vococ->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vococ->f0(); + binary_functor_t f1 = vococ->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 c0) o1 c1) o2 v1\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "((t" << expr_gen.to_str(o0) + << "t)" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vovovov_expression4 + { + typedef typename vovovov_t::type4 node_type; + typedef typename vovovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // (v0 o0 (v1 o1 v2)) o2 v3 + typedef typename synthesize_vovov_expression1::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[0]); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const Type& v3 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovov->f0(); + binary_functor_t f1 = vovov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, v3, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("(v0 o0 (v1 o1 v2)) o2 v3\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, v3, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vovovoc_expression4 + { + typedef typename vovovoc_t::type4 node_type; + typedef typename vovovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 (v1 o1 v2)) o2 c) + typedef typename synthesize_vovov_expression1::node_type lcl_vovov_t; + + const lcl_vovov_t* vovov = static_cast(branch[0]); + const Type& v0 = vovov->t0(); + const Type& v1 = vovov->t1(); + const Type& v2 = vovov->t2(); + const Type c = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(vovov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovov->f0(); + binary_functor_t f1 = vovov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, v2, c, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 (v1 o1 v2)) o2 c)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, v2, c, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vovocov_expression4 + { + typedef typename vovocov_t::type4 node_type; + typedef typename vovocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 (v1 o1 c)) o2 v1) + typedef typename synthesize_vovoc_expression1::node_type lcl_vovoc_t; + + const lcl_vovoc_t* vovoc = static_cast(branch[0]); + const Type& v0 = vovoc->t0(); + const Type& v1 = vovoc->t1(); + const Type c = vovoc->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vovoc->f0()); + const details::operator_type o1 = expr_gen.get_operator(vovoc->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vovoc->f0(); + binary_functor_t f1 = vovoc->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, v1, c, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 (v1 o1 c)) o2 v1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, v1, c, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vocovov_expression4 + { + typedef typename vocovov_t::type4 node_type; + typedef typename vocovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 (c o1 v1)) o2 v2) + typedef typename synthesize_vocov_expression1::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[0]); + const Type& v0 = vocov->t0(); + const Type c = vocov->t1(); + const Type& v1 = vocov->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vocov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vocov->f0(); + binary_functor_t f1 = vocov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 (c o1 v1)) o2 v2)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covovov_expression4 + { + typedef typename covovov_t::type4 node_type; + typedef typename covovov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c o0 (v0 o1 v1)) o2 v2) + typedef typename synthesize_covov_expression1::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[0]); + const Type c = covov->t0(); + const Type& v0 = covov->t1(); + const Type& v1 = covov->t2(); + const Type& v2 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(covov->f0()); + const details::operator_type o1 = expr_gen.get_operator(covov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covov->f0(); + binary_functor_t f1 = covov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c, v0, v1, v2, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c o0 (v0 o1 v1)) o2 v2)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c, v0, v1, v2, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covocov_expression4 + { + typedef typename covocov_t::type4 node_type; + typedef typename covocov_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c0 o0 (v0 o1 c1)) o2 v1) + typedef typename synthesize_covoc_expression1::node_type lcl_covoc_t; + + const lcl_covoc_t* covoc = static_cast(branch[0]); + const Type c0 = covoc->t0(); + const Type& v0 = covoc->t1(); + const Type c1 = covoc->t2(); + const Type& v1 = static_cast*>(branch[1])->ref(); + const details::operator_type o0 = expr_gen.get_operator(covoc->f0()); + const details::operator_type o1 = expr_gen.get_operator(covoc->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covoc->f0(); + binary_functor_t f1 = covoc->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, c1, v1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c0 o0 (v0 o1 c1)) o2 v1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, c1, v1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vocovoc_expression4 + { + typedef typename vocovoc_t::type4 node_type; + typedef typename vocovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((v0 o0 (c0 o1 v1)) o2 c1) + typedef typename synthesize_vocov_expression1::node_type lcl_vocov_t; + + const lcl_vocov_t* vocov = static_cast(branch[0]); + const Type& v0 = vocov->t0(); + const Type c0 = vocov->t1(); + const Type& v1 = vocov->t2(); + const Type c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(vocov->f0()); + const details::operator_type o1 = expr_gen.get_operator(vocov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = vocov->f0(); + binary_functor_t f1 = vocov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), v0, c0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((v0 o0 (c0 o1 v1)) o2 c1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), v0, c0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_covovoc_expression4 + { + typedef typename covovoc_t::type4 node_type; + typedef typename covovoc_t::sf4_type sf4_type; + typedef typename node_type::T0 T0; + typedef typename node_type::T1 T1; + typedef typename node_type::T2 T2; + typedef typename node_type::T3 T3; + + static inline expression_node_ptr process(expression_generator& expr_gen, + const details::operator_type& operation, + expression_node_ptr (&branch)[2]) + { + // ((c0 o0 (v0 o1 v1)) o2 c1) + typedef typename synthesize_covov_expression1::node_type lcl_covov_t; + + const lcl_covov_t* covov = static_cast(branch[0]); + const Type c0 = covov->t0(); + const Type& v0 = covov->t1(); + const Type& v1 = covov->t2(); + const Type c1 = static_cast*>(branch[1])->value(); + const details::operator_type o0 = expr_gen.get_operator(covov->f0()); + const details::operator_type o1 = expr_gen.get_operator(covov->f1()); + const details::operator_type o2 = operation; + + binary_functor_t f0 = covov->f0(); + binary_functor_t f1 = covov->f1(); + binary_functor_t f2 = reinterpret_cast(0); + + details::free_node(*(expr_gen.node_allocator_),branch[0]); + details::free_node(*(expr_gen.node_allocator_),branch[1]); + + expression_node_ptr result = error_node(); + + const bool synthesis_result = + synthesize_sf4ext_expression::template compile + (expr_gen, id(expr_gen, o0, o1, o2), c0, v0, v1, c1, result); + + if (synthesis_result) + return result; + else if (!expr_gen.valid_operator(o2,f2)) + return error_node(); + + exprtk_debug(("((c0 o0 (v0 o1 v1)) o2 c1)\n")); + + return node_type::allocate(*(expr_gen.node_allocator_), c0, v0, v1, c1, f0, f1, f2); + } + + static inline std::string id(expression_generator& expr_gen, + const details::operator_type o0, + const details::operator_type o1, + const details::operator_type o2) + { + return details::build_string() + << "(t" << expr_gen.to_str(o0) + << "(t" << expr_gen.to_str(o1) + << "t)" << expr_gen.to_str(o2) + << "t"; + } + }; + + struct synthesize_vococov_expression4 + { + typedef typename vococov_t::type4 node_type; + static inline expression_node_ptr process(expression_generator&, + const details::operator_type&, + expression_node_ptr (&)[2]) + { + // ((v0 o0 (c0 o1 c1)) o2 v1) - Not possible + exprtk_debug(("((v0 o0 (c0 o1 c1)) o2 v1) - Not possible\n")); + return error_node(); + } + + static inline std::string id(expression_generator&, + const details::operator_type, + const details::operator_type, + const details::operator_type) + { + return "INVALID"; + } + }; + #endif + + inline expression_node_ptr synthesize_uvouv_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2]) + { + // Definition: uv o uv + details::operator_type o0 = static_cast*>(branch[0])->operation(); + details::operator_type o1 = static_cast*>(branch[1])->operation(); + const Type& v0 = static_cast*>(branch[0])->v(); + const Type& v1 = static_cast*>(branch[1])->v(); + unary_functor_t u0 = reinterpret_cast (0); + unary_functor_t u1 = reinterpret_cast (0); + binary_functor_t f = reinterpret_cast(0); + + if (!valid_operator(o0,u0)) + return error_node(); + else if (!valid_operator(o1,u1)) + return error_node(); + else if (!valid_operator(operation,f)) + return error_node(); + + expression_node_ptr result = error_node(); + + if ( + (details::e_neg == o0) && + (details::e_neg == o1) + ) + { + switch (operation) + { + // (-v0 + -v1) --> -(v0 + v1) + case details::e_add : result = (*this)(details::e_neg, + node_allocator_-> + allocate_rr > >(v0, v1)); + exprtk_debug(("(-v0 + -v1) --> -(v0 + v1)\n")); + break; + + // (-v0 - -v1) --> (v1 - v0) + case details::e_sub : result = node_allocator_-> + allocate_rr > >(v1, v0); + exprtk_debug(("(-v0 - -v1) --> (v1 - v0)\n")); + break; + + // (-v0 * -v1) --> (v0 * v1) + case details::e_mul : result = node_allocator_-> + allocate_rr > >(v0, v1); + exprtk_debug(("(-v0 * -v1) --> (v0 * v1)\n")); + break; + + // (-v0 / -v1) --> (v0 / v1) + case details::e_div : result = node_allocator_-> + allocate_rr > >(v0, v1); + exprtk_debug(("(-v0 / -v1) --> (v0 / v1)\n")); + break; + + default : break; + } + } + + if (0 == result) + { + result = node_allocator_-> + allocate_rrrrr >(v0, v1, u0, u1, f); + } + + details::free_all_nodes(*node_allocator_,branch); + return result; + } + + #undef basic_opr_switch_statements + #undef extended_opr_switch_statements + #undef unary_opr_switch_statements + + #ifndef exprtk_disable_string_capabilities + + #define string_opr_switch_statements \ + case_stmt(details::e_lt , details::lt_op ) \ + case_stmt(details::e_lte , details::lte_op ) \ + case_stmt(details::e_gt , details::gt_op ) \ + case_stmt(details::e_gte , details::gte_op ) \ + case_stmt(details::e_eq , details::eq_op ) \ + case_stmt(details::e_ne , details::ne_op ) \ + case_stmt(details::e_in , details::in_op ) \ + case_stmt(details::e_like , details::like_op ) \ + case_stmt(details::e_ilike , details::ilike_op) \ + + template + inline expression_node_ptr synthesize_str_xrox_expression_impl(const details::operator_type& opr, + T0 s0, T1 s1, + range_t rp0) + { + switch (opr) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate_ttt >,T0,T1> \ + (s0, s1, rp0); \ + + string_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + template + inline expression_node_ptr synthesize_str_xoxr_expression_impl(const details::operator_type& opr, + T0 s0, T1 s1, + range_t rp1) + { + switch (opr) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate_ttt >,T0,T1> \ + (s0, s1, rp1); \ + + string_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + template + inline expression_node_ptr synthesize_str_xroxr_expression_impl(const details::operator_type& opr, + T0 s0, T1 s1, + range_t rp0, range_t rp1) + { + switch (opr) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate_tttt >,T0,T1> \ + (s0, s1, rp0, rp1); \ + + string_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + template + inline expression_node_ptr synthesize_sos_expression_impl(const details::operator_type& opr, T0 s0, T1 s1) + { + switch (opr) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate_tt >,T0,T1>(s0, s1); \ + + string_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + inline expression_node_ptr synthesize_sos_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast*>(branch[0])->ref(); + std::string& s1 = static_cast*>(branch[1])->ref(); + + return synthesize_sos_expression_impl(opr, s0, s1); + } + + inline expression_node_ptr synthesize_sros_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast*>(branch[0])->ref (); + std::string& s1 = static_cast*> (branch[1])->ref (); + range_t rp0 = static_cast*>(branch[0])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + + return synthesize_str_xrox_expression_impl(opr, s0, s1, rp0); + } + + inline expression_node_ptr synthesize_sosr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast*> (branch[0])->ref (); + std::string& s1 = static_cast*>(branch[1])->ref (); + range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xoxr_expression_impl(opr, s0, s1, rp1); + } + + inline expression_node_ptr synthesize_socsr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast*> (branch[0])->ref (); + std::string s1 = static_cast*>(branch[1])->str (); + range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xoxr_expression_impl(opr, s0, s1, rp1); + } + + inline expression_node_ptr synthesize_srosr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast*>(branch[0])->ref (); + std::string& s1 = static_cast*>(branch[1])->ref (); + range_t rp0 = static_cast*>(branch[0])->range(); + range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xroxr_expression_impl(opr, s0, s1, rp0, rp1); + } + + inline expression_node_ptr synthesize_socs_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast< details::stringvar_node*>(branch[0])->ref(); + std::string s1 = static_cast*>(branch[1])->str(); + + details::free_node(*node_allocator_,branch[1]); + + return synthesize_sos_expression_impl(opr, s0, s1); + } + + inline expression_node_ptr synthesize_csos_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string s0 = static_cast*>(branch[0])->str(); + std::string& s1 = static_cast* >(branch[1])->ref(); + + details::free_node(*node_allocator_,branch[0]); + + return synthesize_sos_expression_impl(opr, s0, s1); + } + + inline expression_node_ptr synthesize_csosr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string s0 = static_cast*>(branch[0])->str (); + std::string& s1 = static_cast* >(branch[1])->ref (); + range_t rp1 = static_cast* >(branch[1])->range(); + + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xoxr_expression_impl(opr, s0, s1, rp1); + } + + inline expression_node_ptr synthesize_srocs_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast* >(branch[0])->ref (); + std::string s1 = static_cast*>(branch[1])->str (); + range_t rp0 = static_cast* >(branch[0])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xrox_expression_impl(opr, s0, s1, rp0); + } + + inline expression_node_ptr synthesize_srocsr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string& s0 = static_cast* >(branch[0])->ref (); + std::string s1 = static_cast*>(branch[1])->str (); + range_t rp0 = static_cast* >(branch[0])->range(); + range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*> (branch[0])->range_ref().clear(); + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xroxr_expression_impl(opr, s0, s1, rp0, rp1); + } + + inline expression_node_ptr synthesize_csocs_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + const std::string s0 = static_cast*>(branch[0])->str(); + const std::string s1 = static_cast*>(branch[1])->str(); + + expression_node_ptr result = error_node(); + + if (details::e_add == opr) + result = node_allocator_->allocate_c >(s0 + s1); + else if (details::e_in == opr) + result = node_allocator_->allocate_c >(details::in_op ::process(s0,s1)); + else if (details::e_like == opr) + result = node_allocator_->allocate_c >(details::like_op ::process(s0,s1)); + else if (details::e_ilike == opr) + result = node_allocator_->allocate_c >(details::ilike_op::process(s0,s1)); + else + { + expression_node_ptr temp = synthesize_sos_expression_impl(opr, s0, s1); + + const Type v = temp->value(); + + details::free_node(*node_allocator_,temp); + + result = node_allocator_->allocate(v); + } + + details::free_all_nodes(*node_allocator_,branch); + + return result; + } + + inline expression_node_ptr synthesize_csocsr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + const std::string s0 = static_cast* >(branch[0])->str (); + std::string s1 = static_cast*>(branch[1])->str (); + range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*>(branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xoxr_expression_impl(opr, s0, s1, rp1); + } + + inline expression_node_ptr synthesize_csros_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + std::string s0 = static_cast*>(branch[0])->str (); + std::string& s1 = static_cast* >(branch[1])->ref (); + range_t rp0 = static_cast*>(branch[0])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + + return synthesize_str_xrox_expression_impl(opr, s0, s1, rp0); + } + + inline expression_node_ptr synthesize_csrosr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + const std::string s0 = static_cast*>(branch[0])->str (); + std::string& s1 = static_cast* >(branch[1])->ref (); + const range_t rp0 = static_cast*>(branch[0])->range(); + const range_t rp1 = static_cast* >(branch[1])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + static_cast*> (branch[1])->range_ref().clear(); + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return synthesize_str_xroxr_expression_impl(opr, s0, s1, rp0, rp1); + } + + inline expression_node_ptr synthesize_csrocs_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + const std::string s0 = static_cast*>(branch[0])->str (); + const std::string s1 = static_cast* >(branch[1])->str (); + const range_t rp0 = static_cast*>(branch[0])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + + details::free_all_nodes(*node_allocator_,branch); + + return synthesize_str_xrox_expression_impl(opr, s0, s1, rp0); + } + + inline expression_node_ptr synthesize_csrocsr_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + const std::string s0 = static_cast*>(branch[0])->str (); + const std::string s1 = static_cast*>(branch[1])->str (); + const range_t rp0 = static_cast*>(branch[0])->range(); + const range_t rp1 = static_cast*>(branch[1])->range(); + + static_cast*>(branch[0])->range_ref().clear(); + static_cast*>(branch[1])->range_ref().clear(); + + details::free_all_nodes(*node_allocator_,branch); + + return synthesize_str_xroxr_expression_impl(opr, s0, s1, rp0, rp1); + } + + inline expression_node_ptr synthesize_strogen_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + switch (opr) + { + #define case_stmt(op0, op1) \ + case op0 : return node_allocator_-> \ + allocate_ttt > > \ + (opr, branch[0], branch[1]); \ + + string_opr_switch_statements + #undef case_stmt + default : return error_node(); + } + } + + #undef string_opr_switch_statements + #endif + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr synthesize_string_expression(const details::operator_type& opr, expression_node_ptr (&branch)[2]) + { + if ((0 == branch[0]) || (0 == branch[1])) + { + details::free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + + const bool b0_is_s = details::is_string_node (branch[0]); + const bool b0_is_cs = details::is_const_string_node (branch[0]); + const bool b0_is_sr = details::is_string_range_node (branch[0]); + const bool b0_is_csr = details::is_const_string_range_node(branch[0]); + + const bool b1_is_s = details::is_string_node (branch[1]); + const bool b1_is_cs = details::is_const_string_node (branch[1]); + const bool b1_is_sr = details::is_string_range_node (branch[1]); + const bool b1_is_csr = details::is_const_string_range_node(branch[1]); + + const bool b0_is_gen = details::is_string_assignment_node (branch[0]) || + details::is_genricstring_range_node(branch[0]) || + details::is_string_concat_node (branch[0]) || + details::is_string_function_node (branch[0]) || + details::is_string_condition_node (branch[0]) || + details::is_string_ccondition_node (branch[0]) || + details::is_string_vararg_node (branch[0]) ; + + const bool b1_is_gen = details::is_string_assignment_node (branch[1]) || + details::is_genricstring_range_node(branch[1]) || + details::is_string_concat_node (branch[1]) || + details::is_string_function_node (branch[1]) || + details::is_string_condition_node (branch[1]) || + details::is_string_ccondition_node (branch[1]) || + details::is_string_vararg_node (branch[1]) ; + + if (details::e_add == opr) + { + if (!b0_is_cs || !b1_is_cs) + { + return synthesize_expression(opr,branch); + } + } + + if (b0_is_gen || b1_is_gen) + { + return synthesize_strogen_expression(opr,branch); + } + else if (b0_is_s) + { + if (b1_is_s ) return synthesize_sos_expression (opr,branch); + else if (b1_is_cs ) return synthesize_socs_expression (opr,branch); + else if (b1_is_sr ) return synthesize_sosr_expression (opr,branch); + else if (b1_is_csr) return synthesize_socsr_expression (opr,branch); + } + else if (b0_is_cs) + { + if (b1_is_s ) return synthesize_csos_expression (opr,branch); + else if (b1_is_cs ) return synthesize_csocs_expression (opr,branch); + else if (b1_is_sr ) return synthesize_csosr_expression (opr,branch); + else if (b1_is_csr) return synthesize_csocsr_expression(opr,branch); + } + else if (b0_is_sr) + { + if (b1_is_s ) return synthesize_sros_expression (opr,branch); + else if (b1_is_sr ) return synthesize_srosr_expression (opr,branch); + else if (b1_is_cs ) return synthesize_srocs_expression (opr,branch); + else if (b1_is_csr) return synthesize_srocsr_expression(opr,branch); + } + else if (b0_is_csr) + { + if (b1_is_s ) return synthesize_csros_expression (opr,branch); + else if (b1_is_sr ) return synthesize_csrosr_expression (opr,branch); + else if (b1_is_cs ) return synthesize_csrocs_expression (opr,branch); + else if (b1_is_csr) return synthesize_csrocsr_expression(opr,branch); + } + + return error_node(); + } + #else + inline expression_node_ptr synthesize_string_expression(const details::operator_type&, expression_node_ptr (&branch)[2]) + { + details::free_all_nodes(*node_allocator_,branch); + return error_node(); + } + #endif + + #ifndef exprtk_disable_string_capabilities + inline expression_node_ptr synthesize_string_expression(const details::operator_type& opr, expression_node_ptr (&branch)[3]) + { + if (details::e_inrange != opr) + return error_node(); + else if ((0 == branch[0]) || (0 == branch[1]) || (0 == branch[2])) + { + details::free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + else if ( + details::is_const_string_node(branch[0]) && + details::is_const_string_node(branch[1]) && + details::is_const_string_node(branch[2]) + ) + { + const std::string s0 = static_cast*>(branch[0])->str(); + const std::string s1 = static_cast*>(branch[1])->str(); + const std::string s2 = static_cast*>(branch[2])->str(); + + const Type v = (((s0 <= s1) && (s1 <= s2)) ? Type(1) : Type(0)); + + details::free_all_nodes(*node_allocator_,branch); + + return node_allocator_->allocate_c >(v); + } + else if ( + details::is_string_node(branch[0]) && + details::is_string_node(branch[1]) && + details::is_string_node(branch[2]) + ) + { + std::string& s0 = static_cast*>(branch[0])->ref(); + std::string& s1 = static_cast*>(branch[1])->ref(); + std::string& s2 = static_cast*>(branch[2])->ref(); + + typedef typename details::sosos_node > inrange_t; + + return node_allocator_->allocate_type(s0, s1, s2); + } + else if ( + details::is_const_string_node(branch[0]) && + details::is_string_node(branch[1]) && + details::is_const_string_node(branch[2]) + ) + { + std::string s0 = static_cast*>(branch[0])->str(); + std::string& s1 = static_cast* >(branch[1])->ref(); + std::string s2 = static_cast*>(branch[2])->str(); + + typedef typename details::sosos_node > inrange_t; + + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[2]); + + return node_allocator_->allocate_type(s0, s1, s2); + } + else if ( + details::is_string_node(branch[0]) && + details::is_const_string_node(branch[1]) && + details::is_string_node(branch[2]) + ) + { + std::string& s0 = static_cast* >(branch[0])->ref(); + std::string s1 = static_cast*>(branch[1])->str(); + std::string& s2 = static_cast* >(branch[2])->ref(); + + typedef typename details::sosos_node > inrange_t; + + details::free_node(*node_allocator_,branch[1]); + + return node_allocator_->allocate_type(s0, s1, s2); + } + else if ( + details::is_string_node(branch[0]) && + details::is_string_node(branch[1]) && + details::is_const_string_node(branch[2]) + ) + { + std::string& s0 = static_cast* >(branch[0])->ref(); + std::string& s1 = static_cast* >(branch[1])->ref(); + std::string s2 = static_cast*>(branch[2])->str(); + + typedef typename details::sosos_node > inrange_t; + + details::free_node(*node_allocator_,branch[2]); + + return node_allocator_->allocate_type(s0, s1, s2); + } + else if ( + details::is_const_string_node(branch[0]) && + details:: is_string_node(branch[1]) && + details:: is_string_node(branch[2]) + ) + { + std::string s0 = static_cast*>(branch[0])->str(); + std::string& s1 = static_cast* >(branch[1])->ref(); + std::string& s2 = static_cast* >(branch[2])->ref(); + + typedef typename details::sosos_node > inrange_t; + + details::free_node(*node_allocator_,branch[0]); + + return node_allocator_->allocate_type(s0, s1, s2); + } + else + return error_node(); + } + #else + inline expression_node_ptr synthesize_string_expression(const details::operator_type&, expression_node_ptr (&branch)[3]) + { + details::free_all_nodes(*node_allocator_,branch); + return error_node(); + } + #endif + + inline expression_node_ptr synthesize_null_expression(const details::operator_type& operation, expression_node_ptr (&branch)[2]) + { + /* + Note: The following are the type promotion rules + that relate to operations that include 'null': + 0. null ==/!= null --> true false + 1. null operation null --> null + 2. x ==/!= null --> true/false + 3. null ==/!= x --> true/false + 4. x operation null --> x + 5. null operation x --> x + */ + + typedef typename details::null_eq_node nulleq_node_t; + + const bool b0_null = details::is_null_node(branch[0]); + const bool b1_null = details::is_null_node(branch[1]); + + if (b0_null && b1_null) + { + expression_node_ptr result = error_node(); + + if (details::e_eq == operation) + result = node_allocator_->allocate_c(T(1)); + else if (details::e_ne == operation) + result = node_allocator_->allocate_c(T(0)); + + if (result) + { + details::free_node(*node_allocator_,branch[0]); + details::free_node(*node_allocator_,branch[1]); + + return result; + } + + details::free_node(*node_allocator_,branch[1]); + + return branch[0]; + } + else if (details::e_eq == operation) + { + expression_node_ptr result = node_allocator_-> + allocate_rc(branch[b0_null ? 0 : 1],true); + + details::free_node(*node_allocator_,branch[b0_null ? 1 : 0]); + + return result; + } + else if (details::e_ne == operation) + { + expression_node_ptr result = node_allocator_-> + allocate_rc(branch[b0_null ? 0 : 1],false); + + details::free_node(*node_allocator_,branch[b0_null ? 1 : 0]); + + return result; + } + else if (b0_null) + { + details::free_node(*node_allocator_,branch[0]); + branch[0] = branch[1]; + branch[1] = error_node(); + } + else if (b1_null) + { + details::free_node(*node_allocator_,branch[1]); + branch[1] = error_node(); + } + + if ( + (details::e_add == operation) || (details::e_sub == operation) || + (details::e_mul == operation) || (details::e_div == operation) || + (details::e_mod == operation) || (details::e_pow == operation) + ) + { + return branch[0]; + } + + details::free_node(*node_allocator_, branch[0]); + + if ( + (details::e_lt == operation) || (details::e_lte == operation) || + (details::e_gt == operation) || (details::e_gte == operation) || + (details::e_and == operation) || (details::e_nand == operation) || + (details::e_or == operation) || (details::e_nor == operation) || + (details::e_xor == operation) || (details::e_xnor == operation) || + (details::e_in == operation) || (details::e_like == operation) || + (details::e_ilike == operation) + ) + { + return node_allocator_->allocate_c(T(0)); + } + + return node_allocator_->allocate >(); + } + + template + inline expression_node_ptr synthesize_expression(const details::operator_type& operation, expression_node_ptr (&branch)[N]) + { + if ( + (details::e_in == operation) || + (details::e_like == operation) || + (details::e_ilike == operation) + ) + { + free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + else if (!details::all_nodes_valid(branch)) + { + free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + else if ((details::e_default != operation)) + { + // Attempt simple constant folding optimisation. + expression_node_ptr expression_point = node_allocator_->allocate(operation,branch); + + if (is_constant_foldable(branch)) + { + const Type v = expression_point->value(); + details::free_node(*node_allocator_,expression_point); + + return node_allocator_->allocate(v); + } + + if (expression_point && expression_point->valid()) + { + return expression_point; + } + + parser_->set_error(parser_error::make_error( + parser_error::e_parser, + token_t(), + "ERR249 - Failed to synthesize node: NodeType", + exprtk_error_location)); + + details::free_node(*node_allocator_, expression_point); + } + + return error_node(); + } + + template + inline expression_node_ptr synthesize_expression(F* f, expression_node_ptr (&branch)[N]) + { + if (!details::all_nodes_valid(branch)) + { + free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + + typedef typename details::function_N_node function_N_node_t; + + // Attempt simple constant folding optimisation. + + expression_node_ptr expression_point = node_allocator_->allocate(f); + function_N_node_t* func_node_ptr = dynamic_cast(expression_point); + + if (0 == func_node_ptr) + { + free_all_nodes(*node_allocator_,branch); + + return error_node(); + } + else + func_node_ptr->init_branches(branch); + + if (is_constant_foldable(branch) && !f->has_side_effects()) + { + Type v = expression_point->value(); + details::free_node(*node_allocator_,expression_point); + + return node_allocator_->allocate(v); + } + + parser_->state_.activate_side_effect("synthesize_expression(function)"); + + return expression_point; + } + + bool strength_reduction_enabled_; + details::node_allocator* node_allocator_; + synthesize_map_t synthesize_map_; + unary_op_map_t* unary_op_map_; + binary_op_map_t* binary_op_map_; + inv_binary_op_map_t* inv_binary_op_map_; + sf3_map_t* sf3_map_; + sf4_map_t* sf4_map_; + parser_t* parser_; + }; // class expression_generator + + inline void set_error(const parser_error::type& error_type) + { + error_list_.push_back(error_type); + } + + inline void remove_last_error() + { + if (!error_list_.empty()) + { + error_list_.pop_back(); + } + } + + inline void set_synthesis_error(const std::string& synthesis_error_message) + { + if (synthesis_error_.empty()) + { + synthesis_error_ = synthesis_error_message; + } + } + + inline void register_local_vars(expression& e) + { + for (std::size_t i = 0; i < sem_.size(); ++i) + { + scope_element& se = sem_.get_element(i); + + if ( + (scope_element::e_variable == se.type) || + (scope_element::e_vecelem == se.type) + ) + { + if (se.var_node) + { + e.register_local_var(se.var_node); + } + + if (se.data) + { + e.register_local_data(se.data, 1, 0); + } + } + else if (scope_element::e_vector == se.type) + { + if (se.vec_node) + { + e.register_local_var(se.vec_node); + } + + if (se.data) + { + e.register_local_data(se.data, se.size, 1); + } + } + #ifndef exprtk_disable_string_capabilities + else if (scope_element::e_string == se.type) + { + if (se.str_node) + { + e.register_local_var(se.str_node); + } + + if (se.data) + { + e.register_local_data(se.data, se.size, 2); + } + } + #endif + + se.var_node = 0; + se.vec_node = 0; + #ifndef exprtk_disable_string_capabilities + se.str_node = 0; + #endif + se.data = 0; + se.ref_count = 0; + se.active = false; + } + } + + inline void register_return_results(expression& e) + { + e.register_return_results(results_context_); + results_context_ = 0; + } + + inline void load_unary_operations_map(unary_op_map_t& m) + { + #define register_unary_op(Op, UnaryFunctor) \ + m.insert(std::make_pair(Op,UnaryFunctor::process)); \ + + register_unary_op(details::e_abs , details::abs_op ) + register_unary_op(details::e_acos , details::acos_op ) + register_unary_op(details::e_acosh , details::acosh_op) + register_unary_op(details::e_asin , details::asin_op ) + register_unary_op(details::e_asinh , details::asinh_op) + register_unary_op(details::e_atanh , details::atanh_op) + register_unary_op(details::e_ceil , details::ceil_op ) + register_unary_op(details::e_cos , details::cos_op ) + register_unary_op(details::e_cosh , details::cosh_op ) + register_unary_op(details::e_exp , details::exp_op ) + register_unary_op(details::e_expm1 , details::expm1_op) + register_unary_op(details::e_floor , details::floor_op) + register_unary_op(details::e_log , details::log_op ) + register_unary_op(details::e_log10 , details::log10_op) + register_unary_op(details::e_log2 , details::log2_op ) + register_unary_op(details::e_log1p , details::log1p_op) + register_unary_op(details::e_neg , details::neg_op ) + register_unary_op(details::e_pos , details::pos_op ) + register_unary_op(details::e_round , details::round_op) + register_unary_op(details::e_sin , details::sin_op ) + register_unary_op(details::e_sinc , details::sinc_op ) + register_unary_op(details::e_sinh , details::sinh_op ) + register_unary_op(details::e_sqrt , details::sqrt_op ) + register_unary_op(details::e_tan , details::tan_op ) + register_unary_op(details::e_tanh , details::tanh_op ) + register_unary_op(details::e_cot , details::cot_op ) + register_unary_op(details::e_sec , details::sec_op ) + register_unary_op(details::e_csc , details::csc_op ) + register_unary_op(details::e_r2d , details::r2d_op ) + register_unary_op(details::e_d2r , details::d2r_op ) + register_unary_op(details::e_d2g , details::d2g_op ) + register_unary_op(details::e_g2d , details::g2d_op ) + register_unary_op(details::e_notl , details::notl_op ) + register_unary_op(details::e_sgn , details::sgn_op ) + register_unary_op(details::e_erf , details::erf_op ) + register_unary_op(details::e_erfc , details::erfc_op ) + register_unary_op(details::e_ncdf , details::ncdf_op ) + register_unary_op(details::e_frac , details::frac_op ) + register_unary_op(details::e_trunc , details::trunc_op) + #undef register_unary_op + } + + inline void load_binary_operations_map(binary_op_map_t& m) + { + typedef typename binary_op_map_t::value_type value_type; + + #define register_binary_op(Op, BinaryFunctor) \ + m.insert(value_type(Op,BinaryFunctor::process)); \ + + register_binary_op(details::e_add , details::add_op ) + register_binary_op(details::e_sub , details::sub_op ) + register_binary_op(details::e_mul , details::mul_op ) + register_binary_op(details::e_div , details::div_op ) + register_binary_op(details::e_mod , details::mod_op ) + register_binary_op(details::e_pow , details::pow_op ) + register_binary_op(details::e_lt , details::lt_op ) + register_binary_op(details::e_lte , details::lte_op ) + register_binary_op(details::e_gt , details::gt_op ) + register_binary_op(details::e_gte , details::gte_op ) + register_binary_op(details::e_eq , details::eq_op ) + register_binary_op(details::e_ne , details::ne_op ) + register_binary_op(details::e_and , details::and_op ) + register_binary_op(details::e_nand , details::nand_op) + register_binary_op(details::e_or , details::or_op ) + register_binary_op(details::e_nor , details::nor_op ) + register_binary_op(details::e_xor , details::xor_op ) + register_binary_op(details::e_xnor , details::xnor_op) + #undef register_binary_op + } + + inline void load_inv_binary_operations_map(inv_binary_op_map_t& m) + { + typedef typename inv_binary_op_map_t::value_type value_type; + + #define register_binary_op(Op, BinaryFunctor) \ + m.insert(value_type(BinaryFunctor::process,Op)); \ + + register_binary_op(details::e_add , details::add_op ) + register_binary_op(details::e_sub , details::sub_op ) + register_binary_op(details::e_mul , details::mul_op ) + register_binary_op(details::e_div , details::div_op ) + register_binary_op(details::e_mod , details::mod_op ) + register_binary_op(details::e_pow , details::pow_op ) + register_binary_op(details::e_lt , details::lt_op ) + register_binary_op(details::e_lte , details::lte_op ) + register_binary_op(details::e_gt , details::gt_op ) + register_binary_op(details::e_gte , details::gte_op ) + register_binary_op(details::e_eq , details::eq_op ) + register_binary_op(details::e_ne , details::ne_op ) + register_binary_op(details::e_and , details::and_op ) + register_binary_op(details::e_nand , details::nand_op) + register_binary_op(details::e_or , details::or_op ) + register_binary_op(details::e_nor , details::nor_op ) + register_binary_op(details::e_xor , details::xor_op ) + register_binary_op(details::e_xnor , details::xnor_op) + #undef register_binary_op + } + + inline void load_sf3_map(sf3_map_t& sf3_map) + { + typedef std::pair pair_t; + + #define register_sf3(Op) \ + sf3_map[details::sf##Op##_op::id()] = pair_t(details::sf##Op##_op::process,details::e_sf##Op); \ + + register_sf3(00) register_sf3(01) register_sf3(02) register_sf3(03) + register_sf3(04) register_sf3(05) register_sf3(06) register_sf3(07) + register_sf3(08) register_sf3(09) register_sf3(10) register_sf3(11) + register_sf3(12) register_sf3(13) register_sf3(14) register_sf3(15) + register_sf3(16) register_sf3(17) register_sf3(18) register_sf3(19) + register_sf3(20) register_sf3(21) register_sf3(22) register_sf3(23) + register_sf3(24) register_sf3(25) register_sf3(26) register_sf3(27) + register_sf3(28) register_sf3(29) register_sf3(30) + #undef register_sf3 + + #define register_sf3_extid(Id, Op) \ + sf3_map[Id] = pair_t(details::sf##Op##_op::process,details::e_sf##Op); \ + + register_sf3_extid("(t-t)-t",23) // (t-t)-t --> t-(t+t) + #undef register_sf3_extid + } + + inline void load_sf4_map(sf4_map_t& sf4_map) + { + typedef std::pair pair_t; + + #define register_sf4(Op) \ + sf4_map[details::sf##Op##_op::id()] = pair_t(details::sf##Op##_op::process,details::e_sf##Op); \ + + register_sf4(48) register_sf4(49) register_sf4(50) register_sf4(51) + register_sf4(52) register_sf4(53) register_sf4(54) register_sf4(55) + register_sf4(56) register_sf4(57) register_sf4(58) register_sf4(59) + register_sf4(60) register_sf4(61) register_sf4(62) register_sf4(63) + register_sf4(64) register_sf4(65) register_sf4(66) register_sf4(67) + register_sf4(68) register_sf4(69) register_sf4(70) register_sf4(71) + register_sf4(72) register_sf4(73) register_sf4(74) register_sf4(75) + register_sf4(76) register_sf4(77) register_sf4(78) register_sf4(79) + register_sf4(80) register_sf4(81) register_sf4(82) register_sf4(83) + #undef register_sf4 + + #define register_sf4ext(Op) \ + sf4_map[details::sfext##Op##_op::id()] = pair_t(details::sfext##Op##_op::process,details::e_sf4ext##Op); \ + + register_sf4ext(00) register_sf4ext(01) register_sf4ext(02) register_sf4ext(03) + register_sf4ext(04) register_sf4ext(05) register_sf4ext(06) register_sf4ext(07) + register_sf4ext(08) register_sf4ext(09) register_sf4ext(10) register_sf4ext(11) + register_sf4ext(12) register_sf4ext(13) register_sf4ext(14) register_sf4ext(15) + register_sf4ext(16) register_sf4ext(17) register_sf4ext(18) register_sf4ext(19) + register_sf4ext(20) register_sf4ext(21) register_sf4ext(22) register_sf4ext(23) + register_sf4ext(24) register_sf4ext(25) register_sf4ext(26) register_sf4ext(27) + register_sf4ext(28) register_sf4ext(29) register_sf4ext(30) register_sf4ext(31) + register_sf4ext(32) register_sf4ext(33) register_sf4ext(34) register_sf4ext(35) + register_sf4ext(36) register_sf4ext(36) register_sf4ext(38) register_sf4ext(39) + register_sf4ext(40) register_sf4ext(41) register_sf4ext(42) register_sf4ext(43) + register_sf4ext(44) register_sf4ext(45) register_sf4ext(46) register_sf4ext(47) + register_sf4ext(48) register_sf4ext(49) register_sf4ext(50) register_sf4ext(51) + register_sf4ext(52) register_sf4ext(53) register_sf4ext(54) register_sf4ext(55) + register_sf4ext(56) register_sf4ext(57) register_sf4ext(58) register_sf4ext(59) + register_sf4ext(60) register_sf4ext(61) + #undef register_sf4ext + } + + inline results_context_t& results_ctx() + { + if (0 == results_context_) + { + results_context_ = new results_context_t(); + } + + return (*results_context_); + } + + inline void return_cleanup() + { + #ifndef exprtk_disable_return_statement + if (results_context_) + { + delete results_context_; + results_context_ = 0; + } + + state_.return_stmt_present = false; + #endif + } + + private: + + parser(const parser&) exprtk_delete; + parser& operator=(const parser&) exprtk_delete; + + settings_store settings_; + expression_generator expression_generator_; + details::node_allocator node_allocator_; + symtab_store symtab_store_; + dependent_entity_collector dec_; + std::deque error_list_; + std::deque brkcnt_list_; + parser_state state_; + bool resolve_unknown_symbol_; + results_context_t* results_context_; + unknown_symbol_resolver* unknown_symbol_resolver_; + unknown_symbol_resolver default_usr_; + base_ops_map_t base_ops_map_; + unary_op_map_t unary_op_map_; + binary_op_map_t binary_op_map_; + inv_binary_op_map_t inv_binary_op_map_; + sf3_map_t sf3_map_; + sf4_map_t sf4_map_; + std::string synthesis_error_; + scope_element_manager sem_; + std::vector current_state_stack_; + + immutable_memory_map_t immutable_memory_map_; + immutable_symtok_map_t immutable_symtok_map_; + + lexer::helper::helper_assembly helper_assembly_; + + lexer::helper::commutative_inserter commutative_inserter_; + lexer::helper::operator_joiner operator_joiner_2_; + lexer::helper::operator_joiner operator_joiner_3_; + lexer::helper::symbol_replacer symbol_replacer_; + lexer::helper::bracket_checker bracket_checker_; + lexer::helper::numeric_checker numeric_checker_; + lexer::helper::sequence_validator sequence_validator_; + lexer::helper::sequence_validator_3tokens sequence_validator_3tkns_; + + loop_runtime_check_ptr loop_runtime_check_; + vector_access_runtime_check_ptr vector_access_runtime_check_; + compilation_check_ptr compilation_check_ptr_; + + template + friend void details::disable_type_checking(ParserType& p); + }; // class parser + + namespace details + { + template + struct collector_helper + { + typedef exprtk::symbol_table symbol_table_t; + typedef exprtk::expression expression_t; + typedef exprtk::parser parser_t; + typedef typename parser_t::dependent_entity_collector::symbol_t symbol_t; + typedef typename parser_t::unknown_symbol_resolver usr_t; + + struct resolve_as_vector : public parser_t::unknown_symbol_resolver + { + typedef exprtk::parser parser_t; + + resolve_as_vector() + : usr_t(usr_t::e_usrmode_extended) + {} + + virtual bool process(const std::string& unknown_symbol, + symbol_table_t& symbol_table, + std::string&) exprtk_override + { + static T v[1]; + symbol_table.add_vector(unknown_symbol,v); + return true; + } + }; + + static inline bool collection_pass(const std::string& expression_string, + std::set& symbol_set, + const bool collect_variables, + const bool collect_functions, + const bool vector_pass, + symbol_table_t& ext_symbol_table) + { + symbol_table_t symbol_table; + expression_t expression; + parser_t parser; + + resolve_as_vector vect_resolver; + + expression.register_symbol_table(symbol_table ); + expression.register_symbol_table(ext_symbol_table); + + if (vector_pass) + parser.enable_unknown_symbol_resolver(&vect_resolver); + else + parser.enable_unknown_symbol_resolver(); + + if (collect_variables) + parser.dec().collect_variables() = true; + + if (collect_functions) + parser.dec().collect_functions() = true; + + bool pass_result = false; + + details::disable_type_checking(parser); + + if (parser.compile(expression_string, expression)) + { + pass_result = true; + + std::deque symb_list; + parser.dec().symbols(symb_list); + + for (std::size_t i = 0; i < symb_list.size(); ++i) + { + symbol_set.insert(symb_list[i].first); + } + } + + return pass_result; + } + }; + } + + template class Sequence> + inline bool collect_variables(const std::string& expression, + Sequence& symbol_list) + { + typedef double T; + typedef details::collector_helper collect_t; + + collect_t::symbol_table_t null_symbol_table; + + std::set symbol_set; + + const bool variable_pass = collect_t::collection_pass + (expression, symbol_set, true, false, false, null_symbol_table); + const bool vector_pass = collect_t::collection_pass + (expression, symbol_set, true, false, true, null_symbol_table); + + if (!variable_pass && !vector_pass) + return false; + + std::set::iterator itr = symbol_set.begin(); + + while (symbol_set.end() != itr) + { + symbol_list.push_back(*itr); + ++itr; + } + + return true; + } + + template class Sequence> + inline bool collect_variables(const std::string& expression, + exprtk::symbol_table& extrnl_symbol_table, + Sequence& symbol_list) + { + typedef details::collector_helper collect_t; + + std::set symbol_set; + + const bool variable_pass = collect_t::collection_pass + (expression, symbol_set, true, false, false, extrnl_symbol_table); + const bool vector_pass = collect_t::collection_pass + (expression, symbol_set, true, false, true, extrnl_symbol_table); + + if (!variable_pass && !vector_pass) + return false; + + std::set::iterator itr = symbol_set.begin(); + + while (symbol_set.end() != itr) + { + symbol_list.push_back(*itr); + ++itr; + } + + return true; + } + + template class Sequence> + inline bool collect_functions(const std::string& expression, + Sequence& symbol_list) + { + typedef double T; + typedef details::collector_helper collect_t; + + collect_t::symbol_table_t null_symbol_table; + + std::set symbol_set; + + const bool variable_pass = collect_t::collection_pass + (expression, symbol_set, false, true, false, null_symbol_table); + const bool vector_pass = collect_t::collection_pass + (expression, symbol_set, false, true, true, null_symbol_table); + + if (!variable_pass && !vector_pass) + return false; + + std::set::iterator itr = symbol_set.begin(); + + while (symbol_set.end() != itr) + { + symbol_list.push_back(*itr); + ++itr; + } + + return true; + } + + template class Sequence> + inline bool collect_functions(const std::string& expression, + exprtk::symbol_table& extrnl_symbol_table, + Sequence& symbol_list) + { + typedef details::collector_helper collect_t; + + std::set symbol_set; + + const bool variable_pass = collect_t::collection_pass + (expression, symbol_set, false, true, false, extrnl_symbol_table); + const bool vector_pass = collect_t::collection_pass + (expression, symbol_set, false, true, true, extrnl_symbol_table); + + if (!variable_pass && !vector_pass) + return false; + + std::set::iterator itr = symbol_set.begin(); + + while (symbol_set.end() != itr) + { + symbol_list.push_back(*itr); + ++itr; + } + + return true; + } + + template + inline T integrate(const expression& e, + T& x, + const T& r0, const T& r1, + const std::size_t number_of_intervals = 1000000) + { + if (r0 > r1) + return T(0); + + const T h = (r1 - r0) / (T(2) * number_of_intervals); + T total_area = T(0); + + for (std::size_t i = 0; i < number_of_intervals; ++i) + { + x = r0 + T(2) * i * h; + const T y0 = e.value(); x += h; + const T y1 = e.value(); x += h; + const T y2 = e.value(); x += h; + total_area += h * (y0 + T(4) * y1 + y2) / T(3); + } + + return total_area; + } + + template + inline T integrate(const expression& e, + const std::string& variable_name, + const T& r0, const T& r1, + const std::size_t number_of_intervals = 1000000) + { + const symbol_table& sym_table = e.get_symbol_table(); + + if (!sym_table.valid()) + { + return std::numeric_limits::quiet_NaN(); + } + + details::variable_node* var = sym_table.get_variable(variable_name); + + if (var) + { + T& x = var->ref(); + const T x_original = x; + const T result = integrate(e, x, r0, r1, number_of_intervals); + x = x_original; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + template + inline T derivative(const expression& e, + T& x, + const T& h = T(0.00000001)) + { + const T x_init = x; + const T _2h = T(2) * h; + + x = x_init + _2h; + const T y0 = e.value(); + x = x_init + h; + const T y1 = e.value(); + x = x_init - h; + const T y2 = e.value(); + x = x_init - _2h; + const T y3 = e.value(); + x = x_init; + + return (-y0 + T(8) * (y1 - y2) + y3) / (T(12) * h); + } + + template + inline T second_derivative(const expression& e, + T& x, + const T& h = T(0.00001)) + { + const T x_init = x; + const T _2h = T(2) * h; + + const T y = e.value(); + x = x_init + _2h; + const T y0 = e.value(); + x = x_init + h; + const T y1 = e.value(); + x = x_init - h; + const T y2 = e.value(); + x = x_init - _2h; + const T y3 = e.value(); + x = x_init; + + return (-y0 + T(16) * (y1 + y2) - T(30) * y - y3) / (T(12) * h * h); + } + + template + inline T third_derivative(const expression& e, + T& x, + const T& h = T(0.0001)) + { + const T x_init = x; + const T _2h = T(2) * h; + + x = x_init + _2h; + const T y0 = e.value(); + x = x_init + h; + const T y1 = e.value(); + x = x_init - h; + const T y2 = e.value(); + x = x_init - _2h; + const T y3 = e.value(); + x = x_init; + + return (y0 + T(2) * (y2 - y1) - y3) / (T(2) * h * h * h); + } + + template + inline T derivative(const expression& e, + const std::string& variable_name, + const T& h = T(0.00000001)) + { + const symbol_table& sym_table = e.get_symbol_table(); + + if (!sym_table.valid()) + { + return std::numeric_limits::quiet_NaN(); + } + + details::variable_node* var = sym_table.get_variable(variable_name); + + if (var) + { + T& x = var->ref(); + const T x_original = x; + const T result = derivative(e, x, h); + x = x_original; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + template + inline T second_derivative(const expression& e, + const std::string& variable_name, + const T& h = T(0.00001)) + { + const symbol_table& sym_table = e.get_symbol_table(); + + if (!sym_table.valid()) + { + return std::numeric_limits::quiet_NaN(); + } + + details::variable_node* var = sym_table.get_variable(variable_name); + + if (var) + { + T& x = var->ref(); + const T x_original = x; + const T result = second_derivative(e, x, h); + x = x_original; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + template + inline T third_derivative(const expression& e, + const std::string& variable_name, + const T& h = T(0.0001)) + { + const symbol_table& sym_table = e.get_symbol_table(); + + if (!sym_table.valid()) + { + return std::numeric_limits::quiet_NaN(); + } + + details::variable_node* var = sym_table.get_variable(variable_name); + + if (var) + { + T& x = var->ref(); + const T x_original = x; + const T result = third_derivative(e, x, h); + x = x_original; + + return result; + } + + return std::numeric_limits::quiet_NaN(); + } + + /* + Note: The following 'compute' routines are simple helpers, + for quickly setting up the required pieces of code in order + to evaluate an expression. By virtue of how they operate + there will be an overhead with regards to their setup and + teardown and hence should not be used in time critical + sections of code. + Furthermore they only assume a small sub set of variables, + no string variables or user defined functions. + */ + template + inline bool compute(const std::string& expression_string, T& result) + { + // No variables + symbol_table symbol_table; + symbol_table.add_constants(); + + expression expression; + expression.register_symbol_table(symbol_table); + + parser parser; + + if (parser.compile(expression_string,expression)) + { + result = expression.value(); + + return true; + } + else + return false; + } + + template + inline bool compute(const std::string& expression_string, + const T& x, + T& result) + { + // Only 'x' + static const std::string x_var("x"); + + symbol_table symbol_table; + symbol_table.add_constants(); + symbol_table.add_constant(x_var,x); + + expression expression; + expression.register_symbol_table(symbol_table); + + parser parser; + + if (parser.compile(expression_string,expression)) + { + result = expression.value(); + + return true; + } + else + return false; + } + + template + inline bool compute(const std::string& expression_string, + const T&x, const T& y, + T& result) + { + // Only 'x' and 'y' + static const std::string x_var("x"); + static const std::string y_var("y"); + + symbol_table symbol_table; + symbol_table.add_constants(); + symbol_table.add_constant(x_var,x); + symbol_table.add_constant(y_var,y); + + expression expression; + expression.register_symbol_table(symbol_table); + + parser parser; + + if (parser.compile(expression_string,expression)) + { + result = expression.value(); + + return true; + } + else + return false; + } + + template + inline bool compute(const std::string& expression_string, + const T& x, const T& y, const T& z, + T& result) + { + // Only 'x', 'y' or 'z' + static const std::string x_var("x"); + static const std::string y_var("y"); + static const std::string z_var("z"); + + symbol_table symbol_table; + symbol_table.add_constants(); + symbol_table.add_constant(x_var,x); + symbol_table.add_constant(y_var,y); + symbol_table.add_constant(z_var,z); + + expression expression; + expression.register_symbol_table(symbol_table); + + parser parser; + + if (parser.compile(expression_string,expression)) + { + result = expression.value(); + + return true; + } + else + return false; + } + + template + class polynomial : public ifunction + { + private: + + template + struct poly_impl { }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c12, const Type c11, const Type c10, const Type c9, const Type c8, + const Type c7, const Type c6, const Type c5, const Type c4, const Type c3, + const Type c2, const Type c1, const Type c0) + { + // p(x) = c_12x^12 + c_11x^11 + c_10x^10 + c_9x^9 + c_8x^8 + c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return ((((((((((((c12 * x + c11) * x + c10) * x + c9) * x + c8) * x + c7) * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c11, const Type c10, const Type c9, const Type c8, const Type c7, + const Type c6, const Type c5, const Type c4, const Type c3, const Type c2, + const Type c1, const Type c0) + { + // p(x) = c_11x^11 + c_10x^10 + c_9x^9 + c_8x^8 + c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return (((((((((((c11 * x + c10) * x + c9) * x + c8) * x + c7) * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c10, const Type c9, const Type c8, const Type c7, const Type c6, + const Type c5, const Type c4, const Type c3, const Type c2, const Type c1, + const Type c0) + { + // p(x) = c_10x^10 + c_9x^9 + c_8x^8 + c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return ((((((((((c10 * x + c9) * x + c8) * x + c7) * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c9, const Type c8, const Type c7, const Type c6, const Type c5, + const Type c4, const Type c3, const Type c2, const Type c1, const Type c0) + { + // p(x) = c_9x^9 + c_8x^8 + c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return (((((((((c9 * x + c8) * x + c7) * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c8, const Type c7, const Type c6, const Type c5, const Type c4, + const Type c3, const Type c2, const Type c1, const Type c0) + { + // p(x) = c_8x^8 + c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return ((((((((c8 * x + c7) * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c7, const Type c6, const Type c5, const Type c4, const Type c3, + const Type c2, const Type c1, const Type c0) + { + // p(x) = c_7x^7 + c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return (((((((c7 * x + c6) * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c6, const Type c5, const Type c4, const Type c3, const Type c2, + const Type c1, const Type c0) + { + // p(x) = c_6x^6 + c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return ((((((c6 * x + c5) * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, + const Type c5, const Type c4, const Type c3, const Type c2, + const Type c1, const Type c0) + { + // p(x) = c_5x^5 + c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return (((((c5 * x + c4) * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, const Type c4, const Type c3, const Type c2, const Type c1, const Type c0) + { + // p(x) = c_4x^4 + c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return ((((c4 * x + c3) * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, const Type c3, const Type c2, const Type c1, const Type c0) + { + // p(x) = c_3x^3 + c_2x^2 + c_1x^1 + c_0x^0 + return (((c3 * x + c2) * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, const Type c2, const Type c1, const Type c0) + { + // p(x) = c_2x^2 + c_1x^1 + c_0x^0 + return ((c2 * x + c1) * x + c0); + } + }; + + template + struct poly_impl + { + static inline T evaluate(const Type x, const Type c1, const Type c0) + { + // p(x) = c_1x^1 + c_0x^0 + return (c1 * x + c0); + } + }; + + public: + + using ifunction::operator(); + + polynomial() + : ifunction((N+2 <= 20) ? (N + 2) : std::numeric_limits::max()) + { + disable_has_side_effects(*this); + } + + virtual ~polynomial() + {} + + #define poly_rtrn(NN) \ + return (NN != N) ? std::numeric_limits::quiet_NaN() : + + inline virtual T operator() (const T& x, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(1) (poly_impl::evaluate(x, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(2) (poly_impl::evaluate(x, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c3, const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(3) (poly_impl::evaluate(x, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c4, const T& c3, const T& c2, const T& c1, + const T& c0) exprtk_override + { + poly_rtrn(4) (poly_impl::evaluate(x, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c5, const T& c4, const T& c3, const T& c2, + const T& c1, const T& c0) exprtk_override + { + poly_rtrn(5) (poly_impl::evaluate(x, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c6, const T& c5, const T& c4, const T& c3, + const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(6) (poly_impl::evaluate(x, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c7, const T& c6, const T& c5, const T& c4, + const T& c3, const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(7) (poly_impl::evaluate(x, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c8, const T& c7, const T& c6, const T& c5, + const T& c4, const T& c3, const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(8) (poly_impl::evaluate(x, c8, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c9, const T& c8, const T& c7, const T& c6, + const T& c5, const T& c4, const T& c3, const T& c2, const T& c1, + const T& c0) exprtk_override + { + poly_rtrn(9) (poly_impl::evaluate(x, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c10, const T& c9, const T& c8, const T& c7, + const T& c6, const T& c5, const T& c4, const T& c3, const T& c2, + const T& c1, const T& c0) exprtk_override + { + poly_rtrn(10) (poly_impl::evaluate(x, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c11, const T& c10, const T& c9, const T& c8, + const T& c7, const T& c6, const T& c5, const T& c4, const T& c3, + const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(11) (poly_impl::evaluate(x, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + inline virtual T operator() (const T& x, const T& c12, const T& c11, const T& c10, const T& c9, + const T& c8, const T& c7, const T& c6, const T& c5, const T& c4, + const T& c3, const T& c2, const T& c1, const T& c0) exprtk_override + { + poly_rtrn(12) (poly_impl::evaluate(x, c12, c11, c10, c9, c8, c7, c6, c5, c4, c3, c2, c1, c0)); + } + + #undef poly_rtrn + + inline virtual T operator() () exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline virtual T operator() (const T&) exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + + inline virtual T operator() (const T&, const T&) exprtk_override + { + return std::numeric_limits::quiet_NaN(); + } + }; + + template + class function_compositor + { + public: + + typedef exprtk::expression expression_t; + typedef exprtk::symbol_table symbol_table_t; + typedef exprtk::parser parser_t; + typedef typename parser_t::settings_store settings_t; + + struct function + { + function() + {} + + function(const std::string& n) + : name_(n) + {} + + function(const std::string& name, + const std::string& expression) + : name_(name) + , expression_(expression) + {} + + function(const std::string& name, + const std::string& expression, + const std::string& v0) + : name_(name) + , expression_(expression) + { + v_.push_back(v0); + } + + function(const std::string& name, + const std::string& expression, + const std::string& v0, const std::string& v1) + : name_(name) + , expression_(expression) + { + v_.push_back(v0); v_.push_back(v1); + } + + function(const std::string& name, + const std::string& expression, + const std::string& v0, const std::string& v1, + const std::string& v2) + : name_(name) + , expression_(expression) + { + v_.push_back(v0); v_.push_back(v1); + v_.push_back(v2); + } + + function(const std::string& name, + const std::string& expression, + const std::string& v0, const std::string& v1, + const std::string& v2, const std::string& v3) + : name_(name) + , expression_(expression) + { + v_.push_back(v0); v_.push_back(v1); + v_.push_back(v2); v_.push_back(v3); + } + + function(const std::string& name, + const std::string& expression, + const std::string& v0, const std::string& v1, + const std::string& v2, const std::string& v3, + const std::string& v4) + : name_(name) + , expression_(expression) + { + v_.push_back(v0); v_.push_back(v1); + v_.push_back(v2); v_.push_back(v3); + v_.push_back(v4); + } + + inline function& name(const std::string& n) + { + name_ = n; + return (*this); + } + + inline function& expression(const std::string& e) + { + expression_ = e; + return (*this); + } + + inline function& var(const std::string& v) + { + v_.push_back(v); + return (*this); + } + + inline function& vars(const std::string& v0, + const std::string& v1) + { + v_.push_back(v0); + v_.push_back(v1); + return (*this); + } + + inline function& vars(const std::string& v0, + const std::string& v1, + const std::string& v2) + { + v_.push_back(v0); + v_.push_back(v1); + v_.push_back(v2); + return (*this); + } + + inline function& vars(const std::string& v0, + const std::string& v1, + const std::string& v2, + const std::string& v3) + { + v_.push_back(v0); + v_.push_back(v1); + v_.push_back(v2); + v_.push_back(v3); + return (*this); + } + + inline function& vars(const std::string& v0, + const std::string& v1, + const std::string& v2, + const std::string& v3, + const std::string& v4) + { + v_.push_back(v0); + v_.push_back(v1); + v_.push_back(v2); + v_.push_back(v3); + v_.push_back(v4); + return (*this); + } + + std::string name_; + std::string expression_; + std::deque v_; + }; + + private: + + struct base_func : public exprtk::ifunction + { + typedef const T& type; + typedef exprtk::ifunction function_t; + typedef std::vector varref_t; + typedef std::vector var_t; + typedef std::pair lvarref_t; + typedef std::vector lvr_vec_t; + + using exprtk::ifunction::operator(); + + base_func(const std::size_t& pc = 0) + : exprtk::ifunction(pc) + , local_var_stack_size(0) + , stack_depth(0) + { + v.resize(pc); + } + + virtual ~base_func() + {} + + #define exprtk_assign(Index) \ + (*v[Index]) = v##Index; \ + + inline void update(const T& v0) + { + exprtk_assign(0) + } + + inline void update(const T& v0, const T& v1) + { + exprtk_assign(0) exprtk_assign(1) + } + + inline void update(const T& v0, const T& v1, const T& v2) + { + exprtk_assign(0) exprtk_assign(1) + exprtk_assign(2) + } + + inline void update(const T& v0, const T& v1, const T& v2, const T& v3) + { + exprtk_assign(0) exprtk_assign(1) + exprtk_assign(2) exprtk_assign(3) + } + + inline void update(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4) + { + exprtk_assign(0) exprtk_assign(1) + exprtk_assign(2) exprtk_assign(3) + exprtk_assign(4) + } + + inline void update(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) + { + exprtk_assign(0) exprtk_assign(1) + exprtk_assign(2) exprtk_assign(3) + exprtk_assign(4) exprtk_assign(5) + } + + #ifdef exprtk_assign + #undef exprtk_assign + #endif + + inline function_t& setup(expression_t& expr) + { + expression = expr; + + typedef typename expression_t::control_block::local_data_list_t ldl_t; + + const ldl_t ldl = expr.local_data_list(); + + std::vector index_list; + + for (std::size_t i = 0; i < ldl.size(); ++i) + { + if (ldl[i].size) + { + index_list.push_back(i); + } + } + + std::size_t input_param_count = 0; + + for (std::size_t i = 0; i < index_list.size(); ++i) + { + const std::size_t index = index_list[i]; + + if (i < (index_list.size() - v.size())) + { + lv.push_back( + std::make_pair( + reinterpret_cast(ldl[index].pointer), + ldl[index].size)); + + local_var_stack_size += ldl[index].size; + } + else + v[input_param_count++] = reinterpret_cast(ldl[index].pointer); + } + + clear_stack(); + + return (*this); + } + + inline void pre() + { + if (stack_depth++) + { + if (!v.empty()) + { + var_t var_stack(v.size(),T(0)); + copy(v,var_stack); + param_stack.push_back(var_stack); + } + + if (!lv.empty()) + { + var_t local_var_stack(local_var_stack_size,T(0)); + copy(lv,local_var_stack); + local_stack.push_back(local_var_stack); + } + } + } + + inline void post() + { + if (--stack_depth) + { + if (!v.empty()) + { + copy(param_stack.back(),v); + param_stack.pop_back(); + } + + if (!lv.empty()) + { + copy(local_stack.back(),lv); + local_stack.pop_back(); + } + } + } + + void copy(const varref_t& src_v, var_t& dest_v) + { + for (std::size_t i = 0; i < src_v.size(); ++i) + { + dest_v[i] = (*src_v[i]); + } + } + + void copy(const var_t& src_v, varref_t& dest_v) + { + for (std::size_t i = 0; i < src_v.size(); ++i) + { + (*dest_v[i]) = src_v[i]; + } + } + + void copy(const lvr_vec_t& src_v, var_t& dest_v) + { + typename var_t::iterator itr = dest_v.begin(); + typedef typename std::iterator_traits::difference_type diff_t; + + for (std::size_t i = 0; i < src_v.size(); ++i) + { + lvarref_t vr = src_v[i]; + + if (1 == vr.second) + *itr++ = (*vr.first); + else + { + std::copy(vr.first, vr.first + vr.second, itr); + itr += static_cast(vr.second); + } + } + } + + void copy(const var_t& src_v, lvr_vec_t& dest_v) + { + typename var_t::const_iterator itr = src_v.begin(); + typedef typename std::iterator_traits::difference_type diff_t; + + for (std::size_t i = 0; i < src_v.size(); ++i) + { + lvarref_t vr = dest_v[i]; + + if (1 == vr.second) + (*vr.first) = *itr++; + else + { + std::copy(itr, itr + static_cast(vr.second), vr.first); + itr += static_cast(vr.second); + } + } + } + + inline void clear_stack() + { + for (std::size_t i = 0; i < v.size(); ++i) + { + (*v[i]) = 0; + } + } + + inline virtual T value(expression_t& e) + { + return e.value(); + } + + expression_t expression; + varref_t v; + lvr_vec_t lv; + std::size_t local_var_stack_size; + std::size_t stack_depth; + std::deque param_stack; + std::deque local_stack; + }; + + typedef std::map funcparam_t; + + struct func_0param : public base_func + { + using exprtk::ifunction::operator(); + + func_0param() : base_func(0) {} + + inline T operator() () exprtk_override + { + return this->value(base_func::expression); + } + }; + + typedef const T& type; + + template + struct scoped_bft + { + explicit scoped_bft(BaseFuncType& bft) + : bft_(bft) + { + bft_.pre (); + } + + ~scoped_bft() + { + bft_.post(); + } + + BaseFuncType& bft_; + + private: + + scoped_bft(const scoped_bft&) exprtk_delete; + scoped_bft& operator=(const scoped_bft&) exprtk_delete; + }; + + struct func_1param : public base_func + { + using exprtk::ifunction::operator(); + + func_1param() : base_func(1) {} + + inline T operator() (type v0) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0); + return this->value(base_func::expression); + } + }; + + struct func_2param : public base_func + { + using exprtk::ifunction::operator(); + + func_2param() : base_func(2) {} + + inline T operator() (type v0, type v1) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0, v1); + return this->value(base_func::expression); + } + }; + + struct func_3param : public base_func + { + using exprtk::ifunction::operator(); + + func_3param() : base_func(3) {} + + inline T operator() (type v0, type v1, type v2) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0, v1, v2); + return this->value(base_func::expression); + } + }; + + struct func_4param : public base_func + { + using exprtk::ifunction::operator(); + + func_4param() : base_func(4) {} + + inline T operator() (type v0, type v1, type v2, type v3) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0, v1, v2, v3); + return this->value(base_func::expression); + } + }; + + struct func_5param : public base_func + { + using exprtk::ifunction::operator(); + + func_5param() : base_func(5) {} + + inline T operator() (type v0, type v1, type v2, type v3, type v4) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0, v1, v2, v3, v4); + return this->value(base_func::expression); + } + }; + + struct func_6param : public base_func + { + using exprtk::ifunction::operator(); + + func_6param() : base_func(6) {} + + inline T operator() (type v0, type v1, type v2, type v3, type v4, type v5) exprtk_override + { + scoped_bft sb(*this); + base_func::update(v0, v1, v2, v3, v4, v5); + return this->value(base_func::expression); + } + }; + + static T return_value(expression_t& e) + { + typedef exprtk::results_context results_context_t; + typedef typename results_context_t::type_store_t type_t; + typedef typename type_t::scalar_view scalar_t; + + const T result = e.value(); + + if (e.return_invoked()) + { + // Due to the post compilation checks, it can be safely + // assumed that there will be at least one parameter + // and that the first parameter will always be scalar. + return scalar_t(e.results()[0])(); + } + + return result; + } + + #define def_fp_retval(N) \ + struct func_##N##param_retval exprtk_final : public func_##N##param \ + { \ + inline T value(expression_t& e) exprtk_override \ + { \ + return return_value(e); \ + } \ + }; \ + + def_fp_retval(0) + def_fp_retval(1) + def_fp_retval(2) + def_fp_retval(3) + def_fp_retval(4) + def_fp_retval(5) + def_fp_retval(6) + + #undef def_fp_retval + + template class Sequence> + inline bool add(const std::string& name, + const std::string& expression, + const Sequence& var_list, + const bool override = false) + { + const typename std::map::iterator itr = expr_map_.find(name); + + if (expr_map_.end() != itr) + { + if (!override) + { + exprtk_debug(("Compositor error(add): function '%s' already defined\n", + name.c_str())); + + return false; + } + + remove(name, var_list.size()); + } + + if (compile_expression(name, expression, var_list)) + { + const std::size_t n = var_list.size(); + + fp_map_[n][name]->setup(expr_map_[name]); + + return true; + } + else + { + exprtk_debug(("Compositor error(add): Failed to compile function '%s'\n", + name.c_str())); + + return false; + } + } + + public: + + function_compositor() + : parser_(settings_t::default_compile_all_opts + + settings_t::e_disable_zero_return) + , fp_map_(7) + , load_variables_(false) + , load_vectors_(false) + {} + + explicit function_compositor(const symbol_table_t& st) + : symbol_table_(st) + , parser_(settings_t::default_compile_all_opts + + settings_t::e_disable_zero_return) + , fp_map_(7) + , load_variables_(false) + , load_vectors_(false) + {} + + ~function_compositor() + { + clear(); + } + + inline symbol_table_t& symbol_table() + { + return symbol_table_; + } + + inline const symbol_table_t& symbol_table() const + { + return symbol_table_; + } + + inline void add_auxiliary_symtab(symbol_table_t& symtab) + { + auxiliary_symtab_list_.push_back(&symtab); + } + + void load_variables(const bool load = true) + { + load_variables_ = load; + } + + void load_vectors(const bool load = true) + { + load_vectors_ = load; + } + + void clear() + { + symbol_table_.clear(); + expr_map_ .clear(); + + for (std::size_t i = 0; i < fp_map_.size(); ++i) + { + typename funcparam_t::iterator itr = fp_map_[i].begin(); + typename funcparam_t::iterator end = fp_map_[i].end (); + + while (itr != end) + { + delete itr->second; + ++itr; + } + + fp_map_[i].clear(); + } + } + + inline bool add(const function& f, const bool override = false) + { + return add(f.name_, f.expression_, f.v_,override); + } + + inline std::string error() const + { + if (!error_list_.empty()) + { + return error_list_[0].diagnostic; + } + else + return std::string("No Error"); + } + + inline std::size_t error_count() const + { + return error_list_.size(); + } + + inline parser_error::type get_error(const std::size_t& index) const + { + if (index < error_list_.size()) + return error_list_[index]; + else + throw std::invalid_argument("compositor::get_error() - Invalid error index specified"); + } + + private: + + template class Sequence> + bool compile_expression(const std::string& name, + const std::string& expression, + const Sequence& input_var_list, + bool return_present = false) + { + expression_t compiled_expression; + symbol_table_t local_symbol_table; + + local_symbol_table.load_from(symbol_table_); + local_symbol_table.add_constants(); + + if (load_variables_) + { + local_symbol_table.load_variables_from(symbol_table_); + } + + if (load_vectors_) + { + local_symbol_table.load_vectors_from(symbol_table_); + } + + error_list_.clear(); + + if (!valid(name,input_var_list.size())) + { + parser_error::type error = + parser_error::make_error( + parser_error::e_parser, + lexer::token(), + "ERR250 - Function '" + name + "' is an invalid overload", + exprtk_error_location); + + error_list_.push_back(error); + return false; + } + + if (!forward(name, + input_var_list.size(), + local_symbol_table, + return_present)) + return false; + + compiled_expression.register_symbol_table(local_symbol_table); + + for (std::size_t i = 0; i < auxiliary_symtab_list_.size(); ++i) + { + compiled_expression.register_symbol_table((*auxiliary_symtab_list_[i])); + } + + std::string mod_expression; + + for (std::size_t i = 0; i < input_var_list.size(); ++i) + { + mod_expression += " var " + input_var_list[i] + "{};\n"; + } + + if ( + ('{' == details::front(expression)) && + ('}' == details::back (expression)) + ) + mod_expression += "~" + expression + ";"; + else + mod_expression += "~{" + expression + "};"; + + if (!parser_.compile(mod_expression,compiled_expression)) + { + exprtk_debug(("Compositor Error: %s\n", parser_.error().c_str())); + exprtk_debug(("Compositor modified expression: \n%s\n", mod_expression.c_str())); + + remove(name,input_var_list.size()); + + for (std::size_t err_index = 0; err_index < parser_.error_count(); ++err_index) + { + error_list_.push_back(parser_.get_error(err_index)); + } + + return false; + } + + if (!return_present && parser_.dec().return_present()) + { + remove(name,input_var_list.size()); + return compile_expression(name, expression, input_var_list, true); + } + + // Make sure every return point has a scalar as its first parameter + if (parser_.dec().return_present()) + { + typedef std::vector str_list_t; + + str_list_t ret_param_list = parser_.dec().return_param_type_list(); + + for (std::size_t i = 0; i < ret_param_list.size(); ++i) + { + const std::string& params = ret_param_list[i]; + + if (params.empty() || ('T' != params[0])) + { + exprtk_debug(("Compositor Error: Return statement in function '%s' is invalid\n", + name.c_str())); + + remove(name,input_var_list.size()); + + return false; + } + } + } + + expr_map_[name] = compiled_expression; + + exprtk::ifunction& ifunc = (*(fp_map_[input_var_list.size()])[name]); + + if (symbol_table_.add_function(name,ifunc)) + return true; + else + { + exprtk_debug(("Compositor Error: Failed to add function '%s' to symbol table\n", + name.c_str())); + return false; + } + } + + inline bool symbol_used(const std::string& symbol) const + { + return ( + symbol_table_.is_variable (symbol) || + symbol_table_.is_stringvar (symbol) || + symbol_table_.is_function (symbol) || + symbol_table_.is_vector (symbol) || + symbol_table_.is_vararg_function(symbol) + ); + } + + inline bool valid(const std::string& name, + const std::size_t& arg_count) const + { + if (arg_count > 6) + return false; + else if (symbol_used(name)) + return false; + else if (fp_map_[arg_count].end() != fp_map_[arg_count].find(name)) + return false; + else + return true; + } + + inline bool forward(const std::string& name, + const std::size_t& arg_count, + symbol_table_t& sym_table, + const bool ret_present = false) + { + switch (arg_count) + { + #define case_stmt(N) \ + case N : (fp_map_[arg_count])[name] = \ + (!ret_present) ? static_cast \ + (new func_##N##param) : \ + static_cast \ + (new func_##N##param_retval) ; \ + break; \ + + case_stmt(0) case_stmt(1) case_stmt(2) + case_stmt(3) case_stmt(4) case_stmt(5) + case_stmt(6) + #undef case_stmt + } + + exprtk::ifunction& ifunc = (*(fp_map_[arg_count])[name]); + + return sym_table.add_function(name,ifunc); + } + + inline void remove(const std::string& name, const std::size_t& arg_count) + { + if (arg_count > 6) + return; + + const typename std::map::iterator em_itr = expr_map_.find(name); + + if (expr_map_.end() != em_itr) + { + expr_map_.erase(em_itr); + } + + const typename funcparam_t::iterator fp_itr = fp_map_[arg_count].find(name); + + if (fp_map_[arg_count].end() != fp_itr) + { + delete fp_itr->second; + fp_map_[arg_count].erase(fp_itr); + } + + symbol_table_.remove_function(name); + } + + private: + + symbol_table_t symbol_table_; + parser_t parser_; + std::map expr_map_; + std::vector fp_map_; + std::vector auxiliary_symtab_list_; + std::deque error_list_; + bool load_variables_; + bool load_vectors_; + }; // class function_compositor + +} // namespace exprtk + +#if defined(_MSC_VER) || defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# ifndef NOMINMAX +# define NOMINMAX +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include +# include +#else +# include +# include +# include +#endif + +namespace exprtk +{ + class timer + { + public: + + #if defined(_MSC_VER) || defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + timer() + : in_use_(false) + , start_time_{ 0 } + , stop_time_ { 0 } + { + QueryPerformanceFrequency(&clock_frequency_); + } + + inline void start() + { + in_use_ = true; + QueryPerformanceCounter(&start_time_); + } + + inline void stop() + { + QueryPerformanceCounter(&stop_time_); + in_use_ = false; + } + + inline double time() const + { + return (1.0 * (stop_time_.QuadPart - start_time_.QuadPart)) / (1.0 * clock_frequency_.QuadPart); + } + + #else + + timer() + : in_use_(false) + { + start_time_.tv_sec = 0; + start_time_.tv_usec = 0; + + stop_time_.tv_sec = 0; + stop_time_.tv_usec = 0; + } + + inline void start() + { + in_use_ = true; + gettimeofday(&start_time_,0); + } + + inline void stop() + { + gettimeofday(&stop_time_, 0); + in_use_ = false; + } + + inline unsigned long long int usec_time() const + { + if (!in_use_) + { + if (stop_time_.tv_sec >= start_time_.tv_sec) + { + return 1000000LLU * static_cast(stop_time_.tv_sec - start_time_.tv_sec ) + + static_cast(stop_time_.tv_usec - start_time_.tv_usec) ; + } + else + return std::numeric_limits::max(); + } + else + return std::numeric_limits::max(); + } + + inline double time() const + { + return usec_time() * 0.000001; + } + + #endif + + inline bool in_use() const + { + return in_use_; + } + + private: + + bool in_use_; + + #if defined(_MSC_VER) || defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + LARGE_INTEGER start_time_; + LARGE_INTEGER stop_time_; + LARGE_INTEGER clock_frequency_; + #else + struct timeval start_time_; + struct timeval stop_time_; + #endif + }; + + template + struct type_defs + { + typedef symbol_table symbol_table_t; + typedef expression expression_t; + typedef parser parser_t; + typedef parser_error::type error_t; + typedef function_compositor compositor_t; + typedef typename compositor_t::function function_t; + }; + +} // namespace exprtk + +#ifndef exprtk_disable_rtl_io +namespace exprtk +{ + namespace rtl { namespace io { namespace details + { + template + inline void print_type(const std::string& fmt, + const T v, + exprtk::details::numeric::details::real_type_tag) + { + #if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wformat-nonliteral" + #elif defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wformat-nonliteral" + #elif defined(_MSC_VER) + #endif + + printf(fmt.c_str(), v); + + #if defined(__clang__) + #pragma clang diagnostic pop + #elif defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic pop + #elif defined(_MSC_VER) + #endif + } + + template + struct print_impl + { + typedef typename igeneric_function::generic_type generic_type; + typedef typename igeneric_function::parameter_list_t parameter_list_t; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + typedef typename generic_type::string_view string_t; + typedef typename exprtk::details::numeric::details::number_type::type num_type; + + static void process(const std::string& scalar_format, parameter_list_t parameters) + { + for (std::size_t i = 0; i < parameters.size(); ++i) + { + generic_type& gt = parameters[i]; + + switch (gt.type) + { + case generic_type::e_scalar : print(scalar_format,scalar_t(gt)); + break; + + case generic_type::e_vector : print(scalar_format,vector_t(gt)); + break; + + case generic_type::e_string : print(string_t(gt)); + break; + + default : continue; + } + } + } + + static inline void print(const std::string& scalar_format, const scalar_t& s) + { + print_type(scalar_format,s(),num_type()); + } + + static inline void print(const std::string& scalar_format, const vector_t& v) + { + for (std::size_t i = 0; i < v.size(); ++i) + { + print_type(scalar_format,v[i],num_type()); + + if ((i + 1) < v.size()) + printf(" "); + } + } + + static inline void print(const string_t& s) + { + printf("%s",to_str(s).c_str()); + } + }; + + } // namespace exprtk::rtl::io::details + + template + struct print exprtk_final : public exprtk::igeneric_function + { + typedef typename igeneric_function::parameter_list_t parameter_list_t; + + using exprtk::igeneric_function::operator(); + + explicit print(const std::string& scalar_format = "%10.5f") + : scalar_format_(scalar_format) + { + exprtk::enable_zero_parameters(*this); + } + + inline T operator() (parameter_list_t parameters) exprtk_override + { + details::print_impl::process(scalar_format_,parameters); + return T(0); + } + + std::string scalar_format_; + }; + + template + struct println exprtk_final : public exprtk::igeneric_function + { + typedef typename igeneric_function::parameter_list_t parameter_list_t; + + using exprtk::igeneric_function::operator(); + + explicit println(const std::string& scalar_format = "%10.5f") + : scalar_format_(scalar_format) + { + exprtk::enable_zero_parameters(*this); + } + + inline T operator() (parameter_list_t parameters) exprtk_override + { + details::print_impl::process(scalar_format_,parameters); + printf("\n"); + return T(0); + } + + std::string scalar_format_; + }; + + template + struct package + { + print p; + println pl; + + bool register_package(exprtk::symbol_table& symtab) + { + #define exprtk_register_function(FunctionName, FunctionType) \ + if (!symtab.add_function(FunctionName,FunctionType)) \ + { \ + exprtk_debug(( \ + "exprtk::rtl::io::register_package - Failed to add function: %s\n", \ + FunctionName)); \ + return false; \ + } \ + + exprtk_register_function("print" , p ) + exprtk_register_function("println", pl) + #undef exprtk_register_function + + return true; + } + }; + + } // namespace exprtk::rtl::io + } // namespace exprtk::rtl +} // namespace exprtk +#endif + +#ifndef exprtk_disable_rtl_io_file +#include +namespace exprtk +{ + namespace rtl { namespace io { namespace file { namespace details + { + using ::exprtk::details::char_ptr; + using ::exprtk::details::char_cptr; + + enum file_mode + { + e_error = 0, + e_read = 1, + e_write = 2, + e_rdwrt = 4 + }; + + struct file_descriptor + { + file_descriptor(const std::string& fname, const std::string& access) + : stream_ptr(0) + , mode(get_file_mode(access)) + , file_name(fname) + {} + + void* stream_ptr; + file_mode mode; + std::string file_name; + + bool open() + { + if (e_read == mode) + { + std::ifstream* stream = new std::ifstream(file_name.c_str(),std::ios::binary); + + if (!(*stream)) + { + file_name.clear(); + delete stream; + + return false; + } + + stream_ptr = stream; + + return true; + } + else if (e_write == mode) + { + std::ofstream* stream = new std::ofstream(file_name.c_str(),std::ios::binary); + + if (!(*stream)) + { + file_name.clear(); + delete stream; + + return false; + } + + stream_ptr = stream; + + return true; + } + else if (e_rdwrt == mode) + { + std::fstream* stream = new std::fstream(file_name.c_str(),std::ios::binary); + + if (!(*stream)) + { + file_name.clear(); + delete stream; + + return false; + } + + stream_ptr = stream; + + return true; + } + + return false; + } + + template + void close(Ptr& p) + { + Stream* stream = reinterpret_cast(p); + stream->close(); + delete stream; + p = reinterpret_cast(0); + } + + bool close() + { + switch (mode) + { + case e_read : close(stream_ptr); + break; + + case e_write : close(stream_ptr); + break; + + case e_rdwrt : close (stream_ptr); + break; + + default : return false; + } + + return true; + } + + template + bool write(const View& view, const std::size_t amount, const std::size_t offset = 0) + { + switch (mode) + { + case e_write : reinterpret_cast(stream_ptr)-> + write(reinterpret_cast(view.begin() + offset), amount * sizeof(typename View::value_t)); + break; + + case e_rdwrt : reinterpret_cast(stream_ptr)-> + write(reinterpret_cast(view.begin() + offset) , amount * sizeof(typename View::value_t)); + break; + + default : return false; + } + + return true; + } + + template + bool read(View& view, const std::size_t amount, const std::size_t offset = 0) + { + switch (mode) + { + case e_read : reinterpret_cast(stream_ptr)-> + read(reinterpret_cast(view.begin() + offset), amount * sizeof(typename View::value_t)); + break; + + case e_rdwrt : reinterpret_cast(stream_ptr)-> + read(reinterpret_cast(view.begin() + offset) , amount * sizeof(typename View::value_t)); + break; + + default : return false; + } + + return true; + } + + bool getline(std::string& s) + { + switch (mode) + { + case e_read : return (!!std::getline(*reinterpret_cast(stream_ptr),s)); + case e_rdwrt : return (!!std::getline(*reinterpret_cast(stream_ptr),s)); + default : return false; + } + } + + bool eof() const + { + switch (mode) + { + case e_read : return reinterpret_cast(stream_ptr)->eof(); + case e_write : return reinterpret_cast(stream_ptr)->eof(); + case e_rdwrt : return reinterpret_cast(stream_ptr)->eof(); + default : return true; + } + } + + file_mode get_file_mode(const std::string& access) const + { + if (access.empty() || access.size() > 2) + return e_error; + + std::size_t w_cnt = 0; + std::size_t r_cnt = 0; + + for (std::size_t i = 0; i < access.size(); ++i) + { + switch (std::tolower(access[i])) + { + case 'r' : r_cnt++; break; + case 'w' : w_cnt++; break; + default : return e_error; + } + } + + if ((0 == r_cnt) && (0 == w_cnt)) + return e_error; + else if ((r_cnt > 1) || (w_cnt > 1)) + return e_error; + else if ((1 == r_cnt) && (1 == w_cnt)) + return e_rdwrt; + else if (1 == r_cnt) + return e_read; + else + return e_write; + } + }; + + template + file_descriptor* make_handle(T v) + { + const std::size_t fd_size = sizeof(details::file_descriptor*); + details::file_descriptor* fd = reinterpret_cast(0); + + std::memcpy(reinterpret_cast(&fd), + reinterpret_cast(&v ), + fd_size); + return fd; + } + + template + void perform_check() + { + #ifdef _MSC_VER + #pragma warning(push) + #pragma warning(disable: 4127) + #endif + if (sizeof(T) < sizeof(void*)) + { + throw std::runtime_error("exprtk::rtl::io::file - Error - pointer size larger than holder."); + } + #ifdef _MSC_VER + #pragma warning(pop) + #endif + assert(sizeof(T) <= sizeof(void*)); + } + + } // namespace exprtk::rtl::io::file::details + + template + class open exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::string_view string_t; + + using igfun_t::operator(); + + open() + : exprtk::igeneric_function("S|SS") + { details::perform_check(); } + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const std::string file_name = to_str(string_t(parameters[0])); + + if (file_name.empty()) + return T(0); + + if ((1 == ps_index) && (0 == string_t(parameters[1]).size())) + { + return T(0); + } + + const std::string access = + (0 == ps_index) ? "r" : to_str(string_t(parameters[1])); + + details::file_descriptor* fd = new details::file_descriptor(file_name,access); + + if (fd->open()) + { + T t = T(0); + + const std::size_t fd_size = sizeof(details::file_descriptor*); + + std::memcpy(reinterpret_cast(&t ), + reinterpret_cast(&fd), + fd_size); + return t; + } + else + { + delete fd; + return T(0); + } + } + }; + + template + struct close exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + close() + : exprtk::ifunction(1) + { details::perform_check(); } + + inline T operator() (const T& v) exprtk_override + { + details::file_descriptor* fd = details::make_handle(v); + + if (!fd->close()) + return T(0); + + delete fd; + + return T(1); + } + }; + + template + class write exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::string_view string_t; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + write() + : igfun_t("TS|TST|TV|TVT") + { details::perform_check(); } + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + details::file_descriptor* fd = details::make_handle(scalar_t(parameters[0])()); + + switch (ps_index) + { + case 0 : { + const string_t buffer(parameters[1]); + const std::size_t amount = buffer.size(); + return T(fd->write(buffer, amount) ? 1 : 0); + } + + case 1 : { + const string_t buffer(parameters[1]); + const std::size_t amount = + std::min(buffer.size(), + static_cast(scalar_t(parameters[2])())); + return T(fd->write(buffer, amount) ? 1 : 0); + } + + case 2 : { + const vector_t vec(parameters[1]); + const std::size_t amount = vec.size(); + return T(fd->write(vec, amount) ? 1 : 0); + } + + case 3 : { + const vector_t vec(parameters[1]); + const std::size_t amount = + std::min(vec.size(), + static_cast(scalar_t(parameters[2])())); + return T(fd->write(vec, amount) ? 1 : 0); + } + } + + return T(0); + } + }; + + template + class read exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::string_view string_t; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + read() + : igfun_t("TS|TST|TV|TVT") + { details::perform_check(); } + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + details::file_descriptor* fd = details::make_handle(scalar_t(parameters[0])()); + + switch (ps_index) + { + case 0 : { + string_t buffer(parameters[1]); + const std::size_t amount = buffer.size(); + return T(fd->read(buffer,amount) ? 1 : 0); + } + + case 1 : { + string_t buffer(parameters[1]); + const std::size_t amount = + std::min(buffer.size(), + static_cast(scalar_t(parameters[2])())); + return T(fd->read(buffer,amount) ? 1 : 0); + } + + case 2 : { + vector_t vec(parameters[1]); + const std::size_t amount = vec.size(); + return T(fd->read(vec,amount) ? 1 : 0); + } + + case 3 : { + vector_t vec(parameters[1]); + const std::size_t amount = + std::min(vec.size(), + static_cast(scalar_t(parameters[2])())); + return T(fd->read(vec,amount) ? 1 : 0); + } + } + + return T(0); + } + }; + + template + class getline exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::string_view string_t; + typedef typename generic_type::scalar_view scalar_t; + + using igfun_t::operator(); + + getline() + : igfun_t("T",igfun_t::e_rtrn_string) + { details::perform_check(); } + + inline T operator() (std::string& result, parameter_list_t parameters) exprtk_override + { + details::file_descriptor* fd = details::make_handle(scalar_t(parameters[0])()); + return T(fd->getline(result) ? 1 : 0); + } + }; + + template + struct eof exprtk_final : public exprtk::ifunction + { + using exprtk::ifunction::operator(); + + eof() + : exprtk::ifunction(1) + { details::perform_check(); } + + inline T operator() (const T& v) exprtk_override + { + details::file_descriptor* fd = details::make_handle(v); + + return (fd->eof() ? T(1) : T(0)); + } + }; + + template + struct package + { + open o; + close c; + write w; + read r; + getline g; + eof e; + + bool register_package(exprtk::symbol_table& symtab) + { + #define exprtk_register_function(FunctionName, FunctionType) \ + if (!symtab.add_function(FunctionName,FunctionType)) \ + { \ + exprtk_debug(( \ + "exprtk::rtl::io::file::register_package - Failed to add function: %s\n", \ + FunctionName)); \ + return false; \ + } \ + + exprtk_register_function("open" , o) + exprtk_register_function("close" , c) + exprtk_register_function("write" , w) + exprtk_register_function("read" , r) + exprtk_register_function("getline" , g) + exprtk_register_function("eof" , e) + #undef exprtk_register_function + + return true; + } + }; + + } // namespace exprtk::rtl::io::file + } // namespace exprtk::rtl::io + } // namespace exprtk::rtl +} // namespace exprtk +#endif + +#ifndef exprtk_disable_rtl_vecops +namespace exprtk +{ + namespace rtl { namespace vecops { + + namespace helper + { + template + inline bool invalid_range(const Vector& v, const std::size_t r0, const std::size_t r1) + { + if (r0 > (v.size() - 1)) + return true; + else if (r1 > (v.size() - 1)) + return true; + else if (r1 < r0) + return true; + else + return false; + } + + template + struct load_vector_range + { + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + static inline bool process(parameter_list_t& parameters, + std::size_t& r0, std::size_t& r1, + const std::size_t& r0_prmidx, + const std::size_t& r1_prmidx, + const std::size_t vec_idx = 0) + { + if (r0_prmidx >= parameters.size()) + return false; + + if (r1_prmidx >= parameters.size()) + return false; + + if (!scalar_t(parameters[r0_prmidx]).to_uint(r0)) + return false; + + if (!scalar_t(parameters[r1_prmidx]).to_uint(r1)) + return false; + + return !invalid_range(vector_t(parameters[vec_idx]), r0, r1); + } + }; + } + + namespace details + { + template + inline void kahan_sum(T& sum, T& error, const T v) + { + const T x = v - error; + const T y = sum + x; + error = (y - sum) - x; + sum = y; + } + + } // namespace exprtk::rtl::details + + template + class all_true exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + all_true() + : exprtk::igeneric_function("V|VTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] == T(0)) + { + return T(0); + } + } + + return T(1); + } + }; + + template + class all_false exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + all_false() + : exprtk::igeneric_function("V|VTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] != T(0)) + { + return T(0); + } + } + + return T(1); + } + }; + + template + class any_true exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + any_true() + : exprtk::igeneric_function("V|VTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] != T(0)) + { + return T(1); + } + } + + return T(0); + } + }; + + template + class any_false exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + any_false() + : exprtk::igeneric_function("V|VTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] == T(0)) + { + return T(1); + } + } + + return T(0); + } + }; + + template + class count exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + count() + : exprtk::igeneric_function("V|VTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + std::size_t cnt = 0; + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] != T(0)) ++cnt; + } + + return T(cnt); + } + }; + + template + class copy exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + copy() + : exprtk::igeneric_function("VV|VTTVTT") + /* + Overloads: + 0. VV - x(vector), y(vector) + 1. VTTVTT - x(vector), xr0, xr1, y(vector), yr0, yr1, + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[0]); + vector_t y(parameters[(0 == ps_index) ? 1 : 3]); + + std::size_t xr0 = 0; + std::size_t xr1 = x.size() - 1; + + std::size_t yr0 = 0; + std::size_t yr1 = y.size() - 1; + + if (1 == ps_index) + { + if ( + !helper::load_vector_range::process(parameters, xr0, xr1, 1, 2, 0) || + !helper::load_vector_range::process(parameters, yr0, yr1, 4, 5, 3) + ) + return T(0); + } + + const std::size_t n = std::min(xr1 - xr0 + 1, yr1 - yr0 + 1); + + std::copy( + x.begin() + xr0, + x.begin() + xr0 + n, + y.begin() + yr0); + + return T(n); + } + }; + + template + class rol exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + rol() + : exprtk::igeneric_function("VT|VTTT") + /* + Overloads: + 0. VT - vector, N + 1. VTTT - vector, N, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t n = 0; + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if (!scalar_t(parameters[1]).to_uint(n)) + return T(0); + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0) + ) + return T(0); + + const std::size_t dist = r1 - r0 + 1; + const std::size_t shift = n % dist; + + std::rotate( + vec.begin() + r0, + vec.begin() + r0 + shift, + vec.begin() + r1 + 1); + + return T(1); + } + }; + + template + class ror exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + ror() + : exprtk::igeneric_function("VT|VTTT") + /* + Overloads: + 0. VT - vector, N + 1. VTTT - vector, N, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t n = 0; + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if (!scalar_t(parameters[1]).to_uint(n)) + return T(0); + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0) + ) + return T(0); + + const std::size_t dist = r1 - r0 + 1; + const std::size_t shift = (dist - (n % dist)) % dist; + + std::rotate( + vec.begin() + r0, + vec.begin() + r0 + shift, + vec.begin() + r1 + 1); + + return T(1); + } + }; + + template + class shift_left exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + shift_left() + : exprtk::igeneric_function("VT|VTTT") + /* + Overloads: + 0. VT - vector, N + 1. VTTT - vector, N, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t n = 0; + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if (!scalar_t(parameters[1]).to_uint(n)) + return T(0); + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0) + ) + return T(0); + + const std::size_t dist = r1 - r0 + 1; + + if (n > dist) + return T(0); + + std::rotate( + vec.begin() + r0, + vec.begin() + r0 + n, + vec.begin() + r1 + 1); + + for (std::size_t i = r1 - n + 1; i <= r1; ++i) + { + vec[i] = T(0); + } + + return T(1); + } + }; + + template + class shift_right exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + shift_right() + : exprtk::igeneric_function("VT|VTTT") + /* + Overloads: + 0. VT - vector, N + 1. VTTT - vector, N, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t n = 0; + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if (!scalar_t(parameters[1]).to_uint(n)) + return T(0); + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0) + ) + return T(0); + + const std::size_t dist = r1 - r0 + 1; + + if (n > dist) + return T(0); + + const std::size_t shift = (dist - (n % dist)) % dist; + + std::rotate( + vec.begin() + r0, + vec.begin() + r0 + shift, + vec.begin() + r1 + 1); + + for (std::size_t i = r0; i < r0 + n; ++i) + { + vec[i] = T(0); + } + + return T(1); + } + }; + + template + class sort exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::string_view string_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + sort() + : exprtk::igeneric_function("V|VTT|VS|VSTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + 2. VS - vector, string + 3. VSTT - vector, string, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0)) + return T(0); + if ((3 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0)) + return T(0); + + bool ascending = true; + + if ((2 == ps_index) || (3 == ps_index)) + { + if (exprtk::details::imatch(to_str(string_t(parameters[1])),"ascending")) + ascending = true; + else if (exprtk::details::imatch(to_str(string_t(parameters[1])),"descending")) + ascending = false; + else + return T(0); + } + + if (ascending) + std::sort( + vec.begin() + r0, + vec.begin() + r1 + 1, + std::less()); + else + std::sort( + vec.begin() + r0, + vec.begin() + r1 + 1, + std::greater()); + + return T(1); + } + }; + + template + class nthelement exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + nthelement() + : exprtk::igeneric_function("VT|VTTT") + /* + Overloads: + 0. VT - vector, nth-element + 1. VTTT - vector, nth-element, r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + std::size_t n = 0; + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if (!scalar_t(parameters[1]).to_uint(n)) + return T(0); + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0)) + { + return std::numeric_limits::quiet_NaN(); + } + + std::nth_element( + vec.begin() + r0, + vec.begin() + r0 + n , + vec.begin() + r1 + 1); + + return T(1); + } + }; + + template + class assign exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + assign() + : exprtk::igeneric_function("VT|VTTT|VTTTT") + /* + Overloads: + 0. VT - vector, V + 1. VTTT - vector, V, r0, r1 + 2. VTTTT - vector, V, r0, r1, SS + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + const T assign_value = scalar_t(parameters[1]); + + const std::size_t step_size = (2 != ps_index) ? 1 : + static_cast(scalar_t(parameters.back())()); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + ((ps_index == 1) || (ps_index == 2)) && + !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0) + ) + { + return T(0); + } + + for (std::size_t i = r0; i <= r1; i += step_size) + { + vec[i] = assign_value; + } + + return T(1); + } + }; + + template + class iota exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + iota() + : exprtk::igeneric_function("VTT|VT|VTTTT|VTTT") + /* + Overloads: + 0. VTT - vector, SV, SS + 1. VT - vector, SV, SS (+1) + 2. VTTT - vector, r0, r1, SV, SS + 3. VTT - vector, r0, r1, SV, SS (+1) + + Where: + 1. SV - Start value + 2. SS - Step size + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + const T start_value = (ps_index <= 1) ? + scalar_t(parameters[1]) : + scalar_t(parameters[3]) ; + + const T step_size = ((0 == ps_index) || (2 == ps_index)) ? + scalar_t(parameters.back())() : + T(1) ; + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + ((ps_index == 2) || (ps_index == 3)) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return T(0); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + vec[i] = start_value + ((i - r0) * step_size); + } + + return T(1); + } + }; + + template + class sumk exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + sumk() + : exprtk::igeneric_function("V|VTT|VTTT") + /* + Overloads: + 0. V - vector + 1. VTT - vector, r0, r1 + 2. VTTT - vector, r0, r1, stride + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t vec(parameters[0]); + + const std::size_t stride = (2 != ps_index) ? 1 : + static_cast(scalar_t(parameters[3])()); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + ((1 == ps_index) || (2 == ps_index)) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return std::numeric_limits::quiet_NaN(); + } + + T result = T(0); + T error = T(0); + + for (std::size_t i = r0; i <= r1; i += stride) + { + details::kahan_sum(result, error, vec[i]); + } + + return result; + } + }; + + template + class axpy exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpy() + : exprtk::igeneric_function("TVV|TVVTT") + /* + y <- ax + y + Overloads: + 0. TVV - a, x(vector), y(vector) + 1. TVVTT - a, x(vector), y(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + vector_t y(parameters[2]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 3, 4, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + + for (std::size_t i = r0; i <= r1; ++i) + { + y[i] = (a * x[i]) + y[i]; + } + + return T(1); + } + }; + + template + class axpby exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpby() + : exprtk::igeneric_function("TVTV|TVTVTT") + /* + y <- ax + by + Overloads: + 0. TVTV - a, x(vector), b, y(vector) + 1. TVTVTT - a, x(vector), b, y(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + vector_t y(parameters[3]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 4, 5, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + const T b = scalar_t(parameters[2])(); + + for (std::size_t i = r0; i <= r1; ++i) + { + y[i] = (a * x[i]) + (b * y[i]); + } + + return T(1); + } + }; + + template + class axpyz exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpyz() + : exprtk::igeneric_function("TVVV|TVVVTT") + /* + z <- ax + y + Overloads: + 0. TVVV - a, x(vector), y(vector), z(vector) + 1. TVVVTT - a, x(vector), y(vector), z(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + const vector_t y(parameters[2]); + vector_t z(parameters[3]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 4, 5, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(z, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + + for (std::size_t i = r0; i <= r1; ++i) + { + z[i] = (a * x[i]) + y[i]; + } + + return T(1); + } + }; + + template + class axpbyz exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpbyz() + : exprtk::igeneric_function("TVTVV|TVTVVTT") + /* + z <- ax + by + Overloads: + 0. TVTVV - a, x(vector), b, y(vector), z(vector) + 1. TVTVVTT - a, x(vector), b, y(vector), z(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + const vector_t y(parameters[3]); + vector_t z(parameters[4]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 5, 6, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(z, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + const T b = scalar_t(parameters[2])(); + + for (std::size_t i = r0; i <= r1; ++i) + { + z[i] = (a * x[i]) + (b * y[i]); + } + + return T(1); + } + }; + + template + class axpbsy exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpbsy() + : exprtk::igeneric_function("TVTTV|TVTTVTT") + /* + y <- ax + by + Overloads: + 0. TVTVV - a, x(vector), b, shift, y(vector), z(vector) + 1. TVTVVTT - a, x(vector), b, shift, y(vector), z(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + vector_t y(parameters[4]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 5, 6, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + const T b = scalar_t(parameters[2])(); + + const std::size_t s = static_cast(scalar_t(parameters[3])()); + + for (std::size_t i = r0; i <= r1; ++i) + { + y[i] = (a * x[i]) + (b * y[i + s]); + } + + return T(1); + } + }; + + template + class axpbsyz exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpbsyz() + : exprtk::igeneric_function("TVTTVV|TVTTVVTT") + /* + z <- ax + by + Overloads: + 0. TVTVV - a, x(vector), b, shift, y(vector), z(vector) + 1. TVTVVTT - a, x(vector), b, shift, y(vector), z(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + const vector_t y(parameters[4]); + vector_t z(parameters[5]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 6, 7, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(z, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + const T b = scalar_t(parameters[2])(); + + const std::size_t s = static_cast(scalar_t(parameters[3])()); + + for (std::size_t i = r0; i <= r1; ++i) + { + z[i] = (a * x[i]) + (b * y[i + s]); + } + + return T(1); + } + }; + + template + class axpbz exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + axpbz() + : exprtk::igeneric_function("TVTV|TVTVTT") + /* + z <- ax + b + Overloads: + 0. TVTV - a, x(vector), b, z(vector) + 1. TVTVTT - a, x(vector), b, z(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[1]); + vector_t z(parameters[3]); + + std::size_t r0 = 0; + std::size_t r1 = x.size() - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 4, 5, 1)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(z, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + const T a = scalar_t(parameters[0])(); + const T b = scalar_t(parameters[2])(); + + for (std::size_t i = r0; i <= r1; ++i) + { + z[i] = (a * x[i]) + b; + } + + return T(1); + } + }; + + template + class diff exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + diff() + : exprtk::igeneric_function("VV|VVT") + /* + x_(i - stride) - x_i + Overloads: + 0. VV - x(vector), y(vector) + 1. VVT - x(vector), y(vector), stride + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[0]); + vector_t y(parameters[1]); + + const std::size_t r0 = 0; + const std::size_t r1 = std::min(x.size(),y.size()) - 1; + + const std::size_t stride = (1 != ps_index) ? 1 : + std::min(r1,static_cast(scalar_t(parameters[2])())); + + for (std::size_t i = 0; i < stride; ++i) + { + y[i] = std::numeric_limits::quiet_NaN(); + } + + for (std::size_t i = (r0 + stride); i <= r1; ++i) + { + y[i] = x[i] - x[i - stride]; + } + + return T(1); + } + }; + + template + class dot exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + dot() + : exprtk::igeneric_function("VV|VVTT") + /* + Overloads: + 0. VV - x(vector), y(vector) + 1. VVTT - x(vector), y(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[0]); + const vector_t y(parameters[1]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + T result = T(0); + + for (std::size_t i = r0; i <= r1; ++i) + { + result += (x[i] * y[i]); + } + + return result; + } + }; + + template + class dotk exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + dotk() + : exprtk::igeneric_function("VV|VVTT") + /* + Overloads: + 0. VV - x(vector), y(vector) + 1. VVTT - x(vector), y(vector), r0, r1 + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + const vector_t x(parameters[0]); + const vector_t y(parameters[1]); + + std::size_t r0 = 0; + std::size_t r1 = std::min(x.size(),y.size()) - 1; + + if ((1 == ps_index) && !helper::load_vector_range::process(parameters, r0, r1, 2, 3, 0)) + return std::numeric_limits::quiet_NaN(); + else if (helper::invalid_range(y, r0, r1)) + return std::numeric_limits::quiet_NaN(); + + T result = T(0); + T error = T(0); + + for (std::size_t i = r0; i <= r1; ++i) + { + details::kahan_sum(result, error, (x[i] * y[i])); + } + + return result; + } + }; + + template + class threshold_below exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + threshold_below() + : exprtk::igeneric_function("VTT|VTTTT") + /* + Overloads: + 0. VTT - vector, TV, SV + 1. VTTTT - vector, r0, r1, TV, SV + + Where: + TV - Threshold value + SV - Snap-to value + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + const T threshold_value = (0 == ps_index) ? + scalar_t(parameters[1]) : + scalar_t(parameters[3]) ; + + const T snap_value = scalar_t(parameters.back()); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return T(0); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] < threshold_value) + { + vec[i] = snap_value; + } + } + + return T(1); + } + }; + + template + class threshold_above exprtk_final : public exprtk::igeneric_function + { + public: + + typedef typename exprtk::igeneric_function igfun_t; + typedef typename igfun_t::parameter_list_t parameter_list_t; + typedef typename igfun_t::generic_type generic_type; + typedef typename generic_type::scalar_view scalar_t; + typedef typename generic_type::vector_view vector_t; + + using igfun_t::operator(); + + threshold_above() + : exprtk::igeneric_function("VTT|VTTTT") + /* + Overloads: + 0. VTT - vector, TV, SV + 1. VTTTT - vector, r0, r1, TV, SV + + Where: + TV - Threshold value + SV - Snap-to value + */ + {} + + inline T operator() (const std::size_t& ps_index, parameter_list_t parameters) exprtk_override + { + vector_t vec(parameters[0]); + + const T threshold_value = (0 == ps_index) ? + scalar_t(parameters[1]) : + scalar_t(parameters[3]) ; + + const T snap_value = scalar_t(parameters.back()); + + std::size_t r0 = 0; + std::size_t r1 = vec.size() - 1; + + if ( + (1 == ps_index) && + !helper::load_vector_range::process(parameters, r0, r1, 1, 2, 0) + ) + { + return T(0); + } + + for (std::size_t i = r0; i <= r1; ++i) + { + if (vec[i] > threshold_value) + { + vec[i] = snap_value; + } + } + + return T(1); + } + }; + + template + struct package + { + all_true at; + all_false af; + any_true nt; + any_false nf; + count c; + copy cp; + rol rl; + ror rr; + shift_left sl; + shift_right sr; + sort st; + nthelement ne; + assign an; + iota ia; + sumk sk; + axpy b1_axpy; + axpby b1_axpby; + axpyz b1_axpyz; + axpbyz b1_axpbyz; + axpbsy b1_axpbsy; + axpbsyz b1_axpbsyz; + axpbz b1_axpbz; + diff df; + dot dt; + dotk dtk; + threshold_above ta; + threshold_below tb; + + bool register_package(exprtk::symbol_table& symtab) + { + #define exprtk_register_function(FunctionName, FunctionType) \ + if (!symtab.add_function(FunctionName,FunctionType)) \ + { \ + exprtk_debug(( \ + "exprtk::rtl::vecops::register_package - Failed to add function: %s\n", \ + FunctionName)); \ + return false; \ + } \ + + exprtk_register_function("all_true" , at ) + exprtk_register_function("all_false" , af ) + exprtk_register_function("any_true" , nt ) + exprtk_register_function("any_false" , nf ) + exprtk_register_function("count" , c ) + exprtk_register_function("copy" , cp ) + exprtk_register_function("rotate_left" , rl ) + exprtk_register_function("rol" , rl ) + exprtk_register_function("rotate_right" , rr ) + exprtk_register_function("ror" , rr ) + exprtk_register_function("shftl" , sl ) + exprtk_register_function("shftr" , sr ) + exprtk_register_function("sort" , st ) + exprtk_register_function("nth_element" , ne ) + exprtk_register_function("assign" , an ) + exprtk_register_function("iota" , ia ) + exprtk_register_function("sumk" , sk ) + exprtk_register_function("axpy" , b1_axpy ) + exprtk_register_function("axpby" , b1_axpby ) + exprtk_register_function("axpyz" , b1_axpyz ) + exprtk_register_function("axpbyz" , b1_axpbyz ) + exprtk_register_function("axpbsy" , b1_axpbsy ) + exprtk_register_function("axpbsyz" , b1_axpbsyz) + exprtk_register_function("axpbz" , b1_axpbz ) + exprtk_register_function("diff" , df ) + exprtk_register_function("dot" , dt ) + exprtk_register_function("dotk" , dtk ) + exprtk_register_function("threshold_above" , ta ) + exprtk_register_function("threshold_below" , tb ) + #undef exprtk_register_function + + return true; + } + }; + + } // namespace exprtk::rtl::vecops + } // namespace exprtk::rtl +} // namespace exprtk +#endif + +namespace exprtk +{ + namespace information + { + using ::exprtk::details::char_cptr; + + static char_cptr library = "Mathematical Expression Toolkit"; + static char_cptr version = "2.718281828459045235360287471352662" + "49775724709369995957496696762772407" + "66303535475945713821785251664274274" + "66391932003059921817413596629043572"; + static char_cptr date = "20240101"; + static char_cptr min_cpp = "199711L"; + + static inline std::string data() + { + static const std::string info_str = std::string(library) + + std::string(" v") + std::string(version) + + std::string(" (") + date + std::string(")") + + std::string(" (") + min_cpp + std::string(")"); + return info_str; + } + + } // namespace information + + #ifdef exprtk_debug + #undef exprtk_debug + #endif + + #ifdef exprtk_error_location + #undef exprtk_error_location + #endif + + #ifdef exprtk_fallthrough + #undef exprtk_fallthrough + #endif + + #ifdef exprtk_override + #undef exprtk_override + #endif + + #ifdef exprtk_final + #undef exprtk_final + #endif + + #ifdef exprtk_delete + #undef exprtk_delete + #endif + +} // namespace exprtk + +#endif diff --git a/dep/partow/include/strtk.hpp b/dep/partow/include/strtk.hpp new file mode 100644 index 0000000..d8ba2dd --- /dev/null +++ b/dep/partow/include/strtk.hpp @@ -0,0 +1,24518 @@ +/* + ***************************************************************** + * String Toolkit Library * + * * + * Author: Arash Partow (2002-2019) * + * URL: http://www.partow.net/programming/strtk/index.html * + * * + * Copyright notice: * + * Free use of the String Toolkit Library is permitted under the * + * guidelines and in accordance with the most current version of * + * the MIT License. * + * http://www.opensource.org/licenses/MIT * + * * + ***************************************************************** +*/ + + +#ifndef INCLUDE_STRTK_HPP +#define INCLUDE_STRTK_HPP + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#ifndef strtk_no_tr1_or_boost + #define strtk_enable_lexical_cast + #define strtk_enable_random + #define strtk_enable_regex +#endif + +#ifdef strtk_enable_lexical_cast + #include +#endif + +#ifdef strtk_enable_random + // Requires definition of a TR1 compatible random library header + //#include + #include +#endif + +#ifdef strtk_enable_regex + // Requires definition of a TR1 compatible regex library header + //#include + #include +#endif + +#if __GNUC__ >= 7 + + #define strtk_disable_fallthrough_begin \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") \ + + #define strtk_disable_fallthrough_end \ + _Pragma ("GCC diagnostic pop") \ + +#else + #define strtk_disable_fallthrough_begin (void)0; + #define strtk_disable_fallthrough_end (void)0; +#endif + + +namespace strtk +{ + + static const std::size_t one_kilobyte = 1024; + static const std::size_t one_megabyte = 1024 * one_kilobyte; + static const std::size_t one_gigabyte = 1024 * one_megabyte; + static const std::size_t magic_seed = 0xA5A5A5A5; + + template + inline std::size_t for_each_token(const std::string& buffer, + Tokenizer& tokenizer, + Function function) + { + std::size_t token_count = 0; + tokenizer.assign(buffer); + + typename Tokenizer::iterator itr = tokenizer.begin(); + typename Tokenizer::const_iterator end = tokenizer.end(); + + while (end != itr) + { + function(*itr); + ++itr; + ++token_count; + } + + return token_count; + } + + template + inline std::size_t for_each_line(std::istream& stream, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + function(buffer); + ++line_count; + } + + return line_count; + } + + template + inline std::size_t for_each_line_n(std::istream& stream, + const std::size_t& n, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + function(buffer); + if (n == ++line_count) + break; + } + + return line_count; + } + + template + inline std::size_t for_each_line(const std::string& file_name, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (stream) + return for_each_line(stream,function,buffer_size); + else + return 0; + } + + template + inline std::size_t for_each_line_n(const std::string& file_name, + const std::size_t& n, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (stream) + return for_each_line_n(stream,n,function,buffer_size); + else + return 0; + } + + template + inline std::size_t for_each_line_conditional(std::istream& stream, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + if (!function(buffer)) + { + return line_count; + } + ++line_count; + } + + return line_count; + } + + template + inline std::size_t for_each_line_n_conditional(std::istream& stream, + const std::size_t& n, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + while (std::getline(stream,buffer)) + { + if (!function(buffer)) + { + return line_count; + } + if (n == ++line_count) + break; + } + return line_count; + } + + template + inline std::size_t for_each_line_conditional(const std::string& file_name, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (stream) + return for_each_line_conditional(stream,function,buffer_size); + else + return 0; + } + + template + inline std::size_t for_each_line_n_conditional(const std::string& file_name, + const std::size_t& n, + Function function, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + + if (stream) + return for_each_line_n_conditional(stream,n,function,buffer_size); + else + return 0; + } + + template + inline bool read_line_as_value(std::istream& stream, + T& t, + const std::size_t& buffer_size = one_kilobyte) + { + std::string buffer; + buffer.reserve(buffer_size); + + if (!std::getline(stream,buffer)) + return false; + else + return string_to_type_converter(buffer,t); + } + + namespace details + { + struct not_supported_type_tag {}; + struct unsigned_type_tag {}; + struct signed_type_tag {}; + struct real_type_tag {}; + struct byte_type_tag {}; + struct bool_type_tag {}; + struct hex_number_type_tag {}; + struct hex_string_type_tag {}; + struct base64_type_tag {}; + struct ignore_token_type_tag {}; + struct stdstring_type_tag {}; + struct stdstring_range_type_tag {}; + struct value_type_tag {}; + struct sink_type_tag {}; + struct stl_seq_type_tag {}; + struct attribute_type_tag {}; + struct semantic_action_type_tag {}; + struct expect_type_tag {}; + struct like_type_tag {}; + struct inrange_type_tag {}; + struct trim_type_tag {}; + struct lcase_type_tag {}; + struct ucase_type_tag {}; + struct fillchararray_type_tag {}; + struct truncint_type_tag {}; + struct decsink_type_tag {}; + + template struct real_type {}; + template <> struct real_type { typedef double type; }; + template <> struct real_type { typedef double type; }; + template <> struct real_type { typedef long double type; }; + + template + struct supported_conversion_to_type + { + typedef not_supported_type_tag type; + }; + + template + struct supported_conversion_from_type + { + typedef not_supported_type_tag type; + }; + + template + struct enable_if {}; + + template + struct enable_if { typedef T type; }; + + template + struct supported_iterator_type + { + enum { value = false }; + }; + + template + struct is_valid_iterator + { + typedef typename details::enable_if::value,T>::type type; + }; + + template struct numeric; + template inline std::size_t type_length(const T&); + + struct no_t {}; + struct yes_t {}; + + template + struct is_pod + { + typedef no_t result_t; + enum { result = false }; + }; + + template + struct is_stl_container + { typedef no_t result_t; }; + + #define register_stl_container1(C) \ + template struct is_stl_container >{ typedef yes_t result_t; }; + + #define register_stl_container2(C) \ + template struct is_stl_container >{ typedef yes_t result_t; }; + + register_stl_container1(std::vector) + register_stl_container1(std::deque) + register_stl_container1(std::list) + register_stl_container1(std::queue) + register_stl_container1(std::stack) + register_stl_container2(std::set) + register_stl_container2(std::multiset) + register_stl_container2(std::priority_queue) + + #undef register_stl_container1 + #undef register_stl_container2 + + template + inline void convert_type_assert(){} + + } // namespace details + + inline const std::string::value_type* to_ptr(const std::string& s) + { + return &s[0]; + } + + inline std::string::value_type* to_ptr(std::string& s) + { + return &s[0]; + } + + template + inline bool string_to_type_converter(const Iterator begin, const Iterator end, T& t) + { + typedef typename details::is_valid_iterator::type itr_type; + typename details::supported_conversion_to_type::type type; + details::convert_type_assert(); + Iterator itr = begin; + return string_to_type_converter_impl(itr,end,t,type); + } + + template + inline bool string_to_type_converter(const std::pair& range, T& t) + { + return string_to_type_converter(range.first,range.second,t); + } + + template + inline T string_to_type_converter(const Iterator begin, const Iterator end) + { + typedef typename details::is_valid_iterator::type itr_type; + typename details::supported_conversion_to_type::type type; + details::convert_type_assert(); + T t; + Iterator itr = begin; + if (string_to_type_converter_impl(itr,end,t,type)) + return t; + else + throw std::invalid_argument("string_to_type_converter() - Failed to convert: " + + std::string(begin,end)); + } + + template + inline T string_to_type_converter(const std::pair& range) + { + return string_to_type_converter(range.first,range.second); + } + + template + inline bool string_to_type_converter(const std::string& s, T& t) + { + return string_to_type_converter(to_ptr(s), to_ptr(s) + s.size(), t); + } + + template + inline T string_to_type_converter(const std::string& s) + { + return string_to_type_converter(to_ptr(s), to_ptr(s) + s.size()); + } + + template + inline bool type_to_string(const T& t, std::string& s) + { + typename details::supported_conversion_from_type::type type; + return type_to_string_converter_impl(t,s,type); + } + + template + inline std::string type_to_string(const T& t) + { + std::string s; + if (type_to_string(t,s)) + return s; + else + throw std::invalid_argument("type_to_string() - Failed to convert type to string"); + } + + #define strtk_begin_register_string_to_type \ + namespace strtk { namespace details { \ + + #define strtk_end_register_string_to_type \ + }} \ + + #define strtk_string_to_type_begin(Type) \ + namespace strtk { namespace details { template \ + inline bool string_to_type_converter_impl(const Iterator& begin, const Iterator& end, \ + Type& t, details::not_supported_type_tag&) { \ + + #define strtk_string_to_type_end() \ + }}} \ + + template class Sequence> + inline std::size_t load_from_text_file(std::istream& stream, + Sequence& sequence, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + sequence.push_back(string_to_type_converter(buffer)); + } + + return line_count; + } + + template + inline std::size_t load_from_text_file(std::istream& stream, + std::set& set, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + set.insert(string_to_type_converter(buffer)); + } + + return line_count; + } + + template + inline std::size_t load_from_text_file(std::istream& stream, + std::multiset& multiset, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + multiset.insert(string_to_type_converter(buffer)); + } + + return line_count; + } + + template + inline std::size_t load_from_text_file(std::istream& stream, + std::queue& queue, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + queue.push(string_to_type_converter(buffer)); + } + + return line_count; + } + + template + inline std::size_t load_from_text_file(std::istream& stream, + std::stack& stack, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + stack.push(string_to_type_converter(buffer)); + } + + return line_count; + } + + template + inline std::size_t load_from_text_file(std::istream& stream, + std::priority_queue& priority_queue, + const std::size_t& buffer_size = one_kilobyte) + { + if (!stream) return 0; + + std::string buffer; + buffer.reserve(buffer_size); + std::size_t line_count = 0; + + while (std::getline(stream,buffer)) + { + ++line_count; + priority_queue.push(string_to_type_converter(buffer)); + } + + return line_count; + } + + template class Sequence> + inline std::size_t load_from_text_file(const std::string& file_name, + Sequence& sequence, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,sequence,buffer_size); + } + + template + inline std::size_t load_from_text_file(const std::string& file_name, + std::set& set, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,set,buffer_size); + } + + template + inline std::size_t load_from_text_file(const std::string& file_name, + std::multiset& multiset, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,multiset,buffer_size); + } + + template + inline std::size_t load_from_text_file(const std::string& file_name, + std::queue& queue, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,queue,buffer_size); + } + + template + inline std::size_t load_from_text_file(const std::string& file_name, + std::stack& stack, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,stack,buffer_size); + } + + template + inline std::size_t load_from_text_file(const std::string& file_name, + std::priority_queue& priority_queue, + const std::size_t& buffer_size = one_kilobyte) + { + std::ifstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return load_from_text_file(stream,priority_queue,buffer_size); + } + + template class Sequence> + inline std::size_t write_to_text_file(std::ostream& stream, + const Sequence& sequence, + const std::string& delimiter = "") + { + if (!stream) return 0; + + std::size_t count = 0; + typename Sequence::const_iterator itr = sequence.begin(); + typename Sequence::const_iterator end = sequence.end(); + + if (!delimiter.empty()) + { + while (end != itr) + { + stream << (*itr) << delimiter; + ++itr; + ++count; + } + } + else + { + while (end != itr) + { + stream << (*itr); + ++itr; + ++count; + } + } + + return count; + } + + template + inline std::size_t write_to_text_file(std::ostream& stream, + const std::set& set, + const std::string& delimiter = "") + { + if (!stream) return 0; + + std::size_t count = 0; + typename std::set::const_iterator itr = set.begin(); + typename std::set::const_iterator end = set.end(); + + if (!delimiter.empty()) + { + while (end != itr) + { + stream << (*itr) << delimiter; + ++itr; + ++count; + } + } + else + { + while (end != itr) + { + stream << (*itr); + ++itr; + ++count; + } + } + + return count; + } + + template + inline std::size_t write_to_text_file(std::ostream& stream, + const std::multiset& multiset, + const std::string& delimiter = "") + { + if (!stream) return 0; + + std::size_t count = 0; + typename std::multiset::const_iterator itr = multiset.begin(); + typename std::multiset::const_iterator end = multiset.end(); + + if (!delimiter.empty()) + { + while (end != itr) + { + stream << (*itr) << delimiter; + ++itr; + ++count; + } + } + else + { + while (end != itr) + { + stream << (*itr); + ++itr; + ++count; + } + } + + return count; + } + + template class Sequence> + inline std::size_t write_to_text_file(const std::string& file_name, + const Sequence& sequence, + const std::string& delimiter = "") + { + std::ofstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return write_to_text_file(stream,sequence,delimiter); + } + + template + inline std::size_t write_to_text_file(const std::string& file_name, + const std::set& set, + const std::string& delimiter = "") + { + std::ofstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return write_to_text_file(stream,set,delimiter); + } + + template + inline std::size_t write_to_text_file(const std::string& file_name, + const std::multiset& multiset, + const std::string& delimiter = "") + { + std::ofstream stream(file_name.c_str()); + if (!stream) + return 0; + else + return write_to_text_file(stream,multiset,delimiter); + } + + template + inline void copy_n(InputIterator itr, std::size_t n, OutputIterator out) + { + while (n) + { + (*out) = (*itr); + ++itr; + ++out; + --n; + } + } + + template + inline void copy_if(Predicate predicate, + const InputIterator begin, const InputIterator end, + OutputIterator out) + { + InputIterator itr = begin; + while (end != itr) + { + if (predicate(*itr)) + { + *(out++) = (*itr); + } + ++itr; + } + } + + template + inline InputIterator copy_while(Predicate predicate, + const InputIterator begin, const InputIterator end, + OutputIterator out) + { + InputIterator itr = begin; + while (end != itr) + { + if (!predicate(*itr)) + return itr; + *(out++) = *(itr++); + } + + return end; + } + + template + inline InputIterator copy_until(Predicate predicate, + const InputIterator begin, const InputIterator end, + OutputIterator out) + { + InputIterator itr = begin; + while (end != itr) + { + if (predicate(*itr)) + return itr; + *(out++) = *(itr++); + } + + return end; + } + + template + inline void extract_unique(const InputIterator begin, const InputIterator end, + OutputIterator out) + { + typedef typename std::iterator_traits::value_type T; + std::vector buffer(begin,end); + std::sort(buffer.begin(),buffer.end()); + std::unique_copy(buffer.begin(),buffer.end(),out); + } + + template + inline bool range_only_contains(Predicate predicate, + const InputIterator begin, + const InputIterator end) + { + InputIterator itr = begin; + + while (end != itr) + { + if (!predicate(*itr)) + { + return false; + } + ++itr; + } + + return true; + } + + namespace range + { + template + class adapter + { + public: + + typedef T value_type; + typedef T* iterator; + typedef const iterator const_iterator; + + adapter(T* const begin, T* const end) + : begin_(begin), + end_(end) + {} + + adapter(const std::pair& r) + : begin_(r.first), + end_(r.second) + {} + + adapter(T* const begin, const std::size_t length) + : begin_(begin), + end_(begin_ + length) + {} + + inline iterator begin() const + { + return begin_; + } + + inline iterator end() const + { + return end_; + } + + inline std::size_t size() const + { + return std::distance(begin_,end_); + } + + inline operator std::string() const + { + return stringify(begin_,end_); + } + + inline const T& operator[](const std::size_t& index) const + { + return *(begin_ + index); + } + + inline T& operator[](const std::size_t& index) + { + return *(begin_ + index); + } + + private: + + template + static inline std::string stringify(Type*,Type*) + { + static std::string result = ""; + return result; + } + + static inline std::string stringify(const char* begin, const char* end) + { + return std::string(begin,end); + } + + iterator begin_; + iterator end_; + }; + + typedef adapter string; + typedef adapter ustring; + + template + inline adapter type(const T* begin, const T* end) + { + return adapter(begin,end); + } + + template + inline adapter type(const T (&t)[N]) + { + return adapter(t,N); + } + + static inline adapter type(const std::string& s) + { + return adapter(to_ptr(s), s.size()); + } + + template class Sequence> + inline adapter::iterator> type(const Sequence& seq) + { + return adapter::iterator>(seq.begin(),seq.end()); + } + + inline std::string as_string(const adapter& a) + { + return std::string(a.begin(),a.end()); + } + + inline std::string as_string(const adapter& a) + { + return std::string(a.begin(),a.end()); + } + + } // namespace range + + template + struct single_delimiter_predicate + { + public: + + typedef T value_type; + + single_delimiter_predicate(const T& d) + : delimiter_(d) + {} + + inline bool operator()(const T& d) const + { + return delimiter_ == d; + } + + private: + + single_delimiter_predicate& operator=(const single_delimiter_predicate&); + const T delimiter_; + }; + + template + struct multiple_delimiter_predicate + { + public: + + typedef T value_type; + + multiple_delimiter_predicate(const T* d_begin, const T* d_end) + : length_(std::distance(d_begin,d_end)), + delimiter_((length_ <= sbo_buffer_size) ? sbo_buffer : new T[length_]), + delimiter_end_(delimiter_ + length_) + { + std::copy(d_begin,d_end, delimiter_); + } + + multiple_delimiter_predicate(const T d[], const std::size_t& length) + : length_(length), + delimiter_((length_ <= sbo_buffer_size) ? sbo_buffer : new T[length_]), + delimiter_end_(delimiter_ + length_) + { + std::copy(d,d + length, delimiter_); + } + + template + multiple_delimiter_predicate(const Iterator begin, const Iterator end) + : length_(std::distance(begin,end)), + delimiter_((length_ <= sbo_buffer_size) ? sbo_buffer : new T[length_]), + delimiter_end_(delimiter_ + length_) + { + //static_assert(T == std::iterator_traits::value_type); + std::copy(begin,end, delimiter_); + } + + template + multiple_delimiter_predicate(const range::adapter& r) + : length_(std::distance(r.begin(),r.end())), + delimiter_((length_ <= sbo_buffer_size) ? sbo_buffer : new T[length_]), + delimiter_end_(delimiter_ + length_) + { + //static_assert(T == std::iterator_traits::value_type); + std::copy(r.begin(),r.end(), delimiter_); + } + + ~multiple_delimiter_predicate() + { + if (length_ > sbo_buffer_size) + { + delete[] delimiter_; + } + } + + inline bool operator()(const T& d) const + { + return (std::find(delimiter_,delimiter_end_,d) != delimiter_end_); + } + + private: + + multiple_delimiter_predicate(const multiple_delimiter_predicate& mdp); + multiple_delimiter_predicate& operator=(const multiple_delimiter_predicate& mdp); + + std::size_t length_; + T* delimiter_; + T* delimiter_end_; + enum { sbo_buffer_size = 32 }; + T sbo_buffer[sbo_buffer_size]; + }; + + struct multiple_char_delimiter_predicate + { + public: + + template + multiple_char_delimiter_predicate(const Iterator begin, const Iterator end) + { + setup_delimiter_table(begin,end); + } + + multiple_char_delimiter_predicate(const std::string& s) + { + setup_delimiter_table(to_ptr(s), to_ptr(s) + s.size()); + } + + inline bool operator()(const unsigned char& c) const + { + return (delimiter_table_[c]); + } + + inline bool operator()(const char& c) const + { + return operator()(static_cast(c)); + } + + private: + + static const std::size_t table_size = 256; + + template + inline void setup_delimiter_table(const Iterator begin, const Iterator end) + { + std::fill_n(delimiter_table_,table_size,false); + for (Iterator itr = begin; itr != end; ++itr) + { + delimiter_table_[static_cast(*itr)] = true; + } + } + + bool delimiter_table_[table_size]; + }; + + namespace details + { + template class Sequence> + struct index_remover_impl + { + typedef Sequence sequence_t; + index_remover_impl(const sequence_t& sequence) + : itr_(sequence.begin()), + end_(sequence.end()), + current_index_(0), + check_(true) + {} + + template + inline bool operator()(const T&) + { + if (check_) + { + if (current_index_++ == *itr_) + { + if (end_ == ++itr_) + { + check_ = false; + } + + return true; + } + } + + return false; + } + + typename sequence_t::const_iterator itr_; + typename sequence_t::const_iterator end_; + std::size_t current_index_; + bool check_; + }; + } + + template class Sequence> + inline details::index_remover_impl index_remover(const Sequence& sequence) + { + return details::index_remover_impl(sequence); + } + + template + inline std::size_t remove_inplace(Predicate predicate, + Iterator begin, + Iterator end) + { + Iterator itr1 = begin; + Iterator itr2 = begin; + std::size_t removal_count = 0; + while (end != itr1) + { + if (predicate(*itr1)) + { + ++itr1; + ++removal_count; + } + else + { + if (itr1 != itr2) + { + (*itr2) = (*itr1); + } + ++itr1; + ++itr2; + } + } + + return removal_count; + } + + template + inline std::size_t remove_inplace(Predicate predicate, const range::adapter& r) + { + return remove_inplace(predicate,r.begin(),r.end()); + } + + template class Sequence> + inline std::size_t remove_inplace(Predicate predicate, Sequence& sequence) + { + const std::size_t removal_count = remove_inplace(predicate,sequence.begin(),sequence.end()); + sequence.resize(sequence.size() - removal_count); + return removal_count; + } + + inline void remove_inplace(const std::string::value_type c, std::string& s) + { + const std::size_t removal_count = remove_inplace(single_delimiter_predicate(c), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline void remove_inplace(Predicate predicate, std::string& s) + { + const std::size_t removal_count = remove_inplace(predicate, + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline std::size_t remove_consecutives_inplace(Predicate predicate, + Iterator begin, + Iterator end) + { + if (0 == std::distance(begin,end)) return 0; + Iterator itr1 = begin; + Iterator itr2 = begin; + typename std::iterator_traits::value_type prev = *begin; + std::size_t removal_count = 0; + ++itr1; + ++itr2; + while (end != itr1) + { + while ((end != itr1) && (!predicate(*itr1) || !predicate(prev))) + { + if (itr1 != itr2) + { + (*itr2) = (*itr1); + } + prev = (*itr1); + ++itr1; + ++itr2; + } + + while ((end != itr1) && predicate(*itr1)) + { + ++itr1; + ++removal_count; + } + } + + return removal_count; + } + + template + inline std::size_t remove_consecutives_inplace(Predicate predicate, const range::adapter& r) + { + return remove_consecutives_inplace(predicate,r.begin(),r.end()); + } + + inline void remove_consecutives_inplace(const std::string::value_type c, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_consecutives_inplace(single_delimiter_predicate(c), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_consecutives_inplace(const std::string& rem_chars, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_consecutives_inplace(multiple_char_delimiter_predicate(rem_chars), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + namespace details + { + #if (defined(__MINGW32_VERSION)) || \ + (defined(__CYGWIN__) || defined(__CYGWIN32__)) || \ + (defined(__APPLE__) && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)) || \ + (defined(_WIN32) && (_MSC_VER < 1400)) + inline std::size_t strnlength(const char* s, const std::size_t& n) + { + const char *end = reinterpret_cast(memchr(s, '\0', n)); + return end ? (size_t) (end - s) : n; + } + #else + inline std::size_t strnlength(const char* s, const std::size_t& n) + { + return strnlen(s,n); + } + #endif + } + + inline void remove_consecutives_inplace(const char* rem_chars, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_consecutives_inplace(multiple_char_delimiter_predicate( + rem_chars, + rem_chars + details::strnlength(rem_chars,256)), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline void remove_consecutives_inplace(Predicate predicate, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_consecutives_inplace(predicate, + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline std::size_t remove_consecutives_inplace(Iterator begin, Iterator end) + { + if (0 == std::distance(begin,end)) return 0; + + Iterator itr1 = begin; ++itr1; + Iterator itr2 = begin; ++itr2; + typename std::iterator_traits::value_type prev = *begin; + std::size_t removal_count = 0; + + while (end != itr1) + { + while ((end != itr1) && (prev != (*itr1))) + { + if (itr1 != itr2) + { + (*itr2) = (*itr1); + } + prev = (*itr1); + ++itr1; + ++itr2; + } + + while ((end != itr1) && (prev == (*itr1))) + { + ++itr1; + ++removal_count; + } + } + + return removal_count; + } + + template + inline std::size_t remove_consecutives_inplace(const range::adapter& r) + { + return remove_consecutives_inplace(r.begin(),r.end()); + } + + template class Sequence> + inline void remove_consecutives_inplace(Sequence& sequence) + { + const std::size_t removal_count = remove_consecutives_inplace(sequence.begin(),sequence.end()); + sequence.resize(sequence.size() - removal_count); + } + + inline void remove_consecutives_inplace(std::string& s) + { + std::size_t removal_count = remove_consecutives_inplace(const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline std::string remove_duplicates(const std::string& str) + { + std::string::value_type table[0xFF]; + std::fill_n(table,0xFF,static_cast(0)); + std::string result; + result.reserve(str.size()); + for (std::size_t i = 0; i < str.size(); ++i) + { + const char c = str[i]; + if (0 == table[static_cast(c)]) + { + table[static_cast(c)] = 0x01; + result += c; + } + } + return result; + } + + inline std::string remove_duplicates_inplace(std::string& str) + { + return remove_duplicates(str); + } + + template + inline std::size_t remove_trailing(Predicate predicate, + Iterator begin, + Iterator end) + { + const std::size_t length = std::distance(begin,end); + if (0 == length) + return 0; + + Iterator itr = begin + (length - 1); + std::size_t removal_count = 0; + + while ((begin != itr) && predicate(*itr)) + { + --itr; + ++removal_count; + } + + return removal_count; + } + + template + inline std::size_t remove_trailing(Predicate predicate, const range::adapter& r) + { + return remove_trailing(predicate,r.begin(),r.end()); + } + + inline void remove_trailing(const std::string::value_type c, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_trailing(single_delimiter_predicate(c), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_trailing(const std::string& rem_chars, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_trailing(multiple_char_delimiter_predicate(rem_chars), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_trailing(const char* rem_chars, std::string& s) + { + const std::size_t removal_count = remove_trailing(multiple_char_delimiter_predicate( + rem_chars, + rem_chars + details::strnlength(rem_chars,256)), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline void remove_trailing(Predicate predicate, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_trailing(predicate, + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template + inline std::size_t remove_leading(Predicate predicate, + Iterator begin, + Iterator end) + { + const std::size_t length = std::distance(begin,end); + if (0 == length) + return 0; + + Iterator itr = begin; + std::size_t removal_count = 0; + + while ((end != itr) && predicate(*itr)) + { + ++itr; + ++removal_count; + } + + std::copy(itr,end,begin); + return removal_count; + } + + template + inline std::size_t remove_leading(Predicate predicate, const range::adapter& r) + { + return remove_leading(predicate,r.begin(),r.end()); + } + + inline void remove_leading(const std::string::value_type c, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_leading(single_delimiter_predicate(c), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_leading(const std::string& rem_chars, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_leading(multiple_char_delimiter_predicate(rem_chars), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_leading(const char* rem_chars, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_leading(multiple_char_delimiter_predicate( + rem_chars, + rem_chars + details::strnlength(rem_chars,256)), + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + inline void remove_leading_trailing(const std::string& rem_chars, std::string& s) + { + remove_leading(rem_chars,s); + remove_trailing(rem_chars,s); + } + + template + inline void remove_leading(Predicate predicate, std::string& s) + { + if (s.empty()) return; + const std::size_t removal_count = remove_leading(predicate, + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + if (removal_count > 0) + { + s.resize(s.size() - removal_count); + } + } + + template class Sequence> + void remove_empty_strings(Sequence& seq) + { + struct is_empty { static inline bool check(const std::string& s) { return s.empty(); } }; + seq.erase(std::remove_if(seq.begin(),seq.end(),is_empty::check),seq.end()); + } + + template + void remove_empty_strings(std::list& l) + { + struct is_empty { static inline bool check(const std::string& s) { return s.empty(); } }; + l.remove_if(is_empty::check); + } + + template + void remove_empty_strings(std::set& set) + { + struct is_empty { static inline bool check(const std::string& s) { return s.empty(); } }; + + typename std::set::iterator itr = set.begin(); + + while (set.end() != itr) + { + if ((*itr).empty()) + set.erase(itr++); + else + ++itr; + } + } + + template + void remove_empty_strings(std::multiset& set) + { + struct is_empty { static inline bool check(const std::string& s) { return s.empty(); } }; + + typename std::multiset::iterator itr = set.begin(); + + while (set.end() != itr) + { + if ((*itr).empty()) + set.erase(itr++); + else + ++itr; + } + } + + template + inline void replace(const typename std::iterator_traits::value_type& c1, + const typename std::iterator_traits::value_type& c2, + const Iterator begin, + const Iterator end) + { + for (Iterator itr = begin; end != itr; ++itr) + { + if (c1 == (*itr)) + { + (*itr) = c2; + } + } + } + + inline void replace(const std::string::value_type& c0, + const std::string::value_type& c1, + std::string& s) + { + replace(c0, c1, + const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size())); + } + + template + inline void replace(const T& c1, const T& c2, const range::adapter& r) + { + replace(c1, c2, r.begin(), r.end()); + } + + inline void replace_pattern(const std::string& s, // input + const std::string& p, // pattern + const std::string& r, // replacement + std::string& n) + { + if (p.empty() || (p == r)) + { + n.assign(s); + return; + } + + const std::size_t p_size = p.size(); + const std::size_t r_size = r.size(); + + int inc = static_cast(r_size) - static_cast(p_size); + + std::size_t pos = 0; + + std::vector delta_list; + delta_list.reserve(std::min(32,(s.size() / p_size) + 1)); + + while (std::string::npos != (pos = s.find(p,pos))) + { + delta_list.push_back(pos); + pos += p_size; + } + + if (delta_list.empty()) + { + n.assign(s); + return; + } + + n.resize(delta_list.size() * inc + s.size(), 0x00); + + char* n_itr = const_cast(to_ptr(n)); + + const char* s_end = to_ptr(s) + s.size(); + const char* s_itr = to_ptr(s); + const char* r_begin = to_ptr(r); + const char* r_end = to_ptr(r) + r_size; + + const std::size_t delta_list_size = delta_list.size(); + + std::size_t i = 0; + std::size_t delta = delta_list[0]; + + for ( ; ; ) + { + std::copy(s_itr, s_itr + delta, n_itr); + s_itr += p_size + delta; + n_itr += delta; + std::copy(r_begin, r_end, n_itr); + n_itr += r_size; + + if (++i >= delta_list_size) + break; + + delta = delta_list[i] - (delta_list[i - 1] + p_size); + } + + if (s_end != s_itr) + { + std::copy(s_itr, s_end, n_itr); + } + } + + template + inline std::size_t replace_pattern(const InputIterator s_begin, const InputIterator s_end, // Input + const InputIterator p_begin, const InputIterator p_end, // Pattern + const InputIterator r_begin, const InputIterator r_end, // Replacement + OutputIterator out) + { + InputIterator s_itr = s_begin; + InputIterator r_itr = r_begin; + InputIterator p_itr = p_begin; + + const std::size_t p_size = std::distance(p_begin,p_end); + const std::size_t r_size = std::distance(r_begin,r_end); + + if ( + (0 == p_size) || + ( + (p_size == r_size) && + std::equal(p_begin,p_end,r_begin) + ) + ) + { + std::copy(s_begin,s_end,out); + return std::distance(s_begin,s_end); + } + + std::size_t pos = 0; + std::size_t prev_pos = 0; + std::size_t count = 0; + std::size_t new_size = std::distance(s_begin,s_end); + int inc = r_size - p_size; + + InputIterator temp_s_itr = s_itr; + + while (s_end != s_itr) + { + /* + Need to replace the following search code with + Knuth-Pratt-Morris or Boyer-Moore string search + algorithms. + */ + bool found = true; + p_itr = p_begin; + temp_s_itr = s_itr; + + while ((p_end != p_itr) && (s_end != temp_s_itr)) + { + if (*(temp_s_itr++) != *(p_itr++)) + { + found = false; + break; + } + } + + if (found && (p_itr == p_end)) + { + ++count; + new_size += inc; + s_itr = temp_s_itr; + } + else + ++s_itr; + } + + s_itr = s_begin; + p_itr = p_begin; + + pos = 0; + prev_pos = 0; + + temp_s_itr = s_itr; + + while (0 < count) + { + p_itr = p_begin; + bool found = true; + InputIterator pattern_start = temp_s_itr; + + while ((p_end != p_itr) && (s_end != temp_s_itr)) + { + if (*(temp_s_itr++) != *(p_itr++)) + { + found = false; + temp_s_itr = pattern_start; + ++temp_s_itr; + break; + } + } + + if (!found || (p_itr != p_end)) continue; + + pos = std::distance(s_begin,temp_s_itr) - p_size; + int diff = pos - prev_pos; + + std::copy(s_itr,s_itr + diff, out); + s_itr = temp_s_itr; + std::copy(r_itr,r_end, out); + + pos += p_size; + prev_pos = pos; + --count; + } + + std::copy(s_itr,s_end,out); + + return new_size; + } + + inline void remove_pattern(const std::string& s, + const std::string& p, + std::string& n) + { + static const std::string r(""); + replace_pattern(s,p,r,n); + } + + inline void sort(std::string& s) + { + std::sort(s.begin(),s.end()); + } + + namespace details + { + struct cs_match + { + template + static inline bool cmp(const char_t c0, const char_t c1) + { + return (c0 == c1); + } + }; + + struct cis_match + { + template + static inline bool cmp(const char_t c0, const char_t c1) + { + return (std::tolower(c0) == std::tolower(c1)); + } + }; + + template + inline bool match_impl(const Iterator pattern_begin, const Iterator pattern_end, + const Iterator data_begin, const Iterator data_end, + const typename std::iterator_traits::value_type& match_zero_or_more, + const typename std::iterator_traits::value_type& match_zero_or_one) + { + Iterator d_itr = data_begin; + Iterator p_itr = pattern_begin; + + while ((p_itr != pattern_end) && (d_itr != data_end)) + { + if (match_zero_or_more == *p_itr) + { + while ((p_itr != pattern_end) && (*p_itr == match_zero_or_more || *p_itr == match_zero_or_one)) + { + ++p_itr; + } + + if (p_itr == pattern_end) + return true; + + const typename std::iterator_traits::value_type c = *(p_itr++); + + while ((d_itr != data_end) && !Comparator::cmp(c, *d_itr)) + { + ++d_itr; + } + + ++d_itr; + } + else if ((*p_itr == match_zero_or_one) || Comparator::cmp(*p_itr, *d_itr)) + { + ++d_itr; + ++p_itr; + } + else + return false; + } + + if (d_itr != data_end) + return false; + else if (p_itr == pattern_end) + return true; + else if ((match_zero_or_more == *p_itr) || (match_zero_or_one == *p_itr)) + ++p_itr; + + return pattern_end == p_itr; + } + } + + template + inline bool match(const Iterator pattern_begin, const Iterator pattern_end, + const Iterator data_begin, const Iterator data_end, + const typename std::iterator_traits::value_type& match_zero_or_more, + const typename std::iterator_traits::value_type& match_zero_or_one) + { + return details::match_impl(pattern_begin, pattern_end, + data_begin, data_end, + match_zero_or_more, + match_zero_or_one); + } + + inline bool match(const std::string& wild_card, + const std::string& str) + { + /* + * : Match zero or more character + ? : Match zero or one character + */ + return details::match_impl(to_ptr(wild_card), to_ptr(wild_card) + wild_card.size(), + to_ptr(str) , to_ptr(str) + str .size(), + '*', + '?'); + } + + inline bool imatch_char(const char c1, const char c2) + { + return std::toupper(c1) == std::toupper(c2); + } + + template + inline bool imatch(const InputIterator begin1, const InputIterator end1, + const InputIterator begin2, const InputIterator end2) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + if (std::distance(begin1,end1) != std::distance(begin2,end2)) + { + return false; + } + + InputIterator itr1 = begin1; + InputIterator itr2 = begin2; + + while (end1 != itr1) + { + //if (std::toupper(*itr1, std::locale::classic()) != std::toupper(*it2, std::locale::classic())) + if (std::toupper(*itr1) != std::toupper(*itr2)) + { + return false; + } + ++itr1; + ++itr2; + } + + return true; + } + + template + inline bool imatch(const range::adapter& r1, const range::adapter& r2) + { + return imatch(r1.begin(), r1.end(), r2.begin(), r2.end()); + } + + inline bool imatch(const std::string& s1, const std::string& s2) + { + return imatch(to_ptr(s1), to_ptr(s1) + s1.size(), + to_ptr(s2), to_ptr(s2) + s2.size()); + } + + template + inline Iterator imatch(const std::string& s, const Iterator begin, const Iterator end) + { + for (const std::string* itr = begin; end != itr; ++itr) + { + if (imatch(s,*itr)) + { + return itr; + } + } + return end; + } + + template class Sequence> + inline bool imatch(const std::string& s, const Sequence& sequence) + { + return (sequence.end() != imatch(s, sequence.begin(), sequence.end())); + } + + template + inline bool imatch(const std::string& s, const std::set& set) + { + return imatch(s, set.begin(), set.end()); + } + + template + inline bool imatch(const std::string& s, const std::multiset& multiset) + { + return imatch(s, multiset.begin(), multiset.end()); + } + + template + inline std::size_t find_all(const Iterator pattern_begin, + const Iterator pattern_end, + const Iterator begin, + const Iterator end, + OutputIterator out) + { + Iterator itr = begin; + const std::size_t pattern_length = std::distance(pattern_begin,pattern_end); + std::size_t match_count = 0; + while (end != (itr = std::search(itr, end, pattern_begin, pattern_end))) + { + (*out) = std::make_pair(itr,itr + pattern_length); + itr += pattern_length; + ++out; + ++match_count; + } + return match_count; + } + + template class Sequence> + inline std::size_t find_all(const Iterator pattern_begin, + const Iterator pattern_end, + const Iterator begin, + const Iterator end, + Sequence& seq) + { + return find_all(pattern_begin, pattern_end, begin, end, std::back_inserter(seq)); + } + + inline std::size_t ifind(const std::string& pattern, const std::string& data) + { + if (pattern.size() > data.size()) + return std::string::npos; + + const char* result_itr = std::search(to_ptr(data), to_ptr(data) + data .size(), + to_ptr(pattern), to_ptr(pattern) + pattern.size(), + imatch_char); + + if ((to_ptr(data) + data.size()) == result_itr) + return std::string::npos; + else + return std::distance(to_ptr(data),result_itr); + } + + template + inline std::size_t ifind_all(const Iterator pattern_begin, + const Iterator pattern_end, + const Iterator begin, + const Iterator end, + OutputIterator out) + { + Iterator itr = begin; + const std::size_t pattern_length = std::distance(pattern_begin,pattern_end); + std::size_t match_count = 0; + + while (end != (itr = std::search(itr, end, pattern_begin, pattern_end, imatch_char))) + { + (*out) = std::make_pair(itr, itr + pattern_length); + itr += pattern_length; + ++out; + ++match_count; + } + + return match_count; + } + + template + inline std::size_t find_all(const std::string& pattern, + const std::string& data, + OutputIterator out) + { + return find_all(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data) , to_ptr(data) + data .size(), + out); + } + + template class Sequence> + inline std::size_t find_all(const std::string& pattern, + const std::string& data, + Sequence& seq) + { + return find_all(pattern,data,std::back_inserter(seq)); + } + + template + inline std::size_t ifind_all(const std::string& pattern, + const std::string& data, + OutputIterator out) + { + return ifind_all(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data) , to_ptr(data) + data .size(), + out); + } + + template class Sequence> + inline std::size_t ifind_all(const std::string& pattern, + const std::string& data, + Sequence& seq) + { + return ifind_all(pattern,data,std::back_inserter(seq)); + } + + template + inline bool begins_with(const InputIterator pattern_begin, + const InputIterator pattern_end, + const InputIterator begin, + const InputIterator end) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + if (std::distance(pattern_begin,pattern_end) <= std::distance(begin,end)) + { + return std::equal(pattern_begin,pattern_end,begin); + } + else + return false; + } + + inline bool begins_with(const std::string& pattern, const std::string& data) + { + if (pattern.size() <= data.size()) + { + return begins_with(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data) , to_ptr(data) + data .size()); + } + else + return false; + } + + template + inline bool ibegins_with(const InputIterator pattern_begin, + const InputIterator pattern_end, + const InputIterator begin, + const InputIterator end) + { + typedef typename details::is_valid_iterator::type itr_type; + + details::convert_type_assert(); + + if (std::distance(pattern_begin,pattern_end) <= std::distance(begin,end)) + { + return std::equal(pattern_begin, pattern_end, begin, imatch_char); + } + else + return false; + } + + inline bool ibegins_with(const std::string& pattern, const std::string& data) + { + if (pattern.size() <= data.size()) + { + return ibegins_with(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data), to_ptr(data) + data .size()); + } + else + return false; + } + + template + inline bool ends_with(const InputIterator pattern_begin, + const InputIterator pattern_end, + const InputIterator begin, + const InputIterator end) + { + typedef typename details::is_valid_iterator::type itr_type; + + details::convert_type_assert(); + + const std::size_t pattern_length = std::distance(pattern_begin, pattern_end); + const std::size_t data_length = std::distance(begin, end); + + if (pattern_length <= data_length) + { + return std::equal(pattern_begin, + pattern_end, + begin + (data_length - pattern_length)); + } + else + return false; + } + + inline bool ends_with(const std::string& pattern, const std::string& data) + { + if (pattern.size() <= data.size()) + { + return ends_with(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data) , to_ptr(data) + data .size()); + } + else + return false; + } + + template + inline bool iends_with(const InputIterator pattern_begin, + const InputIterator pattern_end, + const InputIterator begin, + const InputIterator end) + { + typedef typename details::is_valid_iterator::type itr_type; + + details::convert_type_assert(); + + const std::size_t pattern_length = std::distance(pattern_begin,pattern_end); + const std::size_t data_length = std::distance(begin,end); + + if (pattern_length <= data_length) + { + return std::equal(pattern_begin, + pattern_end, + begin + (data_length - pattern_length), + imatch_char); + } + else + return false; + } + + inline bool iends_with(const std::string& pattern, const std::string& data) + { + if (pattern.size() <= data.size()) + { + return iends_with(to_ptr(pattern), to_ptr(pattern) + pattern.size(), + to_ptr(data) , to_ptr(data) + data .size()); + } + else + return false; + } + + inline std::size_t index_of(const std::string& pattern, const std::string& data) + { + if (pattern.empty()) + return std::string::npos; + else if (data.empty()) + return std::string::npos; + else if (pattern.size() > data.size()) + return std::string::npos; + + const char* itr = std::search(to_ptr(data) , to_ptr(data) + data .size(), + to_ptr(pattern), to_ptr(pattern) + pattern.size()); + + if ((to_ptr(data) + data.size()) == itr) + return std::string::npos; + else + return std::distance(to_ptr(data),itr); + } + + namespace tokenize_options + { + typedef std::size_t type; + enum + { + default_mode = 0, + compress_delimiters = 1, + include_1st_delimiter = 2, + include_all_delimiters = 4 + }; + + static inline bool perform_compress_delimiters(const type& split_opt) + { + return compress_delimiters == (split_opt & compress_delimiters); + } + + static inline bool perform_include_1st_delimiter(const type& split_opt) + { + return include_1st_delimiter == (split_opt & include_1st_delimiter); + } + + static inline bool perform_include_all_delimiters(const type& split_opt) + { + return include_all_delimiters == (split_opt & include_all_delimiters); + } + + } // namespace tokenize_options + + template + class tokenizer + { + private: + + template > + class tokenizer_iterator : public std::iterator + { + protected: + + typedef Iterator iterator; + typedef const iterator const_iterator; + typedef typename std::pair range_type; + + public: + + explicit inline tokenizer_iterator(const iterator begin, + const iterator end, + const Predicate& predicate, + const tokenize_options::type tokenize_option = tokenize_options::default_mode) + : predicate_(predicate), + end_(end), + range_(begin,begin), + current_token_(end,end), + compress_delimiters_(tokenize_options::perform_compress_delimiters(tokenize_option)), + include_1st_delimiter_(tokenize_options::perform_include_1st_delimiter(tokenize_option)), + include_all_delimiters_(tokenize_options::perform_include_all_delimiters(tokenize_option)), + include_delimiters_(include_1st_delimiter_ || include_all_delimiters_), + last_token_done_(false) + { + if (end != begin) + { + this->operator++(); + } + } + + inline tokenizer_iterator& operator++() + { + if (last_token_done_) + { + range_.first = range_.second; + return (*this); + } + else if (end_ != range_.second) + { + range_.first = range_.second; + } + + while (end_ != range_.second) + { + if (predicate_(*(range_.second))) + { + if (include_delimiters_) + { + if (include_1st_delimiter_) + ++range_.second; + else if (include_all_delimiters_) + while ((end_ != range_.second) && predicate_(*(range_.second))) ++range_.second; + current_token_ = range_; + if ((!include_all_delimiters_) && compress_delimiters_) + while ((end_ != range_.second) && predicate_(*(range_.second))) ++range_.second; + } + else + { + current_token_ = range_; + if (compress_delimiters_) + while ((end_ != (++range_.second)) && predicate_(*(range_.second))) ; + else + ++range_.second; + } + + return (*this); + } + else + ++range_.second; + } + + if (range_.first != range_.second) + { + current_token_.second = range_.second; + if (!last_token_done_) + { + if (predicate_(*(range_.second - 1))) + current_token_.first = range_.second; + else + current_token_.first = range_.first; + last_token_done_ = true; + } + else + range_.first = range_.second; + } + + return (*this); + } + + inline tokenizer_iterator operator++(int) + { + tokenizer_iterator tmp = (*this); + this->operator++(); + return tmp; + } + + inline tokenizer_iterator& operator+=(const int inc) + { + if (inc > 0) + { + for (int i = 0; i < inc; ++i, ++(*this)) ; + } + + return (*this); + } + + inline T operator*() const + { + return current_token_; + } + + inline std::string as_string() const + { + return std::string(current_token_.first,current_token_.second); + } + + inline bool operator==(const tokenizer_iterator& itr) const + { + return (range_ == itr.range_) && (end_ == itr.end_); + } + + inline bool operator!=(const tokenizer_iterator& itr) const + { + return (range_ != itr.range_) || (end_ != itr.end_); + } + + inline tokenizer_iterator& operator=(const tokenizer_iterator& itr) + { + if (this != &itr) + { + range_ = itr.range_; + current_token_ = itr.current_token_; + end_ = itr.end_; + compress_delimiters_ = itr.compress_delimiters_; + include_1st_delimiter_ = itr.include_1st_delimiter_; + include_all_delimiters_ = itr.include_all_delimiters_; + include_delimiters_ = itr.include_delimiters_; + last_token_done_ = itr.last_token_done_; + } + + return (*this); + } + + inline std::string remaining() const + { + return std::string(current_token_.first,end_); + } + + protected: + + const Predicate& predicate_; + iterator end_; + range_type range_; + range_type current_token_; + bool compress_delimiters_; + bool include_1st_delimiter_; + bool include_all_delimiters_; + bool include_delimiters_; + bool last_token_done_; + }; + + public: + + typedef typename std::iterator_traits::value_type value_type; + typedef DelimiterPredicate predicate; + typedef tokenizer_iterator iterator; + typedef const iterator const_iterator; + typedef iterator& iterator_ref; + typedef const_iterator& const_iterator_ref; + + inline tokenizer(const Iterator begin, + const Iterator end, + const DelimiterPredicate& predicate, + const tokenize_options::type tokenize_options = tokenize_options::default_mode) + : tokenize_options_(tokenize_options), + predicate_(predicate), + begin_(begin), + end_(end), + begin_itr_(begin_, end_, predicate_, tokenize_options_), + end_itr_(end_, end_, predicate_, tokenize_options_) + {} + + inline tokenizer(const std::string& s, + const DelimiterPredicate& predicate, + const tokenize_options::type tokenize_options = tokenize_options::default_mode) + : tokenize_options_(tokenize_options), + predicate_(predicate), + begin_(to_ptr(s)), + end_(to_ptr(s) + s.size()), + begin_itr_(begin_, end_, predicate_, tokenize_options_), + end_itr_(end_, end_, predicate_, tokenize_options_) + {} + + inline tokenizer& operator=(const tokenizer& t) + { + if (this != &t) + { + begin_ = t.begin_; + end_ = t.end_; + end_itr_ = t.end_itr_; + begin_itr_ = t.begin_itr_; + tokenize_options_ = t.tokenize_options_; + } + + return (*this); + } + + inline void assign(const std::string& s) const + { + assign(to_ptr(s), to_ptr(s) + s.size()); + } + + inline void assign(const std::string& s) + { + assign(to_ptr(s), to_ptr(s) + s.size()); + } + + inline void assign(const Iterator begin, const Iterator end) + { + begin_ = begin; + end_ = end; + begin_itr_ = iterator(begin_,end_,predicate_,tokenize_options_); + end_itr_ = iterator(end_ ,end_,predicate_,tokenize_options_); + } + + inline const_iterator_ref begin() const + { + return begin_itr_; + } + + inline const_iterator_ref end() const + { + return end_itr_; + } + + private: + + tokenize_options::type tokenize_options_; + const DelimiterPredicate& predicate_; + Iterator begin_; + Iterator end_; + iterator begin_itr_; + iterator end_itr_; + }; + + namespace std_string + { + template > + struct tokenizer + { + typedef DelimiterPredicate predicate_type; + typedef const std::string::value_type* string_iterator_type; + typedef strtk::tokenizer type; + typedef strtk::tokenizer md_type; + typedef std::pair iterator_type; + }; + + typedef tokenizer<>::iterator_type iterator_type; + typedef tokenizer<>::iterator_type range_t; + + typedef std::vector token_vector_type; + typedef std::deque token_deque_type; + typedef std::list token_list_type; + + } // namespace std_string + + template + class range_to_type_back_inserter_iterator : public std::iterator + { + public: + + typedef typename Sequence::value_type value_type; + + explicit inline range_to_type_back_inserter_iterator(Sequence& sequence) + : sequence_(sequence) + {} + + range_to_type_back_inserter_iterator(const range_to_type_back_inserter_iterator& itr) + : sequence_(itr.sequence_) + {} + + inline range_to_type_back_inserter_iterator& operator=(const range_to_type_back_inserter_iterator& itr) + { + if (this != &itr) + { + this->sequence_ = itr.sequence_; + } + + return (*this); + } + + template + inline range_to_type_back_inserter_iterator& operator=(const std::pair& r) + { + value_type t; + + if (string_to_type_converter(r.first,r.second,t)) + sequence_.push_back(t); + + return (*this); + } + + inline range_to_type_back_inserter_iterator& operator=(const std::string& s) + { + value_type t; + + if (string_to_type_converter(to_ptr(s), to_ptr(s) + s.size(),t)) + sequence_.push_back(t); + + return (*this); + } + + template + inline void operator()(const std::pair& r) const + { + value_type t; + + if (string_to_type_converter(r.first,r.second,t)) + sequence_.push_back(t); + } + + template + inline void operator()(const Iterator begin, const Iterator end) + { + sequence_.push_back(string_to_type_converter(begin,end)); + } + + inline range_to_type_back_inserter_iterator& operator*() + { + return (*this); + } + + inline range_to_type_back_inserter_iterator& operator++() + { + return (*this); + } + + inline range_to_type_back_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + Sequence& sequence_; + }; + + template + inline range_to_type_back_inserter_iterator range_to_type_back_inserter(Sequence& sequence) + { + return (range_to_type_back_inserter_iterator(sequence)); + } + + template + class range_to_type_inserter_iterator : public std::iterator + { + public: + + typedef typename Set::value_type value_type; + + explicit inline range_to_type_inserter_iterator(Set& set) + : set_(set) + {} + + range_to_type_inserter_iterator(const range_to_type_inserter_iterator& itr) + : set_(itr.set_) + {} + + inline range_to_type_inserter_iterator& operator=(const range_to_type_inserter_iterator& itr) + { + if (this != &itr) + { + this->set_ = itr.set_; + } + + return (*this); + } + + template + inline range_to_type_inserter_iterator& operator=(const std::pair& r) + { + value_type t; + if (string_to_type_converter(r.first,r.second,t)) + set_.insert(t); + + return (*this); + } + + template + inline void operator()(const std::pair& r) + { + value_type t; + if (string_to_type_converter(r.first,r.second,t)) + set_.insert(t); + } + + inline range_to_type_inserter_iterator& operator*() + { + return (*this); + } + + inline range_to_type_inserter_iterator& operator++() + { + return (*this); + } + + inline range_to_type_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + Set& set_; + }; + + template + inline range_to_type_inserter_iterator range_to_type_inserter(Set& set) + { + return (range_to_type_inserter_iterator(set)); + } + + template + class range_to_type_push_inserter_iterator : public std::iterator + { + public: + + typedef typename Container::value_type value_type; + + explicit inline range_to_type_push_inserter_iterator(Container& container) + : container_(container) + {} + + range_to_type_push_inserter_iterator(const range_to_type_push_inserter_iterator& itr) + : container_(itr.container_) + {} + + inline range_to_type_push_inserter_iterator& operator=(const range_to_type_push_inserter_iterator& itr) + { + if (this != &itr) + { + this->container_ = itr.container_; + } + return (*this); + } + + template + inline range_to_type_push_inserter_iterator& operator=(const std::pair& r) + { + value_type t; + + if (string_to_type_converter(r.first,r.second,t)) + container_.push(t); + + return (*this); + } + + template + inline void operator()(const std::pair& r) + { + value_type t; + if (string_to_type_converter(r.first,r.second,t)) + container_.push(t); + } + + inline range_to_type_push_inserter_iterator& operator*() + { + return (*this); + } + + inline range_to_type_push_inserter_iterator& operator++() + { + return (*this); + } + + inline range_to_type_push_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + Container& container_; + }; + + template + inline range_to_type_push_inserter_iterator range_to_type_push_inserter(Container& container) + { + return (range_to_type_push_inserter_iterator(container)); + } + + template + class back_inserter_with_valuetype_iterator : public std::iterator + { + public: + + explicit inline back_inserter_with_valuetype_iterator(Sequence& sequence) + : sequence_(sequence) + {} + + back_inserter_with_valuetype_iterator(const back_inserter_with_valuetype_iterator& itr) + : sequence_(itr.sequence_) + {} + + inline back_inserter_with_valuetype_iterator& operator=(const back_inserter_with_valuetype_iterator& itr) + { + if (this != &itr) + { + this->sequence_ = itr.sequence_; + } + return (*this); + } + + inline back_inserter_with_valuetype_iterator& operator=(const typename Sequence::value_type& v) + { + sequence_.push_back(v); + return (*this); + } + + inline void operator()(const typename Sequence::value_type& v) + { + sequence_.push_back(v); + } + + inline back_inserter_with_valuetype_iterator& operator*() + { + return (*this); + } + + inline back_inserter_with_valuetype_iterator& operator++() + { + return (*this); + } + + inline back_inserter_with_valuetype_iterator operator++(int) + { + return (*this); + } + + private: + + Sequence& sequence_; + }; + + template + inline back_inserter_with_valuetype_iterator back_inserter_with_valuetype(Sequence& sequence_) + { + return (back_inserter_with_valuetype_iterator(sequence_)); + } + + template + class inserter_with_valuetype_iterator : public std::iterator + { + public: + + explicit inline inserter_with_valuetype_iterator(Set& set) + : set_(set) + {} + + inserter_with_valuetype_iterator(const inserter_with_valuetype_iterator& itr) + : set_(itr.set_) + {} + + inline inserter_with_valuetype_iterator& operator=(const inserter_with_valuetype_iterator& itr) + { + if (this != &itr) + { + this->set_ = itr.set_; + } + + return (*this); + } + + inline inserter_with_valuetype_iterator& operator=(const typename Set::value_type& v) + { + set_.insert(v); + return (*this); + } + + inline void operator()(const typename Set::value_type& v) + { + set_.insert(v); + } + + inline inserter_with_valuetype_iterator& operator*() + { + return (*this); + } + + inline inserter_with_valuetype_iterator& operator++() + { + return (*this); + } + + inline inserter_with_valuetype_iterator operator++(int) + { + return (*this); + } + + private: + + Set& set_; + }; + + template + inline inserter_with_valuetype_iterator inserter_with_valuetype(Set& set_) + { + return (inserter_with_valuetype_iterator(set_)); + } + + template + class push_inserter_iterator : public std::iterator + { + public: + + explicit inline push_inserter_iterator(Container& container) + : container_(container) + {} + + inline push_inserter_iterator& operator=(const push_inserter_iterator& itr) + { + if (this != &itr) + { + this->container_ = itr.container_; + } + + return (*this); + } + + inline push_inserter_iterator& operator=(typename Container::const_reference v) + { + container_.push(v); + return (*this); + } + + inline push_inserter_iterator& operator*() + { + return (*this); + } + + inline push_inserter_iterator& operator++() + { + return (*this); + } + + inline push_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + Container& container_; + }; + + template + inline push_inserter_iterator push_inserter(Container& c) + { + return push_inserter_iterator(c); + } + + template + class range_to_ptr_type_iterator : public std::iterator + { + public: + + typedef T value_type; + + explicit inline range_to_ptr_type_iterator(T* pointer, std::size_t& insert_count) + : pointer_(pointer), + insert_count_(insert_count) + {} + + range_to_ptr_type_iterator(const range_to_ptr_type_iterator& itr) + : pointer_(itr.pointer_) + {} + + inline range_to_ptr_type_iterator& operator=(const range_to_ptr_type_iterator& itr) + { + if (this != &itr) + { + this->pointer_ = itr.pointer_; + } + + return (*this); + } + + template + inline range_to_ptr_type_iterator& operator=(const std::pair& r) + { + value_type t = value_type(); + + if (string_to_type_converter(r.first,r.second,t)) + { + (*pointer_) = t; + ++pointer_; + ++insert_count_; + } + + return (*this); + } + + inline range_to_ptr_type_iterator& operator=(const std::string& s) + { + value_type t = value_type(); + + if (string_to_type_converter(to_ptr(s), to_ptr(s) + s.size(),t)) + { + (*pointer_) = t; + ++pointer_; + ++insert_count_; + } + + return (*this); + } + + template + inline void operator()(const std::pair& r) const + { + value_type t; + if (string_to_type_converter(r.first,r.second,t)) + { + (*pointer_) = t; + ++pointer_; + ++insert_count_; + } + } + + template + inline void operator()(const Iterator begin, const Iterator end) + { + (*pointer_) = string_to_type_converter(begin,end); + ++pointer_; + ++insert_count_; + } + + inline range_to_ptr_type_iterator& operator*() + { + return (*this); + } + + inline range_to_ptr_type_iterator& operator++() + { + return (*this); + } + + inline range_to_ptr_type_iterator operator++(int) + { + return (*this); + } + + private: + + T* pointer_; + std::size_t& insert_count_; + }; + + template + inline range_to_ptr_type_iterator range_to_ptr_type(T* pointer, std::size_t& insert_count) + { + return (range_to_ptr_type_iterator(pointer,insert_count)); + } + + template + inline range_to_ptr_type_iterator range_to_ptr_type(T* pointer) + { + static std::size_t insert_count = 0; + return (range_to_ptr_type_iterator(pointer,insert_count)); + } + + template + class counting_back_inserter_iterator : public std::iterator + { + public: + + explicit inline counting_back_inserter_iterator(std::size_t& counter) + : counter_(counter) + {} + + counting_back_inserter_iterator(const counting_back_inserter_iterator& itr) + : counter_(itr.counter_) + {} + + inline counting_back_inserter_iterator& operator=(const counting_back_inserter_iterator& itr) + { + if (this != &itr) + { + this->counter_ = itr.counter_; + } + + return (*this); + } + + inline counting_back_inserter_iterator& operator=(const T&) + { + ++counter_; + return (*this); + } + + inline void operator()(const T&) + { + ++counter_; + } + + inline counting_back_inserter_iterator& operator*() + { + return (*this); + } + + inline counting_back_inserter_iterator& operator++() + { + return (*this); + } + + inline counting_back_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + std::size_t& counter_; + }; + + template + inline counting_back_inserter_iterator counting_back_inserter(std::size_t& counter_) + { + return (counting_back_inserter_iterator(counter_)); + } + + template + class functional_inserter_iterator : public std::iterator + { + public: + + explicit inline functional_inserter_iterator(Function function) + : function_(function) + {} + + functional_inserter_iterator(const functional_inserter_iterator& itr) + : function_(itr.function_) + {} + + inline functional_inserter_iterator& operator=(const functional_inserter_iterator& itr) + { + if (this != &itr) + { + this->function_ = itr.function_; + } + + return (*this); + } + + template + inline functional_inserter_iterator& operator=(const T& t) + { + function_(t); + return (*this); + } + + template + inline void operator()(const T& t) + { + function_(t); + } + + inline functional_inserter_iterator& operator*() + { + return (*this); + } + + inline functional_inserter_iterator& operator++() + { + return (*this); + } + + inline functional_inserter_iterator operator++(int) + { + return (*this); + } + + private: + + Function function_; + }; + + template + inline functional_inserter_iterator functional_inserter(Function function) + { + return (functional_inserter_iterator(function)); + } + + namespace split_options + { + typedef std::size_t type; + enum + { + default_mode = 0, + compress_delimiters = 1, + include_1st_delimiter = 2, + include_all_delimiters = 4 + }; + + static inline bool perform_compress_delimiters(const type& split_opt) + { + return compress_delimiters == (split_opt & compress_delimiters); + } + + static inline bool perform_include_1st_delimiter(const type& split_opt) + { + return include_1st_delimiter == (split_opt & include_1st_delimiter); + } + + static inline bool perform_include_all_delimiters(const type& split_opt) + { + return include_all_delimiters == (split_opt & include_all_delimiters); + } + + } // namespace split_options + + namespace details + { + template + inline std::size_t split_compress_delimiters(const DelimiterPredicate& delimiter, + const Iterator begin, + const Iterator end, + OutputIterator out) + { + std::size_t token_count = 0; + std::pair range(begin,begin); + + while (end != range.second) + { + if (delimiter(*range.second)) + { + (*out) = range; + ++out; + while ((end != ++range.second) && delimiter(*range.second)); + range.first = range.second; + if (end != range.second) + ++range.second; + ++token_count; + } + else + ++range.second; + } + + if ((range.first != range.second) || delimiter(*(range.second - 1))) + { + (*out) = range; + ++out; + ++token_count; + } + + return token_count; + } + } + + template + inline std::size_t split(const DelimiterPredicate& delimiter, + const Iterator begin, + const Iterator end, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) + { + if (begin == end) return 0; + + const bool compress_delimiters = split_options::perform_compress_delimiters(split_option); + const bool include_1st_delimiter = split_options::perform_include_1st_delimiter(split_option); + const bool include_all_delimiters = (!include_1st_delimiter) && split_options::perform_include_all_delimiters(split_option); + const bool include_delimiters = include_1st_delimiter || include_all_delimiters; + + if (compress_delimiters && (!include_delimiters)) + { + return details::split_compress_delimiters(delimiter,begin,end,out); + } + + std::size_t token_count = 0; + std::pair range(begin,begin); + + while (end != range.second) + { + if (delimiter(*range.second)) + { + if (include_delimiters) + { + if (include_1st_delimiter) + ++range.second; + else if (include_all_delimiters) + while ((end != range.second) && delimiter(*range.second)) ++range.second; + (*out) = range; + ++out; + if ((!include_all_delimiters) && compress_delimiters) + while ((end != range.second) && delimiter(*range.second)) ++range.second; + } + else + { + (*out) = range; + ++out; + ++range.second; + } + ++token_count; + range.first = range.second; + } + else + ++range.second; + } + + if ((range.first != range.second) || delimiter(*(range.second - 1))) + { + (*out) = range; + ++out; + ++token_count; + } + + return token_count; + } + + template + inline std::size_t split(const DelimiterPredicate& delimiter, + const std::pair& range, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) + { + return split(delimiter, + range.first,range.second, + out, + split_option); + } + + template + inline std::size_t split(const char* delimiters, + const std::pair& range, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) + { + if (1 == details::strnlength(delimiters,256)) + return split(single_delimiter_predicate(delimiters[0]), + range.first,range.second, + out, + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + range.first,range.second, + out, + split_option); + } + + template + inline std::size_t split(const std::string& delimiters, + const std::pair& range, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) + { + if (1 == delimiters.size()) + return split(single_delimiter_predicate(delimiters[0]), + range.first,range.second, + out, + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + range.first,range.second, + out, + split_option); + } + + template + inline std::size_t split(const char* delimiters, + const std::string& str, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + if (1 == details::strnlength(delimiters,256)) + return split(single_delimiter_predicate(delimiters[0]), + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + } + + template + inline std::size_t split(const std::string& delimiters, + const std::string& str, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + if (1 == delimiters.size()) + return split(single_delimiter_predicate(delimiters[0]), + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + } + + template + inline std::size_t split(const std::string::value_type delimiter, + const std::string& str, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + return split(single_delimiter_predicate(delimiter), + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + } + + template class Sequence> + inline std::size_t split(const char* delimiters, + const std::string& str, + Sequence,Allocator>& sequence, + const split_options::type& split_option = split_options::default_mode) + { + if (1 == details::strnlength(delimiters,256)) + return split(single_delimiter_predicate(delimiters[0]), + to_ptr(str), to_ptr(str) + str.size(), + std::back_inserter(sequence), + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + std::back_inserter(sequence), + split_option); + } + + template class Sequence> + inline std::size_t split(const std::string& delimiters, + const std::string& str, + Sequence,Allocator>& sequence, + const split_options::type& split_option = split_options::default_mode) + { + if (1 == delimiters.size()) + return split(single_delimiter_predicate(delimiters[0]), + to_ptr(str), to_ptr(str) + str.size(), + std::back_inserter(sequence), + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + std::back_inserter(sequence), + split_option); + } + + template + inline std::size_t split(const DelimiterPredicate& delimiter, + const std::string& str, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + return split(delimiter, + to_ptr(str), to_ptr(str) + str.size(), + out, + split_option); + } + + template + inline std::size_t split_n(const DelimiterPredicate& delimiter, + const Iterator begin, + const Iterator end, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + if (0 == token_count) return 0; + + if (begin == end) return 0; + + std::size_t match_count = 0; + std::pair range(begin,begin); + + const bool compress_delimiters = split_options::perform_compress_delimiters(split_option); + const bool include_1st_delimiter = split_options::perform_include_1st_delimiter(split_option); + const bool include_all_delimiters = (!include_1st_delimiter) && split_options::perform_include_all_delimiters(split_option); + const bool include_delimiters = include_1st_delimiter || include_all_delimiters; + + while (end != range.second) + { + if (delimiter(*range.second)) + { + if (include_delimiters) + { + ++range.second; + (*out) = range; + ++out; + + if (++match_count >= token_count) + return match_count; + + if (compress_delimiters) + while ((end != range.second) && delimiter(*range.second)) ++range.second; + } + else + { + (*out) = range; + ++out; + + if (++match_count >= token_count) + return match_count; + + if (compress_delimiters) + while ((end != (++range.second)) && delimiter(*range.second)) ; + else + ++range.second; + } + + range.first = range.second; + } + else + ++range.second; + } + + if ((range.first != range.second) || delimiter(*(range.second - 1))) + { + (*out) = range; + ++out; + ++match_count; + } + + return match_count; + } + + template + inline std::size_t split_n(const char* delimiters, + const std::string& str, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + return split_n(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + token_count, + out, + split_option); + } + + template + inline std::size_t split_n(const std::string& delimiters, + const std::string& str, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + if (1 == delimiters.size()) + return split_n(single_delimiter_predicate(delimiters[0]), + to_ptr(str), to_ptr(str) + str.size(), + token_count, + out, + split_option); + else + return split_n(multiple_char_delimiter_predicate(delimiters), + to_ptr(str), to_ptr(str) + str.size(), + token_count, + out, + split_option); + } + + template + inline std::size_t split_n(const std::string& delimiters, + const InputIterator begin, + const InputIterator end, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + if (1 == delimiters.size()) + return split_n(single_delimiter_predicate(delimiters[0]), + begin,end, + token_count, + out, + split_option); + else + return split_n(multiple_char_delimiter_predicate(delimiters), + begin,end, + token_count, + out, + split_option); + } + + template + inline std::size_t split_n(const std::string::value_type delimiter, + const std::string& str, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + return split_n(single_delimiter_predicate(delimiter), + to_ptr(str), to_ptr(str) + str.size(), + token_count, + out, + split_option); + } + + template + inline std::size_t split_n(const DelimiterPredicate& delimiter, + const std::string& str, + const std::size_t& token_count, + OutputIterator out, + const split_options::type& split_option = split_options::default_mode) + { + return split_n(delimiter, + to_ptr(str), to_ptr(str) + str.size(), + token_count, + out, + split_option); + } + + #ifdef strtk_enable_regex + + static const std::string uri_expression ("((https?|ftp)\\://((\\[?(\\d{1,3}\\.){3}\\d{1,3}\\]?)|(([-a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4}))(\\:\\d+)?(/[-a-zA-Z0-9._?,+&%$#=~\\\\]+)*/?)"); + static const std::string email_expression ("([\\w\\-\\.]+)@((\\[([0-9]{1,3}\\.){3}[0-9]{1,3}\\])|(([\\w\\-]+\\.)+)([a-zA-Z]{2,4}))"); + static const std::string ip_expression ("(([0-2]*[0-9]+[0-9]+)\\.([0-2]*[0-9]+[0-9]+)\\.([0-2]*[0-9]+[0-9]+)\\.([0-2]*[0-9]+[0-9]+))"); + static const std::string ieee754_expression ("([-+]?((\\.[0-9]+|[0-9]+\\.[0-9]+)([eE][-+][0-9]+)?|[0-9]+))"); + + namespace regex_match_mode + { + enum type + { + match_all = 0, + match_1 = 1, + match_2 = 2, + match_3 = 3, + match_4 = 4, + match_5 = 5, + match_6 = 6, + match_7 = 7, + match_8 = 8, + match_9 = 9 + }; + } + + template + inline std::size_t split_regex(const boost::regex& delimiter_expression, + const InputIterator begin, + const InputIterator end, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + boost::regex_iterator itr(begin,end,delimiter_expression); + boost::regex_iterator itr_end; + std::pair range(begin,begin); + std::size_t match_count = 0; + + while (itr_end != itr) + { + range.first = (*itr)[mode].first; + range.second = (*itr)[mode].second; + (*out) = range; + ++out; + ++itr; + ++match_count; + } + + return match_count; + } + + template + inline std::size_t split_regex(const std::string& delimiter_expression, + const InputIterator begin, + const InputIterator end, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + const boost::regex regex_expression(delimiter_expression); + return split_regex(regex_expression, + begin,end, + out, + mode); + } + + template + inline std::size_t split_regex(const std::string& delimiter_expression, + const std::string& text, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + return split_regex(delimiter_expression, + text.begin(),text.end(), + out, + mode); + } + + template + inline std::size_t split_regex(const boost::regex& delimiter_expression, + const std::string& text, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + return split_regex(delimiter_expression, + text.begin(),text.end(), + out, + mode); + } + + template + inline std::size_t split_regex_n(const boost::regex& delimiter_expression, + const InputIterator begin, + const InputIterator end, + const std::size_t& token_count, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + boost::sregex_iterator itr(begin,end,delimiter_expression); + const boost::sregex_iterator itr_end; + std::pair range(begin,begin); + std::size_t match_count = 0; + + while (itr_end != itr) + { + range.first = (*itr)[mode].first; + range.second = (*itr)[mode].second; + (*out) = range; + ++out; + ++itr; + + if (++match_count >= token_count) + return match_count; + } + + return match_count; + } + + template + inline std::size_t split_regex_n(const std::string& delimiter_expression, + const InputIterator begin, + const InputIterator end, + const std::size_t& token_count, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + const boost::regex regex_expression(delimiter_expression); + return split_regex_n(regex_expression, + begin,end, + token_count, + out, + mode); + } + + template + inline std::size_t split_regex_n(const std::string& delimiter_expression, + const std::string& text, + const std::size_t& token_count, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + return split_regex_n(delimiter_expression, + text.begin(),text.end(), + token_count, + out, + mode); + } + + template + inline std::size_t split_regex_n(const boost::regex& delimiter_expression, + const std::string& text, + const std::size_t& token_count, + OutputIterator out, + const regex_match_mode::type mode = regex_match_mode::match_all) + { + return split_regex_n(delimiter_expression, + text.begin(),text.end(), + token_count, + out, + mode); + } + + #endif // strtk_enable_regex + + template + class offset_predicate + { + public: + + offset_predicate(const int offset_list[], const bool rotate = false) + : rotate_(rotate), + current_index_(0) + { + std::copy(offset_list, offset_list + offset_list_size, offset_list_); + offset_list_[offset_list_size] = 0; + } + + inline bool operator!() const + { + return (0 == offset_list_size); + } + + inline void reset() const + { + current_index_ = 0; + } + + inline std::size_t size() const + { + return offset_list_size; + } + + inline int next() const + { + int result = offset_list_[current_index_++]; + + if (rotate_ && (current_index_ >= offset_list_size)) + { + current_index_ = 0; + } + + return result; + } + + private: + + bool rotate_; + mutable std::size_t current_index_; + int offset_list_[offset_list_size + 1]; + }; + + inline offset_predicate<12> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const int& v8, const int& v9, + const int& v10, const int& v11, const int& v12, + const bool& rotate = false) + { + const int offset_list[12] = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12 }; + return offset_predicate<12>(offset_list,rotate); + } + + inline offset_predicate<11> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const int& v8, const int& v9, + const int& v10, const int& v11, + const bool& rotate = false) + { + const int offset_list[11] = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11 }; + return offset_predicate<11>(offset_list,rotate); + } + + inline offset_predicate<10> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const int& v8, const int& v9, + const int& v10, const bool& rotate = false) + { + const int offset_list[10] = { v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 }; + return offset_predicate<10>(offset_list,rotate); + } + + inline offset_predicate<9> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const int& v8, const int& v9, + const bool& rotate = false) + { + const int offset_list[9] = { v1, v2, v3, v4, v5, v6, v7, v8, v9 }; + return offset_predicate<9>(offset_list,rotate); + } + + inline offset_predicate<8> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const int& v8, const bool& rotate = false) + { + const int offset_list[8] = { v1, v2, v3, v4, v5, v6, v7, v8 }; + return offset_predicate<8>(offset_list,rotate); + } + + inline offset_predicate<7> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const int& v7, const bool& rotate = false) + { + const int offset_list[7] = { v1, v2, v3, v4, v5, v6, v7 }; + return offset_predicate<7>(offset_list,rotate); + } + + inline offset_predicate<6> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const int& v6, + const bool& rotate = false) + { + const int offset_list[6] = { v1, v2, v3, v4, v5, v6 }; + return offset_predicate<6>(offset_list,rotate); + } + + inline offset_predicate<5> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const int& v5, const bool& rotate = false) + { + const int offset_list[5] = { v1, v2, v3, v4, v5 }; + return offset_predicate<5>(offset_list,rotate); + } + + inline offset_predicate<4> offsets(const int& v1, const int& v2, const int& v3, + const int& v4, const bool& rotate = false) + { + const int offset_list[4] = { v1, v2, v3, v4 }; + return offset_predicate<4>(offset_list,rotate); + } + + inline offset_predicate<3> offsets(const int& v1, const int& v2, const int& v3, + const bool& rotate = false) + { + const int offset_list[3] = { v1, v2, v3 }; + return offset_predicate<3>(offset_list,rotate); + } + + inline offset_predicate<2> offsets(const int& v1, const int& v2, const bool& rotate = false) + { + const int offset_list[2] = { v1, v2 }; + return offset_predicate<2>(offset_list,rotate); + } + + inline offset_predicate<1> offsets(const int& v1, + const bool& rotate = false) + { + const int offset_list[1] = { v1 }; + return offset_predicate<1>(offset_list,rotate); + } + + template + inline std::size_t offset_splitter(const InputIterator begin, + const InputIterator end, + const OffsetPredicate& offset, + OutputIterator out) + { + std::size_t length = 0; + + if (0 == (length = std::distance(begin,end))) return 0; + + std::pair range(begin,begin); + std::size_t match_count = 0; + int offset_length = 0; + std::size_t increment_amount = 0; + + while ((end != range.second) && (0 < (offset_length = offset.next()))) + { + increment_amount = std::min(length,offset_length); + range.first = range.second; + range.second += increment_amount; + length -= increment_amount; + (*out) = range; + ++out; + ++match_count; + } + + return match_count; + } + + template + inline std::size_t offset_splitter(const std::string& str, + const OffsetPredicate& offset, + OutputIterator out) + { + return offset_splitter(to_ptr(str), to_ptr(str) + str.size(), offset, out); + } + + template + inline bool split_pair(const InputIterator begin, + const InputIterator end, + const Predicate& delimiter, + OutputPair& v1, + OutputPair& v2) + { + if (0 == std::distance(begin,end)) return false; + + InputIterator itr = begin; + + while (end != itr) + { + if (delimiter(*itr)) + { + v1 = std::make_pair(begin,itr); + ++itr; + if (0 != std::distance(itr,end)) + { + v2 = std::make_pair(itr,end); + return true; + } + else + return false; + } + else + ++itr; + } + + return false; + } + + inline bool split_pair(const std::string::value_type delimiter, + const std::string& str, + std::pair& v1, + std::pair& v2) + { + return split_pair(to_ptr(str), to_ptr(str) + str.size(), + single_delimiter_predicate(delimiter), + v1, + v2); + } + + template + inline bool split_pair(const DelimiterPredicate& delimiter, + const std::string& str, + std::pair& v1, + std::pair& v2) + { + return split_pair(to_ptr(str), to_ptr(str) + str.size(), + delimiter, + v1, + v2); + } + + template + inline std::size_t for_each_token(const std::string& buffer, + const std::string& delimiters, + Function function) + { + return split(delimiters, + buffer, + strtk::functional_inserter(function)); + } + + template + inline std::size_t for_each_token(const std::string& buffer, + const char* delimiters, + Function function) + { + return split(delimiters, + buffer, + strtk::functional_inserter(function)); + } + + template + inline std::size_t count_consecutive_duplicates(const InputIterator begin, const InputIterator end) + { + if (std::distance(begin,end) < 2) return 0; + + InputIterator prev = begin; + InputIterator itr = begin; + std::size_t count = 0; + + while (end != ++itr) + { + if ((*prev) == (*itr)) + ++count; + else + prev = itr; + } + + return count; + } + + template class Sequence> + inline T min_of_cont(const Sequence& sequence) + { + return (*std::min_element(sequence.begin(),sequence.end())); + } + + template + inline T min_of_cont(const std::set& set) + { + return (*set.begin()); + } + + template + inline T min_of_cont(const std::multiset& multiset) + { + return (*multiset.begin()); + } + + template class Sequence> + inline T max_of_cont(const Sequence& sequence) + { + return (*std::max_element(sequence.begin(),sequence.end())); + } + + template + inline T max_of_cont(const std::set& set) + { + return (*set.rbegin()); + } + + template + inline T max_of_cont(const std::multiset& multiset) + { + return (*multiset.rbegin()); + } + + template + inline void min_max_of_range(const InputIterator begin, const InputIterator end, + typename std::iterator_traits::value_type& min_value, + typename std::iterator_traits::value_type& max_value) + { + min_value = *begin; + max_value = *begin; + InputIterator itr = begin; + while (end != ++itr) + { + if (*itr < min_value) + min_value = (*itr); + else if (*itr > max_value) + max_value = (*itr); + } + } + + template class Sequence> + inline void min_max_of_cont(const Sequence& sequence, + T& min_value, + T& max_value) + { + min_max_of_range(sequence.begin(),sequence.end(), + min_value, + max_value); + } + + template + inline void min_max_of_cont(const std::set& set, + T& min_value, + T& max_value) + { + min_value = (*set.begin()); + max_value = (*set.rbegin()); + } + + template + inline void min_max_of_cont(const std::multiset& multiset, + T& min_value, + T& max_value) + { + min_value = (*multiset.begin()); + max_value = (*multiset.rbegin()); + } + + template + inline void lexicographically_canonicalize(Iterator begin, Iterator end) + { + typedef typename std::iterator_traits::value_type type; + typedef typename std::pair iter_type; + typedef typename std::list itr_list_type; + itr_list_type itr_list; + + type smallest = (*std::min_element(begin,end)); + + for (Iterator itr = begin; itr != end; ++itr) + { + if (*itr == smallest) itr_list.push_back(std::make_pair(itr,itr)); + } + + while (itr_list.size() > 1) + { + typename itr_list_type::iterator itr = itr_list.begin(); + while (itr_list.end() != itr) + { + ++(*itr).first; + if (end == (*itr).first) + itr = itr_list.erase(itr); + else + ++itr; + } + + smallest = *(*itr_list.begin()).first; + + for (itr = (++itr_list.begin()); itr != itr_list.end(); ++itr) + { + if (*(*itr).first < smallest) + { + smallest = *(*itr).first; + } + } + + itr = itr_list.begin(); + while (itr_list.end() != itr) + { + if (*(*itr).first != smallest) + itr = itr_list.erase(itr); + else + ++itr; + } + + itr = itr_list.begin(); + while (itr_list.end() != itr) + { + if (end == (*itr).first) + itr = itr_list.erase(itr); + else + ++itr; + } + } + + std::rotate(begin,(*itr_list.begin()).second,end); + } + + inline void lexicographically_canonicalize(std::string& str) + { + lexicographically_canonicalize(const_cast(to_ptr(str)), + const_cast(to_ptr(str) + str.size())); + } + + template class Sequence> + inline void lexicographically_canonicalize(Sequence& sequence) + { + lexicographically_canonicalize(sequence.begin(), sequence.end()); + } + + inline const char* first_non_repeated_char(const char* begin, const char* end) + { + static const std::size_t lut_size = 256; + unsigned long long int lut[lut_size]; + + std::fill_n(lut,lut_size,std::numeric_limits::max()); + + static const unsigned long long int not_yet_encountered = std::numeric_limits::max(); + static const unsigned long long int repeated = not_yet_encountered - 1; + + const char* itr = begin; + unsigned long long int position = 0; + + while (end != itr) + { + unsigned long long int& element = lut[static_cast(*itr)]; + + if (not_yet_encountered == element) + { + element = position; + } + else if (element < repeated) + { + element = repeated; + } + ++itr; + ++position; + } + + position = repeated; + + for (std::size_t i = 0; i < lut_size; ++i) + { + if (lut[i] < position) + position = lut[i]; + } + + return (repeated != position) ? (begin + position) : end; + } + + inline const unsigned char* first_non_repeated_char(const unsigned char* begin, const unsigned char* end) + { + char * b = reinterpret_cast(const_cast(begin)); + char * e = reinterpret_cast(const_cast(end)); + + return const_cast(reinterpret_cast(const_cast(first_non_repeated_char(b,e)))); + } + + inline std::size_t first_non_repeated_char(const std::string& str) + { + if (str.empty()) + return static_cast(std::string::npos); + + const char* itr = first_non_repeated_char(to_ptr(str), to_ptr(str) + str.size()); + + if ((to_ptr(str) + str.size()) != itr) + return static_cast(itr - to_ptr(str)); + else + return static_cast(std::string::npos); + } + + inline void convert_bin_to_hex(const unsigned char* begin, const unsigned char* end, unsigned char* out) + { + static const unsigned short hex_lut[] = + { + 0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730, + 0x3830, 0x3930, 0x4130, 0x4230, 0x4330, 0x4430, 0x4530, 0x4630, + 0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731, + 0x3831, 0x3931, 0x4131, 0x4231, 0x4331, 0x4431, 0x4531, 0x4631, + 0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632, 0x3732, + 0x3832, 0x3932, 0x4132, 0x4232, 0x4332, 0x4432, 0x4532, 0x4632, + 0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533, 0x3633, 0x3733, + 0x3833, 0x3933, 0x4133, 0x4233, 0x4333, 0x4433, 0x4533, 0x4633, + 0x3034, 0x3134, 0x3234, 0x3334, 0x3434, 0x3534, 0x3634, 0x3734, + 0x3834, 0x3934, 0x4134, 0x4234, 0x4334, 0x4434, 0x4534, 0x4634, + 0x3035, 0x3135, 0x3235, 0x3335, 0x3435, 0x3535, 0x3635, 0x3735, + 0x3835, 0x3935, 0x4135, 0x4235, 0x4335, 0x4435, 0x4535, 0x4635, + 0x3036, 0x3136, 0x3236, 0x3336, 0x3436, 0x3536, 0x3636, 0x3736, + 0x3836, 0x3936, 0x4136, 0x4236, 0x4336, 0x4436, 0x4536, 0x4636, + 0x3037, 0x3137, 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737, + 0x3837, 0x3937, 0x4137, 0x4237, 0x4337, 0x4437, 0x4537, 0x4637, + 0x3038, 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738, + 0x3838, 0x3938, 0x4138, 0x4238, 0x4338, 0x4438, 0x4538, 0x4638, + 0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739, + 0x3839, 0x3939, 0x4139, 0x4239, 0x4339, 0x4439, 0x4539, 0x4639, + 0x3041, 0x3141, 0x3241, 0x3341, 0x3441, 0x3541, 0x3641, 0x3741, + 0x3841, 0x3941, 0x4141, 0x4241, 0x4341, 0x4441, 0x4541, 0x4641, + 0x3042, 0x3142, 0x3242, 0x3342, 0x3442, 0x3542, 0x3642, 0x3742, + 0x3842, 0x3942, 0x4142, 0x4242, 0x4342, 0x4442, 0x4542, 0x4642, + 0x3043, 0x3143, 0x3243, 0x3343, 0x3443, 0x3543, 0x3643, 0x3743, + 0x3843, 0x3943, 0x4143, 0x4243, 0x4343, 0x4443, 0x4543, 0x4643, + 0x3044, 0x3144, 0x3244, 0x3344, 0x3444, 0x3544, 0x3644, 0x3744, + 0x3844, 0x3944, 0x4144, 0x4244, 0x4344, 0x4444, 0x4544, 0x4644, + 0x3045, 0x3145, 0x3245, 0x3345, 0x3445, 0x3545, 0x3645, 0x3745, + 0x3845, 0x3945, 0x4145, 0x4245, 0x4345, 0x4445, 0x4545, 0x4645, + 0x3046, 0x3146, 0x3246, 0x3346, 0x3446, 0x3546, 0x3646, 0x3746, + 0x3846, 0x3946, 0x4146, 0x4246, 0x4346, 0x4446, 0x4546, 0x4646 + }; + + for (const unsigned char* itr = begin; end != itr; ++itr) + { + *reinterpret_cast(out) = hex_lut[(*itr)]; + out += sizeof(unsigned short); + } + } + + inline void convert_bin_to_hex(const char* begin, const char* end, char* out) + { + convert_bin_to_hex(reinterpret_cast(begin), + reinterpret_cast(end), + reinterpret_cast(out)); + } + + inline void convert_bin_to_hex(const std::pair& r, unsigned char* out) + { + convert_bin_to_hex(r.first,r.second,out); + } + + inline void convert_bin_to_hex(const std::pair& r, unsigned char* out) + { + convert_bin_to_hex(r.first,r.second,out); + } + + inline void convert_bin_to_hex(const std::pair& r, char* out) + { + convert_bin_to_hex(r.first,r.second,out); + } + + inline void convert_bin_to_hex(const std::string& binary_data, std::string& output) + { + output.resize(binary_data.size() * 2); + + convert_bin_to_hex(to_ptr(binary_data), + to_ptr(binary_data) + binary_data.size(), + const_cast(to_ptr(output))); + } + + inline std::string convert_bin_to_hex(const std::string& binary_data) + { + std::string output; + convert_bin_to_hex(binary_data,output); + return output; + } + + inline bool convert_hex_to_bin(const unsigned char* begin, const unsigned char* end, unsigned char* out) + { + const std::size_t length = std::distance(begin,end); + + if (0 == length) + return false; + else if (1 == (length % 2)) + return false; + + static const unsigned char hex_to_bin[] = + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x00 - 0x07 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x08 - 0x0F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x10 - 0x17 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x18 - 0x1F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x20 - 0x27 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x28 - 0x2F + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 0x30 - 0x37 + 0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x38 - 0x3F + 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, // 0x40 - 0x47 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x48 - 0x4F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x50 - 0x57 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x58 - 0x5F + 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, // 0x60 - 0x67 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x68 - 0x6F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x70 - 0x77 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x78 - 0x7F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x80 - 0x87 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x88 - 0x8F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x90 - 0x97 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0x98 - 0x9F + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xA0 - 0xA7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xA8 - 0xAF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB0 - 0xB7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xB8 - 0xBF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC0 - 0xC7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xC8 - 0xCF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD0 - 0xD7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xD8 - 0xDF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xE0 - 0xE7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xE8 - 0xEF + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 0xF0 - 0xF7 + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 0xF8 - 0xFF + }; + + const unsigned char* itr = begin; + + while (end != itr) + { + *reinterpret_cast(out) = static_cast(hex_to_bin[itr[0]] << 4 | hex_to_bin[itr[1]]); + ++out; + itr += 2; + } + + return true; + } + + inline bool convert_hex_to_bin(const char* begin, const char* end, char* out) + { + return convert_hex_to_bin(reinterpret_cast(begin), + reinterpret_cast(end), + reinterpret_cast(out)); + } + + inline bool convert_hex_to_bin(const std::pair& r, unsigned char* out) + { + return convert_hex_to_bin(r.first,r.second,out); + } + + inline bool convert_hex_to_bin(const std::pair& r, unsigned char* out) + { + return convert_hex_to_bin(r.first,r.second,out); + } + + inline bool convert_hex_to_bin(const std::pair& r, char* out) + { + return convert_hex_to_bin(r.first,r.second,out); + } + + inline bool convert_hex_to_bin(const std::pair& r, char* out) + { + return convert_hex_to_bin(r.first,r.second,out); + } + + inline bool convert_hex_to_bin(const std::string& hex_data, std::string& output) + { + if (hex_data.empty() || (1 == (hex_data.size() % 2))) + return false; + + output.resize(hex_data.size() >> 1); + + return convert_hex_to_bin(to_ptr(hex_data), + to_ptr(hex_data) + hex_data.size(), + const_cast(to_ptr(output))); + } + + inline std::size_t convert_bin_to_base64(const unsigned char* begin, const unsigned char* end, unsigned char* out) + { + static const unsigned char bin_to_base64 [] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + const std::size_t length = std::distance(begin,end); + + std::size_t rounds = length / 3; + const unsigned char* itr = begin; + + for (std::size_t i = 0; i < rounds; ++i) + { + unsigned int block = *(itr++) << 16; + block |= *(itr++) << 8; + block |= *(itr++) ; + *(out++) = bin_to_base64[( block >> 18 ) & 0x3F]; + *(out++) = bin_to_base64[( block >> 12 ) & 0x3F]; + *(out++) = bin_to_base64[( block >> 6 ) & 0x3F]; + *(out++) = bin_to_base64[( block ) & 0x3F]; + } + + if ((rounds = (length % 3)) > 0) + { + switch (rounds) + { + case 1 : { + unsigned int block = (unsigned char) (*itr) << 16; + *(out++) = bin_to_base64[( block >> 18 ) & 0x3F]; + *(out++) = bin_to_base64[( block >> 12 ) & 0x3F]; + *(out++) = '='; + *(out++) = '='; + } + break; + + case 2 : { + unsigned int block = *(itr++) << 16; + block |= *(itr++) << 8; + *(out++) = bin_to_base64[( block >> 18 ) & 0x3F]; + *(out++) = bin_to_base64[( block >> 12 ) & 0x3F]; + *(out++) = bin_to_base64[( block >> 6 ) & 0x3F]; + *(out++) = '='; + } + break; + } + } + + return static_cast((length / 3) * 4) + ((length % 3) > 0 ? 4 : 0); + } + + inline std::size_t convert_bin_to_base64(const char* begin, const char* end, char* out) + { + return convert_bin_to_base64(reinterpret_cast(begin), + reinterpret_cast(end ), + reinterpret_cast(out )); + } + + inline void convert_bin_to_base64(const std::string& binary_data, std::string& output) + { + output.resize(std::max(4,binary_data.size() << 1)); + + std::size_t resize = convert_bin_to_base64(to_ptr(binary_data), + to_ptr(binary_data) + binary_data.size(), + const_cast(to_ptr(output))); + output.resize(resize); + } + + inline std::size_t convert_base64_to_bin(const unsigned char* begin, const unsigned char* end, unsigned char* out) + { + static const unsigned char base64_to_bin[] = + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x00 - 0x07 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x08 - 0x0F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x10 - 0x17 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x18 - 0x1F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x20 - 0x27 + 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xFF, 0xFF, 0x3F, // 0x28 - 0x2F + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, // 0x30 - 0x37 + 0x3C, 0x3D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x38 - 0x3F + 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, // 0x40 - 0x47 + 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, // 0x48 - 0x4F + 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, // 0x50 - 0x57 + 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x58 - 0x5F + 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, // 0x60 - 0x67 + 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, // 0x68 - 0x6F + 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, // 0x70 - 0x77 + 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x78 - 0x7F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x80 - 0x87 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x88 - 0x8F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x90 - 0x97 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x98 - 0x9F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xA0 - 0xA7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xA8 - 0xAF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xB0 - 0xB7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xB8 - 0xBF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xC0 - 0xC7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xC8 - 0xCF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xD0 - 0xD7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xD8 - 0xDF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xE0 - 0xE7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xE8 - 0xEF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xF0 - 0xF7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // 0xF8 - 0xFF + }; + + const unsigned char* end_itr = end; + + if ('=' == *(end - 2)) + end_itr = end - 2; + else if ('=' == *(end - 1)) + end_itr = end - 1; + + const std::size_t length = std::distance(begin,end_itr); + const std::size_t rounds = length / 4; + const unsigned char* itr = begin; + + for (std::size_t i = 0; i < rounds; ++i) + { + unsigned int block = base64_to_bin[*(itr++)] << 18; + block |= base64_to_bin[*(itr++)] << 12; + block |= base64_to_bin[*(itr++)] << 6; + block |= base64_to_bin[*(itr++)]; + + *(out++) = static_cast(( block >> 16 ) & 0xFF); + *(out++) = static_cast(( block >> 8 ) & 0xFF); + *(out++) = static_cast(( block ) & 0xFF); + } + + const std::size_t remainder = (length % 4); + + if (remainder > 0) + { + switch (remainder) + { + case 2 : { + unsigned int block = base64_to_bin[*(itr++)] << 18; + block |= base64_to_bin[*(itr++)] << 12; + (*out) = static_cast(( block >> 16 ) & 0xFF); + } + break; + + case 3 : { + unsigned int block = base64_to_bin[*(itr++)] << 18; + block |= base64_to_bin[*(itr++)] << 12; + block |= base64_to_bin[*(itr++)] << 6; + *(out++) = static_cast(( block >> 16 ) & 0xFF); + *(out ) = static_cast(( block >> 8 ) & 0xFF); + } + break; + } + } + + return static_cast((3 * length) / 4); + } + + inline std::size_t convert_base64_to_bin(const char* begin, const char* end, char* out) + { + return convert_base64_to_bin(reinterpret_cast(begin), + reinterpret_cast(end), + reinterpret_cast(out)); + } + + inline void convert_base64_to_bin(const std::string& binary_data, std::string& output) + { + output.resize(binary_data.size()); + std::size_t resize = convert_base64_to_bin(to_ptr(binary_data), + to_ptr(binary_data) + binary_data.size(), + const_cast(to_ptr(output))); + output.resize(resize); + } + + inline void convert_to_printable_chars(unsigned char* begin, unsigned char* end) + { + static const unsigned char printable_char_table[] = + { + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x00 - 0x07 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x08 - 0x0F + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x10 - 0x17 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x18 - 0x1F + 0x2E, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, // 0x20 - 0x27 + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, // 0x28 - 0x2F + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // 0x30 - 0x37 + 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, // 0x38 - 0x3F + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, // 0x40 - 0x47 + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, // 0x48 - 0x4F + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, // 0x50 - 0x57 + 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, // 0x58 - 0x5F + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, // 0x60 - 0x67 + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, // 0x68 - 0x6F + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, // 0x70 - 0x77 + 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x2E, // 0x78 - 0x7F + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x80 - 0x87 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x88 - 0x8F + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x90 - 0x97 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0x98 - 0x9F + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xA0 - 0xA7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xA8 - 0xAF + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xB0 - 0xB7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xB8 - 0xBF + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xC0 - 0xC7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xC8 - 0xCF + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xD0 - 0xD7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xD8 - 0xDF + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xE0 - 0xE7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xE8 - 0xEF + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, // 0xF0 - 0xF7 + 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E // 0xF8 - 0xFF + }; + + unsigned char* itr = begin; + + while (end != itr) + { + (*itr) = printable_char_table[static_cast((*itr))]; + ++itr; + } + } + + inline void convert_to_printable_chars(char* begin, char* end) + { + convert_to_printable_chars(reinterpret_cast(begin), + reinterpret_cast(end)); + } + + inline void convert_to_printable_chars(std::string& str) + { + convert_to_printable_chars(reinterpret_cast(const_cast(to_ptr(str))), + reinterpret_cast(const_cast(to_ptr(str) + str.size()))); + } + + inline void convert_to_uppercase(unsigned char* begin, unsigned char* end) + { + //std::transform(begin,end,begin,::toupper); + unsigned char* itr = begin; + while (end != itr) + { + //(*itr) = std::toupper((*itr), std::locale::classic()); + (*itr) = static_cast(::toupper(static_cast(*itr))); + ++itr; + } + } + + inline void convert_to_uppercase(char* begin, char* end) + { + convert_to_uppercase(reinterpret_cast(begin), + reinterpret_cast(end)); + } + + inline void convert_to_uppercase(std::string& str) + { + convert_to_uppercase(reinterpret_cast(const_cast(to_ptr(str))), + reinterpret_cast(const_cast(to_ptr(str) + str.size()))); + } + + inline void convert_to_lowercase(unsigned char* begin, unsigned char* end) + { + //std::transform(begin,end,begin,::tolower); + unsigned char* itr = begin; + while (end != itr) + { + //(*itr) = std::tolower((*itr), std::locale::classic()); + (*itr) = static_cast(::tolower(static_cast(*itr))); + ++itr; + } + } + + inline void convert_to_lowercase(char* begin, char* end) + { + convert_to_lowercase(reinterpret_cast(begin), + reinterpret_cast(end)); + } + + inline void convert_to_lowercase(const char* begin, const char* end) + { + convert_to_lowercase(const_cast(begin),const_cast(end)); + } + + inline void convert_to_lowercase(std::string& str) + { + convert_to_lowercase(reinterpret_cast(const_cast(to_ptr(str))), + reinterpret_cast(const_cast(to_ptr(str) + str.size()))); + } + + inline std::string as_lowercase(const std::string& str) + { + std::string result = str; + convert_to_lowercase(result); + return result; + } + + inline std::string as_uppercase(const std::string& str) + { + std::string result = str; + convert_to_uppercase(result); + return result; + } + + inline bool twoway_bitwise_interleave(const unsigned char* begin1, const unsigned char* end1, + const unsigned char* begin2, const unsigned char* end2, + unsigned char* out) + { + if (std::distance(begin1,end1) != std::distance(begin2,end2)) + { + return false; + } + + static const std::size_t interleave_table_size = 256; + static const unsigned short interleave_table[interleave_table_size] = + { + 0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015, // 0x00 - 0x07 + 0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055, // 0x08 - 0x0F + 0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115, // 0x10 - 0x17 + 0x0140, 0x0141, 0x0144, 0x0145, 0x0150, 0x0151, 0x0154, 0x0155, // 0x18 - 0x1F + 0x0400, 0x0401, 0x0404, 0x0405, 0x0410, 0x0411, 0x0414, 0x0415, // 0x20 - 0x27 + 0x0440, 0x0441, 0x0444, 0x0445, 0x0450, 0x0451, 0x0454, 0x0455, // 0x28 - 0x2F + 0x0500, 0x0501, 0x0504, 0x0505, 0x0510, 0x0511, 0x0514, 0x0515, // 0x30 - 0x37 + 0x0540, 0x0541, 0x0544, 0x0545, 0x0550, 0x0551, 0x0554, 0x0555, // 0x38 - 0x3F + 0x1000, 0x1001, 0x1004, 0x1005, 0x1010, 0x1011, 0x1014, 0x1015, // 0x40 - 0x47 + 0x1040, 0x1041, 0x1044, 0x1045, 0x1050, 0x1051, 0x1054, 0x1055, // 0x48 - 0x4F + 0x1100, 0x1101, 0x1104, 0x1105, 0x1110, 0x1111, 0x1114, 0x1115, // 0x50 - 0x57 + 0x1140, 0x1141, 0x1144, 0x1145, 0x1150, 0x1151, 0x1154, 0x1155, // 0x58 - 0x5F + 0x1400, 0x1401, 0x1404, 0x1405, 0x1410, 0x1411, 0x1414, 0x1415, // 0x60 - 0x67 + 0x1440, 0x1441, 0x1444, 0x1445, 0x1450, 0x1451, 0x1454, 0x1455, // 0x68 - 0x6F + 0x1500, 0x1501, 0x1504, 0x1505, 0x1510, 0x1511, 0x1514, 0x1515, // 0x70 - 0x77 + 0x1540, 0x1541, 0x1544, 0x1545, 0x1550, 0x1551, 0x1554, 0x1555, // 0x78 - 0x7F + 0x4000, 0x4001, 0x4004, 0x4005, 0x4010, 0x4011, 0x4014, 0x4015, // 0x80 - 0x87 + 0x4040, 0x4041, 0x4044, 0x4045, 0x4050, 0x4051, 0x4054, 0x4055, // 0x88 - 0x8F + 0x4100, 0x4101, 0x4104, 0x4105, 0x4110, 0x4111, 0x4114, 0x4115, // 0x90 - 0x97 + 0x4140, 0x4141, 0x4144, 0x4145, 0x4150, 0x4151, 0x4154, 0x4155, // 0x98 - 0x9F + 0x4400, 0x4401, 0x4404, 0x4405, 0x4410, 0x4411, 0x4414, 0x4415, // 0xA0 - 0xA7 + 0x4440, 0x4441, 0x4444, 0x4445, 0x4450, 0x4451, 0x4454, 0x4455, // 0xA8 - 0xAF + 0x4500, 0x4501, 0x4504, 0x4505, 0x4510, 0x4511, 0x4514, 0x4515, // 0xB0 - 0xB7 + 0x4540, 0x4541, 0x4544, 0x4545, 0x4550, 0x4551, 0x4554, 0x4555, // 0xB8 - 0xBF + 0x5000, 0x5001, 0x5004, 0x5005, 0x5010, 0x5011, 0x5014, 0x5015, // 0xC0 - 0xC7 + 0x5040, 0x5041, 0x5044, 0x5045, 0x5050, 0x5051, 0x5054, 0x5055, // 0xC8 - 0xCF + 0x5100, 0x5101, 0x5104, 0x5105, 0x5110, 0x5111, 0x5114, 0x5115, // 0xD0 - 0xD7 + 0x5140, 0x5141, 0x5144, 0x5145, 0x5150, 0x5151, 0x5154, 0x5155, // 0xD8 - 0xDF + 0x5400, 0x5401, 0x5404, 0x5405, 0x5410, 0x5411, 0x5414, 0x5415, // 0xE0 - 0xE7 + 0x5440, 0x5441, 0x5444, 0x5445, 0x5450, 0x5451, 0x5454, 0x5455, // 0xE8 - 0xEF + 0x5500, 0x5501, 0x5504, 0x5505, 0x5510, 0x5511, 0x5514, 0x5515, // 0xF0 - 0xF7 + 0x5540, 0x5541, 0x5544, 0x5545, 0x5550, 0x5551, 0x5554, 0x5555 // 0xF8 - 0xFF + }; + + const unsigned char* itr1 = begin1; + const unsigned char* itr2 = begin2; + + while (end1 != itr1) + { + *(reinterpret_cast(out)) = (interleave_table[*(itr2++)] << 1); + *(reinterpret_cast(out)) |= interleave_table[*(itr1++)]; + out += 2; + } + + return true; + } + + inline bool twoway_bitwise_interleave(const char* begin1, const char* end1, + const char* begin2, const char* end2, + char* out) + { + return twoway_bitwise_interleave(reinterpret_cast(begin1), + reinterpret_cast(end1), + reinterpret_cast(begin2), + reinterpret_cast(end2), + reinterpret_cast(out)); + } + + inline bool twoway_bitwise_interleave(const std::string& str1, + const std::string& str2, + std::string& out) + { + if (str1.size() != str2.size()) + { + return false; + } + + out.resize(str1.size()); + + return twoway_bitwise_interleave(to_ptr(str1), to_ptr(str1) + str1.size(), + to_ptr(str2), to_ptr(str2) + str2.size(), + const_cast(to_ptr(out))); + } + + template + struct interleave_ary; + + template<> struct interleave_ary { typedef unsigned short type; }; + template<> struct interleave_ary { typedef unsigned int type; }; + template<> struct interleave_ary { typedef unsigned long long int type; }; + + template + inline void create_nway_interleave_table(typename interleave_ary::type table[256]) + { + typedef typename interleave_ary::type type; + + const type diff = static_cast(n - 1); + + for (type i = static_cast(0); i < static_cast(256); ++i) + { + table[i] = 0x00; + + for (type j = static_cast(0); j < static_cast(8); ++j) + { + table[i] |= (i & (1 << j)) << (j * diff); + } + } + } + + namespace bitwise_operation { enum type { eAND, eOR, eXOR }; } + + inline void bitwise_transform(const bitwise_operation::type& operation, + const unsigned char* begin1, const unsigned char* end1, + const unsigned char* begin2, + unsigned char* out) + { + const unsigned char* itr1 = begin1; + const unsigned char* itr2 = begin2; + + switch (operation) + { + case bitwise_operation::eAND : while (itr1 != end1) { *(out++) = *(itr1++) & *(itr2++); } return; + case bitwise_operation::eOR : while (itr1 != end1) { *(out++) = *(itr1++) | *(itr2++); } return; + case bitwise_operation::eXOR : while (itr1 != end1) { *(out++) = *(itr1++) ^ *(itr2++); } return; + } + } + + inline void bitwise_transform(const bitwise_operation::type& operation, + const char* begin1, const char* end1, + const char* begin2, + char* out) + { + bitwise_transform(operation, + reinterpret_cast(begin1), + reinterpret_cast(end1), + reinterpret_cast(begin2), + reinterpret_cast(out)); + } + + inline void bitwise_transform(const bitwise_operation::type& operation, + const std::string& str1, + const std::string& str2, + std::string& out) + { + if (str1.size() != str2.size()) return; + out.resize(str1.size()); + bitwise_transform(operation, + to_ptr(str1), to_ptr(str1) + str1.size(), + to_ptr(str2), + const_cast(to_ptr(out))); + } + + inline std::size_t high_bit_count(const unsigned char c) + { + static const std::size_t high_bits_in_char[256] = + { + 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, + 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, + 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8 + }; + + return high_bits_in_char[c]; + } + + inline std::size_t high_bit_count(const unsigned short& s) + { + const unsigned char* ptr = reinterpret_cast(&s); + return high_bit_count(*(ptr + 0)) + high_bit_count(*(ptr + 1)); + } + + inline std::size_t high_bit_count(const unsigned int& i) + { + const unsigned char* ptr = reinterpret_cast(&i); + return high_bit_count(*(ptr + 0)) + high_bit_count(*(ptr + 1)) + + high_bit_count(*(ptr + 2)) + high_bit_count(*(ptr + 3)); + } + + inline std::size_t high_bit_count(const long long int& ll) + { + const unsigned char* ptr = reinterpret_cast(&ll); + return high_bit_count(*(ptr + 0)) + high_bit_count(*(ptr + 1)) + + high_bit_count(*(ptr + 2)) + high_bit_count(*(ptr + 3)) + + high_bit_count(*(ptr + 4)) + high_bit_count(*(ptr + 5)) + + high_bit_count(*(ptr + 6)) + high_bit_count(*(ptr + 7)); + } + + inline std::size_t high_bit_count(const unsigned char* begin, const unsigned char* end) + { + std::size_t count = 0; + const unsigned char* itr = begin; + + while (end != itr) + { + count += high_bit_count(*itr++); + } + + return count; + } + + inline std::size_t high_bit_count(const char* begin, const char* end) + { + return high_bit_count(reinterpret_cast(begin), + reinterpret_cast(end)); + + } + + inline std::size_t high_bit_count(const std::string& str) + { + return high_bit_count(to_ptr(str), to_ptr(str) + str.size()); + } + + inline bool bit_state(const std::size_t& index, const unsigned char* ptr) + { + static const unsigned char bit_mask[] = + { + 0x01, //00000001 + 0x02, //00000010 + 0x04, //00000100 + 0x08, //00001000 + 0x10, //00010000 + 0x20, //00100000 + 0x40, //01000000 + 0x80 //10000000 + }; + return (0 != (ptr[(index >> 3)] & bit_mask[index & 7])); + } + + inline void set_bit_high(const std::size_t& index, unsigned char* const ptr) + { + static const unsigned char bit_mask[] = + { + 0x01, //00000001 + 0x02, //00000010 + 0x04, //00000100 + 0x08, //00001000 + 0x10, //00010000 + 0x20, //00100000 + 0x40, //01000000 + 0x80 //10000000 + }; + ptr[(index >> 3)] |= bit_mask[index & 7]; + } + + inline void set_bit_low(const std::size_t& index, unsigned char* const ptr) + { + static const unsigned char bit_mask[] = + { + 0xFE, //11111110 + 0xFD, //11111101 + 0xFB, //11111011 + 0xF7, //11110111 + 0xEF, //11101111 + 0xDF, //11011111 + 0xBF, //10111111 + 0x7F //01111111 + }; + ptr[(index >> 3)] &= bit_mask[index & 7]; + } + + inline std::size_t hamming_distance(const unsigned char* begin1, const unsigned char* end1, + const unsigned char* begin2, const unsigned char* end2) + { + if (std::distance(begin1,end1) != std::distance(begin2,end2)) + { + return std::numeric_limits::max(); + } + + std::size_t distance = 0; + const unsigned char* itr1 = begin1; + const unsigned char* itr2 = begin2; + + while (end1 != itr1) + { + distance += high_bit_count(static_cast(((*itr1++) ^ (*itr2++)) & 0xFF)); + } + + return distance; + } + + inline std::size_t hamming_distance(const char* begin1, const char* end1, + const char* begin2, const char* end2) + { + return hamming_distance(reinterpret_cast(begin1), + reinterpret_cast(end1), + reinterpret_cast(begin2), + reinterpret_cast(end2)); + } + + inline std::size_t hamming_distance(const std::string& str1, const std::string& str2) + { + return hamming_distance(to_ptr(str1), to_ptr(str1) + str1.size(), + to_ptr(str2), to_ptr(str2) + str2.size()); + } + + template + inline std::size_t hamming_distance_elementwise(const Iterator begin1, const Iterator end1, + const Iterator begin2, const Iterator end2) + { + if (std::distance(begin1,end1) != std::distance(begin2,end2)) + { + return std::numeric_limits::max(); + } + + std::size_t distance = 0; + Iterator itr1 = begin1; + Iterator itr2 = begin2; + + while (end1 != itr1) + { + if ((*itr1) != (*itr2)) + ++distance; + } + + return distance; + } + + inline std::size_t hamming_distance_elementwise(const std::string& str1, const std::string& str2) + { + return hamming_distance_elementwise(to_ptr(str1), to_ptr(str1) + str1.size(), + to_ptr(str2), to_ptr(str2) + str2.size()); + } + + class token_grid + { + public: + + typedef const unsigned char* iterator_t; + typedef unsigned int index_t; + typedef std::pair range_t; + typedef std::deque token_list_t; + typedef std::pair row_index_range_t; + typedef std::deque row_index_t; + typedef std::pair row_range_t; + typedef std::pair col_range_t; + + private: + + struct store + { + store() + : max_column(0) + {} + + token_list_t token_list; + row_index_t row_index; + std::size_t max_column; + + inline void clear() + { + token_list.clear(); + row_index.clear(); + } + + inline range_t operator()(const std::size_t& col, const std::size_t& row) const + { + if (row < row_index.size()) + { + const row_index_range_t& r = row_index[row]; + + if (col < (r.second - r.first + 1)) + return *(token_list.begin() + (r.first + col)); + else + return null_range(); + } + else + return null_range(); + } + + inline bool remove_row(const std::size_t& row) + { + if (row >= row_index.size()) return false; + + row_index_range_t& r = row_index[row]; + + const std::size_t number_of_tokens = r.second - r.first + 1; + + token_list_t::iterator remove_begin = token_list.begin() + r.first; + token_list_t::iterator remove_end = token_list.begin() + r.first + number_of_tokens; + + token_list.erase(remove_begin,remove_end); + + row_index.erase(row_index.begin() + row); + + for (std::size_t i = row; i < row_index.size(); ++i) + { + row_index_range_t& curr_row = row_index[i]; + + curr_row.first -= static_cast(number_of_tokens); + curr_row.second -= static_cast(number_of_tokens); + } + + return true; + } + + inline std::size_t token_count(const row_index_range_t& r) const + { + return (r.second - r.first + 1); + } + + inline std::size_t token_count(const std::size_t& index) const + { + return token_count(row_index[index]); + } + + inline bool remove_row_range(const std::size_t& r0, const std::size_t& r1) + { + if (r0 > r1) + return false; + else if (r0 >= row_index.size()) + return false; + else if (r1 >= row_index.size()) + return false; + + std::size_t number_of_tokens = 0; + + for (std::size_t i = r0; i <= r1; ++i) + { + row_index_range_t& r = row_index[i]; + number_of_tokens += token_count(r); + } + + row_index_range_t rr0 = row_index[r0]; + + token_list_t::iterator remove_begin = token_list.begin() + rr0.first; + token_list_t::iterator remove_end = token_list.begin() + rr0.first + number_of_tokens; + + token_list.erase(remove_begin,remove_end); + + row_index.erase(row_index.begin() + r0,row_index.begin() + r0 + (r1 - r0 + 1)); + + for (std::size_t i = r0; i < row_index.size(); ++i) + { + row_index_range_t& r = row_index[i]; + r.first -= static_cast(number_of_tokens); + r.second -= static_cast(number_of_tokens); + } + + return true; + } + + struct remove_column_impl + { + std::size_t column; + std::size_t counter; + std::size_t remainder; + std::size_t current_row; + + inline void update(store& idx) + { + current_row++; + + while (current_row < idx.row_index.size()) + { + const std::size_t number_of_tokens = idx.token_count(current_row); + + if (number_of_tokens > column) + break; + + counter += number_of_tokens; + + ++current_row; + } + + if (current_row < idx.row_index.size()) + { + counter += column + remainder; + row_index_range_t& r = idx.row_index[current_row]; + remainder = (r.second - r.first) - column; + } + else + counter = std::numeric_limits::max(); + } + + inline void process(store& idx) + { + token_list_t::iterator itr1 = idx.token_list.begin(); + token_list_t::iterator itr2 = idx.token_list.begin(); + token_list_t::iterator end = idx.token_list.end (); + + counter = 0; + remainder = 0; + current_row = static_cast(-1); + + update(idx); + + while (end != itr1) + { + while ((end != itr1) && (0 != counter)) + { + if (itr1 != itr2) + { + (*itr2) = (*itr1); + } + + ++itr1; + ++itr2; + --counter; + } + + if (0 == counter) + { + update(idx); + ++itr1; + } + } + + std::size_t remove_count = 0; + + idx.max_column = std::numeric_limits::min(); + + for (std::size_t i = 0; i < idx.row_index.size(); ++i) + { + row_index_range_t& r = idx.row_index[i]; + std::size_t token_count = (r.second - r.first + 1); + + r.first -= static_cast(remove_count); + + if (token_count > column) + { + ++remove_count; + } + + r.second -= static_cast(remove_count); + token_count = (r.second - r.first + 1); + + if (token_count > idx.max_column) + idx.max_column = token_count; + } + + idx.token_list.resize(idx.token_list.size() - remove_count); + } + }; + + inline bool remove_column(const std::size_t& column) + { + if (column >= max_column) return false; + remove_column_impl rc; + rc.column = column; + rc.process(*this); + return true; + } + + inline static range_t null_range() + { + static const range_t null_range_ = range_t(reinterpret_cast(0), + reinterpret_cast(0)); + return null_range_; + } + + }; + + template + struct row_processor + { + row_processor(store& idx, + DelimiterPredicate& tp, + const split_options::type split_mode = split_options::compress_delimiters) + : idx_(idx), + row_start_index_(0), + row_end_index_(0), + token_predicate_(tp), + split_mode_(split_mode) + { + idx_.max_column = std::numeric_limits::min(); + } + + inline void operator()(const range_t& range) + { + if (0 == std::distance(range.first,range.second)) + return; + + row_start_index_ = static_cast(idx_.token_list.size()); + + std::size_t token_count = split(token_predicate_, + range.first, range.second, + std::back_inserter(idx_.token_list), + split_mode_); + + row_end_index_ = static_cast(row_start_index_ + token_count - 1); + + idx_.row_index.push_back(std::make_pair(row_start_index_,row_end_index_)); + + if (token_count > idx_.max_column) + idx_.max_column = token_count; + } + + row_processor operator=(const row_processor&); + + store& idx_; + index_t row_start_index_; + index_t row_end_index_; + DelimiterPredicate& token_predicate_; + split_options::type split_mode_; + }; + + public: + + inline row_range_t range(index_t lower_bound, + index_t upper_bound = std::numeric_limits::max()) const + { + if (upper_bound == std::numeric_limits::max()) + { + upper_bound = static_cast(dsv_index_.token_list.size()); + } + else if (upper_bound > dsv_index_.token_list.size()) + { + return row_range_t(std::numeric_limits::max(),std::numeric_limits::max()); + } + else if (lower_bound > upper_bound) + { + return row_range_t(std::numeric_limits::max(),std::numeric_limits::max()); + } + + return row_range_t(lower_bound,upper_bound); + } + + struct options + { + options() + : row_split_option(split_options::compress_delimiters), + column_split_option(split_options::compress_delimiters), + row_delimiters("\n\r"), + column_delimiters(",|;\t "), + support_dquotes(false), + trim_dquotes(false) + {} + + options(split_options::type sro, + split_options::type sco, + const std::string& rd, + const std::string& cd, + const bool support_dq = false, + const bool trim_dq = false) + : row_split_option(sro), + column_split_option(sco), + row_delimiters(rd), + column_delimiters(cd), + support_dquotes(support_dq), + trim_dquotes(trim_dq) + {} + + inline options& set_column_split_option(const split_options::type& option) + { + column_split_option = option; + return *this; + } + + inline options& set_row_split_option(const split_options::type& option) + { + row_split_option = option; + return *this; + } + + inline options& set_column_delimiters(const std::string& delimiters) + { + column_delimiters = delimiters; + return *this; + } + + inline options& set_row_delimiters(const std::string& delimiters) + { + row_delimiters = delimiters; + return *this; + } + + split_options::type row_split_option; + split_options::type column_split_option; + std::string row_delimiters; + std::string column_delimiters; + bool support_dquotes; + bool trim_dquotes; + }; + + class row_type + { + private: + + typedef std::pair row_pair_type; + + public: + + row_type() + : index_(std::numeric_limits::max()), + size_(0) + {} + + row_type(const std::size_t& index, + const store& dsv_index) + : index_(index), + size_ (dsv_index.token_count(index)), + begin_(dsv_index.token_list.begin() + dsv_index.row_index[index].first) + {} + + inline bool is_null(const std::size_t& index) const + { + const range_t& range = *(begin_ + index); + return (0 == std::distance(range.first,range.second)); + } + + template + inline T operator[](const std::size_t& index) const + { + const range_t& range = *(begin_ + index); + return string_to_type_converter(range.first,range.second); + } + + template + inline T get(const std::size_t& index) const + { + return operator[](index); + } + + inline col_range_t all_columns() const + { + return col_range_t(0,static_cast(size())); + } + + inline range_t range() const + { + return range_t((*begin_).first,(*(begin_ + (size_ - 1))).second); + } + + inline range_t token(const std::size_t& index) const + { + return *(begin_ + index); + } + + inline std::size_t index() const + { + return index_; + } + + inline std::size_t size() const + { + return size_; + } + + inline std::size_t raw_length() const + { + std::size_t result = 0; + token_list_t::const_iterator itr = begin_; + + for (std::size_t i = 0; i < size_; ++i, ++itr) + { + const range_t& range = (*itr); + result += std::distance(range.first,range.second); + } + + return result; + } + + inline std::size_t raw_length(const std::size_t& column_index) const + { + const range_t& range = *(begin_ + column_index); + return std::distance(range.first,range.second); + } + + inline std::string as_string() const + { + std::string result; + result.reserve(std::distance(begin_->first,(begin_ + (size_ - 1))->second)); + token_list_t::const_iterator itr = begin_; + + for (std::size_t i = 0; i < size_; ++i, ++itr) + { + const range_t& range = (*itr); + result.append(range.first,range.second); + } + + return result; + } + + inline void as_string(std::string& out) const + { + out = as_string(); + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, const std::size_t& col5, + const std::size_t& col6, const std::size_t& col7, + const std::size_t& col8, const std::size_t& col9, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + if (!process(*(begin_ + col5),t5)) return false; + if (!process(*(begin_ + col6),t6)) return false; + if (!process(*(begin_ + col7),t7)) return false; + if (!process(*(begin_ + col8),t8)) return false; + if (!process(*(begin_ + col9),t9)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, const std::size_t& col5, + const std::size_t& col6, const std::size_t& col7, + const std::size_t& col8, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + if (!process(*(begin_ + col5),t5)) return false; + if (!process(*(begin_ + col6),t6)) return false; + if (!process(*(begin_ + col7),t7)) return false; + if (!process(*(begin_ + col8),t8)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, const std::size_t& col5, + const std::size_t& col6, const std::size_t& col7, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + if (!process(*(begin_ + col5),t5)) return false; + if (!process(*(begin_ + col6),t6)) return false; + if (!process(*(begin_ + col7),t7)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, const std::size_t& col5, + const std::size_t& col6, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + if (!process(*(begin_ + col5),t5)) return false; + if (!process(*(begin_ + col6),t6)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, const std::size_t& col5, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + if (!process(*(begin_ + col5),t5)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + const std::size_t& col4, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + if (!process(*(begin_ + col4),t4)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, const std::size_t& col3, + T0& t0, T1& t1, T2& t2, T3& t3) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + if (!process(*(begin_ + col3),t3)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + const std::size_t& col2, + T0& t0, T1& t1, T2& t2) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + if (!process(*(begin_ + col2),t2)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col0, const std::size_t& col1, + T0& t0, T1& t1) const + { + if (!process(*(begin_ + col0),t0)) return false; + if (!process(*(begin_ + col1),t1)) return false; + return true; + } + + template + inline bool parse_with_index(const std::size_t& col, T& t) const + { + return process(*(begin_ + col),t); + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6, T7& t7, + T8& t8, T9& t9) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + if (!process(*(begin_ + 5),t5)) return false; + if (!process(*(begin_ + 6),t6)) return false; + if (!process(*(begin_ + 7),t7)) return false; + if (!process(*(begin_ + 8),t8)) return false; + if (!process(*(begin_ + 9),t9)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6, T7& t7, + T8& t8) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + if (!process(*(begin_ + 5),t5)) return false; + if (!process(*(begin_ + 6),t6)) return false; + if (!process(*(begin_ + 7),t7)) return false; + if (!process(*(begin_ + 8),t8)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6, T7& t7) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + if (!process(*(begin_ + 5),t5)) return false; + if (!process(*(begin_ + 6),t6)) return false; + if (!process(*(begin_ + 7),t7)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + if (!process(*(begin_ + 5),t5)) return false; + if (!process(*(begin_ + 6),t6)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + if (!process(*(begin_ + 5),t5)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3, T4& t4) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + if (!process(*(begin_ + 4),t4)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2, T3& t3) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + if (!process(*(begin_ + 3),t3)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1, T2& t2) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + if (!process(*(begin_ + 2),t2)) return false; + return true; + } + + template + inline bool parse(T0& t0, T1& t1) const + { + if (!process(*(begin_ + 0),t0)) return false; + if (!process(*(begin_ + 1),t1)) return false; + return true; + } + + template + inline bool parse(T0& t) const + { + return process(*begin_,t); + } + + template + inline void parse(OutputIterator out) const + { + token_list_t::const_iterator itr = begin_; + const token_list_t::const_iterator end = begin_ + size_; + + while (end != itr) + { + const range_t& range = (*itr); + *(out++) = string_to_type_converter(range.first,range.second); + ++itr; + } + } + + bool validate_column_range(const col_range_t& range) const + { + if ((range.first > size()) || (range.second > size())) + return false; + else if (range.first > range.second) + return false; + else + return true; + } + + col_range_t range(const index_t& lower_bound, + const index_t& upper_bound = std::numeric_limits::max()) const + { + if (std::numeric_limits::max() != upper_bound) + return col_range_t(lower_bound,upper_bound); + else + return col_range_t(lower_bound,static_cast(size())); + } + + template class Sequence> + inline bool parse(const col_range_t& range, + Sequence& sequence) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& curr_range = (*itr); + if (string_to_type_converter(curr_range.first, curr_range.second,t)) + sequence.push_back(t); + else + return false; + ++itr; + } + + return true; + } + + template + inline bool parse(const col_range_t& range, + std::set& set) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& range = (*itr); + if (string_to_type_converter(range.first,range.second,t)) + set.insert(t); + else + return false; + ++itr; + } + + return true; + } + + template + inline bool parse(const col_range_t& range, + std::multiset& multiset) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& range = (*itr); + if (string_to_type_converter(range.first,range.second,t)) + multiset.insert(t); + else + return false; + ++itr; + } + + return true; + } + + template + inline bool parse(const col_range_t& range, + std::queue& queue) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& range = (*itr); + if (string_to_type_converter(range.first,range.second,t)) + queue.push(t); + else + return false; + ++itr; + } + + return true; + } + + template + inline bool parse(const col_range_t& range, + std::stack& stack) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& range = (*itr); + if (string_to_type_converter(range.first,range.second,t)) + stack.push(t); + else + return false; + ++itr; + } + + return true; + } + + template + inline bool parse(const col_range_t& range, + std::priority_queue& priority_queue) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = (begin_ + range.first); + token_list_t::const_iterator end = (begin_ + range.second); + T t; + + while (end != itr) + { + const range_t& range = (*itr); + if (string_to_type_converter(range.first,range.second,t)) + priority_queue.push(t); + else + return false; + ++itr; + } + + return true; + } + + template class Sequence> + inline bool parse(Sequence& sequence) const + { + return parse(range(0),sequence); + } + + template + inline bool parse(std::set& set) const + { + return parse(range(0),set); + } + + template + inline bool parse(std::multiset& multiset) const + { + return parse(range(0),multiset); + } + + template + inline bool parse(std::queue& queue) const + { + return parse(range(0),queue); + } + + template + inline bool parse(std::stack& stack) const + { + return parse(range(0),stack); + } + + template + inline bool parse(std::priority_queue& priority_queue) const + { + return parse(range(0),priority_queue); + } + + template class Sequence> + inline std::size_t parse_n(const std::size_t& n, Sequence& sequence) const + { + if (0 == n) return 0; + + T t; + std::size_t count = 0; + token_list_t::const_iterator itr = begin_; + const token_list_t::const_iterator end = begin_ + size_; + + while (end != itr) + { + const range_t& range = (*itr); + + if (!string_to_type_converter(range.first,range.second,t)) + return false; + else + sequence.push_back(t); + + if (n == (++count)) + break; + ++itr; + } + + return count; + } + + template + inline void parse_checked(OutputIterator out) const + { + T value; + token_list_t::const_iterator itr = begin_; + const token_list_t::const_iterator end = begin_ + size_; + + while (end != itr) + { + const range_t& range = (*itr); + + if (string_to_type_converter(range.first,range.second,value)) + { + *(out++) = value; + } + + ++itr; + } + } + + template class Sequence> + inline void parse_checked(Sequence& sequence) const + { + parse_checked(std::back_inserter(sequence)); + } + + template + inline void parse_checked(std::set& set) const + { + parse_checked(std::inserter(set,set.end())); + } + + template + inline void parse_checked(std::multiset& multiset) const + { + parse_checked(std::inserter(multiset,multiset.end())); + } + + template + inline void parse_checked(std::queue& queue) const + { + parse_checked(push_inserter(queue)); + } + + template + inline void parse_checked(std::stack& stack) const + { + parse_checked(push_inserter(stack)); + } + + template + inline void parse_checked(std::priority_queue& priority_queue) const + { + parse_checked(push_inserter(priority_queue)); + } + + template + inline std::size_t for_each_column(const col_range_t& range, Function f) const + { + if (!validate_column_range(range)) + return false; + + token_list_t::const_iterator itr = begin_ + range.first; + token_list_t::const_iterator end = begin_ + range.second; + std::size_t col_count = 0; + + while (end != itr) + { + const range_t& range = (*itr); + f(range); + ++itr; + ++col_count; + } + + return col_count; + } + + template + inline std::size_t for_each_column(Function f) const + { + return for_each_column(all_columns(),f); + } + + private: + + template + inline bool process(const range_t& range, T& t) const + { + return string_to_type_converter(range.first,range.second,t); + } + + private: + + std::size_t index_; + std::size_t size_; + token_list_t::const_iterator begin_; + }; + + token_grid() + : file_name_(""), + buffer_(0), + buffer_size_(0), + min_column_count_(0), + max_column_count_(0), + load_from_file_(false), + state_(false) + {} + + token_grid(const std::string& file_name, + const token_grid::options& options) + : file_name_(file_name), + buffer_(0), + buffer_size_(0), + min_column_count_(0), + max_column_count_(0), + options_(options), + load_from_file_(true), + state_(load()) + {} + + token_grid(const unsigned char* input_buffer, + const std::size_t& input_buffer_size, + const token_grid::options& options) + : file_name_(""), + buffer_(const_cast(input_buffer)), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(options), + load_from_file_(false), + state_(load()) + {} + + token_grid(const char* input_buffer, + const std::size_t& input_buffer_size, + const token_grid::options& options) + : file_name_(""), + buffer_(reinterpret_cast(const_cast(input_buffer))), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(options), + load_from_file_(false), + state_(load()) + {} + + token_grid(const std::string& input_buffer, + const std::size_t& input_buffer_size, + const token_grid::options& options) + : file_name_(""), + buffer_(reinterpret_cast(const_cast(to_ptr(input_buffer)))), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(options), + load_from_file_(false), + state_(load()) + {} + + token_grid(const std::string& file_name, + const std::string& column_delimiters = ",|;\t", + const std::string& row_delimiters = "\n\r") + : file_name_(file_name), + buffer_(0), + buffer_size_(0), + min_column_count_(0), + max_column_count_(0), + options_(split_options::compress_delimiters, + split_options::compress_delimiters, + row_delimiters, + column_delimiters), + load_from_file_(true), + state_(load()) + {} + + token_grid(const unsigned char* input_buffer, + const std::size_t& input_buffer_size, + const std::string& column_delimiters = ",|;\t", + const std::string& row_delimiters = "\n\r") + : file_name_(""), + buffer_(const_cast(input_buffer)), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(split_options::compress_delimiters, + split_options::compress_delimiters, + row_delimiters, + column_delimiters), + load_from_file_(false), + state_(load()) + {} + + token_grid(const char* input_buffer, + const std::size_t& input_buffer_size, + const std::string& column_delimiters = ",|;\t", + const std::string& row_delimiters = "\n\r") + : file_name_(""), + buffer_(reinterpret_cast(const_cast(input_buffer))), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(split_options::compress_delimiters, + split_options::compress_delimiters, + row_delimiters, + column_delimiters), + load_from_file_(false), + state_(load()) + {} + + token_grid(const std::string& input_buffer, + const std::size_t& input_buffer_size, + const std::string& column_delimiters = ",;|\t ", + const std::string& row_delimiters = "\n\r") + : file_name_(""), + buffer_(reinterpret_cast(const_cast(to_ptr(input_buffer)))), + buffer_size_(input_buffer_size), + min_column_count_(0), + max_column_count_(0), + options_(split_options::compress_delimiters, + split_options::compress_delimiters, + row_delimiters, + column_delimiters), + load_from_file_(false), + state_(load()) + {} + + ~token_grid() + { + if ((load_from_file_) && (0 != buffer_)) + { + delete [] buffer_; + buffer_ = 0; + } + } + + inline bool operator!() const + { + return !state_; + } + + inline std::string source_file() const + { + return file_name_; + } + + inline std::size_t row_count() const + { + return dsv_index_.row_index.size(); + } + + inline std::size_t min_column_count() const + { + return min_column_count_; + } + + inline std::size_t max_column_count() const + { + return max_column_count_; + } + + inline range_t token(const std::size_t& row, const std::size_t& col) const + { + return dsv_index_(col,row); + } + + template + inline T get(const std::size_t& row, const std::size_t& col) + { + range_t r = token(row,col); + return string_to_type_converter(r.first,r.second); + } + + inline row_type row(const std::size_t& row_index) const + { + return row_type(row_index,dsv_index_); + } + + inline row_range_t all_rows() const + { + return row_range_t(0,static_cast(dsv_index_.row_index.size())); + } + + template + inline bool extract_column_checked(const row_range_t& row_range, + const std::size_t& index, + OutputIterator out) const + { + if (index > max_column_count_) + return false; + else if (row_range_invalid(row_range)) + return false; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (index < dsv_index_.token_count(row)) + { + dsv_index_.token_list.begin() + (row.first + index); + process_token_checked(*(dsv_index_.token_list.begin() + (row.first + index)),out); + } + } + + return true; + } + + template + inline bool extract_column_checked(const std::size_t& index, + OutputIterator out) const + { + return extract_column_checked(all_rows(),index,out); + } + + template class Sequence> + inline void extract_column_checked(const std::size_t& index, + Sequence& sequence) const + { + extract_column_checked(index,back_inserter_with_valuetype(sequence)); + } + + template + inline void extract_column_checked(const std::size_t& index, + std::set& set) const + { + extract_column_checked(index,inserter_with_valuetype(set)); + } + + template + inline void extract_column_checked(const std::size_t& index, + std::multiset& multiset) const + { + extract_column_checked(index,inserter_with_valuetype(multiset)); + } + + template + inline bool extract_column(const row_range_t& row_range, + const std::size_t& index, + OutputIterator out) const + { + + if (index > max_column_count_) + return false; + else if (row_range_invalid(row_range)) + return false; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (index < dsv_index_.token_count(row)) + { + process_token(*(dsv_index_.token_list.begin() + (row.first + index)),out); + } + } + + return true; + } + + template + inline bool extract_column(const std::size_t& index, + OutputIterator out) const + { + return extract_column(all_rows(),index,out); + } + + template + inline bool extract_column(const row_range_t& row_range, + const std::size_t& index0, + const std::size_t& index1, + OutputIterator0 out0, + OutputIterator1 out1) const + { + if ( + (index0 > max_column_count_) || + (index1 > max_column_count_) + ) + return false; + else if (row_range_invalid(row_range)) + return false; + + std::size_t max_index = std::max(index0,index1); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (max_index < dsv_index_.token_count(row)) + { + process_token(*(dsv_index_.token_list.begin() + (row.first + index0)),out0); + process_token(*(dsv_index_.token_list.begin() + (row.first + index1)),out1); + } + } + + return true; + } + + template + inline bool extract_column(const row_range_t& row_range, + const std::size_t& index0, + const std::size_t& index1, + const std::size_t& index2, + OutputIterator0 out0, + OutputIterator1 out1, + OutputIterator2 out2) const + { + if ( + (index0 > max_column_count_) || + (index1 > max_column_count_) || + (index2 > max_column_count_) + ) + return false; + else if (row_range_invalid(row_range)) + return false; + + std::size_t max_index = std::max(index0,std::max(index1,index2)); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (max_index < dsv_index_.token_count(row)) + { + process_token(*(dsv_index_.token_list.begin() + (row.first + index0)),out0); + process_token(*(dsv_index_.token_list.begin() + (row.first + index1)),out1); + process_token(*(dsv_index_.token_list.begin() + (row.first + index2)),out2); + } + } + + return true; + } + + template + inline bool extract_column(const row_range_t& row_range, + const std::size_t& index0, + const std::size_t& index1, + const std::size_t& index2, + const std::size_t& index3, + OutputIterator0 out0, + OutputIterator1 out1, + OutputIterator2 out2, + OutputIterator3 out3) const + { + if ( + (index0 > max_column_count_) || + (index1 > max_column_count_) || + (index2 > max_column_count_) || + (index3 > max_column_count_) + ) + return false; + else if (row_range_invalid(row_range)) + return false; + + std::size_t max_index = std::max(std::max(index0,index1),std::max(index2,index3)); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (max_index < dsv_index_.token_count(row)) + { + process_token(*(dsv_index_.token_list.begin() + (row.first + index0)),out0); + process_token(*(dsv_index_.token_list.begin() + (row.first + index1)),out1); + process_token(*(dsv_index_.token_list.begin() + (row.first + index2)),out2); + process_token(*(dsv_index_.token_list.begin() + (row.first + index3)),out3); + } + } + + return true; + } + + template + inline bool extract_column(const row_range_t& row_range, + const std::size_t& index0, + const std::size_t& index1, + const std::size_t& index2, + const std::size_t& index3, + const std::size_t& index4, + OutputIterator0 out0, + OutputIterator1 out1, + OutputIterator2 out2, + OutputIterator3 out3, + OutputIterator4 out4) const + { + if ( + (index0 > max_column_count_) || + (index1 > max_column_count_) || + (index2 > max_column_count_) || + (index3 > max_column_count_) || + (index4 > max_column_count_) + ) + return false; + else if (row_range_invalid(row_range)) + return false; + + std::size_t max_index = std::max(index4,std::max(std::max(index0,index1),std::max(index2,index3))); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& row = dsv_index_.row_index[i]; + + if (max_index < dsv_index_.token_count(row)) + { + process_token(*(dsv_index_.token_list.begin() + (row.first + index0)),out0); + process_token(*(dsv_index_.token_list.begin() + (row.first + index1)),out1); + process_token(*(dsv_index_.token_list.begin() + (row.first + index2)),out2); + process_token(*(dsv_index_.token_list.begin() + (row.first + index3)),out3); + process_token(*(dsv_index_.token_list.begin() + (row.first + index4)),out4); + } + } + + return true; + } + + inline void remove_row(const std::size_t& index) + { + if (index < dsv_index_.row_index.size()) + { + dsv_index_.remove_row(index); + } + } + + template + inline bool remove_row_if(const row_range_t& row_range, Predicate predicate) + { + if (row_range_invalid(row_range)) + return false; + + std::size_t removed_token_count = 0; + + std::deque remove_token_list; + std::deque remove_row_list; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + row_index_range_t& r = dsv_index_.row_index[i]; + std::size_t temp_r_first = r.first - removed_token_count; + row_type row(i,dsv_index_); + + if (predicate(row)) + { + remove_row_list.push_back(i); + + for (std::size_t j = r.first; j <= r.second; ++j) + { + remove_token_list.push_back(j); + } + + removed_token_count += row.size(); + } + + r.first = static_cast(temp_r_first); + r.second -= static_cast(removed_token_count); + } + + for (std::size_t i = row_range.second; i < dsv_index_.row_index.size(); ++i) + { + row_index_range_t& r = dsv_index_.row_index[i]; + + r.first -= static_cast(removed_token_count); + r.second -= static_cast(removed_token_count); + } + + if (!remove_row_list.empty()) + { + remove_inplace(index_remover(remove_row_list),dsv_index_.row_index); + } + + if (!remove_token_list.empty()) + { + remove_inplace(index_remover(remove_token_list),dsv_index_.token_list); + } + + return true; + } + + template + inline bool remove_row_if(Predicate predicate) + { + return remove_row_if(all_rows(),predicate); + } + + template + inline std::size_t remove_token_if(const row_range_t& row_range, Predicate predicate) + { + if (row_range_invalid(row_range)) + return 0; + + std::size_t removed_token_count = 0; + std::deque remove_token_list; + std::deque remove_row_list; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + row_index_range_t& r = dsv_index_.row_index[i]; + std::size_t temp_r_first = r.first - removed_token_count; + row_type row(i,dsv_index_); + + for (std::size_t j = 0; j < row.size(); ++j) + { + if (predicate(row.token(j))) + { + remove_token_list.push_back(r.first + j); + ++removed_token_count; + } + } + + r.first = static_cast(temp_r_first); + r.second -= static_cast(removed_token_count); + + if (0 == dsv_index_.token_count(r)) + { + remove_row_list.push_back(i); + } + } + + for (std::size_t i = row_range.second; i < dsv_index_.row_index.size(); ++i) + { + row_index_range_t& r = dsv_index_.row_index[i]; + r.first -= static_cast(removed_token_count); + r.second -= static_cast(removed_token_count); + } + + if (!remove_row_list.empty()) + { + remove_inplace(index_remover(remove_row_list),dsv_index_.row_index); + } + + if (!remove_token_list.empty()) + { + remove_inplace(index_remover(remove_token_list),dsv_index_.token_list); + } + + if (!remove_token_list.empty()) + { + update_minmax_columns(); + } + + return remove_token_list.size(); + } + + inline std::size_t remove_empty_tokens(const row_range_t& range) + { + return remove_token_if(range,is_empty_token()); + } + + inline std::size_t remove_empty_tokens() + { + return remove_empty_tokens(all_rows()); + } + + inline void enforce_column_count(const row_range_t& row_range, + const std::size_t& column_count) + { + if (row_range_invalid(row_range)) + return; + + remove_row_if(insufficient_number_of_columns(column_count)); + + min_column_count_ = column_count; + max_column_count_ = column_count; + } + + inline void enforce_column_count(const std::size_t& column_count) + { + enforce_column_count(all_rows(),column_count); + } + + inline void enforce_min_max_column_count(const row_range_t& row_range, + const std::size_t& min_column_count, + const std::size_t& max_column_count) + { + if (row_range_invalid(row_range)) + return; + + remove_row_if(insufficient_number_of_minmax_columns(min_column_count,max_column_count)); + + min_column_count_ = min_column_count; + max_column_count_ = max_column_count; + } + + inline void enforce_min_max_column_count(const std::size_t& min_column_count, + const std::size_t& max_column_count) + { + enforce_min_max_column_count(all_rows(),min_column_count,max_column_count); + } + + inline void clear(const bool force_delete_buffer = false) + { + if (load_from_file_ || force_delete_buffer) + delete[] buffer_; + + buffer_ = 0; + buffer_size_ = 0; + min_column_count_ = 0; + max_column_count_ = 0; + state_ = false; + file_name_ = ""; + dsv_index_.clear(); + } + + inline std::size_t column_width(const std::size_t& col, + const row_range_t& row_range) const + { + if (col > max_column_count_) + return 0; + else if (row_range_invalid(row_range)) + return 0; + + std::size_t result = 0; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + + if (col < dsv_index_.token_count(r)) + { + const range_t& range = *(dsv_index_.token_list.begin() + r.first + col); + + result = std::max(std::distance(range.first,range.second),result); + } + } + + return result; + } + + inline std::size_t column_width(const std::size_t& col) const + { + return column_width(col,all_rows()); + } + + template class Sequence> + inline void get_column_widths(Sequence& columns) + { + for (std::size_t c = 0; c < max_column_count(); ++c) + { + columns.push_back(column_width(c)); + } + } + + template class Sequence> + inline void get_column_widths(Sequence,Allocator>& columns) + { + for (std::size_t c = 0; c < max_column_count(); ++c) + { + columns.push_back(std::make_pair(c,column_width(c))); + } + } + + template + inline std::size_t accumulate_row(const std::size_t& row, T& result) const + { + if (row >= dsv_index_.row_index.size()) + return 0; + + const row_index_range_t& r = dsv_index_.row_index[row]; + + token_list_t::const_iterator itr = dsv_index_.token_list.begin() + r.first; + token_list_t::const_iterator end = dsv_index_.token_list.begin() + r.second + 1; + + std::size_t process_count = 0; + T current_value = T(); + + while (end != itr) + { + if (string_to_type_converter((*itr).first,(*itr).second,current_value)) + { + result += current_value; + ++process_count; + } + else + return 0; + + ++itr; + } + + return process_count; + } + + template + inline std::size_t accumulate_column(const std::size_t& col, + const row_range_t& row_range, + T& result) const + { + if (col > max_column_count_) + return 0; + else if (row_range_invalid(row_range)) + return 0; + + std::size_t process_count = 0; + T current_value = T(); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + + if (col < dsv_index_.token_count(r)) + { + const range_t& range = *(dsv_index_.token_list.begin() + r.first + col); + + if (string_to_type_converter(range.first,range.second,current_value)) + result += current_value; + else + return 0; + } + + ++process_count; + } + + return process_count; + } + + template + inline std::size_t accumulate_column(const std::size_t& col, T& result) const + { + return accumulate_column(col,all_rows(),result); + } + + template + inline std::size_t accumulate_column(const std::size_t& col, + const row_range_t& row_range, + Predicate p, + T& result) const + { + if (col > max_column_count_) + return 0; + else if (row_range_invalid(row_range)) + return 0; + + std::size_t process_count = 0; + T current_value = T(); + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + + if (col < dsv_index_.token_count(r)) + { + row_type row = row_type(i,dsv_index_); + + if (p(row)) + { + const range_t& range = row.token(col); + + if (string_to_type_converter(range.first,range.second,current_value)) + { + result += current_value; + ++process_count; + } + else + return 0; + } + } + } + + return process_count; + } + + template + inline std::size_t accumulate_column(const std::size_t& col, + Predicate p, + T& result) const + { + return accumulate_column(col,all_rows(),p,result); + } + + inline bool join_row(const std::size_t& row, + const std::string& delimiter, + std::string& result) + { + if (row >= dsv_index_.row_index.size()) + return false; + + const row_index_range_t& r = dsv_index_.row_index[row]; + + token_list_t::const_iterator itr = dsv_index_.token_list.begin() + r.first; + token_list_t::const_iterator end = dsv_index_.token_list.begin() + r.second + (row < (dsv_index_.row_index.size() - 1) ? 1 : 0); + + result.reserve(delimiter.size() * dsv_index_.token_count(r) + std::distance(itr->first,end->second)); + + bool appended = false; + + while (end != itr) + { + if (!delimiter.empty() && appended) + result.append(delimiter); + + appended = false; + + if ((*itr).first != (*itr).second) + { + result.append((*itr).first,(*itr).second); + appended = true; + } + + ++itr; + } + + return true; + } + + template + inline bool join_row(const std::size_t& row, + Predicate predicate, + const std::string& delimiter, + std::string& result) + { + if (row >= dsv_index_.row_index.size()) + return false; + + const row_index_range_t& r = dsv_index_.row_index[row]; + + token_list_t::const_iterator itr = (dsv_index_.token_list.begin() + r.first); + token_list_t::const_iterator end = dsv_index_.token_list.begin() + r.second + (row < (dsv_index_.row_index.size() - 1) ? 1 : 0); + + result.reserve(delimiter.size() * dsv_index_.token_count(r) + std::distance(itr->first,end->second)); + + bool appended = false; + + while (end != itr) + { + if (!delimiter.empty() && appended) + result.append(delimiter); + + appended = false; + + if ((*itr).first != (*itr).second) + { + if (predicate(*itr)) + { + result.append((*itr).first,(*itr).second); + appended = true; + } + } + + ++itr; + } + + return true; + } + + template + inline bool join_row(const std::size_t& row, + Predicate predicate, + const char* delimiter, + std::string& result) + { + return join_row(row,predicate,std::string(delimiter),result); + } + + inline bool join_column(const std::size_t& col, + const row_range_t& row_range, + const std::string& delimiter, + std::string& result) const + { + if (col > max_column_count_) + return false; + else if (row_range_invalid(row_range)) + return false; + + bool appended = false; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + + if (col < dsv_index_.token_count(r)) + { + row_type row = row_type(i,dsv_index_); + + const range_t& range = row.token(col); + + if (!delimiter.empty() && appended) + result.append(delimiter); + + appended = false; + + if (range.first != range.second) + { + result.append(range.first,range.second); + appended = true; + } + } + } + + return true; + } + + inline bool join_column(const std::size_t& col, + const std::string& delimiter, + std::string& result) const + { + return join_column(col,all_rows(),delimiter,result); + } + + template + inline bool join_column(const std::size_t& col, + const row_range_t& row_range, + Predicate predicate, + const std::string& delimiter, + std::string& result) const + { + if (col > max_column_count_) + return false; + else if (row_range_invalid(row_range)) + return false; + + bool appended = false; + + const std::size_t pre_end_index = row_range.second - 1; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + + if (col < dsv_index_.token_count(r)) + { + row_type row = row_type(i,dsv_index_); + const range_t& range = row.token(col); + + if (!delimiter.empty() && appended && (pre_end_index != i)) + result.append(delimiter); + + appended = false; + + if (range.first != range.second) + { + if (predicate(row)) + { + result.append(range.first,range.second); + appended = true; + } + } + } + } + + return true; + } + + template + inline bool join_column(const std::size_t& col, + Predicate p, + const std::string& delimiter, + std::string& result) const + { + return join_column(col,all_rows(),p,delimiter,result); + } + + template + inline bool sequential_partition(const row_range_t& row_range, + TransitionPredicate p, + Function f) + { + if (row_range_invalid(row_range)) + return false; + + row_range_t r(row_range.first,row_range.first); + + for (row_range_t::first_type i = row_range.first; i < row_range.second; ++i) + { + if (p(row_type(i,dsv_index_))) + { + if (r.first != r.second) + { + r.second = i; + if (!f(*this,r)) + return false; + } + + r.first = r.second; + } + else + r.second = i; + } + + if (r.first != row_range.second) + { + r.second = row_range.second; + if (!f(*this,r)) + return false; + } + + return true; + } + + template + inline bool sequential_partition(TransitionPredicate p, Function f) + { + return sequential_partition(all_rows(),p,f); + } + + static inline token_grid::options default_options() + { + return options(); + } + + template + inline std::size_t for_each_row(const row_range_t& row_range, Function f) const + { + if (row_range_invalid(row_range)) + return 0; + + std::size_t row_count = 0; + + for (std::size_t i = row_range.first; i < row_range.second; ++i) + { + f(row_type(i,dsv_index_)); + ++row_count; + } + + return row_count; + } + + template + inline std::size_t for_each_row(Function f) const + { + return for_each_row(all_rows(),f); + } + + bool load(const std::string& file_name, + const token_grid::options& options) + { + file_name_ = file_name; + + if ((load_from_file_) && (0 != buffer_)) + { + delete [] buffer_; + buffer_ = 0; + } + + buffer_size_ = 0; + min_column_count_ = 0; + max_column_count_ = 0; + options_ = options; + load_from_file_ = true; + state_ = load(); + + if (state_) + return true; + else + { + file_name_ = ""; + + if (load_from_file_ && buffer_) + { + delete [] buffer_; + buffer_ = 0; + } + + return false; + } + } + + bool load(unsigned char* buffer, + const std::size_t buffer_size, + const token_grid::options& options) + { + file_name_ = ""; + + if (load_from_file_ && buffer_) + { + delete [] buffer_; + buffer_ = 0; + } + + min_column_count_ = 0; + max_column_count_ = 0; + options_ = options; + load_from_file_ = false; + buffer_ = buffer; + buffer_size_ = buffer_size; + state_ = load(); + + if (state_) + return true; + else + { + file_name_ = ""; + + if (load_from_file_ && buffer_) + { + delete [] buffer_; + buffer_ = 0; + } + + return false; + } + } + + private: + + token_grid(const token_grid& tg); + token_grid& operator=(const token_grid& tg); + + struct is_empty_token + { + inline bool operator()(const range_t& r) const + { + return r.first == r.second; + } + }; + + struct insufficient_number_of_columns + { + insufficient_number_of_columns(const std::size_t& noc) + : num_of_cols(noc) + {} + + inline bool operator()(const row_type& row) const + { + return (num_of_cols != row.size()); + } + + std::size_t num_of_cols; + }; + + struct insufficient_number_of_minmax_columns + { + insufficient_number_of_minmax_columns(const std::size_t& min_col, const std::size_t& max_col) + : min_column_count(min_col), + max_column_count(max_col) + {} + + inline bool operator()(const row_type& row) const + { + return (row.size() < min_column_count) || (max_column_count < row.size()); + } + + std::size_t min_column_count; + std::size_t max_column_count; + }; + + class double_quotes_predicate + { + public: + + double_quotes_predicate(const std::string& delimiters) + : in_bracket_range_(false), + mdp_(delimiters) + {} + + inline bool operator()(const unsigned char c) const + { + if ('"' == c) + { + in_bracket_range_ = !in_bracket_range_; + return false; + } + else if (in_bracket_range_) + return false; + else + return mdp_(c); + } + + inline void reset() + { + in_bracket_range_ = false; + } + + private: + + mutable bool in_bracket_range_; + mutable strtk::multiple_char_delimiter_predicate mdp_; + }; + + inline bool load() + { + if (load_from_file_ && !load_buffer_from_file()) + return false; + + dsv_index_.token_list.clear(); + dsv_index_.row_index.clear(); + + multiple_char_delimiter_predicate text_newline_predicate(options_.row_delimiters); + + if (!options_.support_dquotes) + { + multiple_char_delimiter_predicate token_predicate(options_.column_delimiters); + + strtk::split(text_newline_predicate, + buffer_, buffer_ + buffer_size_, + strtk::functional_inserter( + row_processor + (dsv_index_,token_predicate,options_.column_split_option)), + strtk::split_options::compress_delimiters); + } + else + { + double_quotes_predicate token_predicate_dblq(options_.column_delimiters); + + strtk::split(text_newline_predicate, + buffer_, buffer_ + buffer_size_, + strtk::functional_inserter( + row_processor + (dsv_index_,token_predicate_dblq,options_.column_split_option)), + strtk::split_options::compress_delimiters); + + if (options_.trim_dquotes) + { + for (std::size_t i = 0; i < dsv_index_.token_list.size(); ++i) + { + if ( + ((*(dsv_index_.token_list[i].first )) == '"') && + ((*(dsv_index_.token_list[i].second - 1)) == '"') + ) + { + ++dsv_index_.token_list[i].first; + --dsv_index_.token_list[i].second; + } + } + } + } + + update_minmax_columns(); + + return true; + } + + inline bool load_buffer_from_file() + { + std::ifstream stream(file_name_.c_str(),std::ios::binary); + + if (!stream) + return false; + + stream.seekg (0,std::ios::end); + buffer_size_ = static_cast(stream.tellg()); + + if (0 == buffer_size_) + return false; + + stream.seekg (0,std::ios::beg); + buffer_ = new unsigned char[buffer_size_]; + stream.read(reinterpret_cast(buffer_),static_cast(buffer_size_)); + stream.close(); + + return true; + } + + template + inline void process_token(const range_t& range, OutputIterator out) const + { + typedef typename std::iterator_traits::value_type output_type; + (*out) = string_to_type_converter(range.first,range.second); + ++out; + } + + template + inline void process_token_checked(const range_t& range, OutputIterator out) const + { + typedef typename std::iterator_traits::value_type output_type; + + output_type value; + + if (string_to_type_converter(range.first,range.second,value)) + { + (*out) = value; + ++out; + } + } + + inline bool row_range_invalid(const row_range_t& row_range) const + { + if (row_range.first > dsv_index_.row_index.size()) + return true; + else if (row_range.second > dsv_index_.row_index.size()) + return true; + else if (row_range.first > row_range.second) + return true; + else + return false; + } + + inline void update_minmax_columns() + { + min_column_count_ = std::numeric_limits::max(); + max_column_count_ = std::numeric_limits::min(); + + for (std::size_t i = 0; i < dsv_index_.row_index.size(); ++i) + { + const row_index_range_t& r = dsv_index_.row_index[i]; + const std::size_t number_of_tokens = dsv_index_.token_count(r); + + if (number_of_tokens > max_column_count_) + max_column_count_ = number_of_tokens; + if (number_of_tokens < min_column_count_) + min_column_count_ = number_of_tokens; + } + } + + private: + + store dsv_index_; + std::string file_name_; + unsigned char* buffer_; + std::size_t buffer_size_; + std::size_t min_column_count_; + std::size_t max_column_count_; + options options_; + bool load_from_file_; + bool state_; + }; + + template + inline bool convert_string_range(const std::pair& range, T& t) + { + if (range.first == range.second) return false; + t = string_to_type_converter(std::string(range.first,range.second)); + return true; + } + + struct empty_range + { + public: + + template + inline bool operator()(const InputIterator begin, const InputIterator end) + { + return (0 == std::distance(begin,end)); + } + }; + + struct nonempty_range + { + public: + + template + inline bool operator()(const InputIterator begin, const InputIterator end) + { + return (0 != std::distance(begin,end)); + } + }; + + template + struct filter_non_empty_range + { + public: + + filter_non_empty_range(OutputIterator out) + : out_(out) + {} + + template + inline void operator() (const std::pair& range) + { + if (range.first != range.second) + { + *out_++ = range; + } + } + + private: + + OutputIterator out_; + }; + + template + struct filter_on_wildcard_match + { + public: + + filter_on_wildcard_match(const std::string& match_pattern, + OutputPredicate& predicate, + bool allow_through_on_match = true) + : allow_through_on_match_(allow_through_on_match), + match_pattern_(match_pattern), + predicate_(predicate) + {} + + template + inline void operator() (const std::pair& range) const + { + if (match(match_pattern_.begin(),match_pattern_.end(),range.first,range.second,'*','?') ^ allow_through_on_match_) + { + predicate_(range); + } + } + + inline void operator() (const std::string& s) const + { + if (match(match_pattern_,s) ^ allow_through_on_match_) + { + predicate_(s); + } + } + + private: + + filter_on_wildcard_match(const filter_on_wildcard_match& fom); + filter_on_wildcard_match& operator=(const filter_on_wildcard_match& fom); + + bool allow_through_on_match_; + std::string match_pattern_; + OutputPredicate& predicate_; + }; + + template + struct filter_on_match + { + public: + + filter_on_match(const std::string* begin, const std::string* end, + OutputPredicate predicate, + bool case_insensitive, + bool allow_through_on_match = true) + : case_insensitive_(case_insensitive), + allow_through_on_match_(allow_through_on_match), + begin_(begin), + end_(end), + predicate_(predicate) + {} + + template + inline void operator() (const std::pair& range) const + { + for (const std::string* itr = begin_; end_ != itr; ++itr) + { + if ( + (case_insensitive_ && + (imatch(to_ptr((*itr)), to_ptr((*itr)) + (*itr).size(), range.first,range.second))) || + (!case_insensitive_ && std::equal((*itr).begin(), (*itr).end(), range.first)) + ) + { + if (allow_through_on_match_) + { + predicate_(range); + } + + return; + } + } + + if (!allow_through_on_match_) + { + predicate_(range); + } + } + + inline void operator() (const std::string& s) const + { + for (const std::string* itr = begin_; end_ != itr; ++itr) + { + if ( + (case_insensitive_ && + (imatch((*itr).begin(),(*itr).end(),s.begin(),s.end()))) || + (!case_insensitive_ && std::equal((*itr).begin(),(*itr).end(),s.begin())) + ) + { + if (allow_through_on_match_) + { + predicate_(s); + return; + } + } + } + + if (!allow_through_on_match_) + { + predicate_(s); + return; + } + } + + private: + + filter_on_match& operator=(const filter_on_match& fom); + + private: + + bool case_insensitive_; + bool allow_through_on_match_; + const std::string* begin_; + const std::string* end_; + OutputPredicate predicate_; + }; + + template + inline void skip_while_matching(Iterator& itr, + const Iterator& end, + const MatchPredicate& predicate) + { + while (end != itr) + { + if (predicate(*itr)) + ++itr; + else + break; + } + } + + template + struct size_equal_to + { + template + inline bool operator()(const Iterator begin, const Iterator end) const + { + return length == std::distance(begin,end); + } + + template + inline bool operator()(const std::pair& range) const + { + return length == std::distance(range.first,range.second); + } + + template class Sequence> + inline bool operator()(const Sequence& sequence) const + { + return length == sequence.size(); + } + + template + inline bool operator()(const std::set& set) const + { + return length == set.size(); + } + + template + inline bool operator()(const std::multiset& multiset) const + { + return length == multiset.size(); + } + + inline bool operator()(const std::string& str) const + { + return length == str.size(); + } + }; + + template + struct size_less_than + { + template + inline bool operator()(const Iterator begin, const Iterator end) const + { + return std::distance(begin,end) < static_cast::difference_type>(length); + } + + template + inline bool operator()(const std::pair& range) const + { + return std::distance(range.first,range.second) < static_cast::difference_type>(length); + } + + template class Sequence> + inline bool operator()(const Sequence& sequence) const + { + return sequence.size() < length; + } + + template + inline bool operator()(const std::set& set) const + { + return set.size() < length; + } + + template + inline bool operator()(const std::multiset& multiset) const + { + return multiset.size() < length; + } + + inline bool operator()(const std::string& str) const + { + return str.size() < length; + } + }; + + template + struct size_greater_than + { + template + inline bool operator()(const Iterator begin, const Iterator end) const + { + return std::distance(begin,end) > static_cast::difference_type>(length); + } + + template + inline bool operator()(const std::pair& range) const + { + return std::distance(range.first,range.second) > static_cast::difference_type>(length); + } + + template class Sequence> + inline bool operator()(const Sequence& sequence) const + { + return sequence.size() > length; + } + + template + inline bool operator()(const std::set& set) const + { + return set.size() > length; + } + + template + inline bool operator()(const std::multiset& multiset) const + { + return multiset.size() > length; + } + + inline bool operator()(const std::string& str) const + { + return str.size() > length; + } + }; + + struct size_is_even + { + template + inline bool operator()(const Iterator begin, const Iterator end) const + { + return 0 == (std::distance(begin,end) % 2); + } + + template + inline bool operator()(const std::pair& range) const + { + return 0 == (std::distance(range.first,range.second) % 2); + } + + template class Sequence> + inline bool operator()(const Sequence& sequence) const + { + return 0 == (sequence.size() % 2); + } + + template + inline bool operator()(const std::set& set) const + { + return 0 == (set.size() % 2); + } + + template + inline bool operator()(const std::multiset& multiset) const + { + return 0 == (multiset.size() % 2); + } + + inline bool operator()(const std::string& str) const + { + return 0 == (str.size() % 2); + } + }; + + struct size_is_odd + { + template + inline bool operator()(const Iterator begin, const Iterator end) const + { + return 0 != (std::distance(begin,end) % 2); + } + + template + inline bool operator()(const std::pair& range) const + { + return 0 != (std::distance(range.first,range.second) % 2); + } + + template class Sequence> + inline bool operator()(const Sequence& sequence) const + { + return 0 != (sequence.size() % 2); + } + + template + inline bool operator()(const std::set& set) const + { + return 0 != (set.size() % 2); + } + + template + inline bool operator()(const std::multiset& multiset) const + { + return 0 != (multiset.size() % 2); + } + + inline bool operator()(const std::string& str) const + { + return 0 != (str.size() % 2); + } + }; + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14, T15& t15, T16& t16) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 16; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + #define strtk_cmpstmt(N) \ + if (!string_to_type_converter((*itr).first,(*itr).second, t##N)) \ + return false; \ + ++itr; \ + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + strtk_cmpstmt(12) + strtk_cmpstmt(13) + strtk_cmpstmt(14) + strtk_cmpstmt(15) + return string_to_type_converter((*itr).first,(*itr).second,t16); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14, T15& t15) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 15; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + strtk_cmpstmt(12) + strtk_cmpstmt(13) + strtk_cmpstmt(14) + return string_to_type_converter((*itr).first,(*itr).second,t15); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 14; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + strtk_cmpstmt(12) + strtk_cmpstmt(13) + return string_to_type_converter((*itr).first,(*itr).second,t14); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 13; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + strtk_cmpstmt(12) + return string_to_type_converter((*itr).first,(*itr).second,t13); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11, T12& t12) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 12; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + return string_to_type_converter((*itr).first,(*itr).second,t12); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 11; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + return string_to_type_converter((*itr).first,(*itr).second,t11); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 10; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + return string_to_type_converter((*itr).first,(*itr).second,t10); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 9; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + return string_to_type_converter((*itr).first,(*itr).second,t9); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 8; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + return string_to_type_converter((*itr).first,(*itr).second,t8); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 7; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + return string_to_type_converter((*itr).first,(*itr).second,t7); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 6; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + return string_to_type_converter((*itr).first,(*itr).second,t6); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 5; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + return string_to_type_converter((*itr).first,(*itr).second,t5); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 4; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + return string_to_type_converter((*itr).first,(*itr).second,t4); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 3; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + return string_to_type_converter((*itr).first,(*itr).second,t3); + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 2; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + strtk_cmpstmt(1) + return string_to_type_converter((*itr).first,(*itr).second,t2); + #undef strtk_cmpstmt + } + + template + inline bool parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + T& t) + { + typedef typename details::is_valid_iterator::type itr_type; + details::convert_type_assert(); + static const std::size_t token_count = 1; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + iterator_type token_list[token_count]; + + const std::size_t parsed_token_count = split_n(delimiters, + begin, end, + token_count, + token_list, + split_options::compress_delimiters); + if (token_count > parsed_token_count) + return false; + + iterator_type_ptr itr = token_list; + return string_to_type_converter((*itr).first,(*itr).second,t); + } + + namespace details + { + template + inline std::size_t parse_impl(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + OutputIterator out, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + + details::convert_type_assert(); + + if (1 == delimiters.size()) + return split(single_delimiter_predicate(delimiters[0]), + begin, end, + out, + split_option); + else + return split(multiple_char_delimiter_predicate(delimiters), + begin, end, + out, + split_option); + } + } + + #define strtk_def_parse_cont(Type) \ + template \ + inline std::size_t parse(const InputIterator begin, \ + const InputIterator end, \ + const std::string& delimiters, \ + Type& sequence, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + return details::parse_impl(begin, end, \ + delimiters, \ + range_to_type_back_inserter(sequence), \ + split_option); \ + } \ + + strtk_def_parse_cont(std::vector) + strtk_def_parse_cont(std::deque ) + strtk_def_parse_cont(std::list ) + + #undef strtk_def_parse_cont + + template + inline std::size_t parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(begin, end, + delimiters, + range_to_type_inserter(set), + split_option); + } + + template + inline std::size_t parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(begin, end, + delimiters, + range_to_type_inserter(multiset), + split_option); + } + + template + inline std::size_t parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(begin, end, + delimiters, + range_to_type_push_inserter(queue), + split_option); + } + + template + inline std::size_t parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(begin, end, + delimiters, + range_to_type_push_inserter(stack), + split_option); + } + + template + inline std::size_t parse(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(begin, end, + delimiters, + range_to_type_push_inserter(priority_queue), + split_option); + } + + template class Sequence> + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + Sequence& sequence, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first,range.second, + delimiters, + range_to_type_back_inserter(sequence), + split_option); + } + + template + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first, range.second, + delimiters, + range_to_type_inserter(set), + split_option); + } + + template + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first, range.second, + delimiters, + range_to_type_inserter(multiset), + split_option); + } + + template + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first, range.second, + delimiters, + range_to_type_push_inserter(queue), + split_option); + } + + template + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first, range.second, + delimiters, + range_to_type_push_inserter(stack), + split_option); + } + + template + inline std::size_t parse(const std::pair& range, + const std::string& delimiters, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return details::parse_impl(range.first, range.second, + delimiters, + range_to_type_push_inserter(priority_queue), + split_option); + } + + namespace details + { + class container_adder + { + private: + + class container_adder_base + { + public: + + typedef const char* itr_type; + + virtual ~container_adder_base(){} + + template + inline bool add(const InputIterator begin, const InputIterator end) const + { + return add_impl(begin,end); + } + + template + inline bool add(const std::pair& range) const + { + return add(range.first,range.second); + } + + protected: + + virtual bool add_impl(const itr_type begin, const itr_type end) const = 0; + + }; + + template class Sequence> + class sequence_adder_impl : public container_adder_base + { + public: + + typedef Sequence sequence_t; + + sequence_adder_impl(sequence_t& seq) + : sequence_(seq) + {} + + protected: + + bool add_impl(const itr_type begin, const itr_type end) const + { + T t; + if (!string_to_type_converter(begin, end, t)) return false; + sequence_.push_back(t); + return true; + } + + private: + + sequence_adder_impl operator=(const sequence_adder_impl&); + + sequence_t& sequence_; + }; + + template class Set> + class set_adder_impl : public container_adder_base + { + public: + + set_adder_impl(Set& set) + : set_(set) + {} + + bool add_impl(const itr_type begin, const itr_type end) const + { + T t; + if (!string_to_type_converter(begin, end, t)) return false; + set_.insert(t); + return true; + } + + private: + + set_adder_impl operator=(const set_adder_impl&); + + Set& set_; + }; + + template + class pq_adder_impl : public container_adder_base + { + public: + + pq_adder_impl(std::priority_queue& pq) + : pq_(pq) + {} + + bool add_impl(const itr_type begin, const itr_type end) const + { + T t; + if (!string_to_type_converter(begin, end, t)) return false; + pq_.push(t); + return true; + } + + private: + + pq_adder_impl operator=(const pq_adder_impl&); + + std::priority_queue& pq_; + }; + + template class SContainer> + class stack_queue_adder_impl : public container_adder_base + { + public: + + stack_queue_adder_impl(SContainer& container) + : container_(container) + {} + + bool add_impl(const itr_type begin, const itr_type end) const + { + T t; + if (!string_to_type_converter(begin, end, t)) return false; + container_.push(t); + return true; + } + + private: + + stack_queue_adder_impl operator=(const stack_queue_adder_impl&); + + SContainer& container_; + }; + + public: + + template + container_adder(std::vector& vec) + : container_adder_base_(new(buffer)sequence_adder_impl(vec)) + {} + + template + container_adder(std::deque& deq) + : container_adder_base_(new(buffer)sequence_adder_impl(deq)) + {} + + template + container_adder(std::list& list) + : container_adder_base_(new(buffer)sequence_adder_impl(list)) + {} + + template + container_adder(std::set& set) + : container_adder_base_(new(buffer)set_adder_impl(set)) + {} + + template + container_adder(std::multiset& multiset) + : container_adder_base_(new(buffer)set_adder_impl(multiset)) + {} + + template + container_adder(std::priority_queue& pq) + : container_adder_base_(new(buffer)pq_adder_impl(pq)) + {} + + template + container_adder(std::queue& queue) + : container_adder_base_(new(buffer)stack_queue_adder_impl(queue)) + {} + + template + container_adder(std::stack& stack) + : container_adder_base_(new(buffer)stack_queue_adder_impl(stack)) + {} + + template + inline bool add(InputIterator begin, InputIterator end) const + { + return container_adder_base_->add(begin,end); + } + + template + inline bool add(std::pair& range) const + { + return add(range.first,range.second); + } + + template + inline bool operator()(const InputIterator begin, const InputIterator end) + { + InputIterator itr = begin; + + while (end != itr) + { + if (!add(*itr)) return false; + ++itr; + } + + return true; + } + + private: + + mutable container_adder_base* container_adder_base_; + unsigned char buffer[64]; + }; + + template + struct ca_type { typedef T& type; }; + + template + struct ca_type { typedef details::container_adder type; }; + + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, + T8& t8, T9& t9, T10& t10, T11& t11, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 12) return false; + + iterator_type_ptr itr = token_list.begin(); + + #define strtk_cmpstmt(N) \ + if (!string_to_type_converter((*itr).first,(*itr).second, t##N)) \ + return false; \ + ++itr; \ + + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + strtk_cmpstmt(11) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, T10& t10, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 11) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + strtk_cmpstmt(10) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 10) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + strtk_cmpstmt( 9) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, T8& t8, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 9) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + strtk_cmpstmt( 8) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 8) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + strtk_cmpstmt( 7) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 7) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + strtk_cmpstmt( 6) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 6) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + strtk_cmpstmt( 5) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 5) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + strtk_cmpstmt( 4) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 4) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + strtk_cmpstmt( 3) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, T2& t2, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 3) return false; + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + strtk_cmpstmt( 2) + return ca(itr,token_list.end()); + } + + template + inline bool parse(const InputIterator begin, const InputIterator end, + const std::string& delimiters, + T1& t1, + details::container_adder ca) + { + typedef typename details::is_valid_iterator::type itr_type; + typedef std::pair iterator_type; + typedef typename std::deque::iterator iterator_type_ptr; + + details::convert_type_assert(); + + std::deque token_list; + + if (1 == delimiters.size()) + split(single_delimiter_predicate(delimiters[0]), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + else + split(multiple_char_delimiter_predicate(delimiters), + begin, end, + std::back_inserter(token_list), + split_options::compress_delimiters); + + if (token_list.size() < 2) return false; + + iterator_type_ptr itr = token_list.begin(); + strtk_cmpstmt( 1) + return ca(itr,token_list.end()); + #undef strtk_cmpstmt + } + + #define strtk_def_parse_n_cont(Type) \ + template \ + inline std::size_t parse_n(const InputIterator begin, \ + const InputIterator end, \ + const std::string& delimiters, \ + const std::size_t& n, \ + Type& sequence, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + typedef typename details::is_valid_iterator::type itr_type; \ + const std::size_t original_size = sequence.size(); \ + \ + details::convert_type_assert(); \ + \ + if (1 == delimiters.size()) \ + split_n(single_delimiter_predicate(delimiters[0]), \ + begin, end, \ + n, \ + range_to_type_back_inserter(sequence), \ + split_option); \ + else \ + split_n(multiple_char_delimiter_predicate(delimiters), \ + begin, end, \ + n, \ + range_to_type_back_inserter(sequence), \ + split_option); \ + \ + return sequence.size() - original_size; \ + } \ + + strtk_def_parse_n_cont(std::vector) + strtk_def_parse_n_cont(std::deque ) + strtk_def_parse_n_cont(std::list ) + + #undef strtk_def_parse_n_cont + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + const std::size_t original_size = set.size(); + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_type_inserter(set), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_type_inserter(set), + split_option); + + return set.size() - original_size; + } + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + const std::size_t original_size = multiset.size(); + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_type_inserter(multiset), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_type_inserter(multiset), + split_option); + + return multiset.size() - original_size; + } + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + const std::size_t original_size = queue.size(); + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_type_push_inserter(queue), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_type_push_inserter(queue), + split_option); + + return queue.size() - original_size; + } + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + const std::size_t original_size = stack.size(); + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_type_push_inserter(stack), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_type_push_inserter(stack), + split_option); + + return stack.size() - original_size; + } + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + const std::size_t original_size = priority_queue.size(); + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_type_push_inserter(priority_queue), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_type_push_inserter(priority_queue), + split_option); + + return priority_queue.size() - original_size; + } + + template + inline std::size_t parse_n(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + T* out, + const split_options::type& split_option = split_options::compress_delimiters) + { + typedef typename details::is_valid_iterator::type itr_type; + + std::size_t insert_count = 0; + + details::convert_type_assert(); + + if (1 == delimiters.size()) + split_n(single_delimiter_predicate(delimiters[0]), + begin, end, + n, + range_to_ptr_type(out,insert_count), + split_option); + else + split_n(multiple_char_delimiter_predicate(delimiters), + begin, end, + n, + range_to_ptr_type(out,insert_count), + split_option); + + return insert_count; + } + + template class Sequence> + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + Sequence& sequence, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,sequence,split_option); + } + + template + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,set,split_option); + } + + template + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,multiset,split_option); + } + + template + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,queue,split_option); + } + + template + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,stack,split_option); + } + + template + inline std::size_t parse_n(const std::pair& range, + const std::string& delimiters, + const std::size_t& n, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(range.first,range.second,delimiters,n,priority_queue,split_option); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14, T15& t15, T16& t16) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15, + typename details::ca_type::result_t>::type(t16)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14, T15& t15) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14, + typename details::ca_type::result_t>::type(t15)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13, T14& t14) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13, + typename details::ca_type::result_t>::type(t14)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1 , T2& t2, T3& t3, T4& t4, + T5& t5 , T6& t6, T7& t7, T8& t8, + T9& t9 , T10& t10, T11& t11, T12& t12, + T13& t13) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12, + typename details::ca_type::result_t>::type(t13)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11, T12& t12) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11, + typename details::ca_type::result_t>::type(t12)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9,t10, + typename details::ca_type::result_t>::type(t11)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8,t9, + typename details::ca_type::result_t>::type(t10)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7,t8, + typename details::ca_type::result_t>::type(t9)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7, + typename details::ca_type::result_t>::type(t8)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + typename details::ca_type::result_t>::type(t7)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5, + typename details::ca_type::result_t>::type(t6)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4, + typename details::ca_type::result_t>::type(t5)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3, + typename details::ca_type::result_t>::type(t4)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2, + typename details::ca_type::result_t>::type(t3)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T1& t1, T2& t2) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1, + typename details::ca_type::result_t>::type(t2)); + } + + template + inline bool parse(const std::string& data, + const std::string& delimiters, + T& t) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + typename details::ca_type::result_t>::type(t)); + } + + #define strtk_def_parse_cont(Type) \ + template \ + inline std::size_t parse(const std::string& data, \ + const std::string& delimiters, \ + Type& cont, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + return parse(to_ptr(data), to_ptr(data) + data.size(), \ + delimiters, \ + cont, \ + split_option); \ + } \ + + strtk_def_parse_cont(std::vector) + strtk_def_parse_cont(std::deque ) + strtk_def_parse_cont(std::list ) + + #undef strtk_def_parse_cont + + template + inline std::size_t parse(const std::string& data, + const std::string& delimiters, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + set, + split_option); + } + + template + inline std::size_t parse(const std::string& data, + const std::string& delimiters, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + multiset, + split_option); + } + + template + inline std::size_t parse(const std::string& data, + const std::string& delimiters, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + queue, + split_option); + } + + template + inline std::size_t parse(const std::string& data, + const std::string& delimiters, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + stack, + split_option); + } + + template + inline std::size_t parse(const std::string& data, + const std::string& delimiters, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + priority_queue, + split_option); + } + + template class Sequence> + inline std::size_t parse(const int& argc, char* argv[], + Sequence& sequence, + const bool break_on_fail = true) + { + T tmp; + + for (int i = 0; i < argc; ++i) + { + if (!string_to_type_converter(std::string(argv[i]),tmp)) + { + if (break_on_fail) + return i; + else + continue; + } + + sequence.push_back(tmp); + } + + return argc; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + + { + if (9 != argc) return 0; + std::size_t result = 0; + + #define strtk_cmpstmt(N) \ + if (!string_to_type_converter(std::string(argv[N]),t##N)) \ + return result; \ + ++result; \ + + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + strtk_cmpstmt(5) + strtk_cmpstmt(6) + strtk_cmpstmt(7) + strtk_cmpstmt(8) + strtk_cmpstmt(9) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + + { + if (8 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + strtk_cmpstmt(5) + strtk_cmpstmt(6) + strtk_cmpstmt(7) + strtk_cmpstmt(8) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + + { + if (7 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + strtk_cmpstmt(5) + strtk_cmpstmt(6) + strtk_cmpstmt(7) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + + { + if (6 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + strtk_cmpstmt(5) + strtk_cmpstmt(6) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) + { + if (5 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + strtk_cmpstmt(5) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3, T4& t4) + { + if (4 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + strtk_cmpstmt(4) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2, T3& t3) + { + if (3 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + strtk_cmpstmt(3) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1, T2& t2) + { + if (2 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + strtk_cmpstmt(2) + return result; + } + + template + inline std::size_t parse(const int& argc, char* argv[], + T1& t1) + { + if (1 != argc) return 0; + std::size_t result = 0; + strtk_cmpstmt(1) + return result; + #undef strtk_cmpstmt + } + + #define strtk_parse_begin(Type) \ + namespace strtk { \ + bool parse(const std::string& data, const std::string& delimiters, Type& t)\ + { return parse(data,delimiters \ + + #define strtk_parse_type(T) \ + ,t.T \ + + #define strtk_parse_hex_type(T) \ + ,t.T \ + + #define strtk_parse_ignore_token() \ + ,ignore_token() \ + + #define strtk_parse_end() \ + );}} \ + + #define strtk_def_parse_n_seq(Type) \ + template \ + inline std::size_t parse_n(const std::string& data, \ + const std::string& delimiters, \ + const std::size_t& n, \ + Type& sequence, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + return parse_n(to_ptr(data), to_ptr(data) + data.size(), \ + delimiters, \ + n, \ + sequence, \ + split_option); \ + } \ + + strtk_def_parse_n_seq(std::vector) + strtk_def_parse_n_seq(std::deque ) + strtk_def_parse_n_seq(std::list ) + + #undef strtk_def_parse_n_seq + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + set, + split_option); + } + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + multiset, + split_option); + } + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + queue, + split_option); + } + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + stack, + split_option); + } + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + priority_queue, + split_option); + } + + template + inline std::size_t parse_n(const std::string& data, + const std::string& delimiters, + const std::size_t& n, + T* out, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + out, + split_option); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8, T9& t9, T10& t10, T11& t11, T12& t12) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + t7,t8,t9,t10,t11,t12); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8, T9& t9, T10& t10, T11& t11) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + t7,t8,t9,t10,t11); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8, T9& t9, T10& t10) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + t7,t8,t9,t10); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8, T9& t9) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + t7,t8,t9); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6, + t7,t8); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6,t7); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5,t6); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4,t5); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3, T4& t4) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3,t4); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2, T3& t3) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2,t3); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1, T2& t2) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1,t2); + } + + template + inline bool parse_line(std::ifstream& stream, + const std::string& delimiters, + T1& t1) + { + if (!stream) + return false; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return false; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + t1); + } + + template class Sequence> + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + Sequence& sequence, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + sequence, + split_option); + } + + template + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + set, + split_option); + } + + template + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + multiset, + split_option); + } + + template + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + queue, + split_option); + } + + template + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + stack, + split_option); + } + + template + inline std::size_t parse_line(std::ifstream& stream, + const std::string& delimiters, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return false; + return strtk::parse(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + priority_queue, + split_option); + } + + template class Sequence> + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + Sequence& sequence, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + sequence, + split_option); + } + + template + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + set, + split_option); + } + + template + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + multiset, + split_option); + } + + template + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + std::queue& queue, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + queue, + split_option); + } + + template + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + std::stack& stack, + const split_options::type& split_option = split_options::compress_delimiters) + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + stack, + split_option); + } + + template + inline std::size_t parse_line_n(std::ifstream& stream, + const std::string& delimiters, + const std::size_t& n, + std::priority_queue& priority_queue, + const split_options::type& split_option = split_options::compress_delimiters) + + { + if (!stream) + return 0; + std::string data; + data.reserve(strtk::one_kilobyte); + if (!std::getline(stream,data)) + return 0; + if (data.empty() || delimiters.empty()) + return 0; + return strtk::parse_n(to_ptr(data), to_ptr(data) + data.size(), + delimiters, + n, + priority_queue, + split_option); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10, const T11& t11, const T12& t12) + { + output += type_to_string( t1); output += delimiter; + output += type_to_string( t2); output += delimiter; + output += type_to_string( t3); output += delimiter; + output += type_to_string( t4); output += delimiter; + output += type_to_string( t5); output += delimiter; + output += type_to_string( t6); output += delimiter; + output += type_to_string( t7); output += delimiter; + output += type_to_string( t8); output += delimiter; + output += type_to_string( t9); output += delimiter; + output += type_to_string(t10); output += delimiter; + output += type_to_string(t11); output += delimiter; + output += type_to_string(t12); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10, const T11& t11) + { + output += type_to_string( t1); output += delimiter; + output += type_to_string( t2); output += delimiter; + output += type_to_string( t3); output += delimiter; + output += type_to_string( t4); output += delimiter; + output += type_to_string( t5); output += delimiter; + output += type_to_string( t6); output += delimiter; + output += type_to_string( t7); output += delimiter; + output += type_to_string( t8); output += delimiter; + output += type_to_string( t9); output += delimiter; + output += type_to_string(t10); output += delimiter; + output += type_to_string(t11); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); output += delimiter; + output += type_to_string(t6); output += delimiter; + output += type_to_string(t7); output += delimiter; + output += type_to_string(t8); output += delimiter; + output += type_to_string(t9); output += delimiter; + output += type_to_string(t10); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); output += delimiter; + output += type_to_string(t6); output += delimiter; + output += type_to_string(t7); output += delimiter; + output += type_to_string(t8); output += delimiter; + output += type_to_string(t9); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); output += delimiter; + output += type_to_string(t6); output += delimiter; + output += type_to_string(t7); output += delimiter; + output += type_to_string(t8); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); output += delimiter; + output += type_to_string(t6); output += delimiter; + output += type_to_string(t7); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); output += delimiter; + output += type_to_string(t6); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); output += delimiter; + output += type_to_string(t5); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3, const T4& t4) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); output += delimiter; + output += type_to_string(t4); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2, const T3& t3) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); output += delimiter; + output += type_to_string(t3); + } + + template + inline void construct(std::string& output, + const std::string& delimiter, + const T1& t1, const T2& t2) + { + output += type_to_string(t1); output += delimiter; + output += type_to_string(t2); + } + + template + inline void join(std::string& output, + const std::string& delimiter, + const InputIterator begin, + const InputIterator end) + { + InputIterator itr = begin; + while (end != itr) + { + output += type_to_string(*itr); + if (end == (++itr)) + break; + else + output += delimiter; + } + } + + template + inline void join(std::string& output, + const std::string& delimiter, + const std::pair& range) + { + InputIterator itr = range.first; + while (range.second != itr) + { + output += type_to_string(*itr); + if (range.second == (++itr)) + break; + else + output += delimiter; + } + } + + template class Sequence> + inline void join(std::string& output, + const std::string& delimiter, + const Sequence& sequence) + { + join(output,delimiter,sequence.begin(),sequence.end()); + } + + template + inline void join(std::string& output, + const std::string& delimiter, + const std::set& set) + { + join(output,delimiter,set.begin(),set.end()); + } + + template + inline void join(std::string& output, + const std::string& delimiter, + const std::multiset& multiset) + { + join(output,delimiter,multiset.begin(),multiset.end()); + } + + inline void join(std::string& output, + const std::string& delimiter, + int argc, char* argv[]) + { + for (int i = 0; i < argc; ++i) + { + output += argv[i]; + if (i < (argc - 1)) + output += delimiter; + } + } + + template + inline std::string join(const std::string& delimiter, + const InputIterator begin, + const InputIterator end) + { + std::string output; + output.reserve(one_kilobyte); + join(output,delimiter,begin,end); + return output; + } + + template + inline std::string join(const std::string& delimiter, + const std::pair& range) + { + std::string output; + output.reserve(one_kilobyte); + join(output,delimiter,range.first,range.second); + return output; + } + + #define strtk_def_join_seq(Type) \ + template \ + inline std::string join(const std::string& delimiter, \ + const Type& sequence) \ + { \ + if (sequence.empty()) \ + return ""; \ + else \ + return join(delimiter, sequence.begin(), sequence.end()); \ + } \ + + strtk_def_join_seq(std::vector ) + strtk_def_join_seq(std::deque ) + strtk_def_join_seq(std::list ) + strtk_def_join_seq(std::priority_queue) + + #undef strtk_def_join_seq + + template + inline std::string join(const std::string& delimiter, + const std::set& set) + { + if (set.empty()) + return ""; + else + return join(delimiter,set.begin(),set.end()); + } + + template + inline std::string join(const std::string& delimiter, + const std::multiset& multiset) + { + if (multiset.empty()) + return ""; + else + return join(delimiter,multiset.begin(),multiset.end()); + } + + inline std::string join(const std::string& delimiter, int argc, char* argv[]) + { + std::string result; + result.reserve(one_kilobyte); + join(result,delimiter,argc,argv); + return result; + } + + template + inline void join_if(std::string& output, + const std::string& delimiter, + Predicate predicate, + const InputIterator begin, + const InputIterator end) + { + InputIterator itr = begin; + bool first_time = true; + + while (end != itr) + { + if (predicate(*itr)) + { + if (!first_time) + output += delimiter; + else + first_time = false; + + output += type_to_string(*itr); + } + + if (end == (++itr)) + break; + } + } + + template + inline void join_if(std::string& output, + const std::string& delimiter, + Predicate predicate, + const std::pair& range) + { + InputIterator itr = range.first; + bool first_time = true; + + while (range.second != itr) + { + if (predicate(*itr)) + { + if (!first_time) + output += delimiter; + else + first_time = false; + + output += type_to_string(*itr); + } + + if (range.second == (++itr)) + break; + } + } + + template class Sequence> + inline void join_if(std::string& output, + const std::string& delimiter, + Predicate predicate, + const Sequence& sequence) + { + join_if(output,delimiter,predicate,sequence.begin(),sequence.end()); + } + + template + inline void join_if(std::string& output, + const std::string& delimiter, + Predicate predicate, + const std::set& set) + { + join_if(output,delimiter,predicate,set.begin(),set.end()); + } + + template + inline void join_if(std::string& output, + const std::string& delimiter, + Predicate predicate, + const std::multiset& multiset) + { + join_if(output,delimiter,predicate,multiset.begin(),multiset.end()); + } + + template + inline std::string join_if(const std::string& delimiter, + Predicate predicate, + const InputIterator begin, + const InputIterator end) + { + std::string output; + output.reserve(one_kilobyte); + join_if(output,delimiter,predicate,begin,end); + return output; + } + + template + inline std::string join_if(const std::string& delimiter, + Predicate predicate, + const std::pair& range) + { + std::string output; + output.reserve(one_kilobyte); + join_if(output,delimiter,predicate,range.first,range.second); + return output; + } + + template class Sequence> + inline std::string join_if(const std::string& delimiter, + Predicate predicate, + const Sequence& sequence) + { + return join(delimiter,predicate,sequence.begin(),sequence.end()); + } + + template + inline std::string join_if(const std::string& delimiter, + Predicate predicate, + const std::set& set) + { + return join_if(delimiter,predicate,set.begin(),set.end()); + } + + template + inline std::string join_if(const std::string& delimiter, + Predicate predicate, + const std::multiset& multiset) + { + return join_if(delimiter,predicate,multiset.begin(),multiset.end()); + } + + class build_string + { + public: + + build_string(const std::size_t& initial_size = 64) + { + data_.reserve(initial_size); + } + + template + inline build_string& operator << (const T& t) + { + data_ += type_to_string(t); + return (*this); + } + + inline build_string& operator << (const std::string& s) + { + data_ += s; + return (*this); + } + + inline std::string to_str() const + { + return data_; + } + + inline operator const char* () const + { + return data_.data(); + } + + private: + + std::string data_; + }; + + inline void replicate(const std::size_t& n, + const std::string& str, + std::string& output) + { + if (0 == n) return; + output.reserve(output.size() + (str.size() * n)); + for (std::size_t i = 0; i < n; ++i) + { + output.append(str); + } + } + + inline std::string replicate(const std::size_t& n, + const std::string& str) + { + std::string output; + replicate(n,str,output); + return output; + } + + inline void replicate_inplace(const std::size_t& n, + std::string& str) + { + std::string temp_str = str; + str.reserve(str.size() + (str.size() * n)); + + for (std::size_t i = 0; i < n; ++i) + { + str.append(temp_str); + } + } + + template + inline void bracketize(std::string& output, + const std::string& pre, + const std::string& post, + const InputIterator begin, + const InputIterator end) + { + InputIterator itr = begin; + std::string s; + s.reserve(one_kilobyte); + + while (end != itr) + { + s.clear(); + s.append(pre); + s.append(type_to_string(*itr)); + s.append(post); + output.append(s); + ++itr; + } + } + + template class Sequence> + inline void bracketize(std::string& output, + const std::string& pre, + const std::string& post, + Sequence& sequence) + { + bracketize(output,pre,post,sequence.begin(),sequence.end()); + } + + template + inline void bracketize(std::string& output, + const std::string& pre, + const std::string& post, + std::set& set) + { + bracketize(output,pre,post,set.begin(),set.end()); + } + + template + inline void bracketize(std::string& output, + const std::string& pre, + const std::string& post, + std::multiset& multiset) + { + bracketize(output,pre,post,multiset.begin(),multiset.end()); + } + + template + inline std::string bracketize(const std::string& pre, + const std::string& post, + const InputIterator begin, + const InputIterator end) + { + std::string output; + output.reserve(one_kilobyte); + bracketize(output,pre,post,begin,end); + return output; + } + + #define strtk_def_brktz_cont(Type) \ + template \ + inline std::string bracketize(const std::string& pre, \ + const std::string& post, \ + Type& sequence) \ + { \ + return bracketize(pre,post,sequence.begin(),sequence.end()); \ + } \ + + strtk_def_brktz_cont(std::vector) + strtk_def_brktz_cont(std::deque ) + strtk_def_brktz_cont(std::list ) + strtk_def_brktz_cont(std::queue ) + strtk_def_brktz_cont(std::stack ) + + #undef strtk_def_brktz_cont + + template + inline std::string bracketize(const std::string& pre, + const std::string& post, + std::set& set) + { + return bracketize(pre,post,set.begin(),set.end()); + } + + template + inline std::string bracketize(const std::string& pre, + const std::string& post, + std::multiset& multiset) + { + return bracketize(pre,post,multiset.begin(),multiset.end()); + } + + template + struct interval_inserter + { + typedef T type; + + interval_inserter(const std::size_t& interval, const T& t) + : count_(0), + interval_(interval), + t_(t) + {} + + inline bool operator()(const type&) + { + if (++count_ == interval_) + { + count_ = 0; + return true; + } + else + return false; + } + + inline T operator()() + { + return t_; + } + + private: + + std::size_t count_; + std::size_t interval_; + T t_; + }; + + template + inline std::size_t inserter(Inserter ins, + const InputIterator begin, const InputIterator end, + OutputIterator out) + { + std::size_t size = 0; + InputIterator itr = begin; + + while (end != itr) + { + (*out) = (*itr); + ++out; + + if (ins(*itr++)) + { + (*out) = ins(); + ++out; + size += 2; + } + else + ++size; + } + + return size; + } + + template + inline void iota(Iterator begin, Iterator end, T value) + { + Iterator itr = begin; + + while (end != itr) + { + (*itr) = value++; + ++itr; + } + } + + template + inline void iota(typename range::adapter& r, T value) + { + iota(r.begin(),r.end(),value); + } + + template class Sequence> + inline void iota(Sequence& sequence, std::size_t count, T value) + { + while (count) + { + sequence.push_back(value++); + --count; + } + } + + template + inline void iota(std::set& set, std::size_t count, T value) + { + while (count) + { + set.insert(value++); + --count; + } + } + + template + inline void iota(std::multiset& multiset, std::size_t count, T value) + { + while (count) + { + multiset.insert(value++); + --count; + } + } + + template + inline void iota(std::size_t count, T value, OutputIterator out) + { + while (count) + { + (*out) = value++; + ++out; + --count; + } + } + + template class Sequence> + inline void iota(Sequence& sequence, const T& value) + { + strtk::iota(sequence.begin(),sequence.end(),value); + } + + template + inline void iota(std::set& set, const T& value) + { + strtk::iota(set.begin(),set.end(),value); + } + + template + inline void iota(std::multiset& multiset, const T& value) + { + strtk::iota(multiset.begin(),multiset.end(),value); + } + + template + inline void cut(const std::size_t& r0, const std::size_t& r1, + const InputIterator begin, InputIterator end, + OutputIterator out) + { + // static assert: InputIterator must be of type std::string + InputIterator itr = begin; + + while (end != itr) + { + const std::string& s = (*itr); + ++itr; + if (s.size() < r0) + continue; + + (*out++) = s.substr(r0,std::min(r1,s.size()) - r0); + } + } + + template class Sequence, + typename OutputIterator> + inline void cut(const std::size_t& r0, const std::size_t& r1, + const Sequence& sequence, + OutputIterator out) + { + cut(r0,r1,sequence.begin(),sequence.end(),out); + } + + template + inline void cut_inplace(const std::size_t& r0, const std::size_t& r1, + const Iterator begin, const Iterator end) + { + // static assert: InputIterator must be of type std::string + Iterator itr = begin; + while (end != itr) + { + if ((*itr).size() >= r0) + { + (*itr) = (*itr).substr(r0,std::min(r1,(*itr).size()) - r0); + } + + ++itr; + } + } + + template class Sequence> + inline void cut(const std::size_t& r0, const std::size_t& r1, + const Sequence& sequence) + { + cut(r0,r1,sequence.begin(),sequence.end()); + } + + template + inline void cut(const std::size_t& r0, const std::size_t& r1, + const std::set& set) + { + cut(r0,r1,set.begin(),set.end()); + } + + template + inline void cut(const std::size_t& r0, const std::size_t& r1, + const std::multiset& multiset) + { + cut(r0,r1,multiset.begin(),multiset.end()); + } + + class translation_table + { + public: + + translation_table(const std::string& itable, const std::string& otable) + { + if (itable.size() != otable.size()) + { + throw std::runtime_error("translation_table() - Input/Output table size mismatch."); + } + + strtk::iota(table_, table_ + 256, static_cast(0)); + + for (std::size_t i = 0; i < itable.size(); ++i) + { + table_[static_cast(itable[i])] = static_cast(otable[i]); + } + } + + inline char operator()(const char c) const + { + return static_cast(table_[static_cast(c)]); + } + + inline unsigned char operator()(const unsigned char c) const + { + return static_cast(table_[static_cast(c)]); + } + + private: + + unsigned char table_[256]; + }; + + inline std::string translate(const translation_table& trans_table, const std::string& s) + { + std::string result = s; + std::transform(result.begin(),result.end(),result.begin(),trans_table); + return result; + } + + inline void translate_inplace(const translation_table& trans_table, std::string& s) + { + std::transform(s.begin(),s.end(),s.begin(),trans_table); + } + + #ifdef strtk_enable_random + inline void generate_random_data(unsigned char* data, + std::size_t length, + unsigned int pre_gen_cnt = 0, + unsigned int seed = magic_seed) + { + boost::mt19937 rng(static_cast(seed)); + boost::uniform_int dist(std::numeric_limits::min(),std::numeric_limits::max()); + boost::variate_generator > rnd(rng,dist); + + if (pre_gen_cnt > 0) + { + while (pre_gen_cnt--) rnd(); + } + + unsigned char* itr = data; + unsigned int* x = 0; + + while (length >= sizeof(unsigned int)) + { + x = reinterpret_cast(itr); + (*x) = rnd(); + itr += sizeof(unsigned int); + length -= sizeof(unsigned int); + } + + if (length > 0) + { + itr -= (sizeof(unsigned int) - length); + x = reinterpret_cast(itr); + (*x) = rnd(); + } + } + + namespace details + { + struct rand_int_type_tag {}; + struct rand_real_type_tag {}; + + template struct supported_random_type {}; + + #define strtk_register_rand_int_type_tag(T) \ + template<> struct supported_random_type { typedef rand_int_type_tag type; enum { value = true }; }; + + #define strtk_register_rand_real_type_tag(T) \ + template<> struct supported_random_type { typedef rand_real_type_tag type; enum { value = true }; }; + + strtk_register_rand_int_type_tag(char) + strtk_register_rand_int_type_tag(unsigned char) + + strtk_register_rand_int_type_tag(short) + strtk_register_rand_int_type_tag(int) + strtk_register_rand_int_type_tag(long) + strtk_register_rand_int_type_tag(unsigned short) + strtk_register_rand_int_type_tag(unsigned int) + strtk_register_rand_int_type_tag(unsigned long) + + strtk_register_rand_real_type_tag(float) + strtk_register_rand_real_type_tag(double) + strtk_register_rand_real_type_tag(long double) + + #undef strtk_register_rand_int_type_tag + #undef strtk_register_rand_real_type_tag + + template + inline void generate_random_values_impl(const std::size_t& count, + const T& min, + const T& max, + OutputIterator out, + RandomNumberGenerator& rng, + rand_int_type_tag) + { + // Note: The implied range will be: [min,max] + using namespace boost; + variate_generator > rnd(rng,uniform_int(min,max)); + for (std::size_t i = 0; i < count; ++i, *out++ = rnd()) ; + } + + template + inline void generate_random_values_impl(const std::size_t& count, + const T& min, + const T& max, + OutputIterator out, + RandomNumberGenerator& rng, + rand_real_type_tag) + { + // Note: The implied range will be: [min,max) + using namespace boost; + variate_generator > rnd(rng,uniform_real(min,max)); + for (std::size_t i = 0; i < count; ++i, *out++ = rnd()) ; + } + + } // namespace details + + class uniform_real_rng + { + private: + + typedef boost::mt19937 rng_type; + typedef boost::variate_generator > variate_type; + + public: + + uniform_real_rng(const std::size_t& seed = magic_seed, + std::size_t pregen = 0) + : rng_(static_cast(seed)), + rnd_(rng_,boost::uniform_real(0.0,1.0)) + { + while (pregen--) rng_(); + } + + inline double operator()() + { + return rnd_(); + } + + private: + + rng_type rng_; + variate_type rnd_; + }; + + template + inline void generate_random_values(const std::size_t& count, + const T& min, + const T& max, + OutputIterator out, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + typename details::supported_random_type::type type; + boost::mt19937 rng(static_cast(seed)); + for (std::size_t i = 0; i++ < pregen; rng()) ; + generate_random_values_impl(count,min,max,out,rng,type); + } + + template class Sequence> + inline void generate_random_values(const std::size_t& count, + const T& min, + const T& max, + Sequence& sequence, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + typename details::supported_random_type::type type; + boost::mt19937 rng(static_cast(seed)); + for (std::size_t i = 0; i++ < pregen; rng()) ; + generate_random_values_impl(count,min,max,std::back_inserter(sequence),rng,type); + } + + template + inline void random_permutation(const Iterator begin, const Iterator end, + RandomNumberGenerator& rng, + OutputIterator out) + { + const std::size_t size = std::distance(begin,end); + if ((rng. min() < 0.0) || (rng.max() > 1.0)) return; + std::deque index; + for (std::size_t i = 0; i < size; index.push_back(i++)) ; + while (!index.empty()) + { + std::size_t idx = static_cast(index.size() * rng()); + (*out) = *(begin + index[idx]); + index.erase(index.begin() + idx); + ++out; + } + } + + template + inline void random_permutation(const Iterator begin, const Iterator end, + OutputIterator out, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + boost::mt19937 rng(static_cast(seed)); + for (std::size_t i = 0; i++ < pregen; rng()) ; + boost::uniform_real dist(0.0,1.0); + boost::variate_generator > rnd(rng,dist); + random_permutation(begin, end, rnd, out); + } + + template class Sequence, + typename OutputIterator> + inline void random_permutation(const Sequence& sequence, + OutputIterator out, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + random_permutation(sequence.begin(),sequence.end(),out,seed,pregen); + } + + template + inline bool random_combination(const Iterator begin, const Iterator end, + std::size_t set_size, + RandomNumberGenerator& rng, + OutputIterator out) + { + const std::size_t size = std::distance(begin,end); + if ((size < set_size) || (rng. min() < 0.0) || (rng.max() > 1.0)) return false; + std::deque index; + for (std::size_t i = 0; i < size; index.push_back(i++)) ; + while (set_size) + { + std::size_t idx = static_cast(index.size() * rng()); + (*out) = *(begin + index[idx]); + index.erase(index.begin() + idx); + ++out; + --set_size; + } + return true; + } + + template + inline void random_combination(const Iterator begin, const Iterator end, + const std::size_t& set_size, + OutputIterator out, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + boost::mt19937 rng(static_cast(seed)); + for (std::size_t i = 0; i++ < pregen; rng()) ; + boost::uniform_real dist(0.0,1.0); + boost::variate_generator > rnd(rng,dist); + random_combination(begin, end, set_size, rnd, out); + } + + template class Sequence, + typename OutputIterator> + inline void random_combination(const Sequence& sequence, + const std::size_t& set_size, + OutputIterator out, + const std::size_t& seed = magic_seed, + const std::size_t& pregen = 0) + { + random_combination(sequence.begin(),sequence.end(),set_size,out,seed,pregen); + } + + template + inline std::size_t select_k_randomly(const Iterator begin, const Iterator end, + const std::size_t k, + OutputIterator out, + RandomNumberGenerator& rng) + { + typedef typename std::iterator_traits::value_type T; + + std::vector selection; + selection.resize(k); + Iterator itr = begin; + std::size_t index = 0; + + while ((index < k) && (end != itr)) + { + selection[index] = (*itr); + ++index; + ++itr; + } + + if (0 == index) + return 0; + else if (index < k) + { + std::copy(selection.begin(),selection.begin() + index, out); + return index; + } + + double n = k + 1; + + while (end != itr) + { + if (rng() < (k / n)) + { + selection[static_cast(rng() * k)] = (*itr); + } + + ++itr; + ++n; + } + + std::copy(selection.begin(),selection.end(),out); + + return k; + } + + template + inline void select_1_randomly(const Iterator begin, const Iterator end, + OutputIterator out, + RandomNumberGenerator& rng) + { + typedef typename std::iterator_traits::value_type T; + T selection; + + if (begin == end) + return; + + Iterator itr = begin; + std::size_t n = 0; + + while (end != itr) + { + if (rng() < (1.0 / ++n)) + { + selection = (*itr); + } + + ++itr; + } + + (*out) = selection; + ++out; + } + #endif // strtk_enable_random + + namespace details + { + template + inline Iterator prev(Iterator itr, typename std::iterator_traits::difference_type n = 1) + { + std::advance(itr, -n); + return itr; + } + + template + inline Iterator next(Iterator itr, typename std::iterator_traits::difference_type n = 1) + { + std::advance(itr, n); + return itr; + } + } + + template + bool next_combination(const Iterator first, const Iterator k, const Iterator last) + { + if ( + (first == last) || + (first == k ) || + (last == k ) || + (last == details::next(first)) + ) + return false; + + Iterator itr1 = k; + Iterator itr2 = details::prev(last); + + while (first != itr1) + { + if (*--itr1 < *itr2) + { + Iterator j = k; + while (!(*itr1 < *j)) ++j; + std::iter_swap(itr1++, j++); + std::rotate(itr1, j, last); + for (itr2 = k; j != last; ++j, ++itr2); + std::rotate(k, itr2, last); + return true; + } + } + + std::rotate(first, k, last); + return false; + } + + template class Sequence> + inline bool next_combination(Sequence& sequence, const std::size_t& size) + { + return next_combination(sequence.begin(), sequence.begin() + size, sequence.end()); + } + + template + inline void for_each_permutation(Iterator begin, Iterator end, Function function) + { + do + { + function(begin,end); + } + while (std::next_permutation(begin,end)); + } + + template + inline bool for_each_permutation_conditional(Iterator begin, Iterator end, Function function) + { + do + { + if (!function(begin,end)) + return false; + } + while (std::next_permutation(begin,end)); + + return true; + } + + namespace details + { + /* + Credits: + (C) Copyright Howard Hinnant 2005-2011. + Use, modification and distribution are subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt). + */ + template + static inline void rotate_discontinuous(Iterator first1, Iterator last1, + typename std::iterator_traits::difference_type d1, + Iterator first2, Iterator last2, + typename std::iterator_traits::difference_type d2) + { + using std::swap; + if (d1 <= d2) + std::rotate(first2, std::swap_ranges(first1, last1, first2), last2); + else + { + Iterator i1 = last1; + + while (first2 != last2) + { + swap(*--i1,*--last2); + } + + std::rotate(first1, i1, last1); + } + } + + template + inline void combine_discontinuous(Iterator first1, Iterator last1, typename std::iterator_traits::difference_type d1, + Iterator first2, Iterator last2, typename std::iterator_traits::difference_type d2, + Function& f, + typename std::iterator_traits::difference_type d = 0) + { + typedef typename std::iterator_traits::difference_type D; + using std::swap; + + if ((0 == d1) || (0 == d2)) + return f(); + if (1 == d1) + { + Iterator i2 = first2; + while (i2 != last2) + { + f(); + swap(*first1, *i2); + ++i2; + } + } + else + { + Iterator f1p = first1; + std::advance(f1p,1); + Iterator i2 = first2; + D d22 = d2; + + while (i2 != last2) + { + combine_discontinuous(f1p, last1, d1 - 1, i2, last2, d22, f, d + 1); + swap(*first1, *i2); + ++i2; + --d22; + } + } + + f(); + + if (0 != d) + { + Iterator f2p = first2; + std::advance(f2p,1); + rotate_discontinuous(first1, last1, d1, f2p, last2, d2 - 1); + } + else + rotate_discontinuous(first1, last1, d1, first2, last2, d2); + } + + template + inline bool combine_discontinuous_conditional(Iterator first1, Iterator last1, typename std::iterator_traits::difference_type d1, + Iterator first2, Iterator last2, typename std::iterator_traits::difference_type d2, + Function& f, + typename std::iterator_traits::difference_type d = 0) + { + typedef typename std::iterator_traits::difference_type D; + + using std::swap; + + if (d1 == 0 || d2 == 0) + return f(); + + if (d1 == 1) + { + for (Iterator i2 = first2; i2 != last2; ++i2) + { + if (!f()) + return false; + swap(*first1, *i2); + } + } + else + { + Iterator f1p = first1; + std::advance(f1p,1); + Iterator i2 = first2; + + for (D d22 = d2; i2 != last2; ++i2, --d22) + { + if (!combine_discontinuous_conditional(f1p, last1, d1-1, i2, last2, d22, f, d + 1)) + return false; + swap(*first1, *i2); + } + } + + if (!f()) + return false; + + if (d != 0) + { + Iterator f2p = first2; + std::advance(f2p,1); + rotate_discontinuous(first1, last1, d1, f2p, last2, d2 - 1); + } + else + rotate_discontinuous(first1, last1, d1, first2, last2, d2); + + return true; + } + + template + class bound_range + { + public: + + bound_range(Function f, Iterator first, Iterator last) + : f_(f), + first_(first), + last_(last) + {} + + inline void operator()() + { + f_(first_,last_); + } + + private: + + inline bound_range& operator=(const bound_range&); + + Function f_; + Iterator first_; + Iterator last_; + }; + + template + class bound_range_conditional + { + public: + + bound_range_conditional(Function f, Iterator first, Iterator last) + : f_(f), + first_(first), + last_(last) + {} + + inline bool operator()() + { + return f_(first_,last_); + } + + private: + + inline bound_range_conditional& operator=(const bound_range_conditional&); + + Function f_; + Iterator first_; + Iterator last_; + }; + + } + + template + inline void for_each_combination(Iterator begin, Iterator end, + const std::size_t& size, + Function function) + { + if (static_cast::difference_type>(size) > std::distance(begin,end)) + return; + + Iterator mid = begin + size; + details::bound_range func(function,begin,mid); + details::combine_discontinuous(begin, mid, + std::distance(begin,mid), + mid, end, + std::distance(mid,end), + func); + } + + template + inline void for_each_combination_conditional(Iterator begin, Iterator end, + const std::size_t& size, + Function function) + { + if (static_cast::difference_type>(size) > std::distance(begin,end)) + return; + + Iterator mid = begin + size; + details::bound_range_conditional func(function,begin,mid); + details::combine_discontinuous_conditional(begin, mid, + std::distance(begin,mid), + mid, end, + std::distance(mid,end), + func); + } + + inline unsigned long long int n_choose_k(const unsigned long long int& n, const unsigned long long int& k) + { + if (n < k) return 0; + if (0 == n) return 0; + if (0 == k) return 1; + if (n == k) return 1; + if (1 == k) return n; + + typedef unsigned long long int value_type; + + class n_choose_k_impl + { + public: + + n_choose_k_impl(value_type* table, const value_type& dimension) + : table_(table), + dimension_(dimension / 2) + {} + + inline value_type& lookup(const value_type& n, const value_type& k) + { + const std::size_t difference = static_cast(n - k); + return table_[static_cast((dimension_ * n) + std::min(k,difference))]; + } + + inline value_type compute(const value_type& n, const value_type& k) + { + // n-Choose-k = (n-1)-Choose-(k-1) + (n-1)-Choose-k + if ((0 == k) || (k == n)) + return 1; + + value_type v1 = lookup(n - 1,k - 1); + + if (0 == v1) + v1 = lookup(n - 1,k - 1) = compute(n - 1,k - 1); + + value_type v2 = lookup(n - 1,k); + + if (0 == v2) + v2 = lookup(n - 1,k) = compute(n - 1,k); + + return v1 + v2; + } + + value_type* table_; + const value_type dimension_; + + private: + + inline n_choose_k_impl& operator=(const n_choose_k_impl&) + { + return *this; + } + }; + + static const std::size_t static_table_dim = 100; + static const std::size_t static_table_size = static_cast((static_table_dim * static_table_dim) / 2); + static value_type static_table[static_table_size]; + static bool static_table_initialized = false; + + if (!static_table_initialized && (n <= static_table_dim)) + { + std::fill_n(static_table,static_table_size,0); + static_table_initialized = true; + } + + const std::size_t table_size = static_cast(n * (n / 2) + (n & 1)); + + unsigned long long int dimension = static_table_dim; + value_type* table = 0; + + if (table_size <= static_table_size) + table = static_table; + else + { + dimension = n; + table = new value_type[table_size]; + std::fill_n(table,table_size,0ULL); + } + + value_type result = n_choose_k_impl(table,dimension).compute(n,k); + + if (table != static_table) + delete [] table; + + return result; + } + + inline void initialize_n_choose_k() + { + const unsigned long long int max_n = 100ULL; + for (unsigned long long int n = 0; n < max_n; ++n) + { + for (unsigned long long int k = 0; k < max_n; ++k) + { + n_choose_k(n,k); + } + } + } + + template + inline void nth_combination_sequence(unsigned long long int n, + const std::size_t& r, + const std::size_t& k, + OutputIterator out, + const bool complete_index = true) + { + //Compute the indicies for the n'th combination of r-choose-k + //n must be in the range [0,r-choose-k) + typedef unsigned long long int value_type; + + std::vector index_list(k,0); + value_type j = 0; + value_type x = 0; + ++n; + + for (std::size_t i = 1; i <= (k - 1); ++i) + { + index_list[i - 1] = 0; + + if (1 < i) + { + index_list[i - 1] = index_list[i - 2]; + } + + do + { + index_list[i - 1] += 1; + j = n_choose_k(r - index_list[i - 1], k - i); + x += j; + } + while (n > x); + + x -= j; + } + + index_list[k - 1] = index_list[k - 2] + static_cast(n) - static_cast(x); + + for (std::size_t i = 0; i < index_list.size(); --index_list[i++]); + + std::copy(index_list.begin(),index_list.end(),out); + + if (complete_index) + { + std::vector exist_table(r,0); + + for (std::size_t i = 0; i < index_list.size(); ++i) + { + exist_table[index_list[i]] = 1; + } + + for (std::size_t i = 0; i < exist_table.size(); ++i) + { + if (0 == exist_table[i]) + { + (*out) = i; + ++out; + } + } + } + } + + template + inline void nth_combination_sequence(const std::size_t& n, + const std::size_t& k, + const InputIterator begin, + const InputIterator end, + OutputIterator out, + const bool complete_index = true) + { + const std::size_t length = std::distance(begin,end); + std::vector index_list; + nth_combination_sequence(n,length,k,std::back_inserter(index_list),complete_index); + for (std::size_t i = 0; i < index_list.size(); ++i) + { + (*out) = *(begin + index_list[i]); + ++out; + } + } + + template + inline void nth_permutation_sequence(std::size_t n, const std::size_t k, OutputIterator out) + { + //Note: n in [0,k!) + std::vector factorid (k,0); + std::vector permutate(k,0); + + factorid[0] = 1; + for (std::size_t i = 1; i < k; ++i) + { + factorid[i] = factorid[i - 1] * i; + } + + for (std::size_t i = 0; i < k; ++i) + { + permutate[i] = n / factorid[k - i - 1]; + n = n % factorid[k - i - 1]; + } + + for (std::size_t i = k - 1; i > 0; --i) + { + for (int j = static_cast(i - 1); j >= 0; --j) + { + if (permutate[j] <= permutate[i]) + { + ++permutate[i]; + } + } + } + + for (std::size_t i = 0; i < k; ++i) + { + *(out++) = permutate[i]; + } + } + + template + inline void nth_permutation_sequence(std::size_t n, + const InputIterator begin, + const InputIterator end, + OutputIterator out) + { + const std::size_t size = std::distance(begin,end); + std::vector index_list(size,0); + nth_permutation_sequence(n,size,index_list.begin()); + for (std::size_t i = 0; i < size; ++i) + { + *(out++) = (begin + index_list[i]); + } + } + + inline std::string nth_permutation_sequence(const std::size_t& n, const std::string& s) + { + std::vector index_list(s.size(),0); + nth_permutation_sequence(n,s.size(),index_list.begin()); + std::string result; + result.reserve(s.size()); + for (std::size_t i = 0; i < index_list.size(); ++i) + { + result += s[index_list[i]]; + } + return result; + } + + template + class combination_iterator : public std::iterator, + void, + void> + { + public: + + typedef Iterator iterator; + typedef const iterator const_iterator; + typedef std::pair range_type; + + explicit inline combination_iterator(const std::size_t& k, + iterator begin, iterator end, + const bool sorted = true) + : begin_(begin), + end_(end), + middle_(begin + k), + current_combination_(begin_,middle_) + { + if (!sorted) + { + std::sort(begin,end); + } + } + + template class Sequence> + explicit inline combination_iterator(const std::size_t& k, + Sequence& seq, + const bool sorted = true) + : begin_(seq.begin()), + end_(seq.end()), + middle_(begin_ + k), + current_combination_(begin_,middle_) + { + if (!sorted) + { + std::sort(begin_,end_); + } + } + + explicit inline combination_iterator(const std::size_t& k, + std::string& str, + const bool sorted = true) + : begin_(const_cast(to_ptr(str))), + end_(const_cast(to_ptr(str) + str.size())), + middle_(begin_ + k), + current_combination_(begin_,middle_) + { + if (!sorted) + { + std::sort(begin_,end_); + } + } + + inline combination_iterator(iterator end) + : begin_(end), + end_(end), + middle_(end), + current_combination_(end,end) + {} + + inline combination_iterator(const std::string& str) + : begin_(const_cast(to_ptr(str) + str.size())), + end_(begin_), + middle_(end_), + current_combination_(end_,end_) + {} + + template class Sequence> + explicit inline combination_iterator(Sequence& seq) + : begin_ (seq.end()), + end_ (seq.end()), + middle_(end_ ), + current_combination_(end_,end_) + {} + + explicit inline combination_iterator(std::string& s) + : begin_ (const_cast(&(s.data()[0]) + s.size())), + end_ (const_cast(&(s.data()[0]) + s.size())), + middle_(end_), + current_combination_(end_,end_) + {} + + inline combination_iterator& operator++() + { + if (begin_ != end_) + { + if (!next_combination(begin_, middle_, end_)) + { + begin_ = middle_ = end_; + } + } + + return (*this); + } + + inline combination_iterator operator++(int) + { + combination_iterator tmp = *this; + this->operator++(); + return tmp; + } + + inline combination_iterator& operator+=(const int inc) + { + if (inc > 0) + { + for (int i = 0; i < inc; ++i, ++(*this)) ; + } + + return (*this); + } + + inline range_type operator*() const + { + return current_combination_; + } + + inline bool operator==(const combination_iterator& itr) const + { + return (begin_ == itr.begin_ ) && + (end_ == itr.end_ ) && + (middle_ == itr.middle_); + } + + inline bool operator!=(const combination_iterator& itr) const + { + return !operator==(itr); + } + + protected: + + iterator begin_; + iterator end_; + iterator middle_; + range_type current_combination_; + }; + + namespace fast + { + /* + Note: The following routines perform no sanity checks at all + upon the input data. Hence they should only be used with + data that is known to be completely 'valid'. + */ + namespace details + { + + template + struct all_digits_check_impl + { + static inline bool process(Iterator) + { + throw std::runtime_error("all_digits_check_impl - unsupported value for N."); + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + all_digits_check_impl::process(itr + 1); + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + all_digits_check_impl::process(itr + 1); + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + all_digits_check_impl::process(itr + 1); + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 && + static_cast(itr[11] - '0') < 10 && + static_cast(itr[12] - '0') < 10 && + static_cast(itr[13] - '0') < 10 && + static_cast(itr[14] - '0') < 10 && + static_cast(itr[15] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 && + static_cast(itr[11] - '0') < 10 && + static_cast(itr[12] - '0') < 10 && + static_cast(itr[13] - '0') < 10 && + static_cast(itr[14] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 && + static_cast(itr[11] - '0') < 10 && + static_cast(itr[12] - '0') < 10 && + static_cast(itr[13] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 && + static_cast(itr[11] - '0') < 10 && + static_cast(itr[12] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 && + static_cast(itr[11] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 && + static_cast(itr[ 2] - '0') < 10 && + static_cast(itr[ 3] - '0') < 10 && + static_cast(itr[ 4] - '0') < 10 && + static_cast(itr[ 5] - '0') < 10 && + static_cast(itr[ 6] - '0') < 10 && + static_cast(itr[ 7] - '0') < 10 && + static_cast(itr[ 8] - '0') < 10 && + static_cast(itr[ 9] - '0') < 10 && + static_cast(itr[10] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 && + static_cast(itr[5] - '0') < 10 && + static_cast(itr[6] - '0') < 10 && + static_cast(itr[7] - '0') < 10 && + static_cast(itr[8] - '0') < 10 && + static_cast(itr[9] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 && + static_cast(itr[5] - '0') < 10 && + static_cast(itr[6] - '0') < 10 && + static_cast(itr[7] - '0') < 10 && + static_cast(itr[8] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 && + static_cast(itr[5] - '0') < 10 && + static_cast(itr[6] - '0') < 10 && + static_cast(itr[7] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 && + static_cast(itr[5] - '0') < 10 && + static_cast(itr[6] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 && + static_cast(itr[5] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 && + static_cast(itr[4] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 && + static_cast(itr[3] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return + static_cast(itr[0] - '0') < 10 && + static_cast(itr[1] - '0') < 10 && + static_cast(itr[2] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10 && + static_cast(itr[ 1] - '0') < 10 ; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator itr) + { + return static_cast(itr[ 0] - '0') < 10; + } + }; + + template + struct all_digits_check_impl + { + static inline bool process(Iterator) + { + return true; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(Iterator, T&) + { throw std::runtime_error("numeric_convert_impl::process( - unsupported value for N."); } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + strtk::fast::details::numeric_convert_impl::process(itr + 1,t); + t += static_cast((itr[0] - '0') * 10000000000000000000ULL); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + strtk::fast::details::numeric_convert_impl::process(itr + 1,t); + t += static_cast((itr[0] - '0') * 1000000000000000000LL); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + strtk::fast::details::numeric_convert_impl::process(itr + 1,t); + t += static_cast((itr[0] - '0') * 100000000000000000LL); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + numeric_convert_impl::process(itr + 1,t); + t += static_cast((itr[0] - '0') * 10000000000000000LL); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + x = x * 10 + static_cast(itr[11] - '0'); + x = x * 10 + static_cast(itr[12] - '0'); + x = x * 10 + static_cast(itr[13] - '0'); + x = x * 10 + static_cast(itr[14] - '0'); + x = x * 10 + static_cast(itr[15] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + x = x * 10 + static_cast(itr[11] - '0'); + x = x * 10 + static_cast(itr[12] - '0'); + x = x * 10 + static_cast(itr[13] - '0'); + x = x * 10 + static_cast(itr[14] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + x = x * 10 + static_cast(itr[11] - '0'); + x = x * 10 + static_cast(itr[12] - '0'); + x = x * 10 + static_cast(itr[13] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + x = x * 10 + static_cast(itr[11] - '0'); + x = x * 10 + static_cast(itr[12] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + x = x * 10 + static_cast(itr[11] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[ 0] - '0'); + x = x * 10 + static_cast(itr[ 1] - '0'); + x = x * 10 + static_cast(itr[ 2] - '0'); + x = x * 10 + static_cast(itr[ 3] - '0'); + x = x * 10 + static_cast(itr[ 4] - '0'); + x = x * 10 + static_cast(itr[ 5] - '0'); + x = x * 10 + static_cast(itr[ 6] - '0'); + x = x * 10 + static_cast(itr[ 7] - '0'); + x = x * 10 + static_cast(itr[ 8] - '0'); + x = x * 10 + static_cast(itr[ 9] - '0'); + x = x * 10 + static_cast(itr[10] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + x = x * 10 + static_cast(itr[5] - '0'); + x = x * 10 + static_cast(itr[6] - '0'); + x = x * 10 + static_cast(itr[7] - '0'); + x = x * 10 + static_cast(itr[8] - '0'); + x = x * 10 + static_cast(itr[9] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + x = x * 10 + static_cast(itr[5] - '0'); + x = x * 10 + static_cast(itr[6] - '0'); + x = x * 10 + static_cast(itr[7] - '0'); + x = x * 10 + static_cast(itr[8] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + x = x * 10 + static_cast(itr[5] - '0'); + x = x * 10 + static_cast(itr[6] - '0'); + x = x * 10 + static_cast(itr[7] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + x = x * 10 + static_cast(itr[5] - '0'); + x = x * 10 + static_cast(itr[6] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + x = x * 10 + static_cast(itr[5] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + x = x * 10 + static_cast(itr[4] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + x = x * 10 + static_cast(itr[3] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + T x = static_cast(itr[0] - '0'); + x = x * 10 + static_cast(itr[1] - '0'); + x = x * 10 + static_cast(itr[2] - '0'); + t = x; + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + t = static_cast(itr[0] - '0') * 10 + + static_cast(itr[1] - '0'); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator itr, T& t) + { + t = static_cast(itr[0] - '0'); + } + }; + + template + struct numeric_convert_impl + { + static inline void process(const Iterator, T& t) + { + t = 0; + } + }; + + template + inline bool negate(T&, NoneSignedTag) + { + return false; + } + + template + inline bool negate(T& t, strtk::details::signed_type_tag) + { + t = -t; + return true; + } + + } // namespace details + + template + inline bool all_digits_check(Iterator itr) + { + typedef typename strtk::details::is_valid_iterator::type itr_type; + strtk::details::convert_type_assert(); + return details::all_digits_check_impl::process(itr); + } + + template + inline bool all_digits_check(const std::string& s) + { + return all_digits_check(to_ptr(s)); + } + + template + inline bool all_digits_check(const std::size_t& n, Iterator itr) + { + switch (n) + { + #define case_stmt(N) \ + case N : return details::all_digits_check_impl::process(itr); \ + + case_stmt( 0) case_stmt( 1) case_stmt( 2) case_stmt( 3) + case_stmt( 4) case_stmt( 5) case_stmt( 6) case_stmt( 7) + case_stmt( 8) case_stmt( 9) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + default : return false; + #undef case_stmt + } + } + + template + inline bool all_digits_check(Iterator begin, Iterator end) + { + return all_digits_check(std::distance(begin,end),begin); + } + + inline bool all_digits_check(const std::string& s) + { + return all_digits_check(s.size(), to_ptr(s)); + } + + template + inline bool signed_all_digits_check(Iterator itr) + { + if (('-' == (*itr)) || ('+' == (*itr))) + return all_digits_check((itr + 1)); + else + return all_digits_check(itr); + } + + template + inline bool signed_all_digits_check(const std::size_t& n, Iterator itr) + { + if (('-' == (*itr)) || ('+' == (*itr))) + return all_digits_check(n - 1,(itr + 1)); + else + return all_digits_check(n,itr); + } + + template + inline bool signed_all_digits_check(const std::string& s) + { + return signed_all_digits_check(to_ptr(s)); + } + + template + inline bool signed_all_digits_check(Iterator begin, Iterator end) + { + return signed_all_digits_check(std::distance(begin,end),begin); + } + + inline bool signed_all_digits_check(const std::string& s) + { + return signed_all_digits_check(s.size(), to_ptr(s)); + } + + template + inline void numeric_convert(Iterator itr, T& t, const bool digit_check = false) + { + typedef typename strtk::details::is_valid_iterator::type itr_type; + strtk::details::convert_type_assert(); + if (digit_check) + { + if (!all_digits_check(itr)) + { + t = 0; + return; + } + } + + details::numeric_convert_impl::process(itr,t); + } + + template + inline void numeric_convert(const std::string& s, T& t, const bool digit_check = false) + { + numeric_convert(to_ptr(s), t, digit_check); + } + + template + inline bool numeric_convert(const std::size_t n, + const Iterator itr, T& t, + const bool digit_check = false) + { + if (digit_check) + { + if (!all_digits_check(n,itr)) + { + return false; + } + } + + switch (n) + { + #define case_stmt(N) \ + case N : { details::numeric_convert_impl::process(itr,t); return true; } \ + + case_stmt( 0) case_stmt( 1) case_stmt( 2) case_stmt( 3) + case_stmt( 4) case_stmt( 5) case_stmt( 6) case_stmt( 7) + case_stmt( 8) case_stmt( 9) case_stmt(10) case_stmt(11) + case_stmt(12) case_stmt(13) case_stmt(14) case_stmt(15) + case_stmt(16) case_stmt(17) case_stmt(18) case_stmt(19) + case_stmt(20) + default : return false; + #undef case_stmt + } + } + + template + inline bool numeric_convert(const std::string& s, T& t, const bool digit_check = false) + { + return numeric_convert(s.size(), to_ptr(s), t, digit_check); + } + + template + inline bool signed_numeric_convert(Iterator itr, T& t, const bool digit_check = false) + { + if ('-' == (*itr)) + { + numeric_convert((itr + 1),t,digit_check); + typename strtk::details::supported_conversion_to_type::type type; + details::negate(t,type); + } + else if ('+' == (*itr)) + { + return numeric_convert((itr + 1),t,digit_check); + } + else + return numeric_convert(itr,t,digit_check); + } + + template + inline bool signed_numeric_convert(Iterator itr, + const Iterator end, + T& t, + const bool digit_check = false) + { + const bool negative = ('-' == (*itr)); + + if (negative || ('+' == (*itr))) + { + if (end == (++itr)) + return false; + } + + while ((end != itr) && ('0' == (*itr))) ++itr; + + if (numeric_convert(std::distance(itr,end),itr,t,digit_check)) + { + t = negative ? -t : t; + return true; + } + else + return false; + } + + template + inline bool signed_numeric_convert(const std::string& s, + T& t, + const bool digit_check = false) + { + return signed_numeric_convert(to_ptr(s), t, digit_check); + } + + template + inline bool signed_numeric_convert(const std::string& s, + T& t, + const bool digit_check = false) + { + return signed_numeric_convert(to_ptr(s), to_ptr(s) + s.size(), t, digit_check); + } + + } // namespace fast + + namespace binary + { + + namespace details + { + namespace details_endian + { + #if (defined(__LITTLE_ENDIAN__)) || \ + (defined(WIN32)) || \ + (defined(_WIN32)) || \ + (defined(__WIN32__)) || \ + (defined(__MINGW32_VERSION)) || \ + (defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) + static const bool __le_result = true; + static const bool __be_result = false; + #else + static const bool __le_result = false; + static const bool __be_result = true; + #endif + } + + static inline bool is_little_endian() + { + //Is the current architecture/platform little-endian? + return details_endian::__le_result; + } + + static inline bool is_big_endian() + { + return details_endian::__be_result; + } + + static inline unsigned short convert(const unsigned short v) + { + //static_assert(2 == sizeof(v),""); + return ((v >> 8) & 0x00FF) | ((v << 8) & 0xFFFF); + } + + static inline unsigned int convert(const unsigned int v) + { + //static_assert(4 == sizeof(v),""); + return ((v >> 24) & 0x000000FF) | ((v << 24) & 0x0000FF00) | + ((v << 8) & 0x00FF0000) | ((v >> 8) & 0xFF000000); + } + + static inline unsigned long long int convert(const unsigned long long int v) + { + //static_assert(8 == sizeof(v),""); + return ((v >> 56) & 0x00000000000000FFLL) | ((v << 56) & 0xFF00000000000000LL) | + ((v >> 40) & 0x000000000000FF00LL) | ((v << 40) & 0x00FF000000000000LL) | + ((v >> 24) & 0x0000000000FF0000LL) | ((v << 24) & 0x0000FF0000000000LL) | + ((v >> 8) & 0x00000000FF000000LL) | ((v << 8) & 0x000000FF00000000LL) ; + } + + static inline short convert(const short v) + { + return static_cast(convert(static_cast(v))); + } + + static inline int convert(const int v) + { + return static_cast(convert(static_cast(v))); + } + + static inline long long int convert(const long long int v) + { + return static_cast(convert(static_cast(v))); + } + + static inline unsigned short convert_to_be(const unsigned short v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline unsigned int convert_to_be(const unsigned int v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline unsigned long long int convert_to_be(const unsigned long long int v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline short convert_to_be(const short v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline int convert_to_be(const int v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline long long int convert_to_be(const long long int v) + { + return (is_little_endian()) ? convert(v) : v; + } + + static inline unsigned short convert_to_le(const unsigned short v) + { + return (is_big_endian()) ? convert(v) : v; + } + + static inline unsigned int convert_to_le(const unsigned int v) + { + return (is_big_endian()) ? convert(v) : v; + } + + static inline unsigned long long int convert_to_le(const unsigned long long int v) + { + return (is_big_endian()) ? convert(v) : v; + } + + static inline short convert_to_le(const short v) + { + return (is_big_endian()) ? convert(v) : v; + } + + static inline int convert_to_le(const int v) + { + return (is_big_endian()) ? convert(v) : v; + } + + static inline unsigned long long int convert_to_le(const long long int v) + { + return (is_big_endian()) ? convert(v) : v; + } + + class marker + { + private: + + typedef std::pair mark_type; + + public: + + inline bool reset(std::size_t& v1, char*& v2) + { + if (stack_.empty()) + return false; + v1 = stack_.top().first; + v2 = stack_.top().second; + stack_.pop(); + return true; + } + + inline void mark(const std::size_t& v1,char* v2) + { + stack_.push(std::make_pair(v1,v2)); + } + + private: + + std::stack stack_; + }; + } + + class reader + { + public: + + // should be sourced from cstdint + typedef unsigned int uint32_t; + typedef unsigned short uint16_t; + typedef unsigned char uint8_t; + typedef unsigned long long int uint64_t; + + template + reader(T* buffer, + const std::size_t& buffer_length) + : original_buffer_(reinterpret_cast(buffer)), + buffer_(reinterpret_cast(buffer)), + buffer_length_(buffer_length * sizeof(T)), + amount_read_sofar_(0) + {} + + inline bool operator!() const + { + return (0 == buffer_length_) || + (0 == original_buffer_) || + (0 == buffer_); + } + + inline void reset(const bool clear_buffer = false) + { + amount_read_sofar_ = 0; + buffer_ = original_buffer_; + if (clear_buffer) + clear(); + } + + inline std::size_t position() const + { + return amount_read_sofar_; + } + + inline const char* position_ptr() const + { + return buffer_ ; + } + + inline std::size_t amount_read() + { + return amount_read_sofar_; + } + + inline bool rewind(const std::size_t& n_bytes) + { + if (n_bytes <= amount_read_sofar_) + { + amount_read_sofar_ -= n_bytes; + buffer_ -= n_bytes; + return true; + } + else + return false; + } + + inline bool seek(const int& n_bytes) + { + if (n_bytes < 0) + return rewind(-n_bytes); + else if (n_bytes > 0) + { + if ((amount_read_sofar_ + n_bytes) <= buffer_length_) + { + amount_read_sofar_ += n_bytes; + buffer_ += n_bytes; + return true; + } + else + return false; + } + else + return true; + } + + inline void clear() + { + reset(); + std::memset(buffer_,0x00,buffer_length_); + } + + template + inline bool operator()(T*& data, uint32_t& length, const bool read_length = true) + { + if (read_length && !operator()(length)) + return false; + + const std::size_t raw_size = length * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + if (read_length) + { + data = new T[length]; + } + + std::copy(buffer_, buffer_ + raw_size, reinterpret_cast(data)); + buffer_ += raw_size; + amount_read_sofar_ += raw_size; + + return true; + } + + template + inline bool operator()(T*& data, uint64_t& length, const bool read_length = true) + { + uint32_t l = 0; + if (read_length) + l = static_cast(length); + if (!operator()(data,l,read_length)) + return false; + if (read_length) + length = l; + return true; + } + + inline bool operator()(std::string& output) + { + uint32_t length = 0; + if (!operator()(length)) + return false; + + if (!buffer_capacity_ok(length)) + return false; + + output.resize(length); + std::copy(buffer_, + buffer_ + length, + const_cast(to_ptr(output))); + + buffer_ += length; + amount_read_sofar_ += length; + + return true; + } + + template + inline bool operator()(std::pair& p) + { + if (!operator()(p.first)) + return false; + if (!operator()(p.second)) + return false; + return true; + } + + #define strtk_def_rdr_opr(Type) \ + template \ + inline bool operator()(Type& seq) \ + { \ + uint32_t size = 0; \ + if (!read_pod(size)) \ + return false; \ + \ + const std::size_t raw_size = size * sizeof(T); \ + if (!buffer_capacity_ok(raw_size)) \ + return false; \ + \ + T t = T(); \ + \ + for (std::size_t i = 0; i < size; ++i) \ + { \ + if (operator()(t)) \ + seq.push_back(t); \ + else \ + return false; \ + } \ + \ + return true; \ + } \ + + strtk_def_rdr_opr(std::deque) + strtk_def_rdr_opr(std::queue) + strtk_def_rdr_opr(std::list ) + #undef strtk_def_rdr_opr + + template + inline bool operator()(std::vector& vec) + { + uint32_t size = 0; + if (!read_pod(size)) + return false; + + const std::size_t raw_size = size * sizeof(T); + + if (!buffer_capacity_ok(raw_size)) + return false; + + vec.resize(size); + + return selector::type::batch_vector_read(*this,size,vec,false); + } + + template + inline bool operator()(std::set& set) + { + uint32_t size = 0; + if (!read_pod(size)) + return false; + + const std::size_t raw_size = size * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + T t; + for (std::size_t i = 0; i < size; ++i) + { + if (!operator()(t)) + return false; + set.insert(t); + } + + return true; + } + + template + inline bool operator()(std::multiset& multiset) + { + uint32_t size = 0; + if (!read_pod(size)) + return false; + + const std::size_t raw_size = size * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + T t; + for (std::size_t i = 0; i < size; ++i) + { + if (!operator()(t)) + return false; + multiset.insert(t); + } + + return true; + } + + inline bool operator()(std::ifstream& stream, const std::size_t& length) + { + if (length > buffer_length_) return false; + stream.read(original_buffer_,static_cast(length)); + return true; + } + + inline bool operator()(std::ifstream& stream) + { + if (0 == amount_read_sofar_) return false; + stream.read(original_buffer_,static_cast(amount_read_sofar_)); + return true; + } + + template + inline bool operator()(T& output) + { + return selector::type::run(*this,output); + } + + template + inline bool operator()(const T& output) + { + return selector::type::run(*this,const_cast(output)); + } + + template + inline bool be_to_native(T& output) + { + //From big-endian to native + if (details::is_little_endian()) + { + if (!operator()(output)) return false; + output = details::convert(output); + return true; + } + else + return operator()(output); + } + + template + inline bool le_to_native(T& output) + { + //From little-endian to native + if (details::is_little_endian()) + return operator()(output); + else + { + if (!operator()(output)) return false; + output = details::convert(output); + return true; + } + } + + template + inline bool operator()(T (&output)[N]) + { + const std::size_t raw_size = N * sizeof(T); + + if (buffer_capacity_ok(raw_size)) + { + std::copy(buffer_, + buffer_ + raw_size, + reinterpret_cast(output)); + + buffer_ += raw_size; + amount_read_sofar_ += raw_size; + + return true; + } + else + return false; + } + + template + inline bool operator()(T& output, const std::size_t& size) + { + if (buffer_capacity_ok(size)) + { + bool result = strtk::string_to_type_converter(buffer_,buffer_ + size,output); + buffer_ += size; + amount_read_sofar_ += size; + return result; + } + else + return false; + } + + inline void mark() + { + marker_.mark(amount_read_sofar_,buffer_); + } + + inline bool reset_to_mark() + { + return marker_.reset(amount_read_sofar_,buffer_); + } + + private: + + reader(); + reader(const reader& s); + reader& operator=(const reader& s); + + inline bool buffer_capacity_ok(const std::size_t& required_read_qty) + { + return ((required_read_qty + amount_read_sofar_) <= buffer_length_); + } + + template + struct selector + { + private: + + template + struct selector_impl + { + template + static inline bool run(Reader& r, T& t) + { + return t(r); + } + + template + static inline bool batch_vector_read(Reader& r, + const std::size_t& size, + std::vector& v, + const bool) + { + T t; + + for (std::size_t i = 0; i < size; ++i) + { + if (r.operator()(t)) + v[i] = t; + else + return false; + } + + return true; + } + }; + + template + struct selector_impl + { + template + static inline bool run(Reader& r, + T& t, + const bool perform_buffer_capacity_check = true) + { + return r.read_pod(t,perform_buffer_capacity_check); + } + + template + static inline bool batch_vector_read(Reader& r, + const std::size_t& size, + std::vector& v, + const bool) + { + const std::size_t raw_size = sizeof(T) * size; + char* ptr = const_cast(reinterpret_cast(&v[0])); + std::copy(r.buffer_, r.buffer_ + raw_size, ptr); + r.buffer_ += raw_size; + r.amount_read_sofar_ += raw_size; + return true; + } + }; + + public: + + typedef selector_impl::result_t> type; + }; + + template + inline bool read_pod(T& data, const bool perform_buffer_capacity_check = true) + { + static const std::size_t data_length = sizeof(T); + + if (perform_buffer_capacity_check) + { + if (!buffer_capacity_ok(data_length)) + return false; + } + + data = (*reinterpret_cast(buffer_)); + buffer_ += data_length; + amount_read_sofar_ += data_length; + + return true; + } + + char* const original_buffer_; + char* buffer_; + std::size_t buffer_length_; + std::size_t amount_read_sofar_; + details::marker marker_; + }; + + class writer + { + public: + + // should be sourced from cstdint + typedef unsigned int uint32_t; + typedef unsigned short uint16_t; + typedef unsigned char uint8_t; + typedef unsigned long long int uint64_t; + + template + writer(T* buffer, const std::size_t& buffer_length) + : original_buffer_(reinterpret_cast(buffer)), + buffer_(reinterpret_cast(buffer)), + buffer_length_(buffer_length * sizeof(T)), + amount_written_sofar_(0) + {} + + inline bool operator!() const + { + return (0 == buffer_length_) || + (0 == original_buffer_) || + (0 == buffer_); + } + + inline void reset(const bool clear_buffer = false) + { + amount_written_sofar_ = 0; + buffer_ = original_buffer_; + if (clear_buffer) + clear(); + } + + inline std::size_t position() const + { + return amount_written_sofar_; + } + + inline const char* position_ptr() const + { + return buffer_ ; + } + + inline std::size_t amount_written() const + { + return amount_written_sofar_; + } + + inline void clear() + { + reset(); + std::memset(buffer_,0x00,buffer_length_); + } + + template + inline bool operator()(const T (&data)[N], const bool write_length = false) + { + if (write_length && !operator()(N)) + return false; + + const std::size_t raw_size = N * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + const char* ptr = reinterpret_cast(data); + std::copy(ptr, ptr + raw_size, buffer_); + buffer_ += raw_size; + amount_written_sofar_ += raw_size; + + return true; + } + + template + inline bool operator()(const T* data, const uint32_t& length, const bool write_length = true) + { + if (write_length && !operator()(length)) + return false; + + const std::size_t raw_size = length * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + const char* ptr = reinterpret_cast(data); + std::copy(ptr, ptr + raw_size, buffer_); + buffer_ += raw_size; + amount_written_sofar_ += raw_size; + + return true; + } + + template + inline bool operator()(const T* data, const uint64_t& length, const bool write_length = true) + { + return operator()(data,static_cast(length),write_length); + } + + template + inline bool operator()(const T* data, const uint16_t& length, const bool write_length = true) + { + return operator()(data,static_cast(length),write_length); + } + + template + inline bool operator()(const T* data, const uint8_t& length, const bool write_length = true) + { + return operator()(data,static_cast(length),write_length); + } + + template + inline bool operator()(const std::pair& p) + { + if (!operator()(p.first)) + return false; + if (!operator()(p.second)) + return false; + return true; + } + + inline bool operator()(const std::string& input) + { + return operator()(to_ptr(input),static_cast(input.size())); + } + + #define strtk_def_wrtr_opr(Type) \ + template \ + inline bool operator()(const Type& seq) \ + { \ + const uint32_t size = static_cast(seq.size()); \ + if (!operator()(size)) \ + return false; \ + \ + typename Type::const_iterator itr = seq.begin(); \ + typename Type::const_iterator end = seq.end(); \ + \ + while (end != itr) \ + { \ + if (!operator()(*itr)) \ + return false; \ + ++itr; \ + } \ + \ + return true; \ + } \ + + strtk_def_wrtr_opr(std::deque ) + strtk_def_wrtr_opr(std::list ) + strtk_def_wrtr_opr(std::queue ) + #undef strtk_def_wrtr_opr + + template + inline bool operator()(const std::vector& vec) + { + const uint32_t size = static_cast(vec.size()); + const std::size_t raw_size = (size * sizeof(T)); + if (!buffer_capacity_ok(raw_size + sizeof(size))) + return false; + if (!operator()(size)) + return false; + return selector::type::batch_vector_writer(*this,raw_size,vec); + } + + template + inline bool operator()(const std::set& set) + { + const uint32_t size = static_cast(set.size()); + if (!operator()(size)) + return false; + + const std::size_t raw_size = size * sizeof(T); + + if (!buffer_capacity_ok(raw_size)) + return false; + + typename std::set::const_iterator itr = set.begin(); + typename std::set::const_iterator end = set.end(); + + while (end != itr) + { + if (!operator()(*itr)) + return false; + ++itr; + } + + return true; + } + + template + inline bool operator()(const std::multiset& multiset) + { + const uint32_t size = static_cast(multiset.size()); + if (!operator()(size)) + return false; + + const std::size_t raw_size = size * sizeof(T); + if (!buffer_capacity_ok(raw_size)) + return false; + + typename std::multiset::const_iterator itr = multiset.begin(); + typename std::multiset::const_iterator end = multiset.end(); + + while (end != itr) + { + if (!operator()(*itr)) + return false; + ++itr; + } + + return true; + } + + inline std::size_t operator()(std::ofstream& stream) + { + stream.write(original_buffer_,static_cast(amount_written_sofar_)); + return amount_written_sofar_; + } + + template + inline bool operator()(const T& input) + { + return selector::type::run(*this,input); + } + + template + inline bool native_to_be(const T& input) + { + //From native to big-endian + if (details::is_little_endian()) + { + return operator()(details::convert(input)); + } + else + return operator()(input); + } + + template + inline bool native_to_le(const T& input) + { + //From native to little-endian + if (details::is_little_endian()) + return operator()(input); + else + return operator()(details::convert(input)); + } + + enum padding_mode + { + right_padding = 0, + left_padding = 1 + }; + + template + inline bool operator()(const T& input, + const std::size_t& size, + const padding_mode pmode, + const char padding = ' ') + { + if (amount_written_sofar_ + size <= buffer_length_) + { + std::string s; + s.reserve(size); + if (!strtk::type_to_string(input,s)) + return false; + else if (s.size() > size) + return false; + else if (s.size() < size) + { + if (right_padding == pmode) + s.resize(size - s.size(),padding); + else + s = std::string(size - s.size(),padding) + s; + } + + return operator()(to_ptr(s), static_cast(size), false); + } + else + return false; + } + + inline void mark() + { + marker_.mark(amount_written_sofar_,buffer_); + } + + inline bool reset_to_mark() + { + return marker_.reset(amount_written_sofar_,buffer_); + } + + private: + + writer(); + writer(const writer& s); + writer& operator=(const writer& s); + + inline bool buffer_capacity_ok(const std::size_t& required_write_qty) + { + return ((required_write_qty + amount_written_sofar_) <= buffer_length_); + } + + template + struct selector + { + private: + + template + struct selector_impl + { + template + static inline bool run(Writer& w, const T& t) + { + return t(w); + } + + template + static inline bool batch_vector_writer(Writer& w, + const std::size_t&, + const std::vector& v) + { + for (std::size_t i = 0; i < v.size(); ++i) + { + if (w.operator()(v[i])) + continue; + else + return false; + } + + return true; + } + }; + + template + struct selector_impl + { + template + static inline bool run(Writer& w, const T& t) + { + return w.write_pod(t); + } + + template + static inline bool batch_vector_writer(Writer& w, + const std::size_t& raw_size, + const std::vector& v) + { + const char* ptr = reinterpret_cast(&v[0]); + std::copy(ptr, ptr + raw_size, w.buffer_); + w.buffer_ += raw_size; + w.amount_written_sofar_ += raw_size; + return true; + } + }; + + public: + + typedef selector_impl::result_t> type; + }; + + template + inline bool write_pod(const T& data, const bool perform_buffer_capacity_check = true) + { + static const std::size_t data_length = sizeof(T); + + if (perform_buffer_capacity_check) + { + if ((data_length + amount_written_sofar_) > buffer_length_) + { + return false; + } + } + + *(reinterpret_cast(buffer_)) = data; + buffer_ += data_length; + amount_written_sofar_ += data_length; + + return true; + } + + char* const original_buffer_; + char* buffer_; + std::size_t buffer_length_; + std::size_t amount_written_sofar_; + details::marker marker_; + }; + + #define strtk_binary_reader_begin() \ + bool operator()(strtk::binary::reader& reader)\ + { return true \ + + #define strtk_binary_reader(T) \ + && reader(T) \ + + #define strtk_binary_reader_end() \ + ;} \ + + #define strtk_binary_writer_begin() \ + bool operator()(strtk::binary::writer& writer) const\ + { return true \ + + #define strtk_binary_writer(T) \ + && writer(T) \ + + #define strtk_binary_writer_end() \ + ;} \ + + namespace details + { + template + class short_string_impl + { + public: + + short_string_impl() + : s(0) + {} + + short_string_impl(std::string& str) + : s(&str) + {} + + inline void clear() + { + s = 0; + } + + inline short_string_impl& set(std::string& str) + { + s = &str; + return *this; + } + + inline bool operator()(reader& r) + { + if (0 == s) + return false; + size_type size = 0; + if (!r(size)) + return false; + s->resize(size); + char* ptr = const_cast(s->data()); + strtk::binary::reader::uint32_t length = size; + if (!r(ptr,length,false)) + return false; + return true; + } + + inline bool operator()(writer& w) const + { + if (0 == s) + return false; + if (s->size() > std::numeric_limits::max()) + return false; + const size_type size = static_cast(s->size()); + if (!w(size)) + return false; + if (!w(s->data(),size, false)) + return false; + return true; + } + + private: + + short_string_impl& operator=(const short_string_impl&); + mutable std::string* s; + }; + } + + typedef details::short_string_impl short_string; + typedef details::short_string_impl pascal_string; + + } // namespace binary + + class ignore_token + { + public: + + template + inline ignore_token& operator=(const std::pair&) + { + return (*this); + } + + inline ignore_token& operator=(const std::string&) + { + return (*this); + } + }; + + template + class hex_to_number_sink + { + // static_assert for T either int or unsigned int and alike (could use a concept) + private: + + struct hex_value_check + { + inline bool operator()(const unsigned char c) const + { + return (('0' <= c) && (c <= '9')) || + (('A' <= c) && (c <= 'F')) || + (('a' <= c) && (c <= 'f')); + } + + inline bool operator()(const char c) const + { + return (*this)(static_cast(c)); + } + }; + + public: + + hex_to_number_sink(T& t) + : valid_(false), + t_(&t) + {} + + hex_to_number_sink(const hex_to_number_sink& hns) + : valid_(hns.valid), + t_(hns.t_) + {} + + inline hex_to_number_sink& operator=(const hex_to_number_sink& hns) + { + valid_ = hns.valid_; + t_ = hns.t_; + return (*this); + } + + template + inline hex_to_number_sink& operator=(const std::pair& s) + { + std::size_t offset = 0; + const std::size_t size = std::distance(s.first,s.second); + if ((size > 2) && ((*s.first) == '0') && (((*(s.first + 1)) == 'x') || ((*(s.first + 1)) == 'X'))) + offset = 2; + if ((size - offset) > (2 * sizeof(T))) + return (*this); + + const std::size_t buffer_size = 2 * sizeof(T); + const std::size_t buffer_offset = ((size - offset) % 2); + char buffer[buffer_size] = { '0' }; + if (!range_only_contains(hex_value_check(),s.first + offset,s.first + size)) + { + valid_ = false; + return (*this); + } + + std::copy(s.first + offset, s.first + size, buffer + buffer_offset); + (*t_) = 0; + valid_= convert_hex_to_bin(buffer, + buffer + (size - offset) + buffer_offset, + reinterpret_cast(t_)); + reverse_bytes(); + return (*this); + } + + inline hex_to_number_sink& operator=(const std::string& s) + { + return this->operator =(std::make_pair(to_ptr(s), to_ptr(s) + s.size())); + } + + inline bool valid() const + { + return valid_; + } + + private: + + inline void reverse_bytes() + { + unsigned char* itr1 = reinterpret_cast(t_); + unsigned char* itr2 = itr1 + (sizeof(T) - 1); + + while (itr1 < itr2) + { + std::swap(*itr1,*itr2); + ++itr1; + --itr2; + } + } + + private: + + bool valid_; + T* t_; + }; + + template + class base64_to_number_sink + { + // static_assert for T either int or unsigned int and alike (could use a concept) + private: + + struct base64_value_check + { + inline bool operator()(const unsigned char c) const + { + return (('0' <= c) && (c <= '9')) || + (('A' <= c) && (c <= 'Z')) || + (('a' <= c) && (c <= 'z')) || + ('+' == c) || + ('/' == c) || + ('=' == c); + } + + inline bool operator()(const char c) const + { + return (*this)(static_cast(c)); + } + }; + + public: + + base64_to_number_sink(T& t) + : valid_(false), + t_(&t) + {} + + base64_to_number_sink(const base64_to_number_sink& bns) + : valid_(bns.valid), + t_(bns.t_) + {} + + inline base64_to_number_sink& operator=(const base64_to_number_sink& bns) + { + valid_ = bns.valid_; + t_ = bns.t_; + return (*this); + } + + inline base64_to_number_sink& operator=(const std::string& s) + { + if (!range_only_contains(base64_value_check(), to_ptr(s), to_ptr(s) + s.size())) + { + valid_ = false; + return (*this); + } + + (*t_) = T(0); + + convert_base64_to_bin(to_ptr(s), to_ptr(s) + s.size(), reinterpret_cast(t_)); + reverse_bytes(); + + return (*this); + } + + template + inline base64_to_number_sink& operator=(const std::pair& s) + { + if (!range_only_contains(base64_value_check(),s.first,s.second)) + { + valid_ = false; + return (*this); + } + + (*t_) = T(0); + + convert_base64_to_bin(s.first, s.second,reinterpret_cast(t_)); + reverse_bytes(); + + return (*this); + } + + inline bool valid() const + { + return valid_; + } + + private: + + inline void reverse_bytes() + { + unsigned char* itr1 = reinterpret_cast(t_); + unsigned char* itr2 = itr1 + (sizeof(T) - 1); + + while (itr1 < itr2) + { + std::swap(*itr1,*itr2); + ++itr1; + --itr2; + } + } + + private: + + bool valid_; + T* t_; + }; + + class hex_to_string_sink + { + public: + + hex_to_string_sink(std::string& s) + : valid_(false), + s_(s) + {} + + hex_to_string_sink(const hex_to_string_sink& hss) + : valid_(hss.valid_), + s_(hss.s_) + {} + + inline hex_to_string_sink& operator=(const hex_to_string_sink& hss) + { + valid_ = hss.valid_; + s_ = hss.s_; + return (*this); + } + + template + inline hex_to_string_sink& operator=(const std::pair& s) + { + const std::size_t size = std::distance(s.first,s.second); + std::size_t offset = 0; + if ((size > 2) && ((*s.first) == '0') && (((*(s.first + 1)) == 'x') || ((*(s.first + 1)) == 'X'))) + offset = 2; + if ((size - offset) < 2) + { + valid_ = false; + return (*this); + } + s_.resize((size - offset) / 2); + valid_ = convert_hex_to_bin(s.first + offset, + s.second, + const_cast(to_ptr(s_))); + return (*this); + } + + inline hex_to_string_sink& operator=(const std::string& s) + { + return this->operator=(std::make_pair(const_cast(to_ptr(s)), + const_cast(to_ptr(s) + s.size()))); + } + + inline bool valid() const + { + return valid_; + } + + private: + + bool valid_; + std::string& s_; + }; + + template + class truncated_int + { + public: + + truncated_int() + : t_(0), + fractional_size_(std::numeric_limits::max()) + {} + + truncated_int& fractional_size(const std::size_t& size) + { + fractional_size_ = size; + return *this; + } + + truncated_int& fractional_unknown_size() + { + fractional_size_ = std::numeric_limits::max(); + return *this; + } + + truncated_int& operator()(T& t) + { + t_ = &t; + return *this; + } + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + if (0 == t_) + return false; + + const std::size_t size = std::distance(begin,end); + + if (std::numeric_limits::max() != fractional_size_) + { + if (size < (fractional_size_ + 1)) + return false; + else + return strtk::string_to_type_converter(begin, begin + (size - (fractional_size_ + 1)),(*t_)); + } + + typedef typename std::iterator_traits::value_type value_type; + const value_type fullstop = value_type('.'); + InputIterator new_end = std::find(begin, end, fullstop); + return strtk::string_to_type_converter(begin,new_end,(*t_)); + } + + private: + + T* t_; + std::size_t fractional_size_; + }; + + namespace details + { + template + inline T pow10(T d, const int exponent); + } + + template + class decimal_sink + { + public: + + decimal_sink(const std::size_t& int_size, const std::size_t& frac_size) + : t_ (0), + int_size_ (int_size ), + frac_size_(frac_size) + {} + + decimal_sink(T& t, const std::size_t& int_size, const std::size_t& frac_size) + : t_ (&t), + int_size_ (int_size ), + frac_size_(frac_size) + {} + + inline decimal_sink& int_size(const std::size_t& size) + { + int_size_ = size; + return *this; + } + + inline decimal_sink& frac_size(const std::size_t& size) + { + frac_size_ = size; + return *this; + } + + inline decimal_sink& operator()(T& t) + { + t_ = &t; + return *this; + } + + template + inline bool operator()(InputIterator itr, InputIterator end) + { + if (0 == t_) + return false; + + typedef typename strtk::details::real_type::type real_t; + + bool negative = ('-' == (*itr)); + + if (negative || '+' == (*itr)) + { + if (end == ++itr) + return false; + } + + while ((end != itr) && ('0' == (*itr))) ++itr; + + std::size_t length = std::distance(itr,end); + InputIterator end_n = itr + std::min(length,int_size_); + + real_t d = real_t(0); + + unsigned int digit = 0; + while (end_n != itr) + { + if ((digit = (*itr - '0')) < 10) + { + d = d * real_t(10) + static_cast(digit); + ++itr; + } + else if ('.' == *itr) + break; + else + return false; + } + + ++itr; + + length = std::min(frac_size_,std::distance(itr,end)); + end_n = itr + length; + + real_t f = real_t(0); + + while (end_n != itr) + { + if ((digit = (*itr - '0')) < 10) + { + f = f * real_t(10) + static_cast(digit); + ++itr; + } + else + return false; + } + + if (length) + { + d += strtk::details::pow10(f,-length); + } + + (*t_) = static_cast((negative) ? -d : d); + + return true; + } + + private: + + T* t_; + std::size_t int_size_; + std::size_t frac_size_; + }; + + namespace details + { + #define strtk_def_parse_stl_cnt_prxy(Type) \ + template \ + inline std::size_t parse_stl_container_proxy(const InputIterator begin, \ + const InputIterator end, \ + const std::string& delimiters, \ + Type& sequence, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + return parse(begin, end, delimiters, sequence, split_option); \ + } \ + + strtk_def_parse_stl_cnt_prxy(std::vector ) + strtk_def_parse_stl_cnt_prxy(std::deque ) + strtk_def_parse_stl_cnt_prxy(std::list ) + strtk_def_parse_stl_cnt_prxy(std::queue ) + strtk_def_parse_stl_cnt_prxy(std::stack ) + strtk_def_parse_stl_cnt_prxy(std::priority_queue) + #undef strtk_def_stl_cnt_prxy + + template + inline std::size_t parse_stl_container_proxy(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(begin, end, delimiters, set, split_option); + } + + template + inline std::size_t parse_stl_container_proxy(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse(begin, end, delimiters, multiset, split_option); + } + + #define strtk_def_parse_n_stl_cnt_prxy(Type) \ + template \ + inline std::size_t parse_n_stl_container_proxy(const InputIterator begin, \ + const InputIterator end, \ + const std::string& delimiters, \ + const std::size_t& n, \ + Type& sequence, \ + const split_options::type& split_option = split_options::compress_delimiters) \ + { \ + return parse_n(begin, end, delimiters, n, sequence, split_option); \ + } \ + + strtk_def_parse_n_stl_cnt_prxy(std::vector ) + strtk_def_parse_n_stl_cnt_prxy(std::deque ) + strtk_def_parse_n_stl_cnt_prxy(std::list ) + strtk_def_parse_n_stl_cnt_prxy(std::queue ) + strtk_def_parse_n_stl_cnt_prxy(std::stack ) + strtk_def_parse_n_stl_cnt_prxy(std::priority_queue) + #undef strtk_def_parse_n_stl_cnt_prxy + + template + inline std::size_t parse_n_stl_container_proxy(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::set& set, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(begin, end, delimiters, n, set, split_option); + } + + template + inline std::size_t parse_n_stl_container_proxy(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const std::size_t& n, + std::multiset& multiset, + const split_options::type& split_option = split_options::compress_delimiters) + { + return parse_n(begin, end, delimiters, n, multiset, split_option); + } + + } // namespace details + + template + class sink_type + { + public: + + typedef typename Container::value_type value_type; + + inline sink_type(const std::string& delimiters, + const split_options::type& split_option = split_options::compress_delimiters) + : delimiters_(delimiters), + split_option_(split_option), + container_(0), + element_count_(std::numeric_limits::max()) + {} + + inline sink_type(Container& container, + const std::string& delimiters, + const split_options::type& split_option = split_options::compress_delimiters) + : delimiters_(delimiters), + split_option_(split_option), + container_(&container) + {} + + inline sink_type& count(const std::size_t& element_count = std::numeric_limits::max()) + { + element_count_ = element_count; + return (*this); + } + + inline sink_type& operator()(Container& container, + const std::string& delimiters = "", + const split_options::type& split_option = split_options::compress_delimiters) + { + container_ = (&container); + if (!delimiters.empty()) + delimiters_ = delimiters; + split_option_ = split_option; + return (*this); + } + + template + inline bool parse(InputIterator begin, InputIterator end) + { + if (container_) + { + if (std::numeric_limits::max() == element_count_) + return (details::parse_stl_container_proxy + (begin, end, delimiters_, (*container_), split_option_) > 0); + else + return (details::parse_n_stl_container_proxy + (begin, end, delimiters_, element_count_, (*container_), split_option_) == element_count_); + } + else + return false; + } + + sink_type& reference() + { + return *this; + } + + private: + + std::string delimiters_; + split_options::type split_option_; + Container* container_; + std::size_t element_count_; + }; + + template struct vector_sink { typedef sink_type > type; }; + template struct deque_sink { typedef sink_type > type; }; + template struct list_sink { typedef sink_type > type; }; + template struct set_sink { typedef sink_type > type; }; + template struct multiset_sink { typedef sink_type > type; }; + template struct queue_sink { typedef sink_type > type; }; + template struct stack_sink { typedef sink_type > type; }; + template struct priority_queue_sink { typedef sink_type > type; }; + + namespace text + { + inline std::string center(const std::size_t& width, + const std::string::value_type& pad, + const std::string& str) + { + if (str.size() >= width) return str; + const std::size_t pad_count = width - str.size(); + const std::size_t pad_count_2 = (pad_count >> 1) + (pad_count & 1); + return std::string(pad_count >> 1,pad) + str + std::string(pad_count_2,pad); + } + + inline std::string right_align(const std::size_t& width, + const std::string::value_type& pad, + const std::string& str) + { + if (str.size() >= width) return str; + return std::string(width - str.size(),pad) + str; + } + + inline std::string left_align(const std::size_t& width, + const std::string::value_type& pad, + const std::string& str) + { + if (str.size() >= width) return str; + return str + std::string(width - str.size(),pad); + } + + template + inline std::string center(const std::size_t& width, + const std::string::value_type& pad, + const T& t) + { + return center(width,pad,type_to_string(t)); + } + + template + inline std::string right_align(const std::size_t& width, + const std::string::value_type& pad, + const T& t) + { + return right_align(width,pad,type_to_string(t)); + } + + template + inline std::string left_align(const std::size_t& width, + const std::string::value_type& pad, + const T& t) + { + return left_align(width,pad,type_to_string(t)); + } + + template + inline std::string center(const std::size_t& width, const T& t) + { + return center(width,' ',type_to_string(t)); + } + + template + inline std::string right_align(const std::size_t& width, const T& t) + { + return right_align(width,' ',type_to_string(t)); + } + + template + inline std::string left_align(const std::size_t& width, const T& t) + { + return left_align(width,' ',type_to_string(t)); + } + + inline std::string remaining_string(const std::size_t& index, + const std::string& str, + const bool return_empty = false) + { + if (index < str.size()) + return str.substr(index,str.size() - index); + else + return (!return_empty) ? str : ""; + } + + inline void remaining_string(const std::size_t& index, + const std::string& str, + std::string& result, + const bool return_empty = false) + { + if (index < str.size()) + result = str.substr(index,str.size() - index); + else + result = (!return_empty) ? str : ""; + } + + inline bool is_letter(const char c) + { + return (('A' <= c) && ( c <= 'Z')) || (('a' <= c) && ( c <= 'z')); + } + + inline bool is_lowercase_letter(const char c) + { + return (('a' <= c) && ( c <= 'z')); + } + + inline bool is_uppercase_letter(const char c) + { + return (('A' <= c) && ( c <= 'Z')); + } + + inline bool is_digit(const char c) + { + return (('0' <= c) && ( c <= '9')); + } + + inline bool is_hex_digit(const char c) + { + return (('0' <= c) && (c <= '9')) || + (('A' <= c) && (c <= 'F')) || + (('a' <= c) && (c <= 'f')); + } + + inline bool is_letter_or_digit(const char c) + { + return (is_letter(c) || is_digit(c)); + } + + inline bool is_all_letters(const std::string& s) + { + for (std::size_t i = 0; i < s.size(); ++i) + { + if (!is_letter(s[i])) + return false; + } + return true; + } + + inline bool is_all_digits(const std::string& s) + { + for (std::size_t i = 0; i < s.size(); ++i) + { + if (!is_digit(s[i])) + return false; + } + return true; + } + + inline void swap_inplace(std::string& s, const std::size_t& i0, const std::size_t& i1) + { + if (i0 >= s.size()) return; + if (i1 >= s.size()) return; + std::swap(s[i0],s[i1]); + } + + inline std::string swap(const std::string& s, const std::size_t& i0, const std::size_t& i1) + { + std::string result = s; + swap_inplace(result,i0,i1); + return result; + } + + inline void remove_inplace(std::string& s, const std::size_t& index) + { + if (index >= s.size()) + return; + std::memcpy(const_cast(to_ptr(s) + index), const_cast(to_ptr(s) + (index + 1)), s.size() - index); + s.resize(s.size() - 1); + } + + inline std::string remove(const std::string& s, const std::size_t& index) + { + std::string result = s; + remove_inplace(result,index); + return result; + } + + inline void insert_inplace(std::string& s, const std::size_t& index, const char c) + { + s.resize(s.size() + 1); + std::memcpy(const_cast(to_ptr(s) + index + 1), const_cast(to_ptr(s) + (index)), s.size() - index); + s[index] = c; + } + + inline std::string insert(const std::string& s, const std::size_t& index, const char c) + { + std::string result = s; + insert_inplace(result,index,c); + return result; + } + + } // namespace text + + namespace find_mode + { + enum type + { + exactly_n, + atleast_n + }; + } + + namespace find_type + { + enum type + { + digits, + letters, + lowercase_letters, + uppercase_letters, + letters_digits + }; + } + + namespace details + { + template + struct range_type + { + typedef typename std::pair type; + }; + + template + inline typename range_type::type find_exactly_n_consecutive_values(const std::size_t n, + Predicate p, + Iterator itr, + const Iterator end, + const bool stateful_predicate = false) + { + if (static_cast(std::distance(itr,end)) < n) + return typename range_type::type(end,end); + + std::size_t count = n; + + while (end != itr) + { + if (p(*itr)) + { + if (0 != --count) + ++itr; + else + { + std::advance(itr,1 - n); + return typename range_type::type(itr,itr + n); + } + } + else + { + ++itr; + while ((end != itr) && !p(*itr)) + ++itr; + if (!stateful_predicate) + count = n; + else + { + --count; + ++itr; + } + } + } + + return typename range_type::type(end,end); + } + + template + inline typename range_type::type find_atleast_n_consecutive_values(const std::size_t n, + Predicate p, + Iterator itr, + const Iterator end) + { + if (static_cast(std::distance(itr,end)) < n) + return typename range_type::type(end,end); + + std::size_t count = 0; + + while (end != itr) + { + if (p(*itr)) + { + ++count; + ++itr; + } + else + { + if (count >= n) + { + std::advance(itr,-static_cast(count)); + return typename range_type::type(itr,itr + count); + } + + while ((end != itr) && !p(*itr)) + ++itr; + count = 0; + } + } + + if (count >= n) + { + std::advance(itr,-static_cast(count)); + return typename range_type::type(itr,itr + count); + } + else + return typename range_type::type(end,end); + } + + template + inline typename range_type::type find_exactly_n_consecutive_values(const std::size_t n, + Predicate p, + typename details::range_type::type range, + const bool stateful_predicate = false) + { + return find_exactly_n_consecutive_values(n,p,range.first,range.second,stateful_predicate); + } + + template + inline typename range_type::type find_atleast_n_consecutive_values(const std::size_t n, + Predicate p, + typename details::range_type::type range) + { + return find_atleast_n_consecutive_values(n,p,range.first,range.second); + } + + template + inline typename range_type::type find_n_consecutive_values(const std::size_t n, + find_mode::type mode, + Predicate p, + Iterator itr, + const Iterator end) + { + switch (mode) + { + case find_mode::exactly_n : return find_exactly_n_consecutive_values(n,p,itr,end); + case find_mode::atleast_n : return find_atleast_n_consecutive_values(n,p,itr,end); + default : return typename range_type::type(end,end); + } + } + + template + inline bool match_exactly_n_consecutive_values(const std::size_t n, + Predicate p, + Iterator itr, + const Iterator end) + { + if (static_cast(std::distance(itr,end)) < n) + return false; + + std::size_t count = n; + + while (end != itr) + { + if (p(*itr)) + { + if (0 == --count) + return true; + else + ++itr; + } + else + return false; + } + + return false; + } + + template + inline bool match_atleast_n_consecutive_values(const std::size_t n, + Predicate p, + Iterator itr, + const Iterator end) + { + if (static_cast(std::distance(itr,end)) < n) + return false; + + std::size_t count = 0; + + while (end != itr) + { + if (p(*itr)) + { + ++count; + ++itr; + } + else if (count >= n) + return true; + else + return false; + } + + return false; + } + + template + inline bool match_n_consecutive_values(const std::size_t n, + find_mode::type mode, + Predicate p, + Iterator itr, + const Iterator end) + { + switch (mode) + { + case find_mode::exactly_n : return match_exactly_n_consecutive_values(n,p,itr,end); + case find_mode::atleast_n : return match_atleast_n_consecutive_values(n,p,itr,end); + default : return false; + } + } + + } + + template + inline typename details::range_type::type find_n_consecutive(const std::size_t n, + find_type::type type, + find_mode::type mode, + typename details::range_type::type range) + { + switch (type) + { + case find_type::digits : return details::find_n_consecutive_values(n, + mode, + strtk::text::is_digit, + range.first,range.second); + + case find_type::letters : return details::find_n_consecutive_values(n, + mode, + strtk::text::is_letter, + range.first,range.second); + + case find_type::lowercase_letters : return details::find_n_consecutive_values(n, + mode, + strtk::text::is_lowercase_letter, + range.first,range.second); + + case find_type::uppercase_letters : return details::find_n_consecutive_values(n, + mode, + strtk::text::is_uppercase_letter, + range.first,range.second); + + case find_type::letters_digits : return details::find_n_consecutive_values(n, + mode, + strtk::text::is_letter_or_digit, + range.first,range.second); + + default : return typename details::range_type::type(range.second,range.second); + } + } + + template + inline bool match_n_consecutive(const std::size_t n, + find_type::type type, + find_mode::type mode, + typename details::range_type::type range) + { + switch (type) + { + case find_type::digits : return details::match_n_consecutive_values(n, + mode, + strtk::text::is_digit, + range.first,range.second); + + case find_type::letters : return details::match_n_consecutive_values(n, + mode, + strtk::text::is_letter, + range.first,range.second); + + case find_type::lowercase_letters : return details::match_n_consecutive_values(n, + mode, + strtk::text::is_lowercase_letter, + range.first,range.second); + + case find_type::uppercase_letters : return details::match_n_consecutive_values(n, + mode, + strtk::text::is_uppercase_letter, + range.first,range.second); + + case find_type::letters_digits : return details::match_n_consecutive_values(n, + mode, + strtk::text::is_letter_or_digit, + range.first,range.second); + + default : return false; + } + } + + template + inline std::size_t split_on_consecutive(const std::size_t n, + Predicate p, + char* begin, + char* end, + OutputIterator out, + const bool stateful_predicate = false) + { + if (0 == n) return 0; + + typedef char* iterator_type; + typedef details::range_type::type range_type; + range_type itr_range(begin,end); + std::size_t match_count = 0; + + while (end != itr_range.first) + { + range_type found_itr = + details::find_exactly_n_consecutive_values(n, + p, + itr_range, + stateful_predicate); + + if ((end == found_itr.first) && (found_itr.first == found_itr.second)) + { + break; + } + else + { + (*out) = found_itr; + ++out; + ++match_count; + itr_range.first = found_itr.second; + } + } + + return match_count; + } + + template + inline std::size_t split_on_consecutive(const std::size_t n, + const std::size_t m, + Predicate p, + char* begin, + char* end, + OutputIterator out) + { + if (0 == n) return 0; + + typedef char* iterator_type; + typedef details::range_type::type range_type; + + range_type itr_range(begin,end); + std::size_t match_count = 0; + + while ((end != itr_range.first) && (match_count <= n)) + { + range_type found_itr = details::find_exactly_n_consecutive_values(m,p,itr_range); + if ((end == found_itr.first) && (found_itr.first == found_itr.second)) + { + break; + } + else + { + (*out) = found_itr; + ++out; + ++match_count; + itr_range.first = found_itr.second; + } + } + + return match_count; + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + const find_type::type type, + const find_mode::type mode, + char* begin, + char* end, + OutputIterator out) + { + if (0 == n) return 0; + + typedef char* iterator_type; + typedef details::range_type::type range_type; + + range_type itr_range(begin,end); + std::size_t match_count = 0; + + while (end != itr_range.first) + { + range_type found_itr = find_n_consecutive(n,type,mode,itr_range); + + if ((end == found_itr.first) && (found_itr.first == found_itr.second)) + { + break; + } + else + { + (*out) = found_itr; + ++out; + ++match_count; + itr_range.first = found_itr.second; + } + } + + return match_count; + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + const find_type::type type, + const find_mode::type mode, + char* begin, + char* end, + OutputIterator out) + { + if (0 == n) return 0; + + typedef char* iterator_type; + typedef details::range_type::type range_type; + + range_type itr_range(begin,end); + std::size_t match_count = 0; + + while ((end != itr_range.first) && (match_count <= n)) + { + range_type found_itr = find_n_consecutive(m,type,mode,itr_range); + + if ((end == found_itr.first) && (found_itr.first == found_itr.second)) + { + break; + } + else + { + (*out) = found_itr; + ++out; + ++match_count; + itr_range.first = found_itr.second; + } + } + + return match_count; + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + const find_type::type type, + const find_mode::type mode, + const char* begin, + const char* end, + OutputIterator out) + { + return split_on_consecutive(n, + type, + mode, + const_cast(begin), + const_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + const find_type::type type, + const find_mode::type mode, + const unsigned char* begin, + const unsigned char* end, + OutputIterator out) + { + return split_on_consecutive(n, + type, + mode, + reinterpret_cast(begin), + reinterpret_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + const find_type::type type, + const find_mode::type mode, + const std::string& str, + OutputIterator out) + { + return split_on_consecutive(n, + type, + mode, + to_ptr(str), to_ptr(str) + str.size(), + out); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + const find_type::type type, + const find_mode::type mode, + const char* begin, + const char* end, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + type, + mode, + const_cast(begin), + const_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + const find_type::type type, + const find_mode::type mode, + const unsigned char* begin, + const unsigned char* end, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + type, + mode, + reinterpret_cast(begin), + reinterpret_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + const find_type::type type, + const find_mode::type mode, + const std::string& str, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + type, + mode, + to_ptr(str), to_ptr(str) + str.size(), + out); + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + Predicate p, + const char* begin, + const char* end, + OutputIterator out, + const bool stateful_predicate = false) + { + return split_on_consecutive(n, + p, + const_cast(begin), + const_cast(end), + out, + stateful_predicate); + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + Predicate p, + const unsigned char* begin, + const unsigned char* end, + OutputIterator out, + const bool stateful_predicate = false) + { + return split_on_consecutive(n, + p, + reinterpret_cast(begin), + reinterpret_cast(end), + out, + stateful_predicate); + } + + template + inline std::size_t split_on_consecutive(const std::size_t& n, + Predicate p, + const std::string& str, + OutputIterator out, + const bool stateful_predicate = false) + { + return split_on_consecutive(n, + p, + to_ptr(str), to_ptr(str) + str.size(), + out, + stateful_predicate); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + Predicate p, + const char* begin, + const char* end, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + p, + const_cast(begin), + const_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + Predicate p, + const unsigned char* begin, + const unsigned char* end, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + p, + reinterpret_cast(begin), + reinterpret_cast(end), + out); + } + + template + inline std::size_t split_on_consecutive_n(const std::size_t& n, + const std::size_t& m, + Predicate p, + const std::string& str, + OutputIterator out) + { + return split_on_consecutive_n(n, + m, + p, + to_ptr(str), to_ptr(str) + str.size(), + out); + } + + // Required for broken versions of GCC pre 4.5 + namespace util { class value; } + + namespace details + { + + class expect_impl + { + public: + + expect_impl(const std::string& s) + : s_(s) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + if (static_cast(std::distance(begin,end)) != s_.size()) + return false; + else + return std::equal(to_ptr(s_), to_ptr(s_) + s_.size(), begin); + } + + inline expect_impl& ref() + { + return (*this); + } + + inline void set_value(const std::string& s) + { + s_ = s; + } + + private: + + std::string s_; + }; + + class iexpect_impl + { + public: + + iexpect_impl(const std::string& s) + : s_(s) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + if (static_cast(std::distance(begin,end)) != s_.size()) + return false; + else + return std::equal(to_ptr(s_), to_ptr(s_) + s_.size(), begin, imatch_char); + } + + inline iexpect_impl& ref() + { + return (*this); + } + + inline void set_value(const std::string& s) + { + s_ = s; + } + + private: + + std::string s_; + }; + + class like_impl + { + public: + + like_impl(const std::string& s) + : s_(s) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) const + { + typedef typename std::iterator_traits::value_type value_type; + static const value_type zero_or_more = value_type('*'); + static const value_type zero_or_one = value_type('?'); + return strtk::match(to_ptr(s_), to_ptr(s_) + s_.size(), begin, end, zero_or_more, zero_or_one); + } + + inline like_impl& ref() + { + return (*this); + } + + inline void set_pattern(const std::string& s) + { + s_ = s; + } + + private: + + std::string s_; + }; + + template + class inrange_impl + { + public: + + inrange_impl(T& t, const T& low, const T& hi) + : t_(&t), + low_(low), + hi_(hi) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + T temp; + if (!strtk::string_to_type_converter(begin, end, temp)) + return false; + else if (temp < low_) + return false; + else if (temp > hi_) + return false; + (*t_) = temp; + return true; + } + + inline inrange_impl& ref() + { + return (*this); + } + + inline void set_low_hi(const T& low, const T& hi) + { + low_ = low; + hi_ = hi; + } + + private: + + T* t_; + T low_; + T hi_; + }; + + namespace trim_details + { + template + struct convert_impl + { + template + static bool execute(InputIterator begin, InputIterator end, + const std::string& rem_chars, + std::size_t mode, + Type& t) + { + std::string s; + if (!strtk::string_to_type_converter(begin, end, s)) + return false; + switch (mode) + { + case 0 : remove_leading_trailing(rem_chars,s); break; + case 1 : remove_leading (rem_chars,s); break; + case 2 : remove_trailing (rem_chars,s); break; + default : return false; + } + + return strtk::string_to_type_converter(s,t); + } + }; + + template <> + struct convert_impl + { + template + static bool execute(InputIterator begin, InputIterator end, + const std::string& rem_chars, + std::size_t mode, + std::string& t) + { + if (!strtk::string_to_type_converter(begin, end, t)) + return false; + + switch (mode) + { + case 0 : remove_leading_trailing(rem_chars,t); break; + case 1 : remove_leading (rem_chars,t); break; + case 2 : remove_trailing (rem_chars,t); break; + default : return false; + } + + return true; + } + }; + } + + template + class trim_impl + { + public: + + trim_impl(const std::size_t mode, + T& t, + const std::string& rem_chars = " ") + : mode_(mode), + t_(&t), + rem_chars_(rem_chars) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + return trim_details::convert_impl::execute(begin, end, rem_chars_, mode_, (*t_)); + } + + inline trim_impl& ref() + { + return (*this); + } + + private: + + std::size_t mode_; + T* t_; + std::string rem_chars_; + }; + + class conv_to_lcase_impl + { + public: + + conv_to_lcase_impl(std::string& s) + : s_(&s) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + std::string& s = (*s_); + s.assign(begin,end); + convert_to_lowercase(s); + return true; + } + + inline conv_to_lcase_impl& ref() + { + return (*this); + } + + private: + + std::string* s_; + }; + + class conv_to_ucase_impl + { + public: + + conv_to_ucase_impl(std::string& s) + : s_(&s) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + std::string& s = (*s_); + s.assign(begin,end); + convert_to_uppercase(s); + return true; + } + + inline conv_to_ucase_impl& ref() + { + return (*this); + } + + private: + + std::string* s_; + }; + + class fill_array_impl + { + public: + + fill_array_impl(unsigned char* data, const std::size_t& size) + : data_(data), + size_(size) + {} + + template + inline bool operator()(InputIterator begin, InputIterator end) + { + const std::size_t range_size = static_cast(std::distance(begin,end)); + if (range_size != size_) + return false; + std::memcpy(data_,begin,range_size); + return true; + } + + inline fill_array_impl& ref() + { + return (*this); + } + + inline fill_array_impl& set(unsigned char* data, const std::size_t& size) + { + data_ = data; + size_ = size; + return (*this); + } + + inline fill_array_impl& set(char* data, const std::size_t& size) + { + data_ = reinterpret_cast(data); + size_ = size; + return (*this); + } + + inline fill_array_impl& set_data(unsigned char* data) + { + data_ = data; + return (*this); + } + + inline fill_array_impl& set_data(char* data) + { + data_ = reinterpret_cast(data); + return (*this); + } + + inline fill_array_impl& set_size(const std::size_t& size) + { + size_ = size; + return (*this); + } + + private: + + unsigned char* data_; + std::size_t size_; + }; + } + + inline details::expect_impl expect(const std::string& s) + { + return details::expect_impl(s); + } + + inline details::iexpect_impl iexpect(const std::string& s) + { + return details::iexpect_impl(s); + } + + inline details::like_impl like(const std::string& s) + { + return details::like_impl(s); + } + + template + inline details::inrange_impl inrange(T& t, const T0& low, const T1& hi) + { + return details::inrange_impl(t,T(low),T(hi)); + } + + template + inline details::trim_impl trim(const std::string& rem_chars, T& t) + { + return details::trim_impl(0,t,rem_chars); + } + + template + inline details::trim_impl trim_leading(const std::string& rem_chars, T& t) + { + return details::trim_impl(1,t,rem_chars); + } + + template + inline details::trim_impl trim_trailing(const std::string& rem_chars, T& t) + { + return details::trim_impl(2,t,rem_chars); + } + + inline details::conv_to_lcase_impl as_lcase(std::string& s) + { + return details::conv_to_lcase_impl(s); + } + + inline details::conv_to_ucase_impl as_ucase(std::string& s) + { + return details::conv_to_ucase_impl(s); + } + + inline details::fill_array_impl fill_array(unsigned char* data, const std::size_t& size) + { + return details::fill_array_impl(data,size); + } + + inline details::fill_array_impl fill_array(char* data, const std::size_t& size) + { + return details::fill_array_impl(reinterpret_cast(data),size); + } + + template + inline details::fill_array_impl fill_array(unsigned char (&data)[N]) + { + return details::fill_array_impl(data,N); + } + + template + inline details::fill_array_impl fill_array(char (&data)[N]) + { + return details::fill_array_impl(reinterpret_cast(data),N); + } + + inline details::fill_array_impl fill_array(std::string& data, const std::size_t& size) + { + return fill_array(const_cast(to_ptr(data)),size); + } + + inline details::fill_array_impl fill_array(std::string& data) + { + return fill_array(const_cast(to_ptr(data)),data.size()); + } + + namespace details + { + static const unsigned char digit_table[] = + { + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xFF - 0x07 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x08 - 0x0F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x10 - 0x17 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x18 - 0x1F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x20 - 0x27 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x28 - 0x2F + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 0x30 - 0x37 + 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x38 - 0x3F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x40 - 0x47 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x48 - 0x4F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x50 - 0x57 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x58 - 0x5F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x60 - 0x67 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x68 - 0x6F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x70 - 0x77 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x78 - 0x7F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x80 - 0x87 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x88 - 0x8F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x90 - 0x97 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0x98 - 0x9F + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xA0 - 0xA7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xA8 - 0xAF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xB0 - 0xB7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xB8 - 0xBF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xC0 - 0xC7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xC8 - 0xCF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xD0 - 0xD7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xD8 - 0xDF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xE0 - 0xE7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xE8 - 0xEF + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 0xF0 - 0xF7 + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // 0xF8 - 0xFF + }; + + static const std::size_t digit_table_size = sizeof(digit_table) / sizeof(unsigned char); + + template + static inline bool is_invalid_digit(const T& t) + { + static const unsigned int invalid_digit = 0xFF; + return (static_cast(invalid_digit) == t); + } + + template + static inline bool is_valid_digit(const T& t) + { + static const unsigned int invalid_digit = 0xFF; + return (static_cast(invalid_digit) != t); + } + + static const unsigned char digitr[] = + { + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + }; + + static const unsigned char rev_3digit_lut[] = + { + "000001002003004005006007008009010011012013014015016017018019020021022023024" + "025026027028029030031032033034035036037038039040041042043044045046047048049" + "050051052053054055056057058059060061062063064065066067068069070071072073074" + "075076077078079080081082083084085086087088089090091092093094095096097098099" + "100101102103104105106107108109110111112113114115116117118119120121122123124" + "125126127128129130131132133134135136137138139140141142143144145146147148149" + "150151152153154155156157158159160161162163164165166167168169170171172173174" + "175176177178179180181182183184185186187188189190191192193194195196197198199" + "200201202203204205206207208209210211212213214215216217218219220221222223224" + "225226227228229230231232233234235236237238239240241242243244245246247248249" + "250251252253254255256257258259260261262263264265266267268269270271272273274" + "275276277278279280281282283284285286287288289290291292293294295296297298299" + "300301302303304305306307308309310311312313314315316317318319320321322323324" + "325326327328329330331332333334335336337338339340341342343344345346347348349" + "350351352353354355356357358359360361362363364365366367368369370371372373374" + "375376377378379380381382383384385386387388389390391392393394395396397398399" + "400401402403404405406407408409410411412413414415416417418419420421422423424" + "425426427428429430431432433434435436437438439440441442443444445446447448449" + "450451452453454455456457458459460461462463464465466467468469470471472473474" + "475476477478479480481482483484485486487488489490491492493494495496497498499" + "500501502503504505506507508509510511512513514515516517518519520521522523524" + "525526527528529530531532533534535536537538539540541542543544545546547548549" + "550551552553554555556557558559560561562563564565566567568569570571572573574" + "575576577578579580581582583584585586587588589590591592593594595596597598599" + "600601602603604605606607608609610611612613614615616617618619620621622623624" + "625626627628629630631632633634635636637638639640641642643644645646647648649" + "650651652653654655656657658659660661662663664665666667668669670671672673674" + "675676677678679680681682683684685686687688689690691692693694695696697698699" + "700701702703704705706707708709710711712713714715716717718719720721722723724" + "725726727728729730731732733734735736737738739740741742743744745746747748749" + "750751752753754755756757758759760761762763764765766767768769770771772773774" + "775776777778779780781782783784785786787788789790791792793794795796797798799" + "800801802803804805806807808809810811812813814815816817818819820821822823824" + "825826827828829830831832833834835836837838839840841842843844845846847848849" + "850851852853854855856857858859860861862863864865866867868869870871872873874" + "875876877878879880881882883884885886887888889890891892893894895896897898899" + "900901902903904905906907908909910911912913914915916917918919920921922923924" + "925926927928929930931932933934935936937938939940941942943944945946947948949" + "950951952953954955956957958959960961962963964965966967968969970971972973974" + "975976977978979980981982983984985986987988989990991992993994995996997998999" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + }; + + static const unsigned char rev_2digit_lut[] = + { + "0001020304050607080910111213141516171819" + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + }; + + template + inline T pow10(T d, const int exponent) + { + static const double fract10[] = + { + 0.0, + 1.0E+001, 1.0E+002, 1.0E+003, 1.0E+004, 1.0E+005, 1.0E+006, 1.0E+007, 1.0E+008, 1.0E+009, 1.0E+010, + 1.0E+011, 1.0E+012, 1.0E+013, 1.0E+014, 1.0E+015, 1.0E+016, 1.0E+017, 1.0E+018, 1.0E+019, 1.0E+020, + 1.0E+021, 1.0E+022, 1.0E+023, 1.0E+024, 1.0E+025, 1.0E+026, 1.0E+027, 1.0E+028, 1.0E+029, 1.0E+030, + 1.0E+031, 1.0E+032, 1.0E+033, 1.0E+034, 1.0E+035, 1.0E+036, 1.0E+037, 1.0E+038, 1.0E+039, 1.0E+040, + 1.0E+041, 1.0E+042, 1.0E+043, 1.0E+044, 1.0E+045, 1.0E+046, 1.0E+047, 1.0E+048, 1.0E+049, 1.0E+050, + 1.0E+051, 1.0E+052, 1.0E+053, 1.0E+054, 1.0E+055, 1.0E+056, 1.0E+057, 1.0E+058, 1.0E+059, 1.0E+060, + 1.0E+061, 1.0E+062, 1.0E+063, 1.0E+064, 1.0E+065, 1.0E+066, 1.0E+067, 1.0E+068, 1.0E+069, 1.0E+070, + 1.0E+071, 1.0E+072, 1.0E+073, 1.0E+074, 1.0E+075, 1.0E+076, 1.0E+077, 1.0E+078, 1.0E+079, 1.0E+080, + 1.0E+081, 1.0E+082, 1.0E+083, 1.0E+084, 1.0E+085, 1.0E+086, 1.0E+087, 1.0E+088, 1.0E+089, 1.0E+090, + 1.0E+091, 1.0E+092, 1.0E+093, 1.0E+094, 1.0E+095, 1.0E+096, 1.0E+097, 1.0E+098, 1.0E+099, 1.0E+100, + 1.0E+101, 1.0E+102, 1.0E+103, 1.0E+104, 1.0E+105, 1.0E+106, 1.0E+107, 1.0E+108, 1.0E+109, 1.0E+110, + 1.0E+111, 1.0E+112, 1.0E+113, 1.0E+114, 1.0E+115, 1.0E+116, 1.0E+117, 1.0E+118, 1.0E+119, 1.0E+120, + 1.0E+121, 1.0E+122, 1.0E+123, 1.0E+124, 1.0E+125, 1.0E+126, 1.0E+127, 1.0E+128, 1.0E+129, 1.0E+130, + 1.0E+131, 1.0E+132, 1.0E+133, 1.0E+134, 1.0E+135, 1.0E+136, 1.0E+137, 1.0E+138, 1.0E+139, 1.0E+140, + 1.0E+141, 1.0E+142, 1.0E+143, 1.0E+144, 1.0E+145, 1.0E+146, 1.0E+147, 1.0E+148, 1.0E+149, 1.0E+150, + 1.0E+151, 1.0E+152, 1.0E+153, 1.0E+154, 1.0E+155, 1.0E+156, 1.0E+157, 1.0E+158, 1.0E+159, 1.0E+160, + 1.0E+161, 1.0E+162, 1.0E+163, 1.0E+164, 1.0E+165, 1.0E+166, 1.0E+167, 1.0E+168, 1.0E+169, 1.0E+170, + 1.0E+171, 1.0E+172, 1.0E+173, 1.0E+174, 1.0E+175, 1.0E+176, 1.0E+177, 1.0E+178, 1.0E+179, 1.0E+180, + 1.0E+181, 1.0E+182, 1.0E+183, 1.0E+184, 1.0E+185, 1.0E+186, 1.0E+187, 1.0E+188, 1.0E+189, 1.0E+190, + 1.0E+191, 1.0E+192, 1.0E+193, 1.0E+194, 1.0E+195, 1.0E+196, 1.0E+197, 1.0E+198, 1.0E+199, 1.0E+200, + 1.0E+201, 1.0E+202, 1.0E+203, 1.0E+204, 1.0E+205, 1.0E+206, 1.0E+207, 1.0E+208, 1.0E+209, 1.0E+210, + 1.0E+211, 1.0E+212, 1.0E+213, 1.0E+214, 1.0E+215, 1.0E+216, 1.0E+217, 1.0E+218, 1.0E+219, 1.0E+220, + 1.0E+221, 1.0E+222, 1.0E+223, 1.0E+224, 1.0E+225, 1.0E+226, 1.0E+227, 1.0E+228, 1.0E+229, 1.0E+230, + 1.0E+231, 1.0E+232, 1.0E+233, 1.0E+234, 1.0E+235, 1.0E+236, 1.0E+237, 1.0E+238, 1.0E+239, 1.0E+240, + 1.0E+241, 1.0E+242, 1.0E+243, 1.0E+244, 1.0E+245, 1.0E+246, 1.0E+247, 1.0E+248, 1.0E+249, 1.0E+250, + 1.0E+251, 1.0E+252, 1.0E+253, 1.0E+254, 1.0E+255, 1.0E+256, 1.0E+257, 1.0E+258, 1.0E+259, 1.0E+260, + 1.0E+261, 1.0E+262, 1.0E+263, 1.0E+264, 1.0E+265, 1.0E+266, 1.0E+267, 1.0E+268, 1.0E+269, 1.0E+270, + 1.0E+271, 1.0E+272, 1.0E+273, 1.0E+274, 1.0E+275, 1.0E+276, 1.0E+277, 1.0E+278, 1.0E+279, 1.0E+280, + 1.0E+281, 1.0E+282, 1.0E+283, 1.0E+284, 1.0E+285, 1.0E+286, 1.0E+287, 1.0E+288, 1.0E+289, 1.0E+290, + 1.0E+291, 1.0E+292, 1.0E+293, 1.0E+294, 1.0E+295, 1.0E+296, 1.0E+297, 1.0E+298, 1.0E+299, 1.0E+300, + 1.0E+301, 1.0E+302, 1.0E+303, 1.0E+304, 1.0E+305, 1.0E+306, 1.0E+307, 1.0E+308 + }; + + static const int fract10_size = static_cast(sizeof(fract10) / sizeof(double)); + + const int e = std::abs(exponent); + + if (exponent >= std::numeric_limits::min_exponent10) + { + if (e < fract10_size) + { + if (exponent > 0) + return T(d * fract10[e]); + else + return T(d / fract10[e]); + } + else + return T(d * std::pow(10.0, 10.0 * exponent)); + } + else + { + d /= fract10[ -std::numeric_limits::min_exponent10]; + return T(d / fract10[-exponent + std::numeric_limits::min_exponent10]); + } + } + + #define strtk_register_pod_type(T) \ + template<> struct is_pod{ typedef yes_t result_t; enum {result = true }; }; \ + template<> struct is_pod{ typedef yes_t result_t; enum {result = true }; }; \ + template<> struct is_pod{ typedef yes_t result_t; enum {result = true }; }; \ + template<> struct is_pod{ typedef yes_t result_t; enum {result = true }; };\ + + strtk_register_pod_type(bool) + strtk_register_pod_type(signed char) + strtk_register_pod_type(char) + strtk_register_pod_type(short) + strtk_register_pod_type(int) + strtk_register_pod_type(long int) + strtk_register_pod_type(long long int) + strtk_register_pod_type(unsigned char) + strtk_register_pod_type(unsigned short) + strtk_register_pod_type(unsigned int) + strtk_register_pod_type(unsigned long int) + strtk_register_pod_type(unsigned long long int) + strtk_register_pod_type(float) + strtk_register_pod_type(double) + strtk_register_pod_type(long double) + + #undef strtk_register_pod_type + + template + struct numeric {}; + + template<> + struct numeric + { + static const unsigned int length = 5; + static const unsigned int size = 16; + static const unsigned int bound_length = 5; + static const short m10 = 3276; + static const short ldpos = 7; + static const short ldneg = 8; + }; + + template<> + struct numeric + { + static const unsigned int length = 5; + static const unsigned int size = 16; + static const unsigned int bound_length = 5; + static const unsigned short m10 = 6553; + static const unsigned short ldpos = 5; + }; + + template<> + struct numeric + { + static const unsigned int length = 10; + static const unsigned int size = 16; + static const unsigned int bound_length = 10; + static const int m10 = 214748364; + static const int ldpos = 7; + static const int ldneg = 8; + }; + + template<> + struct numeric + { + static const unsigned int length = 10; + static const unsigned int size = 16; + static const unsigned int bound_length = 10; + static const unsigned int m10 = 429496729; + static const unsigned int ldpos = 5; + }; + + template<> + struct numeric + { + static const unsigned int length = 10; + static const unsigned int size = 16; + static const unsigned int bound_length = 10; + static const long m10 = 214748364; + static const long ldpos = 7; + static const long ldneg = 8; + }; + + template<> + struct numeric + { + static const unsigned int length = 10; + static const unsigned int size = 16; + static const unsigned int bound_length = 10; + static const unsigned long m10 = 429496729; + static const unsigned long ldpos = 5; + }; + + template<> + struct numeric + { + static const unsigned int length = 19; + static const unsigned int size = 24; + static const unsigned int bound_length = 19; + static const unsigned long long m10 = 922337203685477580; + static const unsigned long long ldpos = 7; + static const unsigned long long ldneg = 8; + }; + + template<> + struct numeric + { + static const unsigned int length = 20; + static const unsigned int size = 24; + static const unsigned int bound_length = 20; + static const unsigned long long m10 = 1844674407370955161; + static const unsigned long long ldpos = 5; + }; + + template<> struct numeric { enum { min_exp = -37, max_exp = +38, precision = 10}; }; + template<> struct numeric { enum { min_exp = -307, max_exp = +308, precision = 15}; }; + + template struct ldt {}; + template <> struct ldt { enum { i = -308, a = +308, p = 15}; }; // 64-bit + template <> struct ldt { enum { i = -4931, a = +4931, p = 18}; }; // 80-bit + template <> struct ldt { enum { i = -4931, a = +4931, p = 22}; }; // 96-bit + template <> struct ldt { enum { i = -4931, a = +4931, p = 34}; }; //128-bit + + template<> + struct numeric + { + typedef ldt ld; + enum { min_exp = ld::i, max_exp = ld::a, precision = ld::p}; + }; + + #define strtk_register_unsigned_type_tag(T) \ + template<> struct supported_conversion_to_type { typedef unsigned_type_tag type; }; \ + template<> struct supported_conversion_from_type { typedef unsigned_type_tag type; };\ + + #define strtk_register_signed_type_tag(T) \ + template<> struct supported_conversion_to_type{ typedef signed_type_tag type; }; \ + template<> struct supported_conversion_from_type { typedef signed_type_tag type; }; \ + + #define strtk_register_real_type_tag(T) \ + template<> struct supported_conversion_to_type{ typedef real_type_tag type; }; + + #define strtk_register_byte_type_tag(T) \ + template<> struct supported_conversion_to_type{ typedef byte_type_tag type; }; \ + template<> struct supported_conversion_from_type { typedef byte_type_tag type; };\ + + #define strtk_register_hex_number_type_tag(T) \ + template<> struct supported_conversion_to_type{ typedef hex_number_type_tag type; }; + + template<> struct supported_conversion_to_type{ typedef hex_string_type_tag type; }; + + #define strtk_register_base64_type_tag(T) \ + template<> struct supported_conversion_to_type{ typedef base64_type_tag type; }; + + #define strtk_register_supported_iterator_type(T) \ + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef bool_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef stdstring_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef value_type_tag type; }; + template<> struct supported_conversion_from_type { typedef value_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef expect_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef expect_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef like_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef fillchararray_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef lcase_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + template<> struct supported_conversion_to_type { typedef ucase_type_tag type; }; + template<> struct supported_iterator_type { enum { value = true }; }; + + #define strtk_register_truncint_type_tag(T) \ + template<> struct supported_conversion_to_type > { typedef truncint_type_tag type; }; \ + template<> struct supported_iterator_type > { enum { value = true }; }; \ + + #define strtk_register_decsink_type_tag(T) \ + template<> struct supported_conversion_to_type > { typedef decsink_type_tag type; }; \ + template<> struct supported_iterator_type > { enum { value = true }; }; \ + + #define strtk_register_inrange_type_tag(T) \ + template<> struct supported_conversion_to_type > { typedef inrange_type_tag type; }; \ + template<> struct supported_iterator_type > { enum { value = true }; }; \ + + #define strtk_register_trim_type_tag(T) \ + template<> struct supported_conversion_to_type > { typedef trim_type_tag type; }; \ + template<> struct supported_iterator_type > { enum { value = true }; }; \ + + #define strtk_register_stdstring_range_type_tag(T) \ + template<> struct supported_conversion_to_type< std::pair >{ typedef stdstring_range_type_tag type; }; \ + + #define strtk_register_sink_type_tag(T) \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_to_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + template<> struct supported_conversion_from_type > > { typedef sink_type_tag type; }; \ + + #define strtk_register_stl_container_to_string_conv_type_tag(T) \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + template<> struct supported_conversion_from_type > { typedef stl_seq_type_tag type; }; \ + + template<> struct supported_conversion_to_type{ typedef ignore_token_type_tag type; }; + + #define strtk_register_sequence_iterator_type(sequence) \ + strtk_register_supported_iterator_type(sequence::iterator) \ + strtk_register_supported_iterator_type(sequence::const_iterator) \ + strtk_register_supported_iterator_type(sequence::iterator) \ + strtk_register_supported_iterator_type(sequence::const_iterator) \ + + strtk_register_unsigned_type_tag(unsigned short ) + strtk_register_unsigned_type_tag(unsigned int ) + strtk_register_unsigned_type_tag(unsigned long ) + strtk_register_unsigned_type_tag(unsigned long long int) + + strtk_register_signed_type_tag(short ) + strtk_register_signed_type_tag(int ) + strtk_register_signed_type_tag(long ) + strtk_register_signed_type_tag(long long) + + strtk_register_real_type_tag(float ) + strtk_register_real_type_tag(double ) + strtk_register_real_type_tag(long double) + + strtk_register_byte_type_tag(unsigned char) + strtk_register_byte_type_tag(signed char ) + strtk_register_byte_type_tag(char ) + + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink ) + strtk_register_hex_number_type_tag(hex_to_number_sink) + + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink ) + strtk_register_base64_type_tag(base64_to_number_sink) + + strtk_register_stdstring_range_type_tag(std::string::iterator ) + strtk_register_stdstring_range_type_tag(std::string::const_iterator) + strtk_register_stdstring_range_type_tag(char* ) + strtk_register_stdstring_range_type_tag(signed char* ) + strtk_register_stdstring_range_type_tag(unsigned char* ) + strtk_register_stdstring_range_type_tag(const char* ) + strtk_register_stdstring_range_type_tag(const unsigned char* ) + + strtk_register_supported_iterator_type(char* ) + strtk_register_supported_iterator_type(signed char* ) + strtk_register_supported_iterator_type(unsigned char* ) + strtk_register_supported_iterator_type(const char* ) + strtk_register_supported_iterator_type(const signed char* ) + strtk_register_supported_iterator_type(const unsigned char* ) + strtk_register_supported_iterator_type(std::string::iterator ) + strtk_register_supported_iterator_type(std::string::const_iterator) + + #ifndef _LIBCPP_VERSION + strtk_register_sequence_iterator_type(std::vector) + #endif + strtk_register_sequence_iterator_type(std::deque) + + strtk_register_sink_type_tag(float ) + strtk_register_sink_type_tag(double ) + strtk_register_sink_type_tag(long double ) + strtk_register_sink_type_tag(signed char ) + strtk_register_sink_type_tag(char ) + strtk_register_sink_type_tag(short ) + strtk_register_sink_type_tag(int ) + strtk_register_sink_type_tag(long ) + strtk_register_sink_type_tag(long long ) + strtk_register_sink_type_tag(unsigned char ) + strtk_register_sink_type_tag(unsigned short ) + strtk_register_sink_type_tag(unsigned int ) + strtk_register_sink_type_tag(unsigned long ) + strtk_register_sink_type_tag(unsigned long long int) + strtk_register_sink_type_tag(std::string ) + + strtk_register_stl_container_to_string_conv_type_tag(float ) + strtk_register_stl_container_to_string_conv_type_tag(double ) + strtk_register_stl_container_to_string_conv_type_tag(long double ) + strtk_register_stl_container_to_string_conv_type_tag(signed char ) + strtk_register_stl_container_to_string_conv_type_tag(char ) + strtk_register_stl_container_to_string_conv_type_tag(short ) + strtk_register_stl_container_to_string_conv_type_tag(int ) + strtk_register_stl_container_to_string_conv_type_tag(long ) + strtk_register_stl_container_to_string_conv_type_tag(long long ) + strtk_register_stl_container_to_string_conv_type_tag(unsigned char ) + strtk_register_stl_container_to_string_conv_type_tag(unsigned short ) + strtk_register_stl_container_to_string_conv_type_tag(unsigned int ) + strtk_register_stl_container_to_string_conv_type_tag(unsigned long ) + strtk_register_stl_container_to_string_conv_type_tag(unsigned long long int) + strtk_register_stl_container_to_string_conv_type_tag(std::string ) + + strtk_register_inrange_type_tag(float ) + strtk_register_inrange_type_tag(double ) + strtk_register_inrange_type_tag(long double ) + strtk_register_inrange_type_tag(signed char ) + strtk_register_inrange_type_tag(char ) + strtk_register_inrange_type_tag(short ) + strtk_register_inrange_type_tag(int ) + strtk_register_inrange_type_tag(long ) + strtk_register_inrange_type_tag(long long ) + strtk_register_inrange_type_tag(unsigned char ) + strtk_register_inrange_type_tag(unsigned short ) + strtk_register_inrange_type_tag(unsigned int ) + strtk_register_inrange_type_tag(unsigned long ) + strtk_register_inrange_type_tag(unsigned long long int) + strtk_register_inrange_type_tag(std::string ) + + strtk_register_trim_type_tag(float ) + strtk_register_trim_type_tag(double ) + strtk_register_trim_type_tag(long double ) + strtk_register_trim_type_tag(signed char ) + strtk_register_trim_type_tag(char ) + strtk_register_trim_type_tag(short ) + strtk_register_trim_type_tag(int ) + strtk_register_trim_type_tag(long ) + strtk_register_trim_type_tag(long long ) + strtk_register_trim_type_tag(unsigned char ) + strtk_register_trim_type_tag(unsigned short ) + strtk_register_trim_type_tag(unsigned int ) + strtk_register_trim_type_tag(unsigned long ) + strtk_register_trim_type_tag(unsigned long long int) + strtk_register_trim_type_tag(std::string ) + + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int ) + strtk_register_trim_type_tag(truncated_int) + + strtk_register_truncint_type_tag(short ) + strtk_register_truncint_type_tag(int ) + strtk_register_truncint_type_tag(long ) + strtk_register_truncint_type_tag(long long ) + strtk_register_truncint_type_tag(unsigned short ) + strtk_register_truncint_type_tag(unsigned int ) + strtk_register_truncint_type_tag(unsigned long ) + strtk_register_truncint_type_tag(unsigned long long int) + + strtk_register_decsink_type_tag(float ) + strtk_register_decsink_type_tag(double ) + strtk_register_decsink_type_tag(long double) + + #define strtk_register_userdef_type_sink(T) \ + namespace strtk { namespace details { strtk_register_sink_type_tag(T) }} + + #undef strtk_register_unsigned_type_tag + #undef strtk_register_signed_type_tag + #undef strtk_register_real_type_tag + #undef strtk_register_byte_type_tag + #undef strtk_register_hex_number_type_tag + #undef strtk_register_base64_type_tag + #undef strtk_register_supported_iterator_type + #undef strtk_register_stdstring_range_type_tag + #undef strtk_register_sequence_iterator_type + #undef strtk_register_stl_container_to_string_conv_type_tag + #undef strtk_register_inrange_type_tag + #undef strtk_register_trim_type_tag + #undef strtk_register_truncint_type_tag + #undef strtk_register_decsink_type_tag + + template + struct precision + { static void set(std::iostream&) {} }; + + #define strtk_register_iostream_precision(T) \ + template<> struct precision { static void set(std::iostream& s, const std::streamsize& p = 10) { s.precision(p);} }; + + strtk_register_iostream_precision(float) + strtk_register_iostream_precision(double) + strtk_register_iostream_precision(long double) + + #undef strtk_register_iostream_precision + + template + inline bool string_to_type_converter_impl(Iterator& begin, const Iterator end, T& t, not_supported_type_tag) + { + #ifdef strtk_enable_lexical_cast + try + { + t = boost::lexical_cast(std::string(begin,end)); + } + catch (const boost::bad_lexical_cast&) + { + return false; + } + begin = end; + return true; + #else + try + { + std::stringstream ss(std::string(begin,end)); + ss >> t; + } + catch (const std::exception&) + { + return false; + } + begin = end; + return true; + #endif + } + + template + inline bool string_to_type_converter_impl(Iterator& begin, const Iterator end, strtk::util::value& v, value_type_tag) + { + return v(begin,end); + } + + template + inline bool string_to_type_converter_impl(Iterator& begin, const Iterator end, std::string& t, stdstring_type_tag) + { + t.assign(begin,end); + begin = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, Expect& t, expect_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, Like& t, like_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, InRange& t, inrange_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, TrimToken& t, trim_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, CaseToken& t, lcase_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, CaseToken& t, ucase_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, Array& t, fillchararray_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, TruncatedInt& t, truncint_type_tag) + { + if (!t(itr,end)) + return false; + itr = end; + return true; + } + + #ifdef __builtin_expect + # define strtk_likely(x) __builtin_expect((x),1) + # define strtk_unlikely(x) __builtin_expect((x),0) + #else + # define strtk_likely(x) (x) + # define strtk_unlikely(x) (x) + #endif + + template + inline bool string_to_type_converter_impl(Iterator& itr_external, const Iterator end, T& result, unsigned_type_tag) + { + Iterator itr = itr_external; + if (itr == end) + return false; + else if (('+' == *itr) && end == (++itr)) + return false; + + while ((end != itr) && ('0' == (*itr))) ++itr; + + T t = 0; + unsigned int digit = 0; + std::size_t length; + + if (strtk_unlikely((length = std::distance(itr,end)) > numeric::bound_length)) + return false; + + strtk_disable_fallthrough_begin + switch (length) + { + #define case_stmt(N) \ + case N : if (strtk_likely((digit = (*itr++ - '0')) < 10)) \ + t = t * 10 + static_cast(digit); \ + else \ + return false; \ + + case_stmt(20) case_stmt(19) case_stmt(18) case_stmt(17) + case_stmt(16) case_stmt(15) case_stmt(14) case_stmt(13) + case_stmt(12) case_stmt(11) case_stmt(10) case_stmt( 9) + case_stmt( 8) case_stmt( 7) case_stmt( 6) case_stmt( 5) + case_stmt( 4) case_stmt( 3) case_stmt( 2) + case 1 : if (strtk_unlikely((digit = (*itr - '0'))>= 10)) + return false; + #undef case_stmt + } + strtk_disable_fallthrough_end + + if (length == numeric::bound_length) + { + if (!( + (t < numeric::m10) || + ( + (t == numeric::m10) && + (digit <= numeric::ldpos) + ) + ) + ) + return false; + + } + + result = t * 10 + static_cast(digit); + itr_external = itr; + + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr_external, const Iterator end, T& result, signed_type_tag) + { + Iterator itr; + if ((itr = itr_external) == end) + return false; + + T last_digit = (*itr == '-') ? numeric::ldneg : numeric::ldpos; + + if ((numeric::ldneg == last_digit) || (*itr == '+')) + { + if (end == ++itr) + return false; + } + + while ((end != itr) && ('0' == (*itr))) ++itr; + + T t = 0; + unsigned int digit = 0; + std::size_t length; + + if (strtk_unlikely((length = std::distance(itr,end)) > numeric::bound_length)) + return false; + + strtk_disable_fallthrough_begin + switch (length) + { + #define case_stmt(N) \ + case N : if (strtk_likely((digit = (*itr++ - '0')) < 10)) \ + t = t * 10 + static_cast(digit); \ + else \ + return false; \ + + case_stmt(19) case_stmt(18) case_stmt(17) case_stmt(16) + case_stmt(15) case_stmt(14) case_stmt(13) case_stmt(12) + case_stmt(11) case_stmt(10) case_stmt( 9) case_stmt( 8) + case_stmt( 7) case_stmt( 6) case_stmt( 5) case_stmt( 4) + case_stmt( 3) case_stmt( 2) + case 1 : if (strtk_unlikely((digit = (*itr - '0'))>= 10)) + return false; + #undef case_stmt + } + strtk_disable_fallthrough_end + + if (length == numeric::bound_length) + { + if (!( + (t < static_cast(numeric::m10)) || + ( + (t == numeric::m10) && + (static_cast(digit) <= last_digit) + ) + ) + ) + return false; + } + + t = t * 10 + static_cast(digit); + + result = (last_digit == numeric::ldpos) ? t : -t; + itr_external = itr; + return true; + } + + template + inline bool string_to_type_converter_impl_ref(Iterator& itr, const Iterator end, T& result, signed_type_tag) + { + if (itr == end) + return false; + + bool negative = ('-' == (*itr)); + + if (negative || ('+' == (*itr))) + { + if (end == ++itr) + return false; + } + + while ((end != itr) && ('0' == (*itr))) ++itr; + + bool return_result = true; + unsigned int digit = 0; + std::size_t length; + + if ((length = std::distance(itr,end)) <= 4) + { + strtk_disable_fallthrough_begin + switch (length) + { + #ifdef strtk_use_lut + + #define strtk_process_digit \ + if (strtk_likely((digit = details::digit_table[(int)*itr++]) < 10)) result = result * 10 + (digit); else { return_result = false; break; } + + #else + #define strtk_process_digit \ + if (strtk_likely((digit = (*itr++ - '0')) < 10)) result = result * 10 + (digit); else { return_result = false; break; } + + #endif + + case 4 : strtk_process_digit + case 3 : strtk_process_digit + case 2 : strtk_process_digit + case 1 : if (strtk_unlikely((digit = (*itr - '0'))>= 10)) { digit = 0; return_result = false; } + + #undef strtk_process_digit + } + strtk_disable_fallthrough_end + } + else + return_result = false; + + if (length && return_result) + { + result = result * 10 + static_cast(digit); + ++itr; + } + + result = negative ? -result : result; + return return_result; + } + + template + inline bool parse_nan(Iterator& itr, const Iterator end, T& t) + { + typedef typename std::iterator_traits::value_type type; + static const std::size_t nan_length = 3; + + if (std::distance(itr,end) != static_cast(nan_length)) + return false; + + if (static_cast('n') == (*itr)) + { + if ((static_cast('a') != *(itr + 1)) || (static_cast('n') != *(itr + 2))) + { + return false; + } + } + else if ((static_cast('A') != *(itr + 1)) || (static_cast('N') != *(itr + 2))) + { + return false; + } + + t = std::numeric_limits::quiet_NaN(); + + return true; + } + + template + inline bool parse_inf(Iterator& itr, const Iterator end, T& t, bool negative) + { + static const char inf_uc[] = "INFINITY"; + static const char inf_lc[] = "infinity"; + static const std::size_t inf_length = 8; + const std::size_t length = std::distance(itr,end); + + if ((3 != length) && (inf_length != length)) + return false; + + const char* inf_itr = ('i' == (*itr)) ? inf_lc : inf_uc; + + while (end != itr) + { + if (*inf_itr == static_cast(*itr)) + { + ++itr; + ++inf_itr; + continue; + } + else + return false; + } + + if (negative) + t = -std::numeric_limits::infinity(); + else + t = std::numeric_limits::infinity(); + + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr_external, const Iterator end, T& t, real_type_tag) + { + if (end == itr_external) return false; + + Iterator itr = itr_external; + + typedef typename real_type::type real_t; + real_t d = real_t(0); + + bool negative = ('-' == (*itr)); + + if (negative || '+' == (*itr)) + { + if (end == ++itr) + return false; + } + + bool instate = false; + + #ifdef strtk_use_lut + + #define parse_digit_1(d) \ + if (strtk_likely((digit = details::digit_table[(int)*itr]) < 10)) { d = d * real_t(10) + digit; } else break; if (end == ++itr) break; \ + + #define parse_digit_2(d) \ + if (strtk_likely((digit = details::digit_table[(int)*itr]) < 10)) { d = d * real_t(10) + digit; } else break; ++itr; \ + + #else + + #define parse_digit_1(d) \ + if (strtk_likely((digit = (*itr - '0')) < 10)) { d = d * real_t(10) + digit; } else break; if (end == ++itr) break; \ + + #define parse_digit_2(d) \ + if (strtk_likely((digit = (*itr - '0')) < 10)) { d = d * real_t(10) + digit; } else break; ++itr; \ + + #endif + + if (strtk_likely('.' != (*itr))) + { + const Iterator curr = itr; + while ((end != itr) && ('0' == (*itr))) ++itr; + unsigned int digit; + + while (end != itr) + { + // Note: For 'physical' superscalar architectures it + // is advised that the following loop be: 4xPD1 and 1xPD2 + #ifdef strtk_enable_superscalar + parse_digit_1(d) + parse_digit_1(d) + #endif + parse_digit_1(d) + parse_digit_1(d) + parse_digit_2(d) + } + + if (curr != itr) instate = true; + } + + int exponent = 0; + + if (end != itr) + { + if ('.' == (*itr)) + { + const Iterator curr = ++itr; + unsigned int digit; + real_t tmp_d = real_t(0); + + while (end != itr) + { + #ifdef strtk_enable_superscalar + parse_digit_1(tmp_d) + parse_digit_1(tmp_d) + parse_digit_1(tmp_d) + #endif + parse_digit_1(tmp_d) + parse_digit_1(tmp_d) + parse_digit_2(tmp_d) + } + + if (curr != itr) + { + instate = true; + d += pow10(tmp_d,static_cast(-std::distance(curr,itr))); + } + + #undef parse_digit_1 + #undef parse_digit_2 + } + + if (end != itr) + { + typename std::iterator_traits::value_type c = (*itr); + + if (('e' == c) || ('E' == c)) + { + int exp = 0; + + if (!details::string_to_type_converter_impl_ref(++itr,end,exp,details::signed_type_tag())) + { + if (end == itr) + return false; + else + c = (*itr); + } + + exponent += exp; + } + + if (end != itr) + { + if (('f' == c) || ('F' == c) || ('l' == c) || ('L' == c)) + ++itr; + else if ('#' == c) + { + if (end == ++itr) + return false; + else if (('I' <= (*itr)) && ((*itr) <= 'n')) + { + if (('i' == (*itr)) || ('I' == (*itr))) + { + return parse_inf(itr,end,t,negative); + } + else if (('n' == (*itr)) || ('N' == (*itr))) + { + return parse_nan(itr,end,t); + } + else + return false; + } + else + return false; + } + else if (('I' <= (*itr)) && ((*itr) <= 'n')) + { + if (('i' == (*itr)) || ('I' == (*itr))) + { + return parse_inf(itr,end,t,negative); + } + else if (('n' == (*itr)) || ('N' == (*itr))) + { + return parse_nan(itr,end,t); + } + else + return false; + } + else + return false; + } + } + } + + if (strtk_unlikely((end != itr) || (!instate))) + return false; + else if (exponent) + d = pow10(d,exponent); + + t = static_cast((negative) ? -d : d); + return true; + } + + #undef strtk_likely + #undef strtk_unlikely + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, T& t, byte_type_tag) + { + if (1 != std::distance(itr,end)) + return false; + t = static_cast(*itr); + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, bool& t, bool_type_tag) + { + if (1 != std::distance(itr,end)) + return false; + t = (('0' == (*itr)) ? false : true); + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, IgnoreTokenType&, ignore_token_type_tag) + { + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, HexSinkType& t, hex_number_type_tag) + { + t = std::pair(itr,end); + if (!t.valid()) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, HexSinkType& t, hex_string_type_tag) + { + t = std::pair(itr,end); + if (!t.valid()) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, Base64SinkType& t, base64_type_tag) + { + t = std::pair(itr,end); + if (!t.valid()) + return false; + itr = end; + return true; + } + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, SinkType& t, sink_type_tag) + { + if (!t.parse(itr,end)) + return false; + itr = end; + return true; + } + + template + inline bool type_to_string_converter_impl(const T& t, std::string& s, not_supported_type_tag) + { + #ifdef strtk_enable_lexical_cast + try + { + s = boost::lexical_cast(t); + } + catch (const boost::bad_lexical_cast&) + { + return false; + } + #else + try + { + std::stringstream ss; + precision::set(ss); + ss << t; + s = ss.str(); + } + catch (const std::exception&) + { + return false; + } + #endif + return true; + } + + template + inline bool type_to_string_converter_impl(T value, std::string& result, unsigned_type_tag) + { + static const std::size_t radix = 10; + static const std::size_t radix_sqr = radix * radix; + static const std::size_t radix_cube = radix * radix * radix; + static const std::size_t buffer_size = ((strtk::details::numeric::size < 16) ? 16 : 32); + + unsigned char buffer[buffer_size]; + unsigned char* itr = buffer + buffer_size; + + if (value) + { + while (value >= static_cast(radix_sqr)) + { + itr -= 3; + T temp_v = value / radix_cube; + memcpy(itr,&details::rev_3digit_lut[3 * (value - (temp_v * radix_cube))],3); + value = temp_v; + } + + while (value >= static_cast(radix)) + { + itr -= 2; + T temp_v = value / radix_sqr; + memcpy(itr,&details::rev_2digit_lut[2 * (value - (temp_v * radix_sqr))],2); + value = temp_v; + } + + if (value) + { + *(--itr) = static_cast('0' + value); + } + } + else + *(--itr) = '0'; + + result.assign(reinterpret_cast(itr), (buffer + buffer_size) - itr); + return true; + } + + template + struct tsci_type {}; + + #define define_tsci_type(Type,ReType) \ + template <> \ + struct tsci_type \ + { \ + typedef ReType type; \ + }; \ + + define_tsci_type(short ,unsigned short ) + define_tsci_type(int ,unsigned int ) + define_tsci_type(long ,unsigned long ) + define_tsci_type(long long,unsigned long long) + + #undef define_tsci_type + + template + inline bool type_to_string_converter_impl(T valuex, std::string& result, signed_type_tag) + { + typedef typename tsci_type::type TT; + + const TT radix = 10; + const TT radix_sqr = radix * radix; + const TT radix_cube = radix * radix * radix; + const std::size_t buffer_size = ((strtk::details::numeric::size < 16) ? 16 : 32); + + const bool negative = (valuex < 0); + #ifndef _MSC_VER + TT value = (negative) ? -TT(valuex) : valuex; + #else + TT value = (negative) ? -valuex : valuex; + #endif + + unsigned char buffer[buffer_size]; + unsigned char* itr = buffer + buffer_size; + + if (value) + { + while (value >= radix_sqr) + { + const TT v = value; + value /= radix_cube; + memcpy((itr -= 3), &details::rev_3digit_lut[3 * (v - (value * radix_cube))], 3); + } + + while (value >= radix) + { + const TT v = value; + value /= radix_sqr; + memcpy((itr -= 2), &details::rev_2digit_lut[2 * (v - (value * radix_sqr))], 2); + } + + if (value) + { + *(--itr) = static_cast('0' + value); + } + + if (negative) + { + *(--itr) = '-'; + } + } + else + *(--itr) = '0'; + + result.assign(reinterpret_cast(itr), (buffer + buffer_size) - itr); + return true; + } + + template + inline bool type_to_string_converter_impl(const T& value, std::string& result, byte_type_tag) + { + result.resize(1); + result[0] = static_cast(value); + return true; + } + + inline bool type_to_string_converter_impl(const bool& value, std::string& result, bool_type_tag) + { + result.resize(1); + result[0] = value ? '1' : '0'; + return true; + } + + inline bool type_to_string_converter_impl(const std::string& value, std::string& result, stdstring_type_tag) + { + result = value; + return true; + } + + template + inline bool type_to_string_converter_impl(const std::pair& range, std::string& result, stdstring_range_type_tag) + { + result.assign(range.first,range.second); + return true; + } + + template + inline bool type_to_string_converter_impl(const SinkType&, std::string&, sink_type_tag) + { + //Generic conversion not supported for sinks. Use joins or custom converters. + return false; + } + + template + inline bool type_to_string_converter_impl(const STLContainerType&, std::string&, stl_seq_type_tag) + { + //Generic conversion not supported for stl containers. Use joins or custom converters. + return false; + } + + template + inline std::string type_name() + { + static const std::string s("Unknown"); + return s; + } + + #define strtk_register_type_name(Type) \ + template <> inline std::string type_name() { static const std::string s(#Type); return s; } + + strtk_register_type_name(signed char ) + strtk_register_type_name(unsigned char ) + strtk_register_type_name(short ) + strtk_register_type_name(int ) + strtk_register_type_name(long ) + strtk_register_type_name(long long ) + strtk_register_type_name(unsigned short ) + strtk_register_type_name(unsigned int ) + strtk_register_type_name(unsigned long ) + strtk_register_type_name(unsigned long long int) + strtk_register_type_name(double ) + strtk_register_type_name(float ) + strtk_register_type_name(long double ) + strtk_register_type_name(std::string ) + + #undef strtk_register_type_name + + template + inline std::string type_name(const T&) + { + static const std::string s = type_name(); + return s; + } + + template + inline std::string type_name(const std::pair& p) + { + static const std::string s = std::string("std::pair<" + + type_name(p.first) + + "," + + type_name(p.second) + + ">"); + return s; + } + + template + inline std::size_t type_length() + { + return numeric::length; + } + + template + inline std::size_t type_length(const T&) + { + return type_length(); + } + + inline std::size_t type_length(const std::string& s) + { + return s.size(); + } + + template + inline std::size_t type_length(const std::pair&) + { + return type_length() + type_length(); + } + + } // namespace details + + template + inline std::string type_name(const T& t) + { + static const std::string s = details::type_name(t); + return s; + } + + template + inline std::string type_name(const T(&)[N]) + { + static const std::string s = details::type_name() + + std::string("[") + type_to_string(N) + std::string("]"); + return s; + } + + template + inline std::string type_name(const std::pair& p) + { + static const std::string s = std::string("std::pair<" + + type_name(p.first) + + "," + + type_name(p.second) + + ">"); + return s; + } + + #define strtk_register_sequence_type_name(Type) \ + template \ + inline std::string type_name(const Type&) \ + { \ + static const std::string s = std::string(#Type) + std::string("<" + details::type_name() + ">");\ + return s; \ + } \ + + #define strtk_register_set_type_name(Type) \ + template \ + inline std::string type_name(const Type&) \ + { \ + static const std::string s = std::string(#Type) + std::string("<" + details::type_name() + ">");\ + return s; \ + } \ + + strtk_register_sequence_type_name(std::vector) + strtk_register_sequence_type_name(std::deque) + strtk_register_sequence_type_name(std::list) + strtk_register_set_type_name(std::set) + strtk_register_set_type_name(std::multiset) + + template + inline std::size_t type_length() + { + return details::type_length(); + } + + template + inline std::size_t type_length(const T&) + { + return type_length(); + } + + class ext_string + { + public: + + explicit ext_string() + {} + + explicit ext_string(const std::string& s) + : s_(s) + {} + + explicit ext_string(const char* s) + : s_(s) + {} + + explicit ext_string(const range::adapter& r) + : s_(r.begin(),r.end()) + {} + + ext_string(const ext_string& es) + : s_(es.s_) + {} + + template + inline ext_string& operator << (const T& t) + { + s_ += type_to_string(t); + return (*this); + } + + inline operator std::string () const + { + return s_; + } + + inline std::string clone() const + { + return s_; + } + + inline const std::string& as_string() const + { + return s_; + } + + inline std::string& as_string() + { + return s_; + } + + template + inline T as_type() const + { + return string_to_type_converter(s_); + } + + template + inline bool as_type(T& t) const + { + return string_to_type_converter(s_,t); + } + + inline bool imatch(const std::string& s) const + { + return strtk::imatch(s_,s); + } + + inline bool imatch(const ext_string& es) const + { + return strtk::imatch(s_,es.s_); + } + + inline ext_string& to_lowercase() + { + convert_to_lowercase(s_); + return (*this); + } + + inline ext_string& to_uppercase() + { + convert_to_uppercase(s_); + return (*this); + } + + template + inline ext_string& remove_leading(const Predicate& p) + { + if (s_.empty()) return (*this); + strtk::remove_leading(p,s_); + return (*this); + } + + inline ext_string& remove_leading(const std::string& removal_set) + { + if (removal_set.empty()) + return (*this); + else if (1 == removal_set.size()) + strtk::remove_leading(single_delimiter_predicate(removal_set[0]),s_); + else + strtk::remove_leading(multiple_char_delimiter_predicate(removal_set),s_); + return (*this); + } + + template + inline ext_string& remove_trailing(const Predicate& p) + { + if (s_.empty()) return (*this); + strtk::remove_trailing(p,s_); + return (*this); + } + + inline ext_string& remove_trailing(const std::string& removal_set) + { + if (removal_set.empty()) + return (*this); + else if (1 == removal_set.size()) + strtk::remove_trailing(single_delimiter_predicate(removal_set[0]),s_); + else + strtk::remove_trailing(multiple_char_delimiter_predicate(removal_set),s_); + return (*this); + } + + template + inline ext_string& operator += (const T& t) + { + s_.append(type_to_string(t)); + return (*this); + } + + inline ext_string& operator -= (const std::string& pattern) + { + replace(pattern,""); + return (*this); + } + + inline ext_string& operator *= (const std::size_t& n) + { + strtk::replicate_inplace(n,s_); + return (*this); + } + + inline void replace(const std::string& pattern, const std::string& replace_pattern) + { + std::string result; + result.reserve(s_.size()); + strtk::replace_pattern(s_,pattern,replace_pattern,result); + s_.assign(result); + } + + template + inline std::size_t split(const DelimiterPredicate& p, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) const + { + return strtk::split(p,s_,out,split_option); + } + + template class Sequence> + inline std::size_t split(const DelimiterPredicate& p, + Sequence& seq, + const split_options::type split_option = split_options::default_mode) const + { + return strtk::split(p,s_,range_to_type_back_inserter(seq),split_option); + } + + template + inline std::size_t split_n(const DelimiterPredicate& p, + const std::size_t& n, + OutputIterator out, + const split_options::type split_option = split_options::default_mode) const + { + return strtk::split_n(p,s_,n,out,split_option); + } + + template class Sequence> + inline std::size_t split_n(const DelimiterPredicate& p, + const std::size_t& n, + Sequence& seq, + const split_options::type split_option = split_options::default_mode) const + { + return strtk::split_n(p,s_,n,range_to_type_back_inserter(seq),split_option); + } + + template class Sequence> + inline std::size_t parse(const std::string& delimiters, Sequence& seq) const + { + return strtk::parse(s_,delimiters,seq); + } + + template class Sequence> + inline std::size_t parse(const char* delimiters, Sequence& seq) const + { + return parse(std::string(delimiters),seq); + } + + friend inline ext_string operator * (const std::size_t& n, const ext_string& s); + friend inline ext_string operator * (const ext_string& s, const std::size_t& n); + + template + friend inline ext_string operator + (const ext_string& s, const T& t); + + template + friend inline ext_string operator + (const T& t, const ext_string& s); + + friend inline ext_string operator - (const ext_string& s, const std::string& pattern); + friend inline ext_string operator - (const ext_string& s, const char* pattern); + friend inline ext_string operator - (const ext_string& s, const ext_string& pattern); + + static inline ext_string all_digits() + { + static const ext_string digits("0123456789"); + return digits; + } + + static inline ext_string all_letters() + { + static const ext_string letters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); + return letters; + } + + static inline ext_string all_lowercase_letters() + { + static const ext_string letters("abcdefghijklmnopqrstuvwxyz"); + return letters; + } + + static inline ext_string all_uppercase_letters() + { + static const ext_string letters("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); + return letters; + } + + static inline ext_string all_chars() + { + ext_string s; + s.as_string().resize(256); + strtk::iota(s.as_string().begin(), + s.as_string().end(), + static_cast(0x00)); + return s; + } + + private: + + std::string s_; + }; + + inline ext_string operator * (const std::size_t& n, const ext_string& s) + { + return ext_string(replicate(n, s.s_)); + } + + inline ext_string operator * (const ext_string& s, const std::size_t& n) + { + return ext_string(replicate(n, s.s_)); + } + + template + inline ext_string operator + (const ext_string& s, const T& t) + { + return ext_string(s.s_ + type_to_string(t)); + } + + template + inline ext_string operator + (const T& t, const ext_string& s) + { + return ext_string(type_to_string(t) + s.s_); + } + + inline ext_string operator - (const ext_string& s, const std::string& pattern) + { + std::string tmp; + tmp.reserve(s.s_.size()); + remove_pattern(s,pattern,tmp); + return ext_string(tmp); + } + + inline ext_string operator - (const ext_string& s, const char* pattern) + { + return s - std::string(pattern); + } + + inline ext_string operator - (const ext_string& s, const ext_string& pattern) + { + return s - std::string(pattern.as_string()); + } + + static inline std::ostream& operator<<(std::ostream& os, const ext_string& es) + { + return (os << es.as_string()); + } + + namespace fileio + { + + inline bool file_exists(const std::string& file_name) + { + std::ifstream file(file_name.c_str(), std::ios::binary); + return ((!file) ? false : true); + } + + inline std::size_t file_size(const std::string& file_name) + { + std::ifstream file(file_name.c_str(),std::ios::binary); + if (!file) return 0; + file.seekg (0, std::ios::end); + return static_cast(file.tellg()); + } + + inline bool load_file(const std::string& file_name, char* buffer, std::size_t buffer_size) + { + std::ifstream in_stream(file_name.c_str(),std::ios::binary); + if (!in_stream) return false; + in_stream.read(buffer,static_cast(buffer_size)); + in_stream.close(); + return true; + } + + inline bool load_file(const std::string& file_name, std::string& buffer) + { + buffer.resize(file_size(file_name)); + return load_file(file_name,const_cast(to_ptr(buffer)),buffer.size()); + } + + inline bool write_file(const std::string& file_name, char* buffer, const std::size_t& buffer_size) + { + std::ofstream out_stream(file_name.c_str(),std::ios::binary); + if (!out_stream) return false; + out_stream.write(buffer,static_cast(buffer_size)); + out_stream.close(); + return true; + } + + inline bool write_file(const std::string& file_name, const std::string& buffer) + { + return write_file(file_name,const_cast(to_ptr(buffer)),buffer.size()); + } + + inline bool copy_file(const std::string& src_file_name, const std::string& dest_file_name) + { + std::ifstream src_file(src_file_name.c_str(),std::ios::binary); + std::ofstream dest_file(dest_file_name.c_str(),std::ios::binary); + if (!src_file) return false; + if (!dest_file) return false; + + static const std::size_t block_size = 16 * one_kilobyte; + char buffer[block_size]; + + std::size_t remaining_bytes = file_size(src_file_name); + + while (remaining_bytes >= block_size) + { + src_file.read(&buffer[0],static_cast(block_size)); + dest_file.write(&buffer[0],static_cast(block_size)); + remaining_bytes -= block_size; + } + + if (remaining_bytes > 0) + { + src_file.read(&buffer[0],static_cast(remaining_bytes)); + dest_file.write(&buffer[0],static_cast(remaining_bytes)); + remaining_bytes = 0; + } + + src_file.close(); + dest_file.close(); + return true; + } + + inline bool concatenate(const std::string& file_name1, + const std::string& file_name2, + const std::string& output_file_name) + { + std::ifstream file1(file_name1.c_str(),std::ios::binary); + std::ifstream file2(file_name2.c_str(),std::ios::binary); + std::ofstream out_file(output_file_name.c_str(),std::ios::binary); + + if (!file1 || !file2 || !out_file) return false; + + static const std::size_t block_size = 16 * one_kilobyte; + char buffer[block_size]; + unsigned int round = 0; + std::size_t remaining_bytes = 0; + + while (round < 2) + { + std::ifstream& input_stream = ((0 == round) ? file1 : file2); + remaining_bytes = ((0 == round) ? file_size(file_name1) : file_size(file_name2)); + + while (remaining_bytes >= block_size) + { + input_stream.read(&buffer[0],static_cast(block_size)); + out_file.write(&buffer[0],static_cast(block_size)); + remaining_bytes -= block_size; + } + + if (remaining_bytes > 0) + { + input_stream.read(&buffer[0],static_cast(remaining_bytes)); + out_file.write(&buffer[0],static_cast(remaining_bytes)); + remaining_bytes = 0; + } + + input_stream.close(); + ++round; + } + out_file.close(); + return true; + } + + inline bool files_identical(const std::string& file_name1, const std::string& file_name2) + { + std::ifstream file1(file_name1.c_str(),std::ios::binary); + std::ifstream file2(file_name2.c_str(),std::ios::binary); + if (!file1) return false; + if (!file2) return false; + if (file_size(file_name1) != file_size(file_name2)) return false; + + static const std::size_t block_size = 16 * one_kilobyte; + char buffer1[block_size]; + char buffer2[block_size]; + + std::size_t remaining_bytes = file_size(file_name1); + + while (remaining_bytes >= block_size) + { + file1.read(&buffer1[0],static_cast(block_size)); + file2.read(&buffer2[0],static_cast(block_size)); + if (0 != std::memcmp(buffer1,buffer2,block_size)) + return false; + remaining_bytes -= block_size; + } + + if (remaining_bytes > 0) + { + file1.read(&buffer1[0],static_cast(remaining_bytes)); + file2.read(&buffer2[0],static_cast(remaining_bytes)); + if (0 != std::memcmp(buffer1,buffer2,remaining_bytes)) + return false; + remaining_bytes = 0; + } + + file1.close(); + file2.close(); + + return true; + } + + namespace details + { + template + inline bool read_pod_proxy(std::ifstream& stream, T& t) + { + return (false == stream.read(reinterpret_cast(&t), + static_cast(sizeof(T))).fail()); + } + + template + inline bool write_pod_proxy(std::ofstream& stream, const T& t) + { + return (false == stream.write(reinterpret_cast(&t), + static_cast(sizeof(T))).fail()); + } + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10) + { + return details::read_pod_proxy(stream, t1) && + details::read_pod_proxy(stream, t2) && + details::read_pod_proxy(stream, t3) && + details::read_pod_proxy(stream, t4) && + details::read_pod_proxy(stream, t5) && + details::read_pod_proxy(stream, t6) && + details::read_pod_proxy(stream, t7) && + details::read_pod_proxy(stream, t8) && + details::read_pod_proxy(stream, t9) && + details::read_pod_proxy(stream,t10); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4) && + details::read_pod_proxy(stream,t5) && + details::read_pod_proxy(stream,t6) && + details::read_pod_proxy(stream,t7) && + details::read_pod_proxy(stream,t8) && + details::read_pod_proxy(stream,t9); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4) && + details::read_pod_proxy(stream,t5) && + details::read_pod_proxy(stream,t6) && + details::read_pod_proxy(stream,t7) && + details::read_pod_proxy(stream,t8); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4) && + details::read_pod_proxy(stream,t5) && + details::read_pod_proxy(stream,t6) && + details::read_pod_proxy(stream,t7); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4) && + details::read_pod_proxy(stream,t5) && + details::read_pod_proxy(stream,t6); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4) && + details::read_pod_proxy(stream,t5); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3, T4& t4) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3) && + details::read_pod_proxy(stream,t4); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2, T3& t3) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2) && + details::read_pod_proxy(stream,t3); + } + + template + inline bool read_pod(std::ifstream& stream, + T1& t1, T2& t2) + { + return details::read_pod_proxy(stream,t1) && + details::read_pod_proxy(stream,t2); + } + + template + inline bool read_pod(std::ifstream& stream, T& t) + { + return details::read_pod_proxy(stream,t); + } + + template + inline bool read_pod(std::ifstream& stream, T (&t)[N]) + { + return (false != stream.read(reinterpret_cast(&t[0]),sizeof(T) * N).fail()); + } + + template class Sequence> + inline bool read_pod(std::ifstream& stream, + const std::size_t& count, + Sequence& sequence) + { + T t; + + for (std::size_t i = 0; i < count; ++i) + { + if (details::read_pod_proxy(stream,t)) + sequence.push_back(t); + else + return false; + } + + return true; + } + + template + inline bool read_pod(std::ifstream& stream, + const std::size_t& count, + std::set& set) + { + T t; + + for (std::size_t i = 0; i < count; ++i) + { + if (details::read_pod_proxy(stream,t)) + set.insert(t); + else + return false; + } + + return true; + } + + template + inline bool read_pod(std::ifstream& stream, + const std::size_t& count, + std::multiset& multiset) + { + T t; + + for (std::size_t i = 0; i < count; ++i) + { + if (details::read_pod_proxy(stream,t)) + multiset.insert(t); + else + return false; + } + + return true; + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10) + { + return details::write_pod_proxy(stream, t1) && + details::write_pod_proxy(stream, t2) && + details::write_pod_proxy(stream, t3) && + details::write_pod_proxy(stream, t4) && + details::write_pod_proxy(stream, t5) && + details::write_pod_proxy(stream, t6) && + details::write_pod_proxy(stream, t7) && + details::write_pod_proxy(stream, t8) && + details::write_pod_proxy(stream, t9) && + details::write_pod_proxy(stream,t10); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4) && + details::write_pod_proxy(stream,t5) && + details::write_pod_proxy(stream,t6) && + details::write_pod_proxy(stream,t7) && + details::write_pod_proxy(stream,t8) && + details::write_pod_proxy(stream,t9); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4) && + details::write_pod_proxy(stream,t5) && + details::write_pod_proxy(stream,t6) && + details::write_pod_proxy(stream,t7) && + details::write_pod_proxy(stream,t8); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4) && + details::write_pod_proxy(stream,t5) && + details::write_pod_proxy(stream,t6) && + details::write_pod_proxy(stream,t7); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4) && + details::write_pod_proxy(stream,t5) && + details::write_pod_proxy(stream,t6); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4) && + details::write_pod_proxy(stream,t5); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3, const T4& t4) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3) && + details::write_pod_proxy(stream,t4); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2, const T3& t3) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2) && + details::write_pod_proxy(stream,t3); + } + + template + inline bool write_pod(std::ofstream& stream, + const T1& t1, const T2& t2) + { + return details::write_pod_proxy(stream,t1) && + details::write_pod_proxy(stream,t2); + } + + template + inline bool write_pod(std::ofstream& stream, const T& t) + { + return details::write_pod_proxy(stream,t); + } + + template + inline bool write_pod(std::ofstream& stream, T (&t)[N]) + { + return (false != stream.write(reinterpret_cast(&t[0]),sizeof(T) * N).fail()); + } + + template class Sequence> + inline bool write_pod(std::ofstream& stream, + const Sequence& sequence) + { + typename Sequence::iterator itr = sequence.begin(); + typename Sequence::iterator end = sequence.end(); + + while (end != itr) + { + if (details::write_pod_proxy(stream,*itr)) + ++itr; + else + return false; + } + } + + template + inline bool write_pod(std::ofstream& stream, + const std::set& set) + { + typename std::set::iterator itr = set.begin(); + typename std::set::iterator end = set.end(); + + while (end != itr) + { + if (details::write_pod_proxy(stream,*itr)) + ++itr; + else + return false; + } + } + + template + inline bool write_pod(std::ofstream& stream, + const std::multiset& multiset) + { + typename std::multiset::iterator itr = multiset.begin(); + typename std::multiset::iterator end = multiset.end(); + + while (end != itr) + { + if (details::write_pod_proxy(stream,*itr)) + ++itr; + else + return false; + } + } + + inline bool read_at_offset(std::ifstream& stream, + const std::size_t& offset, + char* buffer, + const std::size_t& buffer_size) + { + if (!stream) return false; + stream.seekg(static_cast(offset),std::ios_base::beg); + if (stream.fail()) return false; + stream.read(buffer,static_cast(buffer_size)); + if (stream.fail()) return false; + stream.close(); + return true; + } + + inline bool read_at_offset(const std::string& file_name, + const std::size_t& offset, + char* buffer, + const std::size_t& buffer_size) + { + std::ifstream stream(file_name.c_str(), std::ios::in | std::ios::binary); + if (!stream) return false; + return read_at_offset(stream,offset,buffer,buffer_size); + } + + inline bool read_at_offset(const std::string& file_name, + const std::size_t& offset, + std::string& buffer, + const std::size_t& buffer_size) + { + std::ifstream stream(file_name.c_str(), std::ios::in | std::ios::binary); + if (!stream) return false; + buffer.resize(buffer_size); + return read_at_offset(stream, + offset, + const_cast(to_ptr(buffer)), + buffer_size); + } + + } // namespace fileio + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11, T12& t12) + { + ::memcpy(& t1, data, sizeof( T1)); data += sizeof( T1); + ::memcpy(& t2, data, sizeof( T2)); data += sizeof( T2); + ::memcpy(& t3, data, sizeof( T3)); data += sizeof( T3); + ::memcpy(& t4, data, sizeof( T4)); data += sizeof( T4); + ::memcpy(& t5, data, sizeof( T5)); data += sizeof( T5); + ::memcpy(& t6, data, sizeof( T6)); data += sizeof( T6); + ::memcpy(& t7, data, sizeof( T7)); data += sizeof( T7); + ::memcpy(& t8, data, sizeof( T8)); data += sizeof( T8); + ::memcpy(& t9, data, sizeof( T9)); data += sizeof( T9); + ::memcpy(&t10, data, sizeof(T10)); data += sizeof(T10); + ::memcpy(&t11, data, sizeof(T11)); data += sizeof(T11); + ::memcpy(&t12, data, sizeof(T12)); data += sizeof(T12); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10, T11& t11) + { + ::memcpy(& t1, data, sizeof( T1)); data += sizeof( T1); + ::memcpy(& t2, data, sizeof( T2)); data += sizeof( T2); + ::memcpy(& t3, data, sizeof( T3)); data += sizeof( T3); + ::memcpy(& t4, data, sizeof( T4)); data += sizeof( T4); + ::memcpy(& t5, data, sizeof( T5)); data += sizeof( T5); + ::memcpy(& t6, data, sizeof( T6)); data += sizeof( T6); + ::memcpy(& t7, data, sizeof( T7)); data += sizeof( T7); + ::memcpy(& t8, data, sizeof( T8)); data += sizeof( T8); + ::memcpy(& t9, data, sizeof( T9)); data += sizeof( T9); + ::memcpy(&t10, data, sizeof(T10)); data += sizeof(T10); + ::memcpy(&t11, data, sizeof(T11)); data += sizeof(T11); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9, T10& t10) + { + ::memcpy(& t1, data, sizeof( T1)); data += sizeof( T1); + ::memcpy(& t2, data, sizeof( T2)); data += sizeof( T2); + ::memcpy(& t3, data, sizeof( T3)); data += sizeof( T3); + ::memcpy(& t4, data, sizeof( T4)); data += sizeof( T4); + ::memcpy(& t5, data, sizeof( T5)); data += sizeof( T5); + ::memcpy(& t6, data, sizeof( T6)); data += sizeof( T6); + ::memcpy(& t7, data, sizeof( T7)); data += sizeof( T7); + ::memcpy(& t8, data, sizeof( T8)); data += sizeof( T8); + ::memcpy(& t9, data, sizeof( T9)); data += sizeof( T9); + ::memcpy(&t10, data, sizeof(T10)); data += sizeof(T10); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + ::memcpy(& t5, data, sizeof(T5)); data += sizeof(T5); + ::memcpy(& t6, data, sizeof(T6)); data += sizeof(T6); + ::memcpy(& t7, data, sizeof(T7)); data += sizeof(T7); + ::memcpy(& t8, data, sizeof(T8)); data += sizeof(T8); + ::memcpy(& t9, data, sizeof(T9)); data += sizeof(T9); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + ::memcpy(& t5, data, sizeof(T5)); data += sizeof(T5); + ::memcpy(& t6, data, sizeof(T6)); data += sizeof(T6); + ::memcpy(& t7, data, sizeof(T7)); data += sizeof(T7); + ::memcpy(& t8, data, sizeof(T8)); data += sizeof(T8); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + ::memcpy(& t5, data, sizeof(T5)); data += sizeof(T5); + ::memcpy(& t6, data, sizeof(T6)); data += sizeof(T6); + ::memcpy(& t7, data, sizeof(T7)); data += sizeof(T7); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + ::memcpy(& t5, data, sizeof(T5)); data += sizeof(T5); + ::memcpy(& t6, data, sizeof(T6)); data += sizeof(T6); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + ::memcpy(& t5, data, sizeof(T5)); data += sizeof(T5); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3, T4& t4) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + ::memcpy(& t4, data, sizeof(T4)); data += sizeof(T4); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2, T3& t3) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + ::memcpy(& t3, data, sizeof(T3)); data += sizeof(T3); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1, T2& t2) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + ::memcpy(& t2, data, sizeof(T2)); data += sizeof(T2); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, + T1& t1) + { + ::memcpy(& t1, data, sizeof(T1)); data += sizeof(T1); + return data; + } + + template + inline unsigned char* read_pod(unsigned char* data, T (&t)[N]) + { + T* begin = reinterpret_cast(data); + T* end = begin + N; + std::copy(begin, end, &t[0]); + return data + (N * sizeof(T)); + } + + template class Sequence> + inline unsigned char* read_pod(unsigned char* data, + const std::size_t& n, + const Sequence& sequence) + { + T* ptr = reinterpret_cast(data); + std::copy(ptr, ptr + n, std::back_inserter(sequence)); + return data + (sequence.size() * sizeof(T)); + } + + template + inline unsigned char* read_pod(unsigned char* data, + const std::size_t& n, + const std::set& set) + { + T* ptr = reinterpret_cast(data); + std::copy(ptr, ptr + n, std::inserter(set,set.begin())); + return data + (set.size() * sizeof(T)); + } + + template + inline unsigned char* read_pod(unsigned char* data, + const std::size_t& n, + const std::multiset& multiset) + { + T* ptr = reinterpret_cast(data); + std::copy(ptr, ptr + n, std::inserter(multiset,multiset.begin())); + return data + (multiset.size() * sizeof(T)); + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10, const T11& t11, const T12& t12) + { + ::memcpy(data, &t1, sizeof( T1)); data += sizeof( T1); + ::memcpy(data, &t2, sizeof( T2)); data += sizeof( T2); + ::memcpy(data, &t3, sizeof( T3)); data += sizeof( T3); + ::memcpy(data, &t4, sizeof( T4)); data += sizeof( T4); + ::memcpy(data, &t5, sizeof( T5)); data += sizeof( T5); + ::memcpy(data, &t6, sizeof( T6)); data += sizeof( T6); + ::memcpy(data, &t7, sizeof( T7)); data += sizeof( T7); + ::memcpy(data, &t8, sizeof( T8)); data += sizeof( T8); + ::memcpy(data, &t9, sizeof( T9)); data += sizeof( T9); + ::memcpy(data,&t10, sizeof(T10)); data += sizeof(T10); + ::memcpy(data,&t11, sizeof(T11)); data += sizeof(T11); + ::memcpy(data,&t12, sizeof(T12)); data += sizeof(T12); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10, const T11& t11) + { + ::memcpy(data, &t1, sizeof( T1)); data += sizeof( T1); + ::memcpy(data, &t2, sizeof( T2)); data += sizeof( T2); + ::memcpy(data, &t3, sizeof( T3)); data += sizeof( T3); + ::memcpy(data, &t4, sizeof( T4)); data += sizeof( T4); + ::memcpy(data, &t5, sizeof( T5)); data += sizeof( T5); + ::memcpy(data, &t6, sizeof( T6)); data += sizeof( T6); + ::memcpy(data, &t7, sizeof( T7)); data += sizeof( T7); + ::memcpy(data, &t8, sizeof( T8)); data += sizeof( T8); + ::memcpy(data, &t9, sizeof( T9)); data += sizeof( T9); + ::memcpy(data,&t10, sizeof(T10)); data += sizeof(T10); + ::memcpy(data,&t11, sizeof(T11)); data += sizeof(T11); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9, const T10& t10) + { + ::memcpy(data, &t1, sizeof( T1)); data += sizeof( T1); + ::memcpy(data, &t2, sizeof( T2)); data += sizeof( T2); + ::memcpy(data, &t3, sizeof( T3)); data += sizeof( T3); + ::memcpy(data, &t4, sizeof( T4)); data += sizeof( T4); + ::memcpy(data, &t5, sizeof( T5)); data += sizeof( T5); + ::memcpy(data, &t6, sizeof( T6)); data += sizeof( T6); + ::memcpy(data, &t7, sizeof( T7)); data += sizeof( T7); + ::memcpy(data, &t8, sizeof( T8)); data += sizeof( T8); + ::memcpy(data, &t9, sizeof( T9)); data += sizeof( T9); + ::memcpy(data,&t10, sizeof(T10)); data += sizeof(T10); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8, + const T9& t9) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + ::memcpy(data, &t5, sizeof(T5)); data += sizeof(T5); + ::memcpy(data, &t6, sizeof(T6)); data += sizeof(T6); + ::memcpy(data, &t7, sizeof(T7)); data += sizeof(T7); + ::memcpy(data, &t8, sizeof(T8)); data += sizeof(T8); + ::memcpy(data, &t9, sizeof(T9)); data += sizeof(T9); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7, const T8& t8) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + ::memcpy(data, &t5, sizeof(T5)); data += sizeof(T5); + ::memcpy(data, &t6, sizeof(T6)); data += sizeof(T6); + ::memcpy(data, &t7, sizeof(T7)); data += sizeof(T7); + ::memcpy(data, &t8, sizeof(T8)); data += sizeof(T8); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6, const T7& t7) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + ::memcpy(data, &t5, sizeof(T5)); data += sizeof(T5); + ::memcpy(data, &t6, sizeof(T6)); data += sizeof(T6); + ::memcpy(data, &t7, sizeof(T7)); data += sizeof(T7); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5, const T6& t6) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + ::memcpy(data, &t5, sizeof(T5)); data += sizeof(T5); + ::memcpy(data, &t6, sizeof(T6)); data += sizeof(T6); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4, + const T5& t5) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + ::memcpy(data, &t5, sizeof(T5)); data += sizeof(T5); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3, const T4& t4) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + ::memcpy(data, &t4, sizeof(T4)); data += sizeof(T4); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2, const T3& t3) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + ::memcpy(data, &t3, sizeof(T3)); data += sizeof(T3); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1, const T2& t2) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + ::memcpy(data, &t2, sizeof(T2)); data += sizeof(T2); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const T1& t1) + { + ::memcpy(data, &t1, sizeof(T1)); data += sizeof(T1); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, const T (&t)[N]) + { + ::memcpy(data, t, N * sizeof(T)); + data += (N * sizeof(T)); + return data; + } + + template class Sequence> + inline unsigned char* write_pod(unsigned char* data, + const Sequence& sequence) + { + ::memcpy(data, sequence.data(), sequence.size() * sizeof(T)); + data += (sequence.size() * sizeof(T)); + return data; + } + + template + inline unsigned char* write_pod(unsigned char* data, + const std::set& set) + { + T* ptr = reinterpret_cast(data); + std::copy(set.begin(),set.end(),ptr); + return data + (set.size() * sizeof(T)); + } + + template + inline unsigned char* write_pod(unsigned char* data, + const std::multiset& multiset) + { + T* ptr = reinterpret_cast(data); + std::copy(multiset.begin(),multiset.end(),ptr); + return data + (multiset.size() * sizeof(T)); + } + + class string_condition + { + private: + + typedef const unsigned char* itr_type; + + inline bool condition_equal(const itr_type begin, const itr_type end) const + { + if (s.size() == static_cast(std::distance(begin,end))) + { + return std::equal(s_begin, s_end, begin); + } + else + return false; + } + + inline bool condition_notequal(const itr_type begin, const itr_type end) const + { + if (s.size() == static_cast(std::distance(begin,end))) + { + return !std::equal(s_begin, s_end, begin); + } + else + return true; + } + + inline bool condition_like(const itr_type begin, const itr_type end) const + { + return match(s_begin, s_end, begin, end,(unsigned char)'*', (unsigned char)'?'); + } + + inline bool condition_begins_with(const itr_type begin, const itr_type end) const + { + if (s.size() == static_cast(std::distance(begin,end))) + { + return strtk::begins_with(s_begin, s_end, begin, end); + } + else + return false; + } + + inline bool condition_ends_with(const itr_type begin, const itr_type end) const + { + if (s.size() == static_cast(std::distance(begin,end))) + { + return strtk::ends_with(s_begin, s_end, begin, end); + } + else + return false; + } + + inline bool condition_within(const itr_type begin, const itr_type end) const + { + if (s.size() <= static_cast(std::distance(begin,end))) + { + return (end != std::search(begin, end, s_begin, s_end)); + } + else + return false; + } + + inline bool condition_notwithin(const itr_type begin, const itr_type end) const + { + if (s.size() <= static_cast(std::distance(begin,end))) + { + return (end == std::search(begin, end, s_begin, s_end)); + } + else + return true; + } + + typedef bool (string_condition::*condition_method)(const itr_type begin, const itr_type end) const; + + public: + + enum condition_type + { + equal = 0, + notequal = 1, + like = 2, + begins_with = 4, + ends_with = 8, + within = 16, + notwithin = 32 + }; + + inline explicit string_condition(condition_type cond_type, const std::string& str) + : cond_type_(cond_type), + s(str), + s_begin(reinterpret_cast(to_ptr(s))), + s_end (reinterpret_cast(to_ptr(s) + str.size())), + condition_method_(0) + { + switch (cond_type_) + { + case equal : condition_method_ = &string_condition::condition_equal; + break; + case notequal : condition_method_ = &string_condition::condition_notequal; + break; + case like : condition_method_ = &string_condition::condition_like; + break; + case begins_with : condition_method_ = &string_condition::condition_begins_with; + break; + case ends_with : condition_method_ = &string_condition::condition_ends_with; + break; + case within : condition_method_ = &string_condition::condition_within; + break; + case notwithin : condition_method_ = &string_condition::condition_notwithin; + break; + } + } + + template + inline bool operator()(const Iterator begin, const Iterator end) + { + return ((*this).*condition_method_)(begin,end); + } + + inline bool operator()(const std::string& str) + { + return operator() + ( + reinterpret_cast(to_ptr(str)), + reinterpret_cast(to_ptr(str) + str.size()) + ); + } + + private: + + condition_type cond_type_; + std::string s; + const unsigned char* s_begin; + const unsigned char* s_end; + condition_method condition_method_; + }; + + namespace trie + { + template + class prefix + { + + template ::value_type> + struct node + { + public: + + typedef KeyValue key_value_t; + typedef Value value_t; + + typedef node node_t; + typedef node_t* node_ptr; + typedef const node_ptr const_node_ptr; + + typedef std::vector node_list_t; + typedef typename node_list_t::const_iterator node_list_iterator; + + explicit node(const key_value_t& key_value) + : key_value_(key_value), + value_holder_(false) + {} + + node(const key_value_t& key_value, const value_t& v) + : key_value_(key_value), + value_holder_(true), + value_(v) + {} + + ~node() + { + if (!node_list_.empty()) + { + node_list_iterator itr = node_list_.begin(); + node_list_iterator end = node_list_.end (); + + while (end != itr) + { + delete (*itr); + ++itr; + } + } + } + + inline node_ptr get_node(const key_value_t& key_value) + { + if (node_list_.empty()) + return 0; + + node_list_iterator itr = node_list_.begin(); + const node_list_iterator end = node_list_.end(); + + while (end != itr) + { + if (key_value == (*itr)->key_value_) + return (*itr); + else + ++itr; + } + + return 0; + } + + inline void assign_value(const value_t& v) + { + value_ = v; + value_holder_ = true; + } + + inline void add_node(node_ptr n) + { + node_list_.push_back(n); + } + + inline bool value_holder() const + { + return value_holder_; + } + + inline const value_t& value() const + { + return value_; + } + + inline const key_value_t& key() const + { + return key_value_; + } + + private: + + node(const node_t& n); + node_t& operator=(const node_t& n); + + key_value_t key_value_; + bool value_holder_; + value_t value_; + node_list_t node_list_; + }; + + public: + + //typedef KeyIterator key_iterator_t; + typedef typename std::iterator_traits::value_type key_value_t; + typedef ValueType value_t; + + typedef node node_t; + typedef node_t* node_ptr; + + prefix() + : head_(0) + {} + + template + inline void insert(const key_iterator_t begin, + const key_iterator_t end, + const value_t& v) + { + if (0 == std::distance(begin,end)) + return; + + key_iterator_t itr = begin; + key_value_t key = (*itr); + node_ptr parent = 0; + node_ptr next_node = 0; + node_ptr n = head_ = ((0 == head_) ? new node_t(*itr) : head_); + + while (end != itr) + { + key = (*itr); + + if (0 == (next_node = n->get_node(key))) + { + n->add_node(next_node = new node_t(key)); + } + + parent = n; + n = next_node; + ++itr; + } + + parent->assign_value(v); + } + + template + inline bool find(const key_iterator_t begin, + const key_iterator_t end, + value_t& v) const + { + if ((0 == head_) || (0 == std::distance(begin,end))) + return false; + + key_iterator_t itr = begin; + node_ptr parent = head_; + node_ptr n = head_; + + while (end != itr) + { + node_ptr next_node = n->get_node(*itr); + + if (0 == next_node) + return false; + + parent = n; + n = next_node; + ++itr; + } + if (!parent->value_holder()) + return false; + v = parent->value(); + return true; + } + + template + inline bool find_prefix(const key_iterator_t begin, const key_iterator_t end) const + { + if ((0 == head_) || (0 == std::distance(begin,end))) + return false; + + key_iterator_t itr = begin; + node_ptr n = head_; + + while (end != itr) + { + if (0 == (n = n->get_node(*itr))) + return false; + ++itr; + } + + return true; + } + + ~prefix() + { + delete head_; + } + + private: + + node_ptr head_; + }; + + template + inline void insert(prefix& trie, + const std::string& key, + const Value& value = Value(0)) + { + trie.insert(key.begin(),key.end(),value); + } + + template + inline void insert(prefix& trie, + const char* key, + const Value& value = Value(0)) + { + trie.insert(std::string(key),value); + } + + template + inline bool find(prefix& trie, + const std::string& key, + Value& v) + { + return trie.find(key.begin(),key.end(),v); + } + + template + inline bool find(prefix& trie, + const char* key, + Value& v) + { + return trie.find_prefix(trie,std::string(key),v); + } + + template + inline bool find_prefix(prefix& trie, + const std::string& key) + { + return trie.find_prefix(key.begin(),key.end()); + } + + template + inline bool find_prefix(prefix& trie, + const char* key) + { + return trie.find_prefix(trie,std::string(key)); + } + + } // namespace trie + + template + struct prefix_trie + { + typedef trie::prefix type; + typedef trie::prefix std_string; + typedef trie::prefix char_ptr; + typedef trie::prefix const_char_ptr; + typedef trie::prefix uchar_ptr; + typedef trie::prefix const_uchar_ptr; + }; + + namespace bloom + { + + static const std::size_t bits_per_char = 0x08; // 8 bits in 1 char(unsigned) + static const unsigned char bit_mask[bits_per_char] = { + 0x01, //00000001 + 0x02, //00000010 + 0x04, //00000100 + 0x08, //00001000 + 0x10, //00010000 + 0x20, //00100000 + 0x40, //01000000 + 0x80 //10000000 + }; + + class parameters + { + public: + + parameters() + : minimum_size(1), + maximum_size(std::numeric_limits::max()), + minimum_number_of_hashes(1), + maximum_number_of_hashes(std::numeric_limits::max()), + projected_element_count(10000), + false_positive_probability(1.0 / projected_element_count), + random_seed(0xA5A5A5A55A5A5A5AULL) + {} + + virtual ~parameters() + {} + + inline bool operator!() + { + return (minimum_size > maximum_size) || + (minimum_number_of_hashes > maximum_number_of_hashes) || + (minimum_number_of_hashes < 1) || + (0 == maximum_number_of_hashes) || + (0 == projected_element_count) || + (false_positive_probability < 0.0) || + (std::numeric_limits::infinity() == std::abs(false_positive_probability)) || + (0 == random_seed) || + (0xFFFFFFFFFFFFFFFFULL == random_seed); + } + + //Allowed min/max size of the bloom filter in bits + unsigned long long int minimum_size; + unsigned long long int maximum_size; + + //Allowed min/max number of hash functions + unsigned int minimum_number_of_hashes; + unsigned int maximum_number_of_hashes; + + //The approximate number of elements to be inserted + //into the bloom filter, should be within one order + //of magnitude. The default is 10000. + unsigned long long int projected_element_count; + + //The approximate false positive probability expected + //from the bloom filter. The default is the reciprocal + //of the projected_element_count. + double false_positive_probability; + + unsigned long long int random_seed; + + inline bool operator()(strtk::binary::reader& reader) + { + return reader(minimum_size) && + reader(maximum_size) && + reader(minimum_number_of_hashes) && + reader(maximum_number_of_hashes) && + reader(projected_element_count) && + reader(false_positive_probability) && + reader(random_seed); + } + + inline bool operator()(strtk::binary::writer& writer) + { + return writer(minimum_size) && + writer(maximum_size) && + writer(minimum_number_of_hashes) && + writer(maximum_number_of_hashes) && + writer(projected_element_count) && + writer(false_positive_probability) && + writer(random_seed); + } + + struct optimal_parameters_t + { + optimal_parameters_t() + : number_of_hashes(0), + table_size(0) + {} + + unsigned int number_of_hashes; + unsigned long long int table_size; + }; + + optimal_parameters_t optimal_parameters; + + virtual bool compute_optimal_parameters() + { + /* + Note: + The following will attempt to find the number of hash functions + and minimum amount of storage bits required to construct a bloom + filter consistent with the user defined false positive probability + and estimated element insertion count. + */ + + if (!(*this)) + return false; + + double min_m = std::numeric_limits::infinity(); + double min_k = 0.0; + double curr_m = 0.0; + double k = 1.0; + + while (k < 1000.0) + { + double numerator = -k * projected_element_count; + double denominator = std::log(1.0 - std::pow(false_positive_probability, 1.0 / k)); + curr_m = numerator / denominator; + + if (curr_m < min_m) + { + min_m = curr_m; + min_k = k; + } + + k += 1.0; + } + + optimal_parameters_t& optp = optimal_parameters; + + optp.number_of_hashes = static_cast(min_k); + optp.table_size = static_cast(min_m); + optp.table_size += (((optp.table_size % bits_per_char) != 0) ? (bits_per_char - (optp.table_size % bits_per_char)) : 0); + + if (optp.number_of_hashes < minimum_number_of_hashes) + optp.number_of_hashes = minimum_number_of_hashes; + else if (optp.number_of_hashes > maximum_number_of_hashes) + optp.number_of_hashes = maximum_number_of_hashes; + + if (optp.table_size < minimum_size) + optp.table_size = minimum_size; + else if (optp.table_size > maximum_size) + optp.table_size = maximum_size; + + return true; + } + + }; + + class filter + { + protected: + + typedef unsigned int bloom_type; + typedef unsigned char cell_type; + + public: + + filter() + : bit_table_(0), + salt_count_(0), + table_size_(0), + raw_table_size_(0), + projected_element_count_(0), + inserted_element_count_(0), + random_seed_(0), + desired_false_positive_probability_(0.0) + {} + + filter(const parameters& p) + : bit_table_(0), + projected_element_count_(p.projected_element_count), + inserted_element_count_(0), + random_seed_((p.random_seed * 0xA5A5A5A5) + 1), + desired_false_positive_probability_(p.false_positive_probability) + { + salt_count_ = p.optimal_parameters.number_of_hashes; + table_size_ = p.optimal_parameters.table_size; + generate_unique_salt(); + raw_table_size_ = table_size_ / bits_per_char; + bit_table_ = new cell_type[static_cast(raw_table_size_)]; + std::fill_n(&bit_table_[0], static_cast(raw_table_size_), static_cast(0x00)); + } + + filter(const filter& filter) + { + this->operator=(filter); + } + + inline bool operator == (const filter& f) const + { + if (this != &f) + { + return + (salt_count_ == f.salt_count_) && + (table_size_ == f.table_size_) && + (raw_table_size_ == f.raw_table_size_) && + (projected_element_count_ == f.projected_element_count_) && + (inserted_element_count_ == f.inserted_element_count_) && + (random_seed_ == f.random_seed_) && + (desired_false_positive_probability_ == f.desired_false_positive_probability_) && + (salt_ == f.salt_) && + std::equal(f.bit_table_, f.bit_table_ + raw_table_size_, bit_table_); + } + else + return true; + } + + inline bool operator != (const filter& f) const + { + return !operator==(f); + } + + inline filter& operator = (const filter& f) + { + if (this != &f) + { + salt_count_ = f.salt_count_; + table_size_ = f.table_size_; + raw_table_size_ = f.raw_table_size_; + projected_element_count_ = f.projected_element_count_; + inserted_element_count_ = f.inserted_element_count_; + random_seed_ = f.random_seed_; + desired_false_positive_probability_ = f.desired_false_positive_probability_; + delete[] bit_table_; + bit_table_ = new cell_type[static_cast(raw_table_size_)]; + std::copy(f.bit_table_, f.bit_table_ + raw_table_size_, bit_table_); + salt_ = f.salt_; + } + return *this; + } + + virtual ~filter() + { + delete[] bit_table_; + } + + inline bool operator!() const + { + return (0 == table_size_); + } + + inline void clear() + { + std::fill_n(&bit_table_[0], static_cast(raw_table_size_), static_cast(0x00)); + inserted_element_count_ = 0; + } + + inline void insert(const unsigned char* key_begin, const std::size_t& length) + { + std::size_t bit_index = 0; + std::size_t bit = 0; + for (std::size_t i = 0; i < salt_.size(); ++i) + { + compute_indices(hash_ap(key_begin,length,salt_[i]), bit_index, bit); + bit_table_[bit_index / bits_per_char] |= bit_mask[bit]; + } + ++inserted_element_count_; + } + + template + inline void insert(const T& t) + { + // Note: T must be a C++ POD type. + insert(reinterpret_cast(&t),sizeof(T)); + } + + inline void insert(const std::string& key) + { + insert(reinterpret_cast(to_ptr(key)),key.size()); + } + + inline void insert(const char* data, const std::size_t& length) + { + insert(reinterpret_cast(data),length); + } + + template + inline void insert(const InputIterator begin, const InputIterator end) + { + InputIterator itr = begin; + while (end != itr) + { + insert(*(itr++)); + } + } + + inline virtual bool contains(const unsigned char* key_begin, const std::size_t length) const + { + std::size_t bit_index = 0; + std::size_t bit = 0; + for (std::size_t i = 0; i < salt_.size(); ++i) + { + compute_indices(hash_ap(key_begin,length,salt_[i]),bit_index,bit); + if ((bit_table_[bit_index / bits_per_char] & bit_mask[bit]) != bit_mask[bit]) + { + return false; + } + } + return true; + } + + template + inline bool contains(const T& t) const + { + return contains(reinterpret_cast(&t),static_cast(sizeof(T))); + } + + inline bool contains(const std::string& key) const + { + return contains(reinterpret_cast(to_ptr(key)),key.size()); + } + + inline bool contains(const char* data, const std::size_t& length) const + { + return contains(reinterpret_cast(data),length); + } + + template + inline InputIterator contains_all(const InputIterator begin, const InputIterator end) const + { + InputIterator itr = begin; + while (end != itr) + { + if (!contains(*itr)) + { + return itr; + } + ++itr; + } + return end; + } + + template + inline InputIterator contains_none(const InputIterator begin, const InputIterator end) const + { + InputIterator itr = begin; + while (end != itr) + { + if (contains(*itr)) + { + return itr; + } + ++itr; + } + return end; + } + + inline virtual unsigned long long int size() const + { + return table_size_; + } + + inline std::size_t element_count() const + { + return inserted_element_count_; + } + + inline double effective_fpp() const + { + /* + Note: + The effective false positive probability is calculated using the + designated table size and hash function count in conjunction with + the current number of inserted elements - not the user defined + predicated/expected number of inserted elements. + */ + return std::pow(1.0 - std::exp(-1.0 * salt_.size() * inserted_element_count_ / size()), 1.0 * salt_.size()); + } + + inline filter& operator &= (const filter& f) + { + /* intersection */ + if ( + (salt_count_ == f.salt_count_) && + (table_size_ == f.table_size_) && + (random_seed_ == f.random_seed_) + ) + { + for (std::size_t i = 0; i < raw_table_size_; ++i) + { + bit_table_[i] &= f.bit_table_[i]; + } + } + return *this; + } + + inline filter& operator |= (const filter& f) + { + /* union */ + if ( + (salt_count_ == f.salt_count_) && + (table_size_ == f.table_size_) && + (random_seed_ == f.random_seed_) + ) + { + for (std::size_t i = 0; i < raw_table_size_; ++i) + { + bit_table_[i] |= f.bit_table_[i]; + } + } + return *this; + } + + inline filter& operator ^= (const filter& f) + { + /* difference */ + if ( + (salt_count_ == f.salt_count_) && + (table_size_ == f.table_size_) && + (random_seed_ == f.random_seed_) + ) + { + for (std::size_t i = 0; i < raw_table_size_; ++i) + { + bit_table_[i] ^= f.bit_table_[i]; + } + } + return *this; + } + + inline const cell_type* table() const + { + return bit_table_; + } + + inline bool write_to_file(const std::string& file_name) const + { + if (0 == table_size_) + return false; + const std::size_t buffer_size = sizeof( salt_count_) + + sizeof( table_size_) + + sizeof( raw_table_size_) + + sizeof( projected_element_count_) + + sizeof( inserted_element_count_) + + sizeof( random_seed_) + + sizeof(desired_false_positive_probability_) + + salt_count_ * sizeof( bloom_type) + + static_cast(raw_table_size_) * + sizeof(cell_type) + + 64; // handle array sizes etc. + std::ofstream ostream(file_name.c_str(),std::ios::binary); + if (!ostream) + return false; + unsigned char* buffer = new unsigned char[buffer_size]; + strtk::binary::writer writer(buffer,buffer_size); + writer.reset(true); + bool result = writer(salt_count_) && + writer(table_size_) && + writer(raw_table_size_) && + writer(projected_element_count_) && + writer(inserted_element_count_) && + writer(random_seed_) && + writer(desired_false_positive_probability_) && + writer(salt_) && + writer(bit_table_,raw_table_size_); + if (result) + { + writer(ostream); + } + ostream.close(); + delete[] buffer; + return result; + } + + inline bool read_from_file(const std::string& file_name) + { + std::ifstream istream(file_name.c_str(),std::ios::binary); + + if (!istream) + return false; + + salt_count_ = 0; + table_size_ = 0; + raw_table_size_ = 0; + projected_element_count_ = 0; + inserted_element_count_ = 0; + random_seed_ = 0; + desired_false_positive_probability_ = 0.0; + salt_.clear(); + + if (0 != bit_table_) + delete [] bit_table_; + + bit_table_= 0; + const std::size_t buffer_size = strtk::fileio::file_size(file_name); + unsigned char* buffer = new unsigned char[buffer_size]; + + strtk::binary::reader reader(buffer,buffer_size); + reader.reset(true); + reader(istream,buffer_size); + istream.close(); + + bool result = reader(salt_count_) && + reader(table_size_) && + reader(raw_table_size_) && + reader(projected_element_count_) && + reader(inserted_element_count_) && + reader(random_seed_) && + reader(desired_false_positive_probability_) && + reader(salt_) && + reader(bit_table_,raw_table_size_); + + delete[] buffer; + + return result; + } + + inline std::size_t hash_count() + { + return salt_.size(); + } + + protected: + + inline virtual void compute_indices(const bloom_type& hash, std::size_t& bit_index, std::size_t& bit) const + { + bit_index = static_cast(hash % table_size_); + bit = bit_index % bits_per_char; + } + + void generate_unique_salt() + { + /* + Note: + A distinct hash function need not be implementation-wise + distinct. In the current implementation "seeding" a common + hash function with different values seems to be adequate. + */ + const unsigned int predef_salt_count = 128; + static const bloom_type predef_salt[predef_salt_count] = + { + 0xAAAAAAAA, 0x55555555, 0x33333333, 0xCCCCCCCC, + 0x66666666, 0x99999999, 0xB5B5B5B5, 0x4B4B4B4B, + 0xAA55AA55, 0x55335533, 0x33CC33CC, 0xCC66CC66, + 0x66996699, 0x99B599B5, 0xB54BB54B, 0x4BAA4BAA, + 0xAA33AA33, 0x55CC55CC, 0x33663366, 0xCC99CC99, + 0x66B566B5, 0x994B994B, 0xB5AAB5AA, 0xAAAAAA33, + 0x555555CC, 0x33333366, 0xCCCCCC99, 0x666666B5, + 0x9999994B, 0xB5B5B5AA, 0xFFFFFFFF, 0xFFFF0000, + 0xB823D5EB, 0xC1191CDF, 0xF623AEB3, 0xDB58499F, + 0xC8D42E70, 0xB173F616, 0xA91A5967, 0xDA427D63, + 0xB1E8A2EA, 0xF6C0D155, 0x4909FEA3, 0xA68CC6A7, + 0xC395E782, 0xA26057EB, 0x0CD5DA28, 0x467C5492, + 0xF15E6982, 0x61C6FAD3, 0x9615E352, 0x6E9E355A, + 0x689B563E, 0x0C9831A8, 0x6753C18B, 0xA622689B, + 0x8CA63C47, 0x42CC2884, 0x8E89919B, 0x6EDBD7D3, + 0x15B6796C, 0x1D6FDFE4, 0x63FF9092, 0xE7401432, + 0xEFFE9412, 0xAEAEDF79, 0x9F245A31, 0x83C136FC, + 0xC3DA4A8C, 0xA5112C8C, 0x5271F491, 0x9A948DAB, + 0xCEE59A8D, 0xB5F525AB, 0x59D13217, 0x24E7C331, + 0x697C2103, 0x84B0A460, 0x86156DA9, 0xAEF2AC68, + 0x23243DA5, 0x3F649643, 0x5FA495A8, 0x67710DF8, + 0x9A6C499E, 0xDCFB0227, 0x46A43433, 0x1832B07A, + 0xC46AFF3C, 0xB9C8FFF0, 0xC9500467, 0x34431BDF, + 0xB652432B, 0xE367F12B, 0x427F4C1B, 0x224C006E, + 0x2E7E5A89, 0x96F99AA5, 0x0BEB452A, 0x2FD87C39, + 0x74B2E1FB, 0x222EFD24, 0xF357F60C, 0x440FCB1E, + 0x8BBE030F, 0x6704DC29, 0x1144D12F, 0x948B1355, + 0x6D8FD7E9, 0x1C11A014, 0xADD1592F, 0xFB3C712E, + 0xFC77642F, 0xF9C4CE8C, 0x31312FB9, 0x08B0DD79, + 0x318FA6E7, 0xC040D23D, 0xC0589AA7, 0x0CA5C075, + 0xF874B172, 0x0CF914D5, 0x784D3280, 0x4E8CFEBC, + 0xC569F575, 0xCDB2A091, 0x2CC016B4, 0x5C5F4421 + }; + + if (salt_count_ <= predef_salt_count) + { + std::copy(predef_salt, + predef_salt + salt_count_, + std::back_inserter(salt_)); + for (unsigned int i = 0; i < salt_.size(); ++i) + { + /* + Note: + This is done to integrate the user defined random seed, + so as to allow for the generation of unique bloom filter + instances. + */ + salt_[i] = salt_[i] * salt_[(i + 3) % salt_.size()] + static_cast(random_seed_); + } + } + else + { + std::copy(predef_salt,predef_salt + predef_salt_count,std::back_inserter(salt_)); + srand(static_cast(random_seed_)); + + while (salt_.size() < salt_count_) + { + bloom_type current_salt = static_cast(rand()) * static_cast(rand()); + + if (0 == current_salt) continue; + if (salt_.end() == std::find(salt_.begin(), salt_.end(), current_salt)) + { + salt_.push_back(current_salt); + } + } + } + } + + inline bloom_type hash_ap(const unsigned char* begin, std::size_t remaining_length, bloom_type hash) const + { + const unsigned char* itr = begin; + unsigned int loop = 0; + + while (remaining_length >= 8) + { + const unsigned int& i1 = *(reinterpret_cast(itr)); itr += sizeof(unsigned int); + const unsigned int& i2 = *(reinterpret_cast(itr)); itr += sizeof(unsigned int); + hash ^= (hash << 7) ^ i1 * (hash >> 3) ^ + (~((hash << 11) + (i2 ^ (hash >> 5)))); + remaining_length -= 8; + } + + if (remaining_length) + { + if (remaining_length >= 4) + { + const unsigned int& i = *(reinterpret_cast(itr)); + if (loop & 0x01) + hash ^= (hash << 7) ^ i * (hash >> 3); + else + hash ^= (~((hash << 11) + (i ^ (hash >> 5)))); + ++loop; + remaining_length -= 4; + itr += sizeof(unsigned int); + } + + if (remaining_length >= 2) + { + const unsigned short& i = *(reinterpret_cast(itr)); + if (loop & 0x01) + hash ^= (hash << 7) ^ i * (hash >> 3); + else + hash ^= (~((hash << 11) + (i ^ (hash >> 5)))); + ++loop; + remaining_length -= 2; + itr += sizeof(unsigned short); + } + + if (remaining_length) + { + hash += ((*itr) ^ (hash * 0xA5A5A5A5)) + loop; + } + } + + return hash; + } + + std::vector salt_; + unsigned char* bit_table_; + unsigned int salt_count_; + unsigned long long int table_size_; + unsigned long long int raw_table_size_; + unsigned long long int projected_element_count_; + unsigned int inserted_element_count_; + unsigned long long int random_seed_; + double desired_false_positive_probability_; + }; + + inline filter operator & (const filter& a, const filter& b) + { + filter result = a; + result &= b; + return result; + } + + inline filter operator | (const filter& a, const filter& b) + { + filter result = a; + result |= b; + return result; + } + + inline filter operator ^ (const filter& a, const filter& b) + { + filter result = a; + result ^= b; + return result; + } + + class compressible_filter : public filter + { + public: + + compressible_filter(const parameters& p) + : filter(p) + { + size_list.push_back(table_size_); + } + + inline virtual unsigned long long int size() const + { + return size_list.back(); + } + + inline bool compress(const double& percentage) + { + if ((0.0 >= percentage) || (percentage >= 100.0)) + { + return false; + } + + unsigned long long int original_table_size = size_list.back(); + unsigned long long int new_table_size = static_cast((size_list.back() * (1.0 - (percentage / 100.0)))); + new_table_size -= (((new_table_size % bits_per_char) != 0) ? (new_table_size % bits_per_char) : 0); + + if ((bits_per_char > new_table_size) || (new_table_size >= original_table_size)) + { + return false; + } + + desired_false_positive_probability_ = effective_fpp(); + cell_type* tmp = new cell_type[static_cast(new_table_size / bits_per_char)]; + std::copy(bit_table_, bit_table_ + (new_table_size / bits_per_char), tmp); + cell_type* itr = bit_table_ + (new_table_size / bits_per_char); + cell_type* end = bit_table_ + (original_table_size / bits_per_char); + cell_type* itr_tmp = tmp; + + while (end != itr) + { + *(itr_tmp++) |= (*itr++); + } + + delete[] bit_table_; + bit_table_ = tmp; + size_list.push_back(new_table_size); + + return true; + } + + private: + + inline virtual void compute_indices(const bloom_type& hash, std::size_t& bit_index, std::size_t& bit) const + { + bit_index = hash; + for (std::size_t i = 0; i < size_list.size(); ++i) + { + bit_index %= size_list[i]; + } + bit = bit_index % bits_per_char; + } + + std::vector size_list; + }; + + } + + namespace details + { + + inline void compute_pod_hash(const char data[], unsigned int& hash) + { + hash ^= ((hash << 7) ^ data[0] * (hash >> 3)); + hash ^= ~((hash << 11) + (data[1] ^ (hash >> 5))); + } + + inline void compute_pod_hash(const unsigned char data[], unsigned int& hash) + { + hash ^= ((hash << 7) ^ data[0] * (hash >> 3)); + hash ^= ~((hash << 11) + (data[1] ^ (hash >> 5))); + } + + inline void compute_pod_hash(const int& data, unsigned int& hash) + { + const unsigned char* itr = reinterpret_cast(&data); + hash ^= ((hash << 7) ^ itr[0] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[1] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[2] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[3] ^ (hash >> 5))); + } + + inline void compute_pod_hash(const unsigned int& data, unsigned int& hash) + { + compute_pod_hash(static_cast(data),hash); + } + + inline void compute_pod_hash(const unsigned long long int& data, unsigned int& hash) + { + const unsigned char* itr = reinterpret_cast(&data); + hash ^= ((hash << 7) ^ itr[0] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[1] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[2] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[3] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[4] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[5] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[6] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[7] ^ (hash >> 5))); + } + + inline void compute_pod_hash(const double& data, unsigned int& hash) + { + const unsigned char* itr = reinterpret_cast(&data); + hash ^= ((hash << 7) ^ itr[0] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[1] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[2] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[3] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[4] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[5] ^ (hash >> 5))); + hash ^= ((hash << 7) ^ itr[6] * (hash >> 3)); + hash ^= ~((hash << 11) + (itr[7] ^ (hash >> 5))); + } + + template + inline void compute_block(Iterator itr, std::size_t& length, unsigned int& hash) + { + while (length >= block_size) + { + for (std::size_t i = 0; i < block_size; ++i, ++itr) + { + compute_pod_hash((*itr),hash); + } + length -= block_size; + } + } + + template + inline void compute_block(unsigned char* itr, std::size_t& length, unsigned int& hash) + { + unsigned int local_hash = hash; + + while (length >= block_size) + { + for (std::size_t i = 0; i < block_size; ++i, ++itr) + { + compute_pod_hash((*itr),local_hash); + } + length -= block_size; + } + + hash = local_hash; + } + + template + inline void compute_block(char* itr, std::size_t& length, unsigned int& hash) + { + compute_block(reinterpret_cast(itr),length,hash); + } + + static const unsigned int hash_seed = 0xAAAAAAAA; + + template + inline void hash(const Iterator itr, std::size_t length, unsigned int& hash_value) + { + if (length >= 64) compute_block<64>(itr,length,hash_value); + if (length >= 32) compute_block<32>(itr,length,hash_value); + if (length >= 16) compute_block<16>(itr,length,hash_value); + if (length >= 8) compute_block< 8>(itr,length,hash_value); + if (length >= 4) compute_block< 4>(itr,length,hash_value); + if (length >= 2) compute_block< 2>(itr,length,hash_value); + if (length == 0) compute_block< 1>(itr,length,hash_value); + } + + } // namespace details + + template + inline unsigned int hash(const Iterator itr, + std::size_t length, + unsigned int seed = details::hash_seed) + { + unsigned int hash_value = seed; + details::hash(itr,length,hash_value); + return hash_value; + } + + inline unsigned int hash(const std::string& s, unsigned int seed = details::hash_seed) + { + unsigned int hash_value = seed; + return hash(s.begin(),s.size(),hash_value); + } + + template class Sequence> + inline unsigned int hash(const Sequence& sequence, unsigned int seed = details::hash_seed) + { + unsigned int hash_value = seed; + return hash(sequence.begin(),sequence.size(),hash_value); + } + + namespace util + { + template + class scoped_restore + { + public: + + scoped_restore(T& t, const bool restore = true) + : restore_(restore), + reference_(t), + copy_(t) + {} + + ~scoped_restore() + { + if (restore_) + { + reference_ = copy_; + } + } + + inline bool& restore() + { + return restore_; + } + + private: + + scoped_restore(const scoped_restore&); + scoped_restore& operator=(const scoped_restore&); + + bool restore_; + T& reference_; + T copy_; + }; + + template + class attribute + { + public: + + attribute() + : initialised_(false) + {} + + attribute(const T& t) + { + assign(t); + prev_t_ = t; + } + + inline attribute& operator=(const T& t) + { + prev_t_ = t_; + assign(t); + return *this; + } + + inline bool operator==(const T& t) + { + return initialised_ && (t_ == t); + } + + template + inline bool operator!=(const TConvertibleType& t) + { + return !(operator==(t)); + } + + inline T& operator()() + { + return t_; + } + + inline const T& operator()() const + { + return t_; + } + + inline operator T() const + { + return t_; + } + + inline operator T() + { + return t_; + } + + inline bool initialised() const + { + return initialised_; + } + + inline bool& initialised() + { + return initialised_; + } + + inline bool changed() const + { + return (initialised_ && (t_ != prev_t_)); + } + + inline const T& value() const + { + return t_; + } + + inline T& value() + { + return t_; + } + + inline const T& previous() const + { + return prev_t_; + } + + inline T& previous() + { + return prev_t_; + } + + private: + + inline void assign(const T& t) + { + t_ = t; + initialised_ = true; + } + + T t_; + T prev_t_; + bool initialised_; + }; + + inline bool operator==(const char* s, const attribute& attrib) + { + return attrib.value() == s; + } + + inline bool operator!=(const char* s, const attribute& attrib) + { + return !(s == attrib.value()); + } + + template + static inline std::ostream& operator<<(std::ostream& os, const attribute& attrib) + { + return (os << attrib.value()); + } + + class semantic_action_impl + { + private: + + class function_holder_base + { + public: + + typedef const unsigned char* itr_type; + + virtual ~function_holder_base(){} + + virtual bool operator()(itr_type begin, itr_type end) const = 0; + + inline bool operator()(const char* begin, const char* end) const + { + return operator()(reinterpret_cast(begin), + reinterpret_cast(end)); + } + + template + inline bool operator()(const std::pair& p) const + { + return operator()(p.first,p.second); + } + }; + + template + class function_holder : public function_holder_base + { + public: + + explicit function_holder(Function& f) + : function_(&f) + {} + + inline virtual bool operator()(itr_type begin, itr_type end) const + { + return (*function_)(begin,end); + } + + private: + + Function* function_; + }; + + public: + + semantic_action_impl() + : function_holder_(0) + { + std::fill_n(function_holder_buffer_, sizeof(function_holder_buffer_), static_cast(0x00)); + } + + template + inline explicit semantic_action_impl(const Function& f) + { + std::fill_n(function_holder_buffer_, sizeof(function_holder_buffer_), static_cast(0x00)); + assign(f); + } + + inline bool operator!() const + { + return (0 == function_holder_); + } + + inline bool operator==(const semantic_action_impl& sa) const + { + return (0 != function_holder_) && + (0 != sa.function_holder_) && + (function_holder_ == sa.function_holder_); + } + + template + inline bool operator()(InputIterator begin, InputIterator end) const + { + if (0 != function_holder_) + return (*function_holder_).operator()(begin,end); + else + return false; + } + + template + inline bool operator()(const std::pair& r) const + { + return operator()(r.first,r.second); + } + + inline bool operator()(const std::string& s) const + { + return operator()(to_ptr(s), to_ptr(s) + s.size()); + } + + template + inline void assign(Function& f) + { + static const std::size_t type_size = sizeof(function_holder(f)); + function_holder_ = construct::type(f,function_holder_buffer_); + } + + inline semantic_action_impl& ref() + { + return (*this); + } + + private: + + typedef function_holder_base* function_holder_ptr; + + inline semantic_action_impl& operator=(const semantic_action_impl&); + + template + struct construct + { + inline static function_holder_ptr type(Function&, unsigned char*) + { + return reinterpret_cast(0); + } + }; + + template + struct construct + { + inline static function_holder_ptr type(Function& f, unsigned char* buffer) + { + return new(buffer)function_holder(f); + } + }; + + function_holder_ptr function_holder_; + enum { function_holder_buffer_size = 64 }; + unsigned char function_holder_buffer_[function_holder_buffer_size]; + }; + + template + inline semantic_action_impl semantic_action(Function& f) + { + return semantic_action_impl(f); + } + + } // namespace util + + namespace details + { + #define strtk_register_attribute_type_tag(T) \ + template<> struct supported_conversion_to_type< strtk::util::attribute >{ typedef attribute_type_tag type; }; \ + template<> struct supported_conversion_from_type< strtk::util::attribute > { typedef attribute_type_tag type; };\ + + strtk_register_attribute_type_tag(unsigned short) + strtk_register_attribute_type_tag(unsigned int) + strtk_register_attribute_type_tag(unsigned long) + strtk_register_attribute_type_tag(unsigned long long int) + strtk_register_attribute_type_tag(short) + strtk_register_attribute_type_tag(int) + strtk_register_attribute_type_tag(long) + strtk_register_attribute_type_tag(long long) + strtk_register_attribute_type_tag(float) + strtk_register_attribute_type_tag(double) + strtk_register_attribute_type_tag(long double) + strtk_register_attribute_type_tag(unsigned char) + strtk_register_attribute_type_tag(signed char) + strtk_register_attribute_type_tag(char) + strtk_register_attribute_type_tag(std::string) + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, strtk::util::attribute& result, attribute_type_tag) + { + if (strtk::string_to_type_converter(itr,end,result.value())) + { + result.initialised() = true; + return true; + } + else + return false; + } + + template + inline bool type_to_string_converter_impl(const strtk::util::attribute& attrib, std::string& result, attribute_type_tag) + { + if (!attrib.initialised()) + return false; + return strtk::type_to_string(attrib.value(),result); + } + + #undef strtk_register_attribute_type_tag + + template<> struct supported_conversion_to_type < strtk::util::semantic_action_impl > { typedef semantic_action_type_tag type; }; + template<> struct supported_conversion_from_type< strtk::util::semantic_action_impl > { typedef semantic_action_type_tag type; }; + + template + inline bool string_to_type_converter_impl(Iterator& itr, const Iterator end, strtk::util::semantic_action_impl& result, semantic_action_type_tag) + { + return result(itr,end); + } + + inline bool type_to_string_converter_impl(const strtk::util::semantic_action_impl&, std::string& result, semantic_action_type_tag) + { + static std::string result_str = "semantic_action"; + result = result_str; + return true; + } + + } // namespace details + + namespace util + { + class value + { + private: + + class type_holder_base + { + public: + + typedef const unsigned char* itr_type; + + virtual ~type_holder_base(){} + + virtual bool operator()(itr_type begin, itr_type end) const = 0; + + virtual bool to_string(std::string& s) const = 0; + + inline bool operator()(const char* begin, const char* end) const + { + return operator()(reinterpret_cast(begin), + reinterpret_cast(end)); + } + + template + inline bool operator()(const std::pair& p) const + { + return operator()(p.first,p.second); + } + }; + + template + class type_holder : public type_holder_base + { + public: + + typedef T* type_ptr; + + explicit type_holder(T& t) + : value_ptr_(&t) + {} + + inline virtual bool operator()(itr_type begin, itr_type end) const + { + return strtk::string_to_type_converter(begin,end,(*value_ptr_)); + } + + inline virtual bool to_string(std::string& s) const + { + return strtk::type_to_string((*value_ptr_),s); + } + + inline operator T() const + { + return (*value_ptr_); + } + + private: + + type_ptr value_ptr_; + }; + + public: + + value() + : type_holder_(0) + { + std::fill_n(type_holder_buffer_, sizeof(type_holder_buffer_), static_cast(0x00)); + } + + template + inline explicit value(T& t) + { + std::fill_n(type_holder_buffer_, sizeof(type_holder_buffer_), static_cast(0x00)); + assign(t); + } + + inline bool operator!() const + { + return (0 == type_holder_); + } + + inline bool operator==(const value& v) const + { + return (0 != type_holder_) && + (0 != v.type_holder_) && + (type_holder_ == v.type_holder_); + } + + inline value& operator=(const value& v) + { + if (&v != this) + { + if (0 != v.type_holder_) + { + std::copy(v.type_holder_buffer_, + v.type_holder_buffer_ + type_holder_buffer_size, + type_holder_buffer_); + type_holder_ = reinterpret_cast(type_holder_buffer_); + } + } + return *this; + } + + template + inline bool operator()(InputIterator begin, InputIterator end) const + { + if (0 != type_holder_) + return (*type_holder_).operator()(begin,end); + else + return false; + } + + template + inline bool operator()(const std::pair& r) const + { + return operator()(r.first,r.second); + } + + inline bool operator()(const std::string& s) const + { + return operator()(to_ptr(s), to_ptr(s) + s.size()); + } + + template + inline void assign(T& t) + { + static const std::size_t type_size = sizeof(type_holder(t)); + type_holder_ = construct::type(t,type_holder_buffer_); + } + + inline bool to_string(std::string& s) const + { + if (0 != type_holder_) + return (*type_holder_).to_string(s); + else + return false; + } + + template + inline operator T() const + { + if (0 != type_holder_) + return (*type_holder_); + else + return T(); + } + + private: + + typedef type_holder_base* type_holder_ptr; + + template + struct construct + { + inline static type_holder_ptr type(T&, unsigned char*) + { + return reinterpret_cast(0); + } + }; + + template + struct construct + { + inline static type_holder_ptr type(T& t, unsigned char* buffer) + { + return new(buffer)type_holder(t); + } + }; + + type_holder_ptr type_holder_; + enum { type_holder_buffer_size = 2 * sizeof(type_holder) }; + unsigned char type_holder_buffer_[type_holder_buffer_size]; + }; + + namespace details + { + template + inline void make_key_list_impl(const std::map& map, + OutputIterator out) + { + if (map.empty()) return; + + typedef typename std::map map_type; + + typename map_type::const_iterator itr = map.begin(); + typename map_type::const_iterator end = map.end(); + + while (end != itr) + { + *out++ = (itr++)->first; + } + } + } + + template + inline void make_key_list(const std::map& map, + std::set& set) + { + details::make_key_list_impl(map,std::inserter(set,set.begin())); + } + + template + inline void make_key_list(const std::map& map, + std::multiset& multiset) + { + details::make_key_list_impl(map,std::inserter(multiset,multiset.begin())); + } + + #define strtk_def_mkky_list(Type) \ + template \ + inline void make_key_list(const std::map& map, \ + Type& sequence) \ + { \ + details::make_key_list_impl(map,std::back_inserter(sequence)); \ + } \ + + strtk_def_mkky_list(std::vector) + strtk_def_mkky_list(std::deque ) + strtk_def_mkky_list(std::list ) + strtk_def_mkky_list(std::queue ) + + #undef strtk_def_mkky_list + + template + inline void make_value_list(const std::multimap& map, + const Key& key, + OutputIterator out) + { + if (map.empty()) return; + typedef typename std::multimap map_type; + typename map_type::const_iterator itr = map.find(key); + typename map_type::const_iterator end = map.end(); + while ((end != itr) && (key == itr->first)) + { + *out++ = (itr++)->second; + } + } + + template class Sequence> + inline void make_value_list(const std::multimap& map, + const Key& key, + Sequence& sequence) + { + make_value_list(map,key,std::back_inserter(sequence)); + } + + template class Sequence> + inline void delete_all(Sequence& sequence) + { + typename Sequence::iterator itr = sequence.begin(); + typename Sequence::iterator end = sequence.end(); + + while (end != itr) + { + delete (*itr); + ++itr; + } + + sequence.clear(); + } + + template + inline void delete_all(std::map& cont) + { + typename std::map::iterator itr = cont.begin(); + typename std::map::iterator end = cont.end(); + + while (end != itr) + { + delete (*itr).second; + ++itr; + } + + cont.clear(); + } + + template + inline void delete_all(std::multimap& cont) + { + typename std::multimap::iterator itr = cont.begin(); + typename std::multimap::iterator end = cont.end(); + + while (end != itr) + { + delete (*itr).second; + ++itr; + } + + cont.clear(); + } + + template + inline void delete_all(std::set& cont) + { + typename std::set::iterator itr = cont.begin(); + typename std::set::iterator end = cont.end(); + + while (end != itr) + { + delete (*itr); + ++itr; + } + + cont.clear(); + } + + template + inline void delete_all(std::multiset& cont) + { + typename std::multiset::iterator itr = cont.begin(); + typename std::multiset::iterator end = cont.end(); + + while (end != itr) + { + delete (*itr); + ++itr; + } + + cont.clear(); + } + + template class Sequence> + inline void delete_if(const Predicate& p, + Sequence& sequence) + { + typename Sequence::iterator itr = sequence.begin(); + + while (sequence.end() != itr) + { + if (p(*itr)) + { + delete (*itr); + itr = sequence.erase(itr); + } + else + ++itr; + } + } + + template + inline void delete_if(const Predicate& p, + std::map& cont) + { + typename std::map::iterator itr = cont.begin(); + + while (cont.end() != itr) + { + if (p(*itr)) + { + delete (*itr).second; + itr = cont.erase(itr); + } + else + ++itr; + } + } + + template + inline void delete_if(const Predicate& p, + std::multimap& cont) + { + typename std::multimap::iterator itr = cont.begin(); + + while (cont.end() != itr) + { + if (p(*itr)) + { + delete (*itr).second; + itr = cont.erase(itr); + } + else + ++itr; + } + } + + template + inline void delete_if(const Predicate& p, + std::set& cont) + { + typename std::set::iterator itr = cont.begin(); + + while (cont.end() != itr) + { + if (p(*itr)) + { + delete (*itr).second; + itr = cont.erase(itr); + } + else + ++itr; + } + } + + template + inline void delete_if(const Predicate& p, + std::multiset& cont) + { + typename std::multiset::iterator itr = cont.begin(); + + while (cont.end() != itr) + { + if (p(*itr)) + { + delete (*itr).second; + itr = cont.erase(itr); + } + else + ++itr; + } + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9, const T& v10, const T& v11) + { + sequence.push_back( v1); sequence.push_back( v2); + sequence.push_back( v3); sequence.push_back( v4); + sequence.push_back( v5); sequence.push_back( v6); + sequence.push_back( v7); sequence.push_back( v8); + sequence.push_back( v9); sequence.push_back(v10); + sequence.push_back(v11); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9, const T& v10) + { + sequence.push_back(v1); sequence.push_back( v2); + sequence.push_back(v3); sequence.push_back( v4); + sequence.push_back(v5); sequence.push_back( v6); + sequence.push_back(v7); sequence.push_back( v8); + sequence.push_back(v9); sequence.push_back(v10); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + sequence.push_back(v5); sequence.push_back(v6); + sequence.push_back(v7); sequence.push_back(v8); + sequence.push_back(v9); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + sequence.push_back(v5); sequence.push_back(v6); + sequence.push_back(v7); sequence.push_back(v8); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + sequence.push_back(v5); sequence.push_back(v6); + sequence.push_back(v7); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + sequence.push_back(v5); sequence.push_back(v6); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + sequence.push_back(v5); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3, const T& v4) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); sequence.push_back(v4); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2, const T& v3) + { + sequence.push_back(v1); sequence.push_back(v2); + sequence.push_back(v3); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1, const T& v2) + { + sequence.push_back(v1); sequence.push_back(v2); + } + + template class Sequence> + inline void push_back(Sequence& sequence, + const T& v1) + { + sequence.push_back(v1); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9, const T& v10) + { + set.insert(v1); set.insert( v2); + set.insert(v3); set.insert( v4); + set.insert(v5); set.insert( v6); + set.insert(v7); set.insert( v8); + set.insert(v9); set.insert(v10); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); set.insert(v8); + set.insert(v9); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); set.insert(v8); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3, const T& v4) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2, const T& v3) + { + set.insert(v1); set.insert(v2); + set.insert(v3); + } + + template + inline void push_back(std::set& set, + const T& v1, const T& v2) + { + set.insert(v1); set.insert(v2); + } + + template + inline void push_back(std::set& set, + const T& v1) + { + set.insert(v1); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9, const T& v10) + { + set.insert(v1); set.insert( v2); + set.insert(v3); set.insert( v4); + set.insert(v5); set.insert( v6); + set.insert(v7); set.insert( v8); + set.insert(v9); set.insert(v10); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8, + const T& v9) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); set.insert(v8); + set.insert(v9); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7, const T& v8) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); set.insert(v8); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6, const T& v7) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + set.insert(v7); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5, const T& v6) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); set.insert(v6); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4, + const T& v5) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + set.insert(v5); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3, const T& v4) + { + set.insert(v1); set.insert(v2); + set.insert(v3); set.insert(v4); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2, const T& v3) + { + set.insert(v1); set.insert(v2); + set.insert(v3); + } + + template + inline void push_back(std::multiset& set, + const T& v1, const T& v2) + { + set.insert(v1); set.insert(v2); + } + + template + inline void push_back(std::multiset& set, + const T& v1) + { + set.insert(v1); + } + + #define strtk_def_clear_seq(Type) \ + template \ + inline void clear(Type& cont) \ + { \ + Type null_cont; \ + std::swap(cont, null_cont); \ + } \ + + strtk_def_clear_seq(std::vector ) + strtk_def_clear_seq(std::deque ) + strtk_def_clear_seq(std::list ) + strtk_def_clear_seq(std::priority_queue) + strtk_def_clear_seq(std::stack ) + strtk_def_clear_seq(std::queue ) + #undef strtk_def_clear_seq + + #define strtk_def_clear_map(Type) \ + template \ + inline void clear(Type& cont) \ + { \ + Type null_cont; \ + std::swap(cont, null_cont); \ + } \ + + strtk_def_clear_map(std::set ) + strtk_def_clear_map(std::multiset) + strtk_def_clear_map(std::multimap) + #undef strtk_def_clear_map + + } // namespace util + + namespace details + { + template + struct column_list_impl + { + enum { size = N }; + std::size_t index_list[N]; + }; + + template + class column_selector_base + { + public: + + typedef column_selector_base csb_t; + typedef column_list_impl column_list_t; + + column_selector_base(const column_list_t& column_list) + : column_list_(column_list), + current_index_(0), + target_index_(column_list_.index_list[0]), + col_list_index_(0), + error_count_(0) + {} + + inline csb_t& operator*() + { + return (*this); + } + + inline csb_t& operator++() + { + return (*this); + } + + inline csb_t operator++(int) + { + return (*this); + } + + template + inline csb_t& operator=(const std::pair& r) + { + process(r); + return (*this); + } + + void reset() + { + current_index_ = 0; + col_list_index_ = 0; + target_index_ = column_list_.index_list[0]; + error_count_ = 0; + } + + protected: + + class colsel_value_list + { + public: + + typedef std::pair value_t; + + colsel_value_list() + : current_index(0) + { + static const value_t null_value(strtk::util::value(),false); + std::fill_n(value_list,N,null_value); + } + + template + inline void register_value(T& t) + { + if (current_index < N) + { + value_list[current_index].first.assign(t); + value_list[current_index].second = false; + ++current_index; + } + } + + std::size_t current_index; + value_t value_list[N]; + }; + + template + inline void process(const std::pair& r) + { + if (current_index_ > target_index_) + return; + else if (current_index_ == target_index_) + { + typename colsel_value_list::value_t& v = cvl_.value_list[col_list_index_]; + + if (true != (v.second = v.first(r.first,r.second))) + { + ++error_count_; + } + + ++col_list_index_; + + if (col_list_index_ < column_list_t::size) + target_index_ = column_list_.index_list[col_list_index_]; + else + target_index_ = std::numeric_limits::max(); + } + + ++current_index_; + } + + inline colsel_value_list& cvl() + { + return cvl_; + } + + const column_list_t& column_list_; + std::size_t current_index_; + std::size_t target_index_; + std::size_t col_list_index_; + std::size_t error_count_; + colsel_value_list cvl_; + + private: + + csb_t& operator=(const csb_t& csb); + }; + + template + class column_selector_impl + : public column_selector_base,12> + { + public: + + typedef column_selector_base,12> csb_t; + typedef column_list_impl<12> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, + T10& t10, T11& t11) + : csb_t(column_list) + { + csb_t::cvl().register_value( t0); csb_t::cvl().register_value( t1); + csb_t::cvl().register_value( t2); csb_t::cvl().register_value( t3); + csb_t::cvl().register_value( t4); csb_t::cvl().register_value( t5); + csb_t::cvl().register_value( t6); csb_t::cvl().register_value( t7); + csb_t::cvl().register_value( t8); csb_t::cvl().register_value( t9); + csb_t::cvl().register_value(t10); csb_t::cvl().register_value(t11); + } + }; + + template + class column_selector_impl + : public column_selector_base,11> + { + public: + + typedef column_selector_base,11> csb_t; + typedef column_list_impl<11> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, + T10& t10) + : csb_t(column_list) + { + csb_t::cvl().register_value( t0); csb_t::cvl().register_value( t1); + csb_t::cvl().register_value( t2); csb_t::cvl().register_value( t3); + csb_t::cvl().register_value( t4); csb_t::cvl().register_value( t5); + csb_t::cvl().register_value( t6); csb_t::cvl().register_value( t7); + csb_t::cvl().register_value( t8); csb_t::cvl().register_value( t9); + csb_t::cvl().register_value(t10); + } + }; + + template + class column_selector_impl + : public column_selector_base,10> + { + public: + + typedef column_selector_base,10> csb_t; + typedef column_list_impl<10> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, T9& t9) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); csb_t::cvl().register_value(t5); + csb_t::cvl().register_value(t6); csb_t::cvl().register_value(t7); + csb_t::cvl().register_value(t8); csb_t::cvl().register_value(t9); + } + }; + + template + class column_selector_impl + : public column_selector_base,9> + { + public: + + typedef column_selector_base,9> csb_t; + typedef column_list_impl<9> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); csb_t::cvl().register_value(t5); + csb_t::cvl().register_value(t6); csb_t::cvl().register_value(t7); + csb_t::cvl().register_value(t8); + } + }; + + template + class column_selector_impl + : public column_selector_base,8> + { + public: + + typedef column_selector_base,8> csb_t; + typedef column_list_impl<8> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6, T7& t7) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); csb_t::cvl().register_value(t5); + csb_t::cvl().register_value(t6); csb_t::cvl().register_value(t7); + } + }; + + template + class column_selector_impl + : public column_selector_base,7> + { + public: + + typedef column_selector_base,7> csb_t; + typedef column_list_impl<7> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, T3& t3, + T4& t4, T5& t5, T6& t6) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); csb_t::cvl().register_value(t5); + csb_t::cvl().register_value(t6); + } + }; + + template + class column_selector_impl + : public column_selector_base,6> + { + public: + + typedef column_selector_base,6> csb_t; + typedef column_list_impl<6> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, + T3& t3, T4& t4, T5& t5) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); csb_t::cvl().register_value(t5); + } + }; + + template + class column_selector_impl + : public column_selector_base,5> + { + public: + + typedef column_selector_base,5> csb_t; + typedef column_list_impl<5> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, + T3& t3, T4& t4) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + csb_t::cvl().register_value(t4); + } + }; + + template + class column_selector_impl + : public column_selector_base,4> + { + public: + + typedef column_selector_base,4> csb_t; + typedef column_list_impl<4> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2, T3& t3) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); csb_t::cvl().register_value(t3); + } + }; + + template + class column_selector_impl + : public column_selector_base,3> + { + public: + + typedef column_selector_base,3> csb_t; + typedef column_list_impl<3> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1, T2& t2) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + csb_t::cvl().register_value(t2); + } + }; + + template + class column_selector_impl + : public column_selector_base,2> + { + public: + + typedef column_selector_base,2> csb_t; + typedef column_list_impl<2> column_list_t; + + column_selector_impl(const column_list_t& column_list, + T1& t0, T1& t1) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); csb_t::cvl().register_value(t1); + } + }; + + template + class column_selector_impl + : public column_selector_base,1> + { + public: + + typedef column_selector_base,1> csb_t; + typedef column_list_impl<1> column_list_t; + + column_selector_impl(const column_list_t& column_list, T0& t0) + : csb_t(column_list) + { + csb_t::cvl().register_value(t0); + } + }; + + } + + inline details::column_list_impl<12> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6, const std::size_t& idx7, + const std::size_t& idx8, const std::size_t& idx9, + const std::size_t& idx10, const std::size_t& idx11) + { + details::column_list_impl<12> cli; + cli.index_list[ 0] = idx0; cli.index_list[ 1] = idx1; + cli.index_list[ 2] = idx2; cli.index_list[ 3] = idx3; + cli.index_list[ 4] = idx4; cli.index_list[ 5] = idx5; + cli.index_list[ 6] = idx6; cli.index_list[ 7] = idx7; + cli.index_list[ 8] = idx8; cli.index_list[ 9] = idx9; + cli.index_list[10] = idx10; cli.index_list[11] = idx11; + return cli; + } + + inline details::column_list_impl<11> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6, const std::size_t& idx7, + const std::size_t& idx8, const std::size_t& idx9, + const std::size_t& idx10) + { + details::column_list_impl<11> cli; + cli.index_list[ 0] = idx0; cli.index_list[1] = idx1; + cli.index_list[ 2] = idx2; cli.index_list[3] = idx3; + cli.index_list[ 4] = idx4; cli.index_list[5] = idx5; + cli.index_list[ 6] = idx6; cli.index_list[7] = idx7; + cli.index_list[ 8] = idx8; cli.index_list[9] = idx9; + cli.index_list[10] = idx10; + return cli; + } + + inline details::column_list_impl<10> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6, const std::size_t& idx7, + const std::size_t& idx8, const std::size_t& idx9) + { + details::column_list_impl<10> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; cli.index_list[5] = idx5; + cli.index_list[6] = idx6; cli.index_list[7] = idx7; + cli.index_list[8] = idx8; cli.index_list[9] = idx9; + return cli; + } + + inline details::column_list_impl<9> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6, const std::size_t& idx7, + const std::size_t& idx8) + { + details::column_list_impl<9> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; cli.index_list[5] = idx5; + cli.index_list[6] = idx6; cli.index_list[7] = idx7; + cli.index_list[8] = idx8; + return cli; + } + + inline details::column_list_impl<8> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6, const std::size_t& idx7) + { + details::column_list_impl<8> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; cli.index_list[5] = idx5; + cli.index_list[6] = idx6; cli.index_list[7] = idx7; + return cli; + } + + inline details::column_list_impl<7> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5, + const std::size_t& idx6) + { + details::column_list_impl<7> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; cli.index_list[5] = idx5; + cli.index_list[6] = idx6; + return cli; + } + + inline details::column_list_impl<6> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4, const std::size_t& idx5) + { + details::column_list_impl<6> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; cli.index_list[5] = idx5; + return cli; + } + + inline details::column_list_impl<5> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3, + const std::size_t& idx4) + { + details::column_list_impl<5> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + cli.index_list[4] = idx4; + return cli; + } + + inline details::column_list_impl<4> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2, const std::size_t& idx3) + { + details::column_list_impl<4> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; cli.index_list[3] = idx3; + return cli; + } + + inline details::column_list_impl<3> + column_list(const std::size_t& idx0, const std::size_t& idx1, + const std::size_t& idx2) + { + details::column_list_impl<3> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + cli.index_list[2] = idx2; + return cli; + } + + inline details::column_list_impl<2> + column_list(const std::size_t& idx0, const std::size_t& idx1) + { + details::column_list_impl<2> cli; + cli.index_list[0] = idx0; cli.index_list[1] = idx1; + return cli; + } + + inline details::column_list_impl<1> + column_list(const std::size_t& idx0) + { + details::column_list_impl<1> cli; + cli.index_list[0] = idx0; + return cli; + } + + inline details::column_list_impl<12> column_list(const std::size_t (&idx)[12]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5], + idx[6],idx[7],idx[8],idx[9],idx[10],idx[11]); + } + + inline details::column_list_impl<11> column_list(const std::size_t (&idx)[11]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5], + idx[6],idx[7],idx[8],idx[9],idx[10]); + } + + inline details::column_list_impl<10> column_list(const std::size_t (&idx)[10]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5], + idx[6],idx[7],idx[8],idx[9]); + } + + inline details::column_list_impl<9> column_list(const std::size_t (&idx)[9]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5], + idx[6],idx[7],idx[8]); + } + + inline details::column_list_impl<8> column_list(const std::size_t (&idx)[8]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5], + idx[6],idx[7]); + } + + inline details::column_list_impl<7> column_list(const std::size_t (&idx)[7]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5],idx[6]); + } + + inline details::column_list_impl<6> column_list(const std::size_t (&idx)[6]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4],idx[5]); + } + + inline details::column_list_impl<5> column_list(const std::size_t (&idx)[5]) + { + return column_list(idx[0],idx[1],idx[2],idx[3],idx[4]); + } + + inline details::column_list_impl<4> column_list(const std::size_t (&idx)[4]) + { + return column_list(idx[0],idx[1],idx[2],idx[3]); + } + + inline details::column_list_impl<3> column_list(const std::size_t (&idx)[3]) + { + return column_list(idx[0],idx[1],idx[2]); + } + + inline details::column_list_impl<2> column_list(const std::size_t (&idx)[2]) + { + return column_list(idx[0],idx[1]); + } + + inline details::column_list_impl<1> column_list(const std::size_t (&idx)[1]) + { + return column_list(idx[0]); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<11>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9, T10& t10, T11& t11) + { + return + details::column_selector_impl + + (col_list,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<11>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9, T10& t10) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<10>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5,t6,t7,t8,t9); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<9>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5,t6,t7,t8); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<8>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5,t6,t7); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<7>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5,t6); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<6>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4,t5); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<5>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3,t4); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<4>& col_list, + T0& t0, T1& t1, T2& t2, T3& t3) + { + return + details::column_selector_impl + (col_list,t0,t1,t2,t3); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<3>& col_list, + T0& t0, T1& t1, T2& t2) + { + return + details::column_selector_impl + (col_list,t0,t1,t2); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<2>& col_list, + T0& t0, T1& t1) + { + return + details::column_selector_impl + (col_list,t0,t1); + } + + template + inline typename details::column_selector_impl + column_selector(const details::column_list_impl<1>& col_list, T0& t0) + { + return + details::column_selector_impl + (col_list,t0); + } + + namespace details + { + template + inline Iterator inc(Iterator itr, const std::size_t& n) + { + std::advance(itr,n); + return itr; + } + + //Single type column selectors + template + struct compose_st_selector_impl + {}; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<1> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<2> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<3> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<4> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<5> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<6> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4],seq[5]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4),*inc(b,5)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<7> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4],seq[5],seq[6]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4),*inc(b,5),*inc(b,6)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<8> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4],seq[5],seq[6],seq[7]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4),*inc(b,5),*inc(b,6),*inc(b,7)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<9> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4],seq[5],seq[6],seq[7],seq[8]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4),*inc(b,5),*inc(b,6),*inc(b,7),*inc(b,8)); + } + }; + + template + struct compose_st_selector_impl + { + typedef column_selector_impl type; + typedef column_list_impl<10> column_list_t; + + template class Sequence> + static inline type create(const column_list_t& col_list, Sequence& seq) + { + return type(col_list,seq[0],seq[1],seq[2],seq[3],seq[4],seq[5],seq[6],seq[7],seq[8],seq[9]); + } + + template + static inline type create(const column_list_t& col_list, std::list& list) + { + typename std::list::iterator b = list.begin(); + return type(col_list,*(b),*inc(b,1),*inc(b,2),*inc(b,3),*inc(b,4),*inc(b,5),*inc(b,6),*inc(b,7),*inc(b,8),*inc(b,9)); + } + }; + + } + + template class Sequence> + inline typename details::compose_st_selector_impl::type + column_selector(const details::column_list_impl& col_list, Sequence& seq) + { + if (seq.size() >= N) + { + typedef typename details::compose_st_selector_impl composer_t; + return composer_t::create(col_list,seq); + } + else + throw std::invalid_argument("column_selector(sequence/list) - size < N!"); + } + + namespace details + { + + template + class column_selector_iterator_impl + { + public: + + typedef column_selector_iterator_impl csii_t; + typedef details::column_list_impl column_list_t; + typedef std::pair iterator_type; + typedef iterator_type* iterator_type_ptr; + + column_selector_iterator_impl(const details::column_list_impl& column_list,iterator_type (&token_list)[N]) + : column_list_(column_list), + token_list_(token_list), + current_index_(0), + target_index_(column_list_.index_list[0]), + col_list_index_(0) + {} + + inline csii_t& operator*() + { + return (*this); + } + + inline csii_t& operator++() + { + return (*this); + } + + inline csii_t operator++(int) + { + return (*this); + } + + template + inline csii_t& operator=(const std::pair& r) + { + if (current_index_ == target_index_) + { + token_list_[col_list_index_] = r; + ++col_list_index_; + if (col_list_index_ < column_list_t::size) + target_index_ = column_list_.index_list[col_list_index_]; + else + target_index_ = std::numeric_limits::max(); + } + ++current_index_; + return (*this); + } + + private: + + csii_t& operator=(const csii_t& csb); + + const column_list_t& column_list_; + iterator_type_ptr token_list_; + std::size_t current_index_; + std::size_t target_index_; + std::size_t col_list_index_; + }; + + } + + #define strtk_parse_col_token(Index) \ + if (!string_to_type_converter(token_list[Index].first,token_list[Index].second,t##Index)) return false; + + #define strtk_parse_col_token_seq(Index) \ + if (!string_to_type_converter(token_list[Index].first,token_list[Index].second,seq[Index])) return false; + + #define strtk_parse_columns_impl(NN) \ + static const std::size_t N = NN; \ + typedef typename details::is_valid_iterator::type itr_type; \ + typedef std::pair iterator_type; \ + typedef details::column_selector_iterator_impl csii_t; \ + const std::size_t token_count = (column_list.index_list[N - 1] + 1); \ + details::convert_type_assert(); \ + iterator_type token_list[N]; \ + csii_t csii(column_list,token_list); \ + const std::size_t parsed_token_count = split_n \ + (delimiters,begin,end,token_count,csii,split_options::compress_delimiters);\ + if (token_count > parsed_token_count) return false; \ + + #define strk_parse_col_seq \ + return parse_columns(to_ptr(data), to_ptr(data) + data.size(), delimiters, column_list, seq); + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<12>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9, T10& t10, T11& t11) + { + strtk_parse_columns_impl(12) + strtk_parse_col_token( 0) strtk_parse_col_token( 1) + strtk_parse_col_token( 2) strtk_parse_col_token( 3) + strtk_parse_col_token( 4) strtk_parse_col_token( 5) + strtk_parse_col_token( 6) strtk_parse_col_token( 7) + strtk_parse_col_token( 8) strtk_parse_col_token( 9) + strtk_parse_col_token(10) strtk_parse_col_token(11) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<11>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9, T10& t10) + { + strtk_parse_columns_impl(11) + strtk_parse_col_token( 0) strtk_parse_col_token(1) + strtk_parse_col_token( 2) strtk_parse_col_token(3) + strtk_parse_col_token( 4) strtk_parse_col_token(5) + strtk_parse_col_token( 6) strtk_parse_col_token(7) + strtk_parse_col_token( 8) strtk_parse_col_token(9) + strtk_parse_col_token(10) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<10>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, + T6& t6, T7& t7, T8& t8, T9& t9) + { + strtk_parse_columns_impl(10) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) strtk_parse_col_token(5) + strtk_parse_col_token(6) strtk_parse_col_token(7) + strtk_parse_col_token(8) strtk_parse_col_token(9) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<9>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, + T7& t7, T8& t8) + { + strtk_parse_columns_impl(9) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) strtk_parse_col_token(5) + strtk_parse_col_token(6) strtk_parse_col_token(7) + strtk_parse_col_token(8) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<8>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6, T7& t7) + { + strtk_parse_columns_impl(8) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) strtk_parse_col_token(5) + strtk_parse_col_token(6) strtk_parse_col_token(7) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<7>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5, T6& t6) + { + strtk_parse_columns_impl(7) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) strtk_parse_col_token(5) + strtk_parse_col_token(6) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<6>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, T5& t5) + { + strtk_parse_columns_impl(6) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) strtk_parse_col_token(5) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<5>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4) + { + strtk_parse_columns_impl(5) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + strtk_parse_col_token(4) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<4>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3) + { + strtk_parse_columns_impl(4) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) strtk_parse_col_token(3) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<3>& column_list, + T0& t0, T1& t1, T2& t2) + { + strtk_parse_columns_impl(3) + strtk_parse_col_token(0) strtk_parse_col_token(1) + strtk_parse_col_token(2) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<2>& column_list, + T0& t0, T1& t1) + { + strtk_parse_columns_impl(2) + strtk_parse_col_token(0) strtk_parse_col_token(1) + return true; + } + + template + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<1>& column_list, + T0& t0) + { + strtk_parse_columns_impl(1) + strtk_parse_col_token(0) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<12>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(12) + strtk_parse_col_token_seq( 0) strtk_parse_col_token_seq( 1) + strtk_parse_col_token_seq( 2) strtk_parse_col_token_seq( 3) + strtk_parse_col_token_seq( 4) strtk_parse_col_token_seq( 5) + strtk_parse_col_token_seq( 6) strtk_parse_col_token_seq( 7) + strtk_parse_col_token_seq( 8) strtk_parse_col_token_seq( 9) + strtk_parse_col_token_seq(10) strtk_parse_col_token_seq(11) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<11>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(11) + strtk_parse_col_token_seq( 0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq( 2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq( 4) strtk_parse_col_token_seq(5) + strtk_parse_col_token_seq( 6) strtk_parse_col_token_seq(7) + strtk_parse_col_token_seq( 8) strtk_parse_col_token_seq(9) + strtk_parse_col_token_seq(10) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<10>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(10) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) strtk_parse_col_token_seq(5) + strtk_parse_col_token_seq(6) strtk_parse_col_token_seq(7) + strtk_parse_col_token_seq(8) strtk_parse_col_token_seq(9) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<9>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(9) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) strtk_parse_col_token_seq(5) + strtk_parse_col_token_seq(6) strtk_parse_col_token_seq(7) + strtk_parse_col_token_seq(8) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<8>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(8) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) strtk_parse_col_token_seq(5) + strtk_parse_col_token_seq(6) strtk_parse_col_token_seq(7) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<7>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(7) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) strtk_parse_col_token_seq(5) + strtk_parse_col_token_seq(6) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<6>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(6) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) strtk_parse_col_token_seq(5) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<5>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(5) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + strtk_parse_col_token_seq(4) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<4>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(4) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) strtk_parse_col_token_seq(3) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<3>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(3) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + strtk_parse_col_token_seq(2) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<2>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(2) + strtk_parse_col_token_seq(0) strtk_parse_col_token_seq(1) + return true; + } + + template class Sequence> + inline bool parse_columns(const InputIterator begin, + const InputIterator end, + const std::string& delimiters, + const details::column_list_impl<1>& column_list, + Sequence& seq) + { + strtk_parse_columns_impl(1) + strtk_parse_col_token_seq(0) + return true; + } + + #undef strtk_parse_col_token + #undef strtk_parse_col_token_seq + #undef strtk_parse_columns_impl + + #define strtk_parse_col_begin() \ + return parse_columns(to_ptr(data), to_ptr(data) + data.size(), \ + delimiters, \ + column_list, \ + + #define strtk_parse_col_end() ); + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<12>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, + T10& t10, T11& t11) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<11>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, T9& t9, + T10& t10) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<10>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8, + T9& t9) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6,t7,t8,t9 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<9>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7, T8& t8) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6,t7,t8 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<8>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6, T7& t7) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6,t7 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<7>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5, T6& t6) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5,t6 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<6>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4, + T5& t5) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4,t5 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<5>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3, T4& t4) + { + strtk_parse_col_begin() + t0,t1,t2,t3,t4 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<4>& column_list, + T0& t0, T1& t1, T2& t2, T3& t3) + { + strtk_parse_col_begin() + t0,t1,t2,t3 + strtk_parse_col_end(); + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<3>& column_list, + T0& t0, T1& t1, T2& t2) + { + strtk_parse_col_begin() + t0,t1,t2 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<2>& column_list, + T0& t0, T1& t1) + { + strtk_parse_col_begin() + t0,t1 + strtk_parse_col_end() + } + + template + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<1>& column_list, + T& t) + { + strtk_parse_col_begin() + t + strtk_parse_col_end() + } + + #undef strtk_parse_col_begin + #undef strtk_parse_col_end + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<12>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<11>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<10>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<9>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<8>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<7>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<6>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<5>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<4>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<3>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<2>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + template class Sequence> + inline bool parse_columns(const std::string& data, + const std::string& delimiters, + const details::column_list_impl<1>& column_list, + Sequence& seq) + { + strk_parse_col_seq + } + + #undef strk_parse_col_seq + + namespace details + { + typedef const unsigned char* ptr; + + template + bool cmpimpl(ptr c1, ptr c2) { return (*reinterpret_cast(c1)) == (*reinterpret_cast(c2)); } + + template + struct size_impl { static inline bool cmp(ptr,ptr) { return true; } }; + + template <> + struct size_impl<8> { static inline bool cmp(ptr c1, ptr c2) { return cmpimpl(c1,c2); } }; + + template <> + struct size_impl<4> { static inline bool cmp(ptr c1, ptr c2) { return cmpimpl(c1,c2); } }; + + template <> + struct size_impl<2> { static inline bool cmp(ptr c1, ptr c2) { return cmpimpl(c1,c2); } }; + + template <> + struct size_impl<1> { static inline bool cmp(ptr c1, ptr c2) { return cmpimpl(c1,c2); } }; + + template + struct next_size { enum { size = (N >= 8) ? 8 : ((N >= 4) ? 4 : ((N >= 2) ? 2 : 1)) }; }; + + template + struct memcmp_n_impl + { + static inline bool process(details::ptr c1, details::ptr c2) + { + static const std::size_t size = details::next_size::size; + return details::size_impl::cmp(c1,c2) && memcmp_n_impl::process(c1 + size, c2 + size); + } + + static inline bool process(const char* c1, const char* c2) + { + return memcmp_n_impl::process(reinterpret_cast(c1),reinterpret_cast(c2)); + } + + template + static inline bool process(const unsigned char (&c1)[K1], const unsigned char (&c2)[K2]) + { + return memcmp_n_impl::process(static_cast(c1),static_cast(c2)); + } + }; + + template<> struct memcmp_n_impl<0> { static inline bool process(ptr,ptr) { return true; } }; + } + + template + inline bool memcmp_n(details::ptr c1, details::ptr c2) + { + return details::memcmp_n_impl::process(c1,c2); + } + + template + inline bool memcmp_n(const char* c1, const char* c2) + { + return details::memcmp_n_impl::process(c1,c2); + } + + template + inline bool memcmp_n(const unsigned char (&c1)[K1], const unsigned char (&c2)[K2]) + { + return details::memcmp_n_impl::process(c1,c2); + } + + namespace details + { + inline bool type_to_string_converter_impl(const strtk::util::value& v, std::string& result, value_type_tag) + { + return v.to_string(result); + } + } + + template + inline std::size_t distance(const std::pair& p) + { + return std::distance(p.first,p.second); + } + + template + inline std::pair make_pair(const std::string& s) + { + return std::make_pair( + reinterpret_cast(const_cast(to_ptr(s))), + reinterpret_cast(const_cast(to_ptr(s) + s.size()))); + } + + template + inline std::pair make_pair(const std::pair p) + { + return std::make_pair( + reinterpret_cast(const_cast(p.first)), + reinterpret_cast(const_cast(p.second))); + } + + template + inline std::pair make_pair(const std::string& s) + { + return make_pair(s); + } + + template + inline std::pair make_pair(const std::pair& p) + { + return make_pair(p); + } + + template + inline std::pair make_pair(const strtk::range::string& range) + { + return std::make_pair( + reinterpret_cast(const_cast(range.begin())), + reinterpret_cast(const_cast(range.end()))); + } + + template + inline std::string make_string(const unsigned char (&s)[N], const std::size_t& length = N) + { + static const std::string null_string; + if (N < length) + return null_string; + else + return std::string(&s[0],&s[0] + length); + } + + template + inline std::string make_string(const char (&s)[N], const std::size_t& length = N) + { + static const std::string null_string; + if (N < length) + return null_string; + else + return std::string(&s[0],&s[0] + length); + } + + inline std::string make_string(const std::pair& range) + { + return std::string(range.first,range.second); + } + + template + inline bool clear_array(T (&a)[N], const T& t, const std::size_t& length = N) + { + if (N < length) + return false; + else + std::fill_n(&a[0],length,t); + return true; + } + + template + inline bool set_array(unsigned char (&a)[N], + const std::string& s, + const bool pad = false, + const unsigned char padding = '0') + { + if (N < s.size()) + return false; + std::copy(to_ptr(s), to_ptr(s) + s.size(), &a[0]); + if ((s.size() < N) && pad) + std::fill_n(&a[s.size()],N - s.size(),padding); + return true; + } + + template + inline bool set_array(unsigned char (&dest)[N], + unsigned char (&src)[M], + const bool pad = false, + const unsigned char padding = '0') + { + if (N < M) + return false; + std::copy(src,src + N, &dest[0]); + if ((M < N) && pad) + std::fill_n(&dest[M],N - M,padding); + return true; + } + + inline void reverse(const std_string::iterator_type& range) + { + char* begin = const_cast(range.first); + char* end = const_cast(range.second); + std::reverse(begin,end); + } + + template + inline void reverse(const range::adapter& r) + { + T* begin = const_cast(r.begin()); + T* end = const_cast(r.end()); + std::reverse(begin,end); + } + + template + inline void reverse(const range::adapter& r) + { + T* begin = const_cast(r.begin()); + T* end = const_cast(r.end()); + std::reverse(begin,end); + } + + inline void reverse(std::string& s) + { + std::reverse(s.begin(),s.end()); + } + + inline void fill(std::string& s, const std::string::value_type v) + { + std::fill(const_cast(to_ptr(s)),const_cast(to_ptr(s) + s.size()), v); + } + + inline void fill(const std::pair& range, char v) + { + char* begin = const_cast(range.first); + char* end = const_cast(range.second); + std::fill(begin,end,v); + } + + template + inline void fill(const range::adapter& r, const typename range::adapter::value_type& v) + { + char* begin = const_cast(r.begin()); + char* end = const_cast(r.end()); + std::fill(begin,end,v); + } + + inline void fill(const std_string::iterator_type& range, const std::string::value_type& v) + { + char* begin = const_cast(range.first); + char* end = const_cast(range.second); + std::fill(begin,end,v); + } + + template class Sequence> + inline void fill(Sequence& seq, const T& t) + { + if (seq.empty()) + return; + std::fill_n(seq.begin(),seq.size(),t); + } + + namespace keyvalue + { + template + struct options + { + typedef CharType char_type; + + options() + : pair_block_delimiter(0), + pair_delimiter(0) + {} + + char_type pair_block_delimiter; + char_type pair_delimiter; + }; + + template + class parser + { + public: + + typedef unsigned char char_type; + typedef std::pair range_type; + + template + parser(const Options& opts) + : options_(opts), + parse_failures_(0), + kv_map_(opts), + pair_block_sdp_(options_.pair_block_delimiter), + pair_delimiter_sdp_(options_.pair_delimiter) + { + const std::size_t pair_list_default_size = 32; + pair_list_.reserve(pair_list_default_size); + } + + template + inline bool register_keyvalue(const typename KeyValueMap::key_type& key, T& t) + { + return kv_map_.register_keyvalue(key,t); + } + + inline bool operator()(const range_type& data, const bool ignore_failures = false) + { + if (!ignore_failures) + { + pair_list_.clear(); + const std::size_t pair_count = split(pair_block_sdp_, + data.first, + data.second, + std::back_inserter(pair_list_)); + + if (0 == pair_count) + return false; + + range_type key_range; + range_type value_range; + + for (std::size_t i = 0; i < pair_count; ++i) + { + const range_type& r = pair_list_[i]; + if (0 == std::distance(r.first,r.second)) + continue; + else if (!split_pair(r.first,r.second, + pair_delimiter_sdp_, + key_range,value_range)) + return false; + else if (!kv_map_(key_range,value_range)) + return false; + } + return true; + } + else + { + parse_failures_ = 0; + pair_token_processor processor(*this); + split(pair_block_sdp_, + data.first, + data.second, + strtk::functional_inserter(processor)); + return true; + } + } + + inline bool operator()(const std::string& s, const bool ignore_failures = false) + { + return operator()(strtk::make_pair(s),ignore_failures); + } + + inline std::size_t failure_count() const + { + return parse_failures_; + } + + private: + + class pair_token_processor + { + public: + + pair_token_processor(parser& p) + : parser_(p) + {} + + inline void operator()(const range_type& r) + { + if (r.first == r.second) + return; + + if (split_pair(r.first,r.second, + parser_.pair_delimiter_sdp_, + key_range, + value_range)) + { + if (parser_.kv_map_(key_range,value_range)) + return; + } + + ++parser_.parse_failures_; + } + + private: + + pair_token_processor operator=(const pair_token_processor&); + + parser& parser_; + range_type key_range; + range_type value_range; + }; + + options options_; + std::size_t parse_failures_; + KeyValueMap kv_map_; + single_delimiter_predicate pair_block_sdp_; + single_delimiter_predicate pair_delimiter_sdp_; + std::vector pair_list_; + }; + + class uintkey_map + { + private: + + typedef unsigned char char_type; + typedef strtk::keyvalue::options general_options; + + public: + + typedef unsigned int key_type; + + struct options : public general_options + { + options() + : general_options(), + key_count(0) + {} + + std::size_t key_count; + }; + + template + uintkey_map(const Options& options) + { + value_lut_.resize(options.key_count,strtk::util::value()); + } + + virtual ~uintkey_map() + {} + + template + inline bool operator()(const Range& key_range, const Range& value_range) + { + std::size_t key = 0; + if (!fast::numeric_convert(distance(key_range),key_range.first,key,true)) + return false; + if (key >= value_lut_.size()) + return false; + const strtk::util::value& v = value_lut_[key]; + if (!v) + return false; + else + return v(value_range); + } + + template + inline bool register_keyvalue(const key_type& key, T& t) + { + if (key < value_lut_.size()) + { + strtk::util::value& v = value_lut_[key]; + if (!v) + v = strtk::util::value(t); + else + v.assign(t); + return true; + } + else + return false; + } + + private: + + std::vector value_lut_; + }; + + namespace details + { + template + struct keygen + { + static inline KType transform(const Range&) + { + return KType(); + } + }; + + template + struct keygen + { + static inline std::string transform(const Range& key_range) + { + return std::string(key_range.first,key_range.second); + } + }; + + template + struct keygen + { + static inline unsigned int transform(const Range& key_range) + { + unsigned int result = 0; + if (strtk::fast::numeric_convert(std::distance(key_range.first,key_range.second),key_range.first,result,true)) + return result; + else + return std::numeric_limits::max(); + } + }; + + struct no_op_validator + { + template + inline bool operator()(const Range&) + { + return true; + } + }; + } + + template , + typename KeyValidator = details::no_op_validator, + typename ValueValidator = details::no_op_validator> + class key_map + { + public: + + typedef KeyType key_type; + typedef MapType map_type; + typedef KeyValidator key_validator_type; + typedef ValueValidator value_validator_type; + + template + key_map(const Options&) + {} + + virtual ~key_map() + {} + + template + inline bool operator()(const Range& key_range, const Range& value_range) + { + if (!key_validator_(key_range)) + return false; + if (!val_validator_(value_range)) + return false; + typename map_type::iterator itr = value_map_.find(details::keygen::transform(key_range)); + if (value_map_.end() == itr) + return false; + const util::value& v = (*itr).second; + if (!v) + return false; + else + return v(value_range); + } + + template + inline bool register_keyvalue(const key_type& key, T& t) + { + strtk::util::value& v = value_map_[key]; + if (!v) + v = strtk::util::value(t); + else + v.assign(t); + return true; + } + + private: + + map_type value_map_; + key_validator_type key_validator_; + value_validator_type val_validator_; + }; + + typedef key_map stringkey_map; + + } + +} // namespace strtk + +namespace +{ + + static inline std::ostream& operator<<(std::ostream& os, + const strtk::std_string::tokenizer >::type::iterator& range) + { + os << std::string((*range).first,(*range).second); + return os; + } + + static inline std::ostream& operator<<(std::ostream& os, + const strtk::std_string::tokenizer >::type::iterator& range) + { + os << std::string((*range).first,(*range).second); + return os; + } + + static inline std::ostream& operator<<(std::ostream& os, + const strtk::std_string::tokenizer::type::iterator& range) + { + os << std::string((*range).first,(*range).second); + return os; + } + + #define strtk_register_pair_to_ostream(Iterator) \ + static inline std::ostream& operator<<(std::ostream& os, const std::pair& range)\ + { os << std::string(range.first,range.second); return os; } \ + static inline std::ostream& operator<<(std::ostream& os, std::pair& range) \ + { os << std::string(range.first,range.second); return os; } \ + + strtk_register_pair_to_ostream(char*) + strtk_register_pair_to_ostream(unsigned char*) + strtk_register_pair_to_ostream(const char*) + strtk_register_pair_to_ostream(const unsigned char*) + strtk_register_pair_to_ostream(std::string::iterator) + strtk_register_pair_to_ostream(std::string::const_iterator) + strtk_register_pair_to_ostream(const std::string::iterator) + strtk_register_pair_to_ostream(const std::string::const_iterator) + + #undef strtk_register_pair_to_ostream + +} // namespace anonymous + +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + #ifndef NOMINMAX + #define NOMINMAX + #endif + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #include +#else + #include + #include +#endif +namespace strtk +{ + namespace util + { + class timer + { + public: + + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + timer() + : in_use_(false) + { + QueryPerformanceFrequency(&clock_frequency_); + } + + inline void start() + { + in_use_ = true; + QueryPerformanceCounter(&start_time_); + } + + inline void stop() + { + QueryPerformanceCounter(&stop_time_); + in_use_ = false; + } + + inline double time() const + { + return (1.0 * (stop_time_.QuadPart - start_time_.QuadPart)) / (1.0 * clock_frequency_.QuadPart); + } + + #else + + timer() + : in_use_(false) + { + start_time_.tv_sec = 0; + start_time_.tv_usec = 0; + stop_time_.tv_sec = 0; + stop_time_.tv_usec = 0; + } + + inline void start() + { + in_use_ = true; + gettimeofday(&start_time_,0); + } + + inline void stop() + { + gettimeofday(&stop_time_, 0); + in_use_ = false; + } + + inline unsigned long long int usec_time() const + { + if (!in_use_) + { + if (stop_time_.tv_sec >= start_time_.tv_sec) + { + return 1000000 * (stop_time_.tv_sec - start_time_.tv_sec ) + + (stop_time_.tv_usec - start_time_.tv_usec); + } + else + return std::numeric_limits::max(); + } + else + return std::numeric_limits::max(); + } + + inline double time() const + { + return usec_time() * 0.000001; + } + + #endif + + inline bool in_use() const + { + return in_use_; + } + + private: + + bool in_use_; + + #if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + LARGE_INTEGER start_time_; + LARGE_INTEGER stop_time_; + LARGE_INTEGER clock_frequency_; + #else + struct timeval start_time_; + struct timeval stop_time_; + #endif + }; + + class scoped_timer + { + public: + + scoped_timer(double& time_value) + : time_value_(time_value) + { + t_.start(); + } + + ~scoped_timer() + { + t_.stop(); + time_value_ = t_.time(); + } + + private: + + scoped_timer(const scoped_timer&); + scoped_timer& operator=(const scoped_timer&); + + double& time_value_; + timer t_; + }; + + } // namespace util + + namespace information + { + static const char* library = "String Toolkit"; + static const char* version = "2.718281828459045235360287471352662" + "49775724709369995957496696762772407"; + static const char* date = "20180303"; + + static inline std::string data() + { + static const std::string info_str = std::string(library) + + std::string(" v") + std::string(version) + + std::string(" (") + date + std::string(")"); + return info_str; + } + + } // namespace information + +} // namespace strtk + +#endif diff --git a/dep/tesseroids/CITATION.txt b/dep/tesseroids/CITATION.txt deleted file mode 100644 index f5b566a..0000000 --- a/dep/tesseroids/CITATION.txt +++ /dev/null @@ -1,70 +0,0 @@ -Citing -====== - -Geophysics paper ----------------- - -To cite *Tesseroids* in publications, please use our paper published in -*Geophysics*: - - Uieda, L., V. Barbosa, and C. Braitenberg (2016), Tesseroids: - Forward-modeling gravitational fields in spherical coordinates, GEOPHYSICS, - F41-F48, - doi:`10.1190/geo2015-0204.1 `__. - -You can download a copy of the `paper PDF -`__ and see all -source code used in the paper at -`the Github repository `__. - -Please note that **citing the paper is prefered** over citing the previous -conference proceedings. - -If you're a BibTeX user:: - - @article{uieda2016, - title = {Tesseroids: {{Forward}}-modeling gravitational fields in spherical coordinates}, - author = {Uieda, L. and Barbosa, V. and Braitenberg, C.}, - issn = {0016-8033}, - doi = {10.1190/geo2015-0204.1}, - url = {http://library.seg.org/doi/abs/10.1190/geo2015-0204.1}, - journal = {GEOPHYSICS}, - month = jul, - year = {2016}, - pages = {F41--F48}, - } - -Source code ------------ - -You can refer to individual versions of Tesseroids through their DOIs. -However, please **also cite the Geophysics paper**. - -For example. if you want to mention that you used the 1.1.1 version, -you can go to :ref:`the Releases page ` of the documentation -and get the DOI link for that version. -This link will not be broken, even if I move the site somewhere else. - -You can also cite the specific version instead of just providing the link. -If you click of the DOI link for 1.1.1, the Zenodo page will -recommend that you cite it as: - - Uieda, Leonardo. (2015). Tesseroids v1.1.1: Forward modeling of - gravitational fields in spherical coordinates. Zenodo. 10.5281/zenodo.15800 - - -Conference proceeding ---------------------- - -The previous way citation for Tesseroids was a conference proceeding from the -2011 GOCE User Workshop: - - Uieda, L., E. P. Bomfim, C. Braitenberg, and E. Molina (2011), - Optimal forward calculation method of the Marussi tensor - due to a geologic structure at GOCE height, - Proceedings of the 4th International GOCE User Workshop. - -Download a `PDF version of the proceedings -`__. -You can also see the poster and source code at -the `Github repository `__. diff --git a/dep/tesseroids/CMakeLists.txt b/dep/tesseroids/CMakeLists.txt deleted file mode 100644 index 933b11d..0000000 --- a/dep/tesseroids/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -cmake_minimum_required(VERSION 3.15.2) -# 设置项目名称与语言 -project(LibTess VERSION 1.6 LANGUAGES C) -# 添加配置配件编写的函数 -include(CMakePackageConfigHelpers) - -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows") - set(CMAKE_INSTALL_PREFIX D:/Library) -endif() - -message(STATUS "Platform: " ${CMAKE_HOST_SYSTEM_NAME}) -message(STATUS "Install prefix: " ${CMAKE_INSTALL_PREFIX}) -message(STATUS "Build type: " ${CMAKE_BUILD_TYPE}) - -# 添加库源文件地址 -add_subdirectory(lib) -add_subdirectory(toolkits) -add_subdirectory(test) \ No newline at end of file diff --git a/dep/tesseroids/LICENSE.txt b/dep/tesseroids/LICENSE.txt deleted file mode 100644 index 8909ec4..0000000 --- a/dep/tesseroids/LICENSE.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2012-2017, Leonardo Uieda -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of Leonardo Uieda nor the names of any contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/dep/tesseroids/LibTessConfig.cmake.in b/dep/tesseroids/LibTessConfig.cmake.in deleted file mode 100644 index f74cfdd..0000000 --- a/dep/tesseroids/LibTessConfig.cmake.in +++ /dev/null @@ -1,16 +0,0 @@ -@PACKAGE_INIT@ - -set(@PROJECT_NAME@_VERSION "@PROJECT_VERSION@") -set_and_check(@PROJECT_NAME@_INSTALL_PREFIX "${PACKAGE_PREFIX_DIR}") -set_and_check(@PROJECT_NAME@_INC_DIR "${PACKAGE_PREFIX_DIR}/include") -set_and_check(@PROJECT_NAME@_INCULDE_DIR "${PACKAGE_PREFIX_DIR}/include") -set_and_check(@PROJECT_NAME@_LIB_DIR "${PACKAGE_PREFIX_DIR}/lib") -set_and_check(@PROJECT_NAME@_LIBRARY_DIR "${PACKAGE_PREFIX_DIR}/lib") - -set(@PROJECT_NAME@_LIB tess) -set(@PROJECT_NAME@_LIBRARY tess) - -# include target information -include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake") - -check_required_components(@PROJECT_NAME@) \ No newline at end of file diff --git a/dep/tesseroids/README.md b/dep/tesseroids/README.md deleted file mode 100644 index 3e08a88..0000000 --- a/dep/tesseroids/README.md +++ /dev/null @@ -1,210 +0,0 @@ -# ![Tesseroids](https://raw.githubusercontent.com/leouieda/tesseroids/master/doc/_static/banner.png) - -[Documentation](http://tesseroids.leouieda.com) | -[Download](https://github.com/leouieda/tesseroids/releases) - -[![Version number](http://img.shields.io/github/release/leouieda/tesseroids.svg?style=flat)](https://github.com/leouieda/tesseroids/releases) -[![Travis CI build status](http://img.shields.io/travis/leouieda/tesseroids/master.svg?style=flat)](https://travis-ci.org/leouieda/tesseroids) -[![BSD license](http://img.shields.io/badge/license-BSD-lightgrey.svg?style=flat)](https://github.com/leouieda/tesseroids/blob/master/LICENSE.txt) -[![DOI](https://zenodo.org/badge/doi/10.5281/zenodo.582366.svg)](http://dx.doi.org/10.5281/zenodo.582366) - - -*Forward modeling of gravitational fields in spherical coordinates.* - -Developed by [Leonardo Uieda](http://www.leouieda.com) -in cooperation with [Carla Braitenberg](http://lithoflex.org/). - -## About - -*Tesseroids* is a collection of **command-line tools** -for modeling the gravitational potential, acceleration, and -gradient (Marussi) tensor. - -The mass models can be made of right rectangular prisms or tesseroids -(spherical prisms). -Computation for rectangular prisms can be made in Cartesian or spherical -(geocentric) coordinates. - -[![This is a tesseroid.](https://raw.githubusercontent.com/leouieda/tesseroids/master/doc/_static/tesseroid.png)](http://tesseroids.leouieda.com/en/latest/theory.html#what-is-a-tesseroid-anyway) - -## License - -*Tesseroids* is [free software](http://www.fsf.org/about/what-is-free-software) -made available under the terms of the -BSD 3-clause license. -See [LICENSE.txt](https://github.com/leouieda/tesseroids/blob/master/LICENSE.txt). - -## Citing - -*Tesseroids* is research software made by scientists. -If you use it in your research, -please **cite** our *Geophysics* paper in your publications: - -> Uieda, L., V. Barbosa, and C. Braitenberg (2016), Tesseroids: Forward-modeling gravitational fields in spherical coordinates, GEOPHYSICS, F41-F48, doi:[10.1190/geo2015-0204.1](http://dx.doi.org/10.1190/geo2015-0204.1). - -You can download a copy of the paper PDF at -[leouieda.com/papers/paper-tesseroids-2016.html](http://www.leouieda.com/papers/paper-tesseroids-2016.html) -and see all source code used in the paper at the Github repository -[pinga-lab/paper-tesseroids](https://github.com/pinga-lab/paper-tesseroids). - -See [CITATION.txt](https://github.com/leouieda/tesseroids/blob/master/CITATION.txt) -or the [Citing](http://tesseroids.leouieda.com/en/latest/citation.html) -page of the documentation for more information. - -## Installing - -The easiest way to install is to download the latest compiled binary -distribution from: - -https://github.com/leouieda/tesseroids/releases/latest - -We offer binaries for Windows (32 and 64 bit) -and GNU/Linux (32 and 64 bit). - -Once downloaded, simply unpack the archive in the desired directory. -The executables will be in the `bin` folder. -For easier access to the programs, consider -[adding the bin folder to your PATH environment -variable](http://www.computerhope.com/issues/ch000549.htm). - -## Getting started - -Take a look at the examples in the -[Cookbook](http://tesseroids.leouieda.com/en/latest/cookbook.html). -They contain scripts that run *Tesseroids* and some Python code to plot the -results. - -The documentation contains sections on -[the theory and equations](http://tesseroids.leouieda.com/en/latest/theory.html) -and [usage instructions](http://tesseroids.leouieda.com/en/latest/usage.html). - -Also, all programs accept the `-h` flag to print the instructions for using -that particular program. For example: - - $ tessgrd -h - Usage: tessgrd [PARAMS] [OPTIONS] - - Make a regular grid of points. - - All units either SI or degrees! - - Output: - Printed to standard output (stdout) in the format: - lon1 lat1 height - lon2 lat1 height - ... ... ... - lonNLON lat1 height - lon1 lat2 height - ... ... ... - ... ... ... - lonNLON latNLAT height - - * Comments about the provenance of the data are inserted into - the top of the output - - Parameters: - -r W/E/S/N: Bounding region of the grid. - -b NLON/NLAT: Number of grid points in the - longitudinal and latitudinal directions. - -z HEIGHT: Height of the grid with respect to the - mean Earth radius. - -h Print instructions. - --version Print version and license information. - - Options: - -v Enable verbose printing to stderr. - -lFILENAME Print log messages to file FILENAME. - - Part of the Tesseroids package. - Project site: - Report bugs at: - - -## Getting help - -Write an e-mail to [Leonardo Uieda](http://www.leouieda.com/), -or [tweet](https://twitter.com/leouieda), -or [Google Hangout](https://plus.google.com/+LeonardoUieda). -**Even better**, submit a bug report/feature request/question to the -[Github issue tracker](https://github.com/leouieda/tesseroids/issues). - -## Compiling from source - -If you want to build *Tesseroids* from source, you'll need: - -* A C compiler (preferably [GCC](http://gcc.gnu.org)) -* The build tool [SCons](http://www.scons.org/) - -### Setting up SCons - -Tesseroids uses the build tool SCons. -A `SConstruct` file (`Makefile` equivalent) -is used to define the compilation rules. -The advantage of SCons over Make is that it automatically detects your system -settings. -You will have to download and install SCons -in order to easily compile Tesseroids. -SCons is available for both GNU/Linux and Windows -so compiling should work the same on both platforms. - -SCons requires that you have [Python](http://www.python.org) installed. -Follow the instructions in the [SCons website](http://www.scons.org/) -to install it. -Python is usually installed by default on most GNU/Linux systems. - -Under Windows you will have to put SCons on -your `PATH` environment variable -in order to use it from the command line. -It is usually located in the `Scripts` directory of your Python installation. - -On GNU/Linux, SCons will generally use -the GCC compiler to compile sources. -On Windows it will search for an existing compiler. -We recommend that you install GCC on Windows using -[MinGW](http://mingw.org/). - -### Compiling - -Download a source distribution and -unpack the archive anywhere you want -(e.g., `~/tesseroids` or `C:\tesseroids` or whatever). -To compile, -open a terminal (or `cmd.exe` on Windows) -and go to the directory where you unpacked (use the `cd` command). -Then, type the following and hit `Enter`: - - scons - -If everything goes well, the compiled executables will be placed on a `bin` -folder. - -To clean up the build (delete all generated files), run: - - scons -c - -If you get any strange errors or the code doesn't compile for some reason, -please [submit a bug report](https://github.com/leouieda/tesseroids/issues). -Don't forget to copy the output of running `scons`. - -### Testing the build - -After the compilation, -a program called `tesstest` -will be placed in the directory where you unpacked the source. -This program runs the [unit tests](https://en.wikipedia.org/wiki/Unit_testing) -for *Tesseroids* (sources in the `test` directory). - -To run the test suite, simply execute `tesstest` with no arguments: - - tesstest - -or on GNU/Linux: - - ./tesstest - -A summary of all tests (pass or fail) will be printed on the screen. -If all tests pass, -the compilation probably went well. -If any test fail, -please [submit a bug report](https://github.com/leouieda/tesseroids/issues) -with the output of running `tesstest`. diff --git a/dep/tesseroids/cookbook/custom_ratio/custom_ratio.bat b/dep/tesseroids/cookbook/custom_ratio/custom_ratio.bat deleted file mode 100755 index 20efcb5..0000000 --- a/dep/tesseroids/cookbook/custom_ratio/custom_ratio.bat +++ /dev/null @@ -1,10 +0,0 @@ -:: Calculate effect of the model at a low height using difference distance-size -:: ratios for the recursive division of tesseroids. -:: WARNING: This is only an example. You should not use the -t option in -:: practice - -tessgrd -r-3/3/-3/3 -b50/50 -z4e03 | ^ -tessgzz model.txt -t0.0001 -lratio1.log | ^ -tessgzz model.txt -t0.5 -lratio2.log | ^ -tessgzz model.txt -t1 -lratio3.log | ^ -tessgzz model.txt -v -lratio-default.log > output.txt diff --git a/dep/tesseroids/cookbook/custom_ratio/custom_ratio.sh b/dep/tesseroids/cookbook/custom_ratio/custom_ratio.sh deleted file mode 100755 index 75babdb..0000000 --- a/dep/tesseroids/cookbook/custom_ratio/custom_ratio.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# Calculate effect of the model at a low height using difference distance-size -# ratios for the recursive division of tesseroids. -# WARNING: This is only an example. You should not use the -t option in practice - -tessgrd -r-3/3/-3/3 -b50/50 -z4e03 | \ -tessgzz model.txt -t0.0001 -lratio1.log | \ -tessgzz model.txt -t0.5 -lratio2.log | \ -tessgzz model.txt -t1 -lratio3.log | \ -tessgzz model.txt -v -lratio-default.log > output.txt diff --git a/dep/tesseroids/cookbook/custom_ratio/model.txt b/dep/tesseroids/cookbook/custom_ratio/model.txt deleted file mode 100755 index 91daac8..0000000 --- a/dep/tesseroids/cookbook/custom_ratio/model.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Test tesseroid model file --1.5 1.5 -1.5 1.5 0 -5000 200 diff --git a/dep/tesseroids/cookbook/custom_ratio/plot.py b/dep/tesseroids/cookbook/custom_ratio/plot.py deleted file mode 100755 index d440c95..0000000 --- a/dep/tesseroids/cookbook/custom_ratio/plot.py +++ /dev/null @@ -1,18 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -from matplotlib import pyplot as plt -import numpy as np - -data = np.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = np.reshape(data[0], shape) -lat = np.reshape(data[1], shape) -for i, value in enumerate(data[3:]): - value = np.reshape(value, shape) - plt.figure(figsize=(4, 3)) - plt.title("Column %d" % (i + 4)) - plt.contourf(lon, lat, value, 50) - plt.colorbar() - plt.savefig('column%d.png' % (i + 4)) diff --git a/dep/tesseroids/cookbook/dem_brasil/dem.xyz b/dep/tesseroids/cookbook/dem_brasil/dem.xyz deleted file mode 100755 index bef68d7..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/dem.xyz +++ /dev/null @@ -1,22805 +0,0 @@ -# This is the DEM file from ETOPO1 with 10' resolution -# points in longitude: 151 -# Columns: -# lon lat height(m) --65.000000 -10.000000 157 - -64.833333 -10.000000 168 - -64.666667 -10.000000 177 - -64.500000 -10.000000 197 - -64.333333 -10.000000 144 - -64.166667 -10.000000 178 - -64.000000 -10.000000 166 - -63.833333 -10.000000 164 - -63.666667 -10.000000 189 - -63.500000 -10.000000 210 - -63.333333 -10.000000 187 - -63.166667 -10.000000 141 - -63.000000 -10.000000 156 - -62.833333 -10.000000 158 - -62.666667 -10.000000 225 - -62.500000 -10.000000 176 - -62.333333 -10.000000 196 - -62.166667 -10.000000 183 - -62.000000 -10.000000 149 - -61.833333 -10.000000 191 - -61.666667 -10.000000 158 - -61.500000 -10.000000 187 - -61.333333 -10.000000 189 - -61.166667 -10.000000 191 - -61.000000 -10.000000 169 - -60.833333 -10.000000 143 - -60.666667 -10.000000 157 - -60.500000 -10.000000 146 - -60.333333 -10.000000 188 - -60.166667 -10.000000 178 - -60.000000 -10.000000 198 - -59.833333 -10.000000 233 - -59.666667 -10.000000 211 - -59.500000 -10.000000 189 - -59.333333 -10.000000 145 - -59.166667 -10.000000 138 - -59.000000 -10.000000 142 - -58.833333 -10.000000 172 - -58.666667 -10.000000 215 - -58.500000 -10.000000 287 - -58.333333 -10.000000 254 - -58.166667 -10.000000 234 - -58.000000 -10.000000 277 - -57.833333 -10.000000 273 - -57.666667 -10.000000 245 - -57.500000 -10.000000 270 - -57.333333 -10.000000 269 - -57.166667 -10.000000 253 - -57.000000 -10.000000 223 - -56.833333 -10.000000 248 - -56.666667 -10.000000 253 - -56.500000 -10.000000 271 - -56.333333 -10.000000 277 - -56.166667 -10.000000 301 - -56.000000 -10.000000 282 - -55.833333 -10.000000 285 - -55.666667 -10.000000 275 - -55.500000 -10.000000 263 - -55.333333 -10.000000 277 - -55.166667 -10.000000 269 - -55.000000 -10.000000 261 - -54.833333 -10.000000 311 - -54.666667 -10.000000 302 - -54.500000 -10.000000 312 - -54.333333 -10.000000 407 - -54.166667 -10.000000 353 - -54.000000 -10.000000 337 - -53.833333 -10.000000 364 - -53.666667 -10.000000 305 - -53.500000 -10.000000 341 - -53.333333 -10.000000 302 - -53.166667 -10.000000 327 - -53.000000 -10.000000 326 - -52.833333 -10.000000 301 - -52.666667 -10.000000 325 - -52.500000 -10.000000 288 - -52.333333 -10.000000 271 - -52.166667 -10.000000 285 - -52.000000 -10.000000 295 - -51.833333 -10.000000 308 - -51.666667 -10.000000 380 - -51.500000 -10.000000 375 - -51.333333 -10.000000 352 - -51.166667 -10.000000 261 - -51.000000 -10.000000 223 - -50.833333 -10.000000 198 - -50.666667 -10.000000 197 - -50.500000 -10.000000 185 - -50.333333 -10.000000 175 - -50.166667 -10.000000 177 - -50.000000 -10.000000 171 - -49.833333 -10.000000 186 - -49.666667 -10.000000 179 - -49.500000 -10.000000 195 - -49.333333 -10.000000 196 - -49.166667 -10.000000 261 - -49.000000 -10.000000 276 - -48.833333 -10.000000 339 - -48.666667 -10.000000 295 - -48.500000 -10.000000 238 - -48.333333 -10.000000 207 - -48.166667 -10.000000 569 - -48.000000 -10.000000 318 - -47.833333 -10.000000 243 - -47.666667 -10.000000 312 - -47.500000 -10.000000 248 - -47.333333 -10.000000 287 - -47.166667 -10.000000 280 - -47.000000 -10.000000 280 - -46.833333 -10.000000 333 - -46.666667 -10.000000 471 - -46.500000 -10.000000 620 - -46.333333 -10.000000 444 - -46.166667 -10.000000 462 - -46.000000 -10.000000 521 - -45.833333 -10.000000 445 - -45.666667 -10.000000 454 - -45.500000 -10.000000 481 - -45.333333 -10.000000 496 - -45.166667 -10.000000 487 - -45.000000 -10.000000 430 - -44.833333 -10.000000 476 - -44.666667 -10.000000 364 - -44.500000 -10.000000 370 - -44.333333 -10.000000 359 - -44.166667 -10.000000 374 - -44.000000 -10.000000 389 - -43.833333 -10.000000 462 - -43.666667 -10.000000 547 - -43.500000 -10.000000 470 - -43.333333 -10.000000 480 - -43.166667 -10.000000 438 - -43.000000 -10.000000 421 - -42.833333 -10.000000 412 - -42.666667 -10.000000 408 - -42.500000 -10.000000 402 - -42.333333 -10.000000 395 - -42.166667 -10.000000 403 - -42.000000 -10.000000 621 - -41.833333 -10.000000 829 - -41.666667 -10.000000 611 - -41.500000 -10.000000 455 - -41.333333 -10.000000 748 - -41.166667 -10.000000 822 - -41.000000 -10.000000 754 - -40.833333 -10.000000 604 - -40.666667 -10.000000 527 - -40.500000 -10.000000 712 - -40.333333 -10.000000 578 - -40.166667 -10.000000 486 - -40.000000 -10.000000 461 - -65.000000 -10.166667 179 - -64.833333 -10.166667 177 - -64.666667 -10.166667 192 - -64.500000 -10.166667 173 - -64.333333 -10.166667 162 - -64.166667 -10.166667 159 - -64.000000 -10.166667 162 - -63.833333 -10.166667 167 - -63.666667 -10.166667 182 - -63.500000 -10.166667 191 - -63.333333 -10.166667 167 - -63.166667 -10.166667 148 - -63.000000 -10.166667 181 - -62.833333 -10.166667 134 - -62.666667 -10.166667 244 - -62.500000 -10.166667 222 - -62.333333 -10.166667 201 - -62.166667 -10.166667 155 - -62.000000 -10.166667 142 - -61.833333 -10.166667 170 - -61.666667 -10.166667 207 - -61.500000 -10.166667 325 - -61.333333 -10.166667 254 - -61.166667 -10.166667 233 - -61.000000 -10.166667 182 - -60.833333 -10.166667 153 - -60.666667 -10.166667 130 - -60.500000 -10.166667 158 - -60.333333 -10.166667 172 - -60.166667 -10.166667 164 - -60.000000 -10.166667 243 - -59.833333 -10.166667 204 - -59.666667 -10.166667 160 - -59.500000 -10.166667 241 - -59.333333 -10.166667 244 - -59.166667 -10.166667 174 - -59.000000 -10.166667 175 - -58.833333 -10.166667 179 - -58.666667 -10.166667 249 - -58.500000 -10.166667 235 - -58.333333 -10.166667 205 - -58.166667 -10.166667 229 - -58.000000 -10.166667 249 - -57.833333 -10.166667 299 - -57.666667 -10.166667 269 - -57.500000 -10.166667 288 - -57.333333 -10.166667 308 - -57.166667 -10.166667 295 - -57.000000 -10.166667 265 - -56.833333 -10.166667 287 - -56.666667 -10.166667 291 - -56.500000 -10.166667 271 - -56.333333 -10.166667 289 - -56.166667 -10.166667 312 - -56.000000 -10.166667 279 - -55.833333 -10.166667 285 - -55.666667 -10.166667 283 - -55.500000 -10.166667 287 - -55.333333 -10.166667 251 - -55.166667 -10.166667 249 - -55.000000 -10.166667 267 - -54.833333 -10.166667 269 - -54.666667 -10.166667 356 - -54.500000 -10.166667 374 - -54.333333 -10.166667 466 - -54.166667 -10.166667 375 - -54.000000 -10.166667 386 - -53.833333 -10.166667 366 - -53.666667 -10.166667 356 - -53.500000 -10.166667 314 - -53.333333 -10.166667 337 - -53.166667 -10.166667 293 - -53.000000 -10.166667 267 - -52.833333 -10.166667 325 - -52.666667 -10.166667 306 - -52.500000 -10.166667 322 - -52.333333 -10.166667 307 - -52.166667 -10.166667 305 - -52.000000 -10.166667 271 - -51.833333 -10.166667 300 - -51.666667 -10.166667 295 - -51.500000 -10.166667 310 - -51.333333 -10.166667 364 - -51.166667 -10.166667 245 - -51.000000 -10.166667 203 - -50.833333 -10.166667 246 - -50.666667 -10.166667 220 - -50.500000 -10.166667 178 - -50.333333 -10.166667 174 - -50.166667 -10.166667 173 - -50.000000 -10.166667 182 - -49.833333 -10.166667 183 - -49.666667 -10.166667 192 - -49.500000 -10.166667 205 - -49.333333 -10.166667 205 - -49.166667 -10.166667 267 - -49.000000 -10.166667 260 - -48.833333 -10.166667 471 - -48.666667 -10.166667 386 - -48.500000 -10.166667 271 - -48.333333 -10.166667 259 - -48.166667 -10.166667 668 - -48.000000 -10.166667 393 - -47.833333 -10.166667 300 - -47.666667 -10.166667 356 - -47.500000 -10.166667 309 - -47.333333 -10.166667 257 - -47.166667 -10.166667 361 - -47.000000 -10.166667 322 - -46.833333 -10.166667 335 - -46.666667 -10.166667 379 - -46.500000 -10.166667 494 - -46.333333 -10.166667 610 - -46.166667 -10.166667 694 - -46.000000 -10.166667 755 - -45.833333 -10.166667 441 - -45.666667 -10.166667 805 - -45.500000 -10.166667 489 - -45.333333 -10.166667 601 - -45.166667 -10.166667 505 - -45.000000 -10.166667 465 - -44.833333 -10.166667 397 - -44.666667 -10.166667 370 - -44.500000 -10.166667 379 - -44.333333 -10.166667 634 - -44.166667 -10.166667 407 - -44.000000 -10.166667 496 - -43.833333 -10.166667 494 - -43.666667 -10.166667 533 - -43.500000 -10.166667 486 - -43.333333 -10.166667 528 - -43.166667 -10.166667 468 - -43.000000 -10.166667 462 - -42.833333 -10.166667 433 - -42.666667 -10.166667 405 - -42.500000 -10.166667 394 - -42.333333 -10.166667 446 - -42.166667 -10.166667 396 - -42.000000 -10.166667 401 - -41.833333 -10.166667 448 - -41.666667 -10.166667 432 - -41.500000 -10.166667 683 - -41.333333 -10.166667 873 - -41.166667 -10.166667 1153 - -41.000000 -10.166667 696 - -40.833333 -10.166667 528 - -40.666667 -10.166667 554 - -40.500000 -10.166667 767 - -40.333333 -10.166667 804 - -40.166667 -10.166667 645 - -40.000000 -10.166667 485 - -65.000000 -10.333333 161 - -64.833333 -10.333333 173 - -64.666667 -10.333333 203 - -64.500000 -10.333333 154 - -64.333333 -10.333333 218 - -64.166667 -10.333333 169 - -64.000000 -10.333333 215 - -63.833333 -10.333333 188 - -63.666667 -10.333333 160 - -63.500000 -10.333333 253 - -63.333333 -10.333333 170 - -63.166667 -10.333333 150 - -63.000000 -10.333333 165 - -62.833333 -10.333333 177 - -62.666667 -10.333333 228 - -62.500000 -10.333333 169 - -62.333333 -10.333333 142 - -62.166667 -10.333333 155 - -62.000000 -10.333333 181 - -61.833333 -10.333333 136 - -61.666667 -10.333333 260 - -61.500000 -10.333333 225 - -61.333333 -10.333333 301 - -61.166667 -10.333333 206 - -61.000000 -10.333333 146 - -60.833333 -10.333333 173 - -60.666667 -10.333333 162 - -60.500000 -10.333333 166 - -60.333333 -10.333333 175 - -60.166667 -10.333333 198 - -60.000000 -10.333333 314 - -59.833333 -10.333333 228 - -59.666667 -10.333333 220 - -59.500000 -10.333333 264 - -59.333333 -10.333333 320 - -59.166667 -10.333333 430 - -59.000000 -10.333333 383 - -58.833333 -10.333333 190 - -58.666667 -10.333333 226 - -58.500000 -10.333333 238 - -58.333333 -10.333333 217 - -58.166667 -10.333333 275 - -58.000000 -10.333333 315 - -57.833333 -10.333333 360 - -57.666667 -10.333333 377 - -57.500000 -10.333333 437 - -57.333333 -10.333333 341 - -57.166667 -10.333333 451 - -57.000000 -10.333333 284 - -56.833333 -10.333333 301 - -56.666667 -10.333333 309 - -56.500000 -10.333333 300 - -56.333333 -10.333333 347 - -56.166667 -10.333333 297 - -56.000000 -10.333333 290 - -55.833333 -10.333333 280 - -55.666667 -10.333333 253 - -55.500000 -10.333333 272 - -55.333333 -10.333333 297 - -55.166667 -10.333333 267 - -55.000000 -10.333333 282 - -54.833333 -10.333333 263 - -54.666667 -10.333333 288 - -54.500000 -10.333333 280 - -54.333333 -10.333333 330 - -54.166667 -10.333333 457 - -54.000000 -10.333333 469 - -53.833333 -10.333333 342 - -53.666667 -10.333333 344 - -53.500000 -10.333333 322 - -53.333333 -10.333333 341 - -53.166667 -10.333333 312 - -53.000000 -10.333333 268 - -52.833333 -10.333333 292 - -52.666667 -10.333333 318 - -52.500000 -10.333333 306 - -52.333333 -10.333333 283 - -52.166667 -10.333333 259 - -52.000000 -10.333333 264 - -51.833333 -10.333333 269 - -51.666667 -10.333333 319 - -51.500000 -10.333333 297 - -51.333333 -10.333333 300 - -51.166667 -10.333333 235 - -51.000000 -10.333333 220 - -50.833333 -10.333333 233 - -50.666667 -10.333333 198 - -50.500000 -10.333333 180 - -50.333333 -10.333333 176 - -50.166667 -10.333333 174 - -50.000000 -10.333333 175 - -49.833333 -10.333333 179 - -49.666667 -10.333333 186 - -49.500000 -10.333333 201 - -49.333333 -10.333333 202 - -49.166667 -10.333333 293 - -49.000000 -10.333333 345 - -48.833333 -10.333333 357 - -48.666667 -10.333333 245 - -48.500000 -10.333333 239 - -48.333333 -10.333333 245 - -48.166667 -10.333333 563 - -48.000000 -10.333333 373 - -47.833333 -10.333333 353 - -47.666667 -10.333333 341 - -47.500000 -10.333333 329 - -47.333333 -10.333333 330 - -47.166667 -10.333333 387 - -47.000000 -10.333333 421 - -46.833333 -10.333333 369 - -46.666667 -10.333333 408 - -46.500000 -10.333333 446 - -46.333333 -10.333333 631 - -46.166667 -10.333333 745 - -46.000000 -10.333333 798 - -45.833333 -10.333333 785 - -45.666667 -10.333333 793 - -45.500000 -10.333333 806 - -45.333333 -10.333333 515 - -45.166667 -10.333333 523 - -45.000000 -10.333333 452 - -44.833333 -10.333333 403 - -44.666667 -10.333333 393 - -44.500000 -10.333333 427 - -44.333333 -10.333333 524 - -44.166667 -10.333333 515 - -44.000000 -10.333333 555 - -43.833333 -10.333333 605 - -43.666667 -10.333333 645 - -43.500000 -10.333333 510 - -43.333333 -10.333333 514 - -43.166667 -10.333333 529 - -43.000000 -10.333333 509 - -42.833333 -10.333333 462 - -42.666667 -10.333333 422 - -42.500000 -10.333333 435 - -42.333333 -10.333333 396 - -42.166667 -10.333333 403 - -42.000000 -10.333333 410 - -41.833333 -10.333333 411 - -41.666667 -10.333333 561 - -41.500000 -10.333333 1131 - -41.333333 -10.333333 1003 - -41.166667 -10.333333 910 - -41.000000 -10.333333 752 - -40.833333 -10.333333 526 - -40.666667 -10.333333 563 - -40.500000 -10.333333 791 - -40.333333 -10.333333 731 - -40.166667 -10.333333 593 - -40.000000 -10.333333 435 - -65.000000 -10.500000 157 - -64.833333 -10.500000 167 - -64.666667 -10.500000 191 - -64.500000 -10.500000 192 - -64.333333 -10.500000 230 - -64.166667 -10.500000 296 - -64.000000 -10.500000 161 - -63.833333 -10.500000 259 - -63.666667 -10.500000 189 - -63.500000 -10.500000 268 - -63.333333 -10.500000 178 - -63.166667 -10.500000 186 - -63.000000 -10.500000 319 - -62.833333 -10.500000 231 - -62.666667 -10.500000 208 - -62.500000 -10.500000 166 - -62.333333 -10.500000 201 - -62.166667 -10.500000 178 - -62.000000 -10.500000 203 - -61.833333 -10.500000 203 - -61.666667 -10.500000 214 - -61.500000 -10.500000 240 - -61.333333 -10.500000 251 - -61.166667 -10.500000 170 - -61.000000 -10.500000 195 - -60.833333 -10.500000 202 - -60.666667 -10.500000 178 - -60.500000 -10.500000 216 - -60.333333 -10.500000 347 - -60.166667 -10.500000 298 - -60.000000 -10.500000 257 - -59.833333 -10.500000 269 - -59.666667 -10.500000 282 - -59.500000 -10.500000 274 - -59.333333 -10.500000 300 - -59.166667 -10.500000 394 - -59.000000 -10.500000 433 - -58.833333 -10.500000 356 - -58.666667 -10.500000 238 - -58.500000 -10.500000 341 - -58.333333 -10.500000 244 - -58.166667 -10.500000 271 - -58.000000 -10.500000 350 - -57.833333 -10.500000 381 - -57.666667 -10.500000 394 - -57.500000 -10.500000 367 - -57.333333 -10.500000 313 - -57.166667 -10.500000 324 - -57.000000 -10.500000 323 - -56.833333 -10.500000 336 - -56.666667 -10.500000 319 - -56.500000 -10.500000 397 - -56.333333 -10.500000 338 - -56.166667 -10.500000 319 - -56.000000 -10.500000 265 - -55.833333 -10.500000 269 - -55.666667 -10.500000 264 - -55.500000 -10.500000 286 - -55.333333 -10.500000 264 - -55.166667 -10.500000 284 - -55.000000 -10.500000 350 - -54.833333 -10.500000 416 - -54.666667 -10.500000 283 - -54.500000 -10.500000 312 - -54.333333 -10.500000 401 - -54.166667 -10.500000 439 - -54.000000 -10.500000 444 - -53.833333 -10.500000 378 - -53.666667 -10.500000 349 - -53.500000 -10.500000 315 - -53.333333 -10.500000 294 - -53.166667 -10.500000 314 - -53.000000 -10.500000 308 - -52.833333 -10.500000 302 - -52.666667 -10.500000 301 - -52.500000 -10.500000 309 - -52.333333 -10.500000 284 - -52.166667 -10.500000 266 - -52.000000 -10.500000 293 - -51.833333 -10.500000 280 - -51.666667 -10.500000 222 - -51.500000 -10.500000 318 - -51.333333 -10.500000 404 - -51.166667 -10.500000 409 - -51.000000 -10.500000 225 - -50.833333 -10.500000 279 - -50.666667 -10.500000 227 - -50.500000 -10.500000 176 - -50.333333 -10.500000 176 - -50.166667 -10.500000 176 - -50.000000 -10.500000 177 - -49.833333 -10.500000 178 - -49.666667 -10.500000 183 - -49.500000 -10.500000 193 - -49.333333 -10.500000 205 - -49.166667 -10.500000 265 - -49.000000 -10.500000 314 - -48.833333 -10.500000 268 - -48.666667 -10.500000 512 - -48.500000 -10.500000 337 - -48.333333 -10.500000 237 - -48.166667 -10.500000 367 - -48.000000 -10.500000 481 - -47.833333 -10.500000 288 - -47.666667 -10.500000 366 - -47.500000 -10.500000 342 - -47.333333 -10.500000 354 - -47.166667 -10.500000 322 - -47.000000 -10.500000 482 - -46.833333 -10.500000 411 - -46.666667 -10.500000 427 - -46.500000 -10.500000 495 - -46.333333 -10.500000 613 - -46.166667 -10.500000 748 - -46.000000 -10.500000 722 - -45.833333 -10.500000 775 - -45.666667 -10.500000 775 - -45.500000 -10.500000 798 - -45.333333 -10.500000 661 - -45.166667 -10.500000 470 - -45.000000 -10.500000 440 - -44.833333 -10.500000 406 - -44.666667 -10.500000 454 - -44.500000 -10.500000 478 - -44.333333 -10.500000 673 - -44.166667 -10.500000 508 - -44.000000 -10.500000 630 - -43.833333 -10.500000 612 - -43.666667 -10.500000 655 - -43.500000 -10.500000 505 - -43.333333 -10.500000 576 - -43.166667 -10.500000 541 - -43.000000 -10.500000 491 - -42.833333 -10.500000 486 - -42.666667 -10.500000 496 - -42.500000 -10.500000 411 - -42.333333 -10.500000 404 - -42.166667 -10.500000 408 - -42.000000 -10.500000 416 - -41.833333 -10.500000 437 - -41.666667 -10.500000 830 - -41.500000 -10.500000 1016 - -41.333333 -10.500000 825 - -41.166667 -10.500000 938 - -41.000000 -10.500000 550 - -40.833333 -10.500000 531 - -40.666667 -10.500000 623 - -40.500000 -10.500000 824 - -40.333333 -10.500000 565 - -40.166667 -10.500000 477 - -40.000000 -10.500000 408 - -65.000000 -10.666667 191 - -64.833333 -10.666667 260 - -64.666667 -10.666667 173 - -64.500000 -10.666667 189 - -64.333333 -10.666667 359 - -64.166667 -10.666667 311 - -64.000000 -10.666667 244 - -63.833333 -10.666667 263 - -63.666667 -10.666667 300 - -63.500000 -10.666667 380 - -63.333333 -10.666667 219 - -63.166667 -10.666667 203 - -63.000000 -10.666667 277 - -62.833333 -10.666667 206 - -62.666667 -10.666667 171 - -62.500000 -10.666667 188 - -62.333333 -10.666667 240 - -62.166667 -10.666667 200 - -62.000000 -10.666667 173 - -61.833333 -10.666667 134 - -61.666667 -10.666667 289 - -61.500000 -10.666667 278 - -61.333333 -10.666667 285 - -61.166667 -10.666667 161 - -61.000000 -10.666667 177 - -60.833333 -10.666667 170 - -60.666667 -10.666667 157 - -60.500000 -10.666667 157 - -60.333333 -10.666667 177 - -60.166667 -10.666667 318 - -60.000000 -10.666667 250 - -59.833333 -10.666667 308 - -59.666667 -10.666667 359 - -59.500000 -10.666667 253 - -59.333333 -10.666667 302 - -59.166667 -10.666667 456 - -59.000000 -10.666667 457 - -58.833333 -10.666667 340 - -58.666667 -10.666667 248 - -58.500000 -10.666667 251 - -58.333333 -10.666667 236 - -58.166667 -10.666667 256 - -58.000000 -10.666667 230 - -57.833333 -10.666667 383 - -57.666667 -10.666667 490 - -57.500000 -10.666667 388 - -57.333333 -10.666667 399 - -57.166667 -10.666667 331 - -57.000000 -10.666667 332 - -56.833333 -10.666667 323 - -56.666667 -10.666667 308 - -56.500000 -10.666667 317 - -56.333333 -10.666667 302 - -56.166667 -10.666667 281 - -56.000000 -10.666667 280 - -55.833333 -10.666667 265 - -55.666667 -10.666667 299 - -55.500000 -10.666667 298 - -55.333333 -10.666667 298 - -55.166667 -10.666667 312 - -55.000000 -10.666667 394 - -54.833333 -10.666667 299 - -54.666667 -10.666667 381 - -54.500000 -10.666667 349 - -54.333333 -10.666667 367 - -54.166667 -10.666667 385 - -54.000000 -10.666667 333 - -53.833333 -10.666667 346 - -53.666667 -10.666667 347 - -53.500000 -10.666667 348 - -53.333333 -10.666667 335 - -53.166667 -10.666667 306 - -53.000000 -10.666667 331 - -52.833333 -10.666667 345 - -52.666667 -10.666667 308 - -52.500000 -10.666667 333 - -52.333333 -10.666667 297 - -52.166667 -10.666667 273 - -52.000000 -10.666667 225 - -51.833333 -10.666667 203 - -51.666667 -10.666667 219 - -51.500000 -10.666667 218 - -51.333333 -10.666667 287 - -51.166667 -10.666667 209 - -51.000000 -10.666667 202 - -50.833333 -10.666667 182 - -50.666667 -10.666667 184 - -50.500000 -10.666667 179 - -50.333333 -10.666667 178 - -50.166667 -10.666667 179 - -50.000000 -10.666667 177 - -49.833333 -10.666667 179 - -49.666667 -10.666667 187 - -49.500000 -10.666667 225 - -49.333333 -10.666667 218 - -49.166667 -10.666667 227 - -49.000000 -10.666667 349 - -48.833333 -10.666667 290 - -48.666667 -10.666667 458 - -48.500000 -10.666667 308 - -48.333333 -10.666667 296 - -48.166667 -10.666667 255 - -48.000000 -10.666667 697 - -47.833333 -10.666667 422 - -47.666667 -10.666667 372 - -47.500000 -10.666667 334 - -47.333333 -10.666667 327 - -47.166667 -10.666667 411 - -47.000000 -10.666667 403 - -46.833333 -10.666667 492 - -46.666667 -10.666667 449 - -46.500000 -10.666667 532 - -46.333333 -10.666667 579 - -46.166667 -10.666667 757 - -46.000000 -10.666667 737 - -45.833333 -10.666667 722 - -45.666667 -10.666667 778 - -45.500000 -10.666667 749 - -45.333333 -10.666667 680 - -45.166667 -10.666667 488 - -45.000000 -10.666667 428 - -44.833333 -10.666667 462 - -44.666667 -10.666667 663 - -44.500000 -10.666667 703 - -44.333333 -10.666667 674 - -44.166667 -10.666667 663 - -44.000000 -10.666667 654 - -43.833333 -10.666667 574 - -43.666667 -10.666667 532 - -43.500000 -10.666667 463 - -43.333333 -10.666667 620 - -43.166667 -10.666667 512 - -43.000000 -10.666667 460 - -42.833333 -10.666667 447 - -42.666667 -10.666667 399 - -42.500000 -10.666667 596 - -42.333333 -10.666667 416 - -42.166667 -10.666667 411 - -42.000000 -10.666667 437 - -41.833333 -10.666667 450 - -41.666667 -10.666667 511 - -41.500000 -10.666667 882 - -41.333333 -10.666667 785 - -41.166667 -10.666667 878 - -41.000000 -10.666667 556 - -40.833333 -10.666667 547 - -40.666667 -10.666667 753 - -40.500000 -10.666667 704 - -40.333333 -10.666667 478 - -40.166667 -10.666667 468 - -40.000000 -10.666667 401 - -65.000000 -10.833333 144 - -64.833333 -10.833333 158 - -64.666667 -10.833333 170 - -64.500000 -10.833333 156 - -64.333333 -10.833333 196 - -64.166667 -10.833333 307 - -64.000000 -10.833333 390 - -63.833333 -10.833333 380 - -63.666667 -10.833333 869 - -63.500000 -10.833333 342 - -63.333333 -10.833333 242 - -63.166667 -10.833333 318 - -63.000000 -10.833333 251 - -62.833333 -10.833333 196 - -62.666667 -10.833333 224 - -62.500000 -10.833333 270 - -62.333333 -10.833333 308 - -62.166667 -10.833333 214 - -62.000000 -10.833333 180 - -61.833333 -10.833333 170 - -61.666667 -10.833333 194 - -61.500000 -10.833333 289 - -61.333333 -10.833333 200 - -61.166667 -10.833333 172 - -61.000000 -10.833333 208 - -60.833333 -10.833333 194 - -60.666667 -10.833333 165 - -60.500000 -10.833333 214 - -60.333333 -10.833333 255 - -60.166667 -10.833333 235 - -60.000000 -10.833333 294 - -59.833333 -10.833333 276 - -59.666667 -10.833333 357 - -59.500000 -10.833333 325 - -59.333333 -10.833333 320 - -59.166667 -10.833333 298 - -59.000000 -10.833333 331 - -58.833333 -10.833333 353 - -58.666667 -10.833333 295 - -58.500000 -10.833333 281 - -58.333333 -10.833333 227 - -58.166667 -10.833333 265 - -58.000000 -10.833333 253 - -57.833333 -10.833333 257 - -57.666667 -10.833333 237 - -57.500000 -10.833333 302 - -57.333333 -10.833333 443 - -57.166667 -10.833333 319 - -57.000000 -10.833333 357 - -56.833333 -10.833333 316 - -56.666667 -10.833333 350 - -56.500000 -10.833333 354 - -56.333333 -10.833333 306 - -56.166667 -10.833333 277 - -56.000000 -10.833333 277 - -55.833333 -10.833333 311 - -55.666667 -10.833333 398 - -55.500000 -10.833333 304 - -55.333333 -10.833333 320 - -55.166667 -10.833333 347 - -55.000000 -10.833333 348 - -54.833333 -10.833333 382 - -54.666667 -10.833333 347 - -54.500000 -10.833333 427 - -54.333333 -10.833333 344 - -54.166667 -10.833333 343 - -54.000000 -10.833333 367 - -53.833333 -10.833333 374 - -53.666667 -10.833333 370 - -53.500000 -10.833333 353 - -53.333333 -10.833333 293 - -53.166667 -10.833333 273 - -53.000000 -10.833333 303 - -52.833333 -10.833333 345 - -52.666667 -10.833333 332 - -52.500000 -10.833333 329 - -52.333333 -10.833333 303 - -52.166667 -10.833333 285 - -52.000000 -10.833333 199 - -51.833333 -10.833333 214 - -51.666667 -10.833333 190 - -51.500000 -10.833333 192 - -51.333333 -10.833333 201 - -51.166667 -10.833333 193 - -51.000000 -10.833333 181 - -50.833333 -10.833333 181 - -50.666667 -10.833333 182 - -50.500000 -10.833333 182 - -50.333333 -10.833333 191 - -50.166667 -10.833333 192 - -50.000000 -10.833333 180 - -49.833333 -10.833333 186 - -49.666667 -10.833333 189 - -49.500000 -10.833333 190 - -49.333333 -10.833333 202 - -49.166667 -10.833333 284 - -49.000000 -10.833333 345 - -48.833333 -10.833333 291 - -48.666667 -10.833333 503 - -48.500000 -10.833333 342 - -48.333333 -10.833333 278 - -48.166667 -10.833333 292 - -48.000000 -10.833333 578 - -47.833333 -10.833333 374 - -47.666667 -10.833333 382 - -47.500000 -10.833333 394 - -47.333333 -10.833333 370 - -47.166667 -10.833333 401 - -47.000000 -10.833333 468 - -46.833333 -10.833333 597 - -46.666667 -10.833333 508 - -46.500000 -10.833333 764 - -46.333333 -10.833333 639 - -46.166667 -10.833333 661 - -46.000000 -10.833333 687 - -45.833333 -10.833333 555 - -45.666667 -10.833333 758 - -45.500000 -10.833333 746 - -45.333333 -10.833333 747 - -45.166667 -10.833333 613 - -45.000000 -10.833333 514 - -44.833333 -10.833333 567 - -44.666667 -10.833333 558 - -44.500000 -10.833333 548 - -44.333333 -10.833333 512 - -44.166667 -10.833333 496 - -44.000000 -10.833333 541 - -43.833333 -10.833333 570 - -43.666667 -10.833333 510 - -43.500000 -10.833333 440 - -43.333333 -10.833333 453 - -43.166667 -10.833333 468 - -43.000000 -10.833333 459 - -42.833333 -10.833333 402 - -42.666667 -10.833333 436 - -42.500000 -10.833333 478 - -42.333333 -10.833333 440 - -42.166667 -10.833333 428 - -42.000000 -10.833333 461 - -41.833333 -10.833333 490 - -41.666667 -10.833333 473 - -41.500000 -10.833333 764 - -41.333333 -10.833333 697 - -41.166667 -10.833333 615 - -41.000000 -10.833333 560 - -40.833333 -10.833333 566 - -40.666667 -10.833333 808 - -40.500000 -10.833333 603 - -40.333333 -10.833333 462 - -40.166667 -10.833333 404 - -40.000000 -10.833333 375 - -65.000000 -11.000000 163 - -64.833333 -11.000000 175 - -64.666667 -11.000000 160 - -64.500000 -11.000000 190 - -64.333333 -11.000000 191 - -64.166667 -11.000000 207 - -64.000000 -11.000000 185 - -63.833333 -11.000000 294 - -63.666667 -11.000000 857 - -63.500000 -11.000000 368 - -63.333333 -11.000000 301 - -63.166667 -11.000000 310 - -63.000000 -11.000000 309 - -62.833333 -11.000000 283 - -62.666667 -11.000000 257 - -62.500000 -11.000000 390 - -62.333333 -11.000000 211 - -62.166667 -11.000000 172 - -62.000000 -11.000000 177 - -61.833333 -11.000000 215 - -61.666667 -11.000000 281 - -61.500000 -11.000000 312 - -61.333333 -11.000000 207 - -61.166667 -11.000000 188 - -61.000000 -11.000000 194 - -60.833333 -11.000000 192 - -60.666667 -11.000000 241 - -60.500000 -11.000000 216 - -60.333333 -11.000000 215 - -60.166667 -11.000000 253 - -60.000000 -11.000000 273 - -59.833333 -11.000000 396 - -59.666667 -11.000000 380 - -59.500000 -11.000000 376 - -59.333333 -11.000000 276 - -59.166667 -11.000000 311 - -59.000000 -11.000000 339 - -58.833333 -11.000000 311 - -58.666667 -11.000000 269 - -58.500000 -11.000000 284 - -58.333333 -11.000000 251 - -58.166667 -11.000000 245 - -58.000000 -11.000000 289 - -57.833333 -11.000000 243 - -57.666667 -11.000000 264 - -57.500000 -11.000000 294 - -57.333333 -11.000000 255 - -57.166667 -11.000000 312 - -57.000000 -11.000000 316 - -56.833333 -11.000000 340 - -56.666667 -11.000000 431 - -56.500000 -11.000000 304 - -56.333333 -11.000000 332 - -56.166667 -11.000000 299 - -56.000000 -11.000000 306 - -55.833333 -11.000000 280 - -55.666667 -11.000000 291 - -55.500000 -11.000000 290 - -55.333333 -11.000000 322 - -55.166667 -11.000000 410 - -55.000000 -11.000000 424 - -54.833333 -11.000000 401 - -54.666667 -11.000000 355 - -54.500000 -11.000000 354 - -54.333333 -11.000000 317 - -54.166667 -11.000000 342 - -54.000000 -11.000000 318 - -53.833333 -11.000000 307 - -53.666667 -11.000000 317 - -53.500000 -11.000000 322 - -53.333333 -11.000000 276 - -53.166667 -11.000000 330 - -53.000000 -11.000000 304 - -52.833333 -11.000000 308 - -52.666667 -11.000000 325 - -52.500000 -11.000000 369 - -52.333333 -11.000000 310 - -52.166667 -11.000000 300 - -52.000000 -11.000000 239 - -51.833333 -11.000000 223 - -51.666667 -11.000000 191 - -51.500000 -11.000000 188 - -51.333333 -11.000000 187 - -51.166667 -11.000000 182 - -51.000000 -11.000000 182 - -50.833333 -11.000000 183 - -50.666667 -11.000000 185 - -50.500000 -11.000000 184 - -50.333333 -11.000000 190 - -50.166667 -11.000000 191 - -50.000000 -11.000000 184 - -49.833333 -11.000000 188 - -49.666667 -11.000000 189 - -49.500000 -11.000000 213 - -49.333333 -11.000000 219 - -49.166667 -11.000000 296 - -49.000000 -11.000000 277 - -48.833333 -11.000000 252 - -48.666667 -11.000000 381 - -48.500000 -11.000000 222 - -48.333333 -11.000000 296 - -48.166667 -11.000000 251 - -48.000000 -11.000000 306 - -47.833333 -11.000000 641 - -47.666667 -11.000000 357 - -47.500000 -11.000000 363 - -47.333333 -11.000000 364 - -47.166667 -11.000000 468 - -47.000000 -11.000000 465 - -46.833333 -11.000000 560 - -46.666667 -11.000000 589 - -46.500000 -11.000000 547 - -46.333333 -11.000000 807 - -46.166667 -11.000000 779 - -46.000000 -11.000000 678 - -45.833333 -11.000000 763 - -45.666667 -11.000000 739 - -45.500000 -11.000000 536 - -45.333333 -11.000000 689 - -45.166667 -11.000000 539 - -45.000000 -11.000000 532 - -44.833333 -11.000000 500 - -44.666667 -11.000000 467 - -44.500000 -11.000000 445 - -44.333333 -11.000000 454 - -44.166667 -11.000000 458 - -44.000000 -11.000000 698 - -43.833333 -11.000000 532 - -43.666667 -11.000000 480 - -43.500000 -11.000000 431 - -43.333333 -11.000000 419 - -43.166667 -11.000000 411 - -43.000000 -11.000000 403 - -42.833333 -11.000000 438 - -42.666667 -11.000000 531 - -42.500000 -11.000000 694 - -42.333333 -11.000000 445 - -42.166667 -11.000000 490 - -42.000000 -11.000000 551 - -41.833333 -11.000000 618 - -41.666667 -11.000000 766 - -41.500000 -11.000000 579 - -41.333333 -11.000000 792 - -41.166667 -11.000000 594 - -41.000000 -11.000000 586 - -40.833333 -11.000000 688 - -40.666667 -11.000000 773 - -40.500000 -11.000000 843 - -40.333333 -11.000000 460 - -40.166667 -11.000000 400 - -40.000000 -11.000000 350 - -65.000000 -11.166667 138 - -64.833333 -11.166667 153 - -64.666667 -11.166667 164 - -64.500000 -11.166667 183 - -64.333333 -11.166667 176 - -64.166667 -11.166667 176 - -64.000000 -11.166667 199 - -63.833333 -11.166667 221 - -63.666667 -11.166667 266 - -63.500000 -11.166667 253 - -63.333333 -11.166667 414 - -63.166667 -11.166667 256 - -63.000000 -11.166667 264 - -62.833333 -11.166667 251 - -62.666667 -11.166667 246 - -62.500000 -11.166667 244 - -62.333333 -11.166667 202 - -62.166667 -11.166667 234 - -62.000000 -11.166667 193 - -61.833333 -11.166667 200 - -61.666667 -11.166667 284 - -61.500000 -11.166667 270 - -61.333333 -11.166667 218 - -61.166667 -11.166667 229 - -61.000000 -11.166667 292 - -60.833333 -11.166667 492 - -60.666667 -11.166667 300 - -60.500000 -11.166667 241 - -60.333333 -11.166667 424 - -60.166667 -11.166667 292 - -60.000000 -11.166667 280 - -59.833333 -11.166667 473 - -59.666667 -11.166667 369 - -59.500000 -11.166667 306 - -59.333333 -11.166667 367 - -59.166667 -11.166667 410 - -59.000000 -11.166667 346 - -58.833333 -11.166667 359 - -58.666667 -11.166667 332 - -58.500000 -11.166667 332 - -58.333333 -11.166667 241 - -58.166667 -11.166667 297 - -58.000000 -11.166667 288 - -57.833333 -11.166667 277 - -57.666667 -11.166667 232 - -57.500000 -11.166667 291 - -57.333333 -11.166667 250 - -57.166667 -11.166667 346 - -57.000000 -11.166667 325 - -56.833333 -11.166667 365 - -56.666667 -11.166667 326 - -56.500000 -11.166667 417 - -56.333333 -11.166667 448 - -56.166667 -11.166667 444 - -56.000000 -11.166667 409 - -55.833333 -11.166667 315 - -55.666667 -11.166667 355 - -55.500000 -11.166667 342 - -55.333333 -11.166667 311 - -55.166667 -11.166667 333 - -55.000000 -11.166667 355 - -54.833333 -11.166667 330 - -54.666667 -11.166667 312 - -54.500000 -11.166667 309 - -54.333333 -11.166667 325 - -54.166667 -11.166667 348 - -54.000000 -11.166667 351 - -53.833333 -11.166667 324 - -53.666667 -11.166667 281 - -53.500000 -11.166667 323 - -53.333333 -11.166667 305 - -53.166667 -11.166667 328 - -53.000000 -11.166667 300 - -52.833333 -11.166667 327 - -52.666667 -11.166667 340 - -52.500000 -11.166667 359 - -52.333333 -11.166667 323 - -52.166667 -11.166667 327 - -52.000000 -11.166667 239 - -51.833333 -11.166667 224 - -51.666667 -11.166667 221 - -51.500000 -11.166667 193 - -51.333333 -11.166667 200 - -51.166667 -11.166667 188 - -51.000000 -11.166667 188 - -50.833333 -11.166667 187 - -50.666667 -11.166667 184 - -50.500000 -11.166667 185 - -50.333333 -11.166667 185 - -50.166667 -11.166667 187 - -50.000000 -11.166667 185 - -49.833333 -11.166667 185 - -49.666667 -11.166667 189 - -49.500000 -11.166667 196 - -49.333333 -11.166667 239 - -49.166667 -11.166667 302 - -49.000000 -11.166667 261 - -48.833333 -11.166667 258 - -48.666667 -11.166667 259 - -48.500000 -11.166667 226 - -48.333333 -11.166667 321 - -48.166667 -11.166667 273 - -48.000000 -11.166667 278 - -47.833333 -11.166667 330 - -47.666667 -11.166667 452 - -47.500000 -11.166667 510 - -47.333333 -11.166667 398 - -47.166667 -11.166667 450 - -47.000000 -11.166667 494 - -46.833333 -11.166667 591 - -46.666667 -11.166667 742 - -46.500000 -11.166667 851 - -46.333333 -11.166667 713 - -46.166667 -11.166667 661 - -46.000000 -11.166667 729 - -45.833333 -11.166667 767 - -45.666667 -11.166667 758 - -45.500000 -11.166667 545 - -45.333333 -11.166667 594 - -45.166667 -11.166667 602 - -45.000000 -11.166667 584 - -44.833333 -11.166667 527 - -44.666667 -11.166667 519 - -44.500000 -11.166667 499 - -44.333333 -11.166667 445 - -44.166667 -11.166667 432 - -44.000000 -11.166667 430 - -43.833333 -11.166667 455 - -43.666667 -11.166667 427 - -43.500000 -11.166667 413 - -43.333333 -11.166667 418 - -43.166667 -11.166667 408 - -43.000000 -11.166667 412 - -42.833333 -11.166667 409 - -42.666667 -11.166667 907 - -42.500000 -11.166667 773 - -42.333333 -11.166667 488 - -42.166667 -11.166667 512 - -42.000000 -11.166667 760 - -41.833333 -11.166667 779 - -41.666667 -11.166667 807 - -41.500000 -11.166667 766 - -41.333333 -11.166667 849 - -41.166667 -11.166667 751 - -41.000000 -11.166667 705 - -40.833333 -11.166667 711 - -40.666667 -11.166667 698 - -40.500000 -11.166667 707 - -40.333333 -11.166667 525 - -40.166667 -11.166667 389 - -40.000000 -11.166667 345 - -65.000000 -11.333333 166 - -64.833333 -11.333333 141 - -64.666667 -11.333333 167 - -64.500000 -11.333333 175 - -64.333333 -11.333333 186 - -64.166667 -11.333333 196 - -64.000000 -11.333333 218 - -63.833333 -11.333333 239 - -63.666667 -11.333333 325 - -63.500000 -11.333333 240 - -63.333333 -11.333333 223 - -63.166667 -11.333333 248 - -63.000000 -11.333333 290 - -62.833333 -11.333333 303 - -62.666667 -11.333333 259 - -62.500000 -11.333333 241 - -62.333333 -11.333333 214 - -62.166667 -11.333333 187 - -62.000000 -11.333333 167 - -61.833333 -11.333333 173 - -61.666667 -11.333333 259 - -61.500000 -11.333333 244 - -61.333333 -11.333333 261 - -61.166667 -11.333333 260 - -61.000000 -11.333333 416 - -60.833333 -11.333333 366 - -60.666667 -11.333333 375 - -60.500000 -11.333333 261 - -60.333333 -11.333333 296 - -60.166667 -11.333333 345 - -60.000000 -11.333333 355 - -59.833333 -11.333333 421 - -59.666667 -11.333333 423 - -59.500000 -11.333333 341 - -59.333333 -11.333333 327 - -59.166667 -11.333333 355 - -59.000000 -11.333333 409 - -58.833333 -11.333333 381 - -58.666667 -11.333333 364 - -58.500000 -11.333333 309 - -58.333333 -11.333333 256 - -58.166667 -11.333333 300 - -58.000000 -11.333333 300 - -57.833333 -11.333333 317 - -57.666667 -11.333333 281 - -57.500000 -11.333333 275 - -57.333333 -11.333333 312 - -57.166667 -11.333333 313 - -57.000000 -11.333333 350 - -56.833333 -11.333333 331 - -56.666667 -11.333333 361 - -56.500000 -11.333333 341 - -56.333333 -11.333333 350 - -56.166667 -11.333333 395 - -56.000000 -11.333333 349 - -55.833333 -11.333333 419 - -55.666667 -11.333333 339 - -55.500000 -11.333333 335 - -55.333333 -11.333333 346 - -55.166667 -11.333333 322 - -55.000000 -11.333333 315 - -54.833333 -11.333333 312 - -54.666667 -11.333333 331 - -54.500000 -11.333333 384 - -54.333333 -11.333333 355 - -54.166667 -11.333333 305 - -54.000000 -11.333333 365 - -53.833333 -11.333333 294 - -53.666667 -11.333333 332 - -53.500000 -11.333333 318 - -53.333333 -11.333333 275 - -53.166667 -11.333333 275 - -53.000000 -11.333333 306 - -52.833333 -11.333333 310 - -52.666667 -11.333333 328 - -52.500000 -11.333333 355 - -52.333333 -11.333333 362 - -52.166667 -11.333333 338 - -52.000000 -11.333333 276 - -51.833333 -11.333333 261 - -51.666667 -11.333333 239 - -51.500000 -11.333333 227 - -51.333333 -11.333333 200 - -51.166667 -11.333333 197 - -51.000000 -11.333333 188 - -50.833333 -11.333333 192 - -50.666667 -11.333333 188 - -50.500000 -11.333333 188 - -50.333333 -11.333333 187 - -50.166667 -11.333333 190 - -50.000000 -11.333333 189 - -49.833333 -11.333333 188 - -49.666667 -11.333333 191 - -49.500000 -11.333333 202 - -49.333333 -11.333333 239 - -49.166667 -11.333333 220 - -49.000000 -11.333333 288 - -48.833333 -11.333333 260 - -48.666667 -11.333333 308 - -48.500000 -11.333333 260 - -48.333333 -11.333333 256 - -48.166667 -11.333333 274 - -48.000000 -11.333333 282 - -47.833333 -11.333333 408 - -47.666667 -11.333333 467 - -47.500000 -11.333333 512 - -47.333333 -11.333333 531 - -47.166667 -11.333333 420 - -47.000000 -11.333333 550 - -46.833333 -11.333333 561 - -46.666667 -11.333333 723 - -46.500000 -11.333333 698 - -46.333333 -11.333333 718 - -46.166667 -11.333333 820 - -46.000000 -11.333333 803 - -45.833333 -11.333333 773 - -45.666667 -11.333333 768 - -45.500000 -11.333333 635 - -45.333333 -11.333333 646 - -45.166667 -11.333333 642 - -45.000000 -11.333333 751 - -44.833333 -11.333333 548 - -44.666667 -11.333333 490 - -44.500000 -11.333333 450 - -44.333333 -11.333333 435 - -44.166667 -11.333333 432 - -44.000000 -11.333333 427 - -43.833333 -11.333333 514 - -43.666667 -11.333333 520 - -43.500000 -11.333333 448 - -43.333333 -11.333333 432 - -43.166667 -11.333333 409 - -43.000000 -11.333333 417 - -42.833333 -11.333333 426 - -42.666667 -11.333333 980 - -42.500000 -11.333333 991 - -42.333333 -11.333333 499 - -42.166667 -11.333333 955 - -42.000000 -11.333333 698 - -41.833333 -11.333333 782 - -41.666667 -11.333333 818 - -41.500000 -11.333333 779 - -41.333333 -11.333333 952 - -41.166667 -11.333333 982 - -41.000000 -11.333333 889 - -40.833333 -11.333333 861 - -40.666667 -11.333333 523 - -40.500000 -11.333333 690 - -40.333333 -11.333333 450 - -40.166667 -11.333333 396 - -40.000000 -11.333333 398 - -65.000000 -11.500000 171 - -64.833333 -11.500000 159 - -64.666667 -11.500000 155 - -64.500000 -11.500000 168 - -64.333333 -11.500000 171 - -64.166667 -11.500000 175 - -64.000000 -11.500000 210 - -63.833333 -11.500000 202 - -63.666667 -11.500000 234 - -63.500000 -11.500000 239 - -63.333333 -11.500000 288 - -63.166667 -11.500000 298 - -63.000000 -11.500000 220 - -62.833333 -11.500000 288 - -62.666667 -11.500000 245 - -62.500000 -11.500000 286 - -62.333333 -11.500000 215 - -62.166667 -11.500000 203 - -62.000000 -11.500000 206 - -61.833333 -11.500000 182 - -61.666667 -11.500000 226 - -61.500000 -11.500000 207 - -61.333333 -11.500000 180 - -61.166667 -11.500000 222 - -61.000000 -11.500000 286 - -60.833333 -11.500000 237 - -60.666667 -11.500000 410 - -60.500000 -11.500000 320 - -60.333333 -11.500000 362 - -60.166667 -11.500000 424 - -60.000000 -11.500000 341 - -59.833333 -11.500000 342 - -59.666667 -11.500000 373 - -59.500000 -11.500000 370 - -59.333333 -11.500000 364 - -59.166667 -11.500000 342 - -59.000000 -11.500000 348 - -58.833333 -11.500000 335 - -58.666667 -11.500000 302 - -58.500000 -11.500000 305 - -58.333333 -11.500000 245 - -58.166667 -11.500000 251 - -58.000000 -11.500000 316 - -57.833333 -11.500000 299 - -57.666667 -11.500000 294 - -57.500000 -11.500000 264 - -57.333333 -11.500000 285 - -57.166667 -11.500000 275 - -57.000000 -11.500000 327 - -56.833333 -11.500000 340 - -56.666667 -11.500000 361 - -56.500000 -11.500000 365 - -56.333333 -11.500000 340 - -56.166667 -11.500000 356 - -56.000000 -11.500000 411 - -55.833333 -11.500000 413 - -55.666667 -11.500000 333 - -55.500000 -11.500000 339 - -55.333333 -11.500000 355 - -55.166667 -11.500000 371 - -55.000000 -11.500000 317 - -54.833333 -11.500000 328 - -54.666667 -11.500000 315 - -54.500000 -11.500000 384 - -54.333333 -11.500000 335 - -54.166667 -11.500000 359 - -54.000000 -11.500000 351 - -53.833333 -11.500000 312 - -53.666667 -11.500000 331 - -53.500000 -11.500000 278 - -53.333333 -11.500000 312 - -53.166667 -11.500000 312 - -53.000000 -11.500000 289 - -52.833333 -11.500000 317 - -52.666667 -11.500000 318 - -52.500000 -11.500000 329 - -52.333333 -11.500000 325 - -52.166667 -11.500000 369 - -52.000000 -11.500000 312 - -51.833333 -11.500000 295 - -51.666667 -11.500000 253 - -51.500000 -11.500000 267 - -51.333333 -11.500000 230 - -51.166667 -11.500000 222 - -51.000000 -11.500000 190 - -50.833333 -11.500000 191 - -50.666667 -11.500000 190 - -50.500000 -11.500000 191 - -50.333333 -11.500000 189 - -50.166667 -11.500000 191 - -50.000000 -11.500000 189 - -49.833333 -11.500000 190 - -49.666667 -11.500000 201 - -49.500000 -11.500000 217 - -49.333333 -11.500000 278 - -49.166667 -11.500000 262 - -49.000000 -11.500000 263 - -48.833333 -11.500000 287 - -48.666667 -11.500000 271 - -48.500000 -11.500000 254 - -48.333333 -11.500000 260 - -48.166667 -11.500000 267 - -48.000000 -11.500000 333 - -47.833333 -11.500000 339 - -47.666667 -11.500000 349 - -47.500000 -11.500000 451 - -47.333333 -11.500000 353 - -47.166667 -11.500000 420 - -47.000000 -11.500000 462 - -46.833333 -11.500000 546 - -46.666667 -11.500000 619 - -46.500000 -11.500000 903 - -46.333333 -11.500000 867 - -46.166667 -11.500000 838 - -46.000000 -11.500000 810 - -45.833333 -11.500000 788 - -45.666667 -11.500000 779 - -45.500000 -11.500000 770 - -45.333333 -11.500000 758 - -45.166667 -11.500000 654 - -45.000000 -11.500000 660 - -44.833333 -11.500000 474 - -44.666667 -11.500000 455 - -44.500000 -11.500000 441 - -44.333333 -11.500000 428 - -44.166667 -11.500000 428 - -44.000000 -11.500000 415 - -43.833333 -11.500000 438 - -43.666667 -11.500000 496 - -43.500000 -11.500000 456 - -43.333333 -11.500000 415 - -43.166667 -11.500000 416 - -43.000000 -11.500000 435 - -42.833333 -11.500000 512 - -42.666667 -11.500000 921 - -42.500000 -11.500000 1024 - -42.333333 -11.500000 775 - -42.166667 -11.500000 968 - -42.000000 -11.500000 773 - -41.833333 -11.500000 794 - -41.666667 -11.500000 789 - -41.500000 -11.500000 693 - -41.333333 -11.500000 927 - -41.166667 -11.500000 1078 - -41.000000 -11.500000 837 - -40.833333 -11.500000 888 - -40.666667 -11.500000 608 - -40.500000 -11.500000 589 - -40.333333 -11.500000 489 - -40.166667 -11.500000 398 - -40.000000 -11.500000 351 - -65.000000 -11.666667 157 - -64.833333 -11.666667 162 - -64.666667 -11.666667 161 - -64.500000 -11.666667 203 - -64.333333 -11.666667 206 - -64.166667 -11.666667 206 - -64.000000 -11.666667 399 - -63.833333 -11.666667 194 - -63.666667 -11.666667 203 - -63.500000 -11.666667 330 - -63.333333 -11.666667 240 - -63.166667 -11.666667 205 - -63.000000 -11.666667 205 - -62.833333 -11.666667 181 - -62.666667 -11.666667 208 - -62.500000 -11.666667 233 - -62.333333 -11.666667 258 - -62.166667 -11.666667 240 - -62.000000 -11.666667 221 - -61.833333 -11.666667 241 - -61.666667 -11.666667 234 - -61.500000 -11.666667 215 - -61.333333 -11.666667 238 - -61.166667 -11.666667 181 - -61.000000 -11.666667 226 - -60.833333 -11.666667 259 - -60.666667 -11.666667 359 - -60.500000 -11.666667 390 - -60.333333 -11.666667 355 - -60.166667 -11.666667 339 - -60.000000 -11.666667 346 - -59.833333 -11.666667 389 - -59.666667 -11.666667 349 - -59.500000 -11.666667 390 - -59.333333 -11.666667 352 - -59.166667 -11.666667 356 - -59.000000 -11.666667 362 - -58.833333 -11.666667 320 - -58.666667 -11.666667 326 - -58.500000 -11.666667 292 - -58.333333 -11.666667 295 - -58.166667 -11.666667 269 - -58.000000 -11.666667 299 - -57.833333 -11.666667 294 - -57.666667 -11.666667 314 - -57.500000 -11.666667 292 - -57.333333 -11.666667 280 - -57.166667 -11.666667 287 - -57.000000 -11.666667 307 - -56.833333 -11.666667 326 - -56.666667 -11.666667 368 - -56.500000 -11.666667 385 - -56.333333 -11.666667 352 - -56.166667 -11.666667 376 - -56.000000 -11.666667 396 - -55.833333 -11.666667 372 - -55.666667 -11.666667 351 - -55.500000 -11.666667 391 - -55.333333 -11.666667 377 - -55.166667 -11.666667 376 - -55.000000 -11.666667 317 - -54.833333 -11.666667 310 - -54.666667 -11.666667 332 - -54.500000 -11.666667 344 - -54.333333 -11.666667 345 - -54.166667 -11.666667 300 - -54.000000 -11.666667 330 - -53.833333 -11.666667 326 - -53.666667 -11.666667 320 - -53.500000 -11.666667 316 - -53.333333 -11.666667 326 - -53.166667 -11.666667 278 - -53.000000 -11.666667 320 - -52.833333 -11.666667 303 - -52.666667 -11.666667 281 - -52.500000 -11.666667 309 - -52.333333 -11.666667 344 - -52.166667 -11.666667 351 - -52.000000 -11.666667 343 - -51.833333 -11.666667 317 - -51.666667 -11.666667 321 - -51.500000 -11.666667 272 - -51.333333 -11.666667 235 - -51.166667 -11.666667 213 - -51.000000 -11.666667 195 - -50.833333 -11.666667 202 - -50.666667 -11.666667 191 - -50.500000 -11.666667 192 - -50.333333 -11.666667 191 - -50.166667 -11.666667 193 - -50.000000 -11.666667 191 - -49.833333 -11.666667 198 - -49.666667 -11.666667 194 - -49.500000 -11.666667 203 - -49.333333 -11.666667 285 - -49.166667 -11.666667 341 - -49.000000 -11.666667 286 - -48.833333 -11.666667 321 - -48.666667 -11.666667 238 - -48.500000 -11.666667 264 - -48.333333 -11.666667 262 - -48.166667 -11.666667 252 - -48.000000 -11.666667 311 - -47.833333 -11.666667 343 - -47.666667 -11.666667 426 - -47.500000 -11.666667 488 - -47.333333 -11.666667 372 - -47.166667 -11.666667 394 - -47.000000 -11.666667 407 - -46.833333 -11.666667 725 - -46.666667 -11.666667 592 - -46.500000 -11.666667 638 - -46.333333 -11.666667 803 - -46.166667 -11.666667 838 - -46.000000 -11.666667 813 - -45.833333 -11.666667 762 - -45.666667 -11.666667 779 - -45.500000 -11.666667 766 - -45.333333 -11.666667 667 - -45.166667 -11.666667 759 - -45.000000 -11.666667 769 - -44.833333 -11.666667 483 - -44.666667 -11.666667 444 - -44.500000 -11.666667 440 - -44.333333 -11.666667 434 - -44.166667 -11.666667 420 - -44.000000 -11.666667 426 - -43.833333 -11.666667 430 - -43.666667 -11.666667 539 - -43.500000 -11.666667 432 - -43.333333 -11.666667 411 - -43.166667 -11.666667 483 - -43.000000 -11.666667 558 - -42.833333 -11.666667 843 - -42.666667 -11.666667 856 - -42.500000 -11.666667 1323 - -42.333333 -11.666667 640 - -42.166667 -11.666667 738 - -42.000000 -11.666667 749 - -41.833333 -11.666667 742 - -41.666667 -11.666667 702 - -41.500000 -11.666667 760 - -41.333333 -11.666667 974 - -41.166667 -11.666667 961 - -41.000000 -11.666667 854 - -40.833333 -11.666667 712 - -40.666667 -11.666667 610 - -40.500000 -11.666667 554 - -40.333333 -11.666667 444 - -40.166667 -11.666667 467 - -40.000000 -11.666667 415 - -65.000000 -11.833333 163 - -64.833333 -11.833333 166 - -64.666667 -11.833333 169 - -64.500000 -11.833333 171 - -64.333333 -11.833333 201 - -64.166667 -11.833333 180 - -64.000000 -11.833333 217 - -63.833333 -11.833333 219 - -63.666667 -11.833333 238 - -63.500000 -11.833333 205 - -63.333333 -11.833333 193 - -63.166667 -11.833333 192 - -63.000000 -11.833333 183 - -62.833333 -11.833333 179 - -62.666667 -11.833333 204 - -62.500000 -11.833333 202 - -62.333333 -11.833333 277 - -62.166667 -11.833333 313 - -62.000000 -11.833333 283 - -61.833333 -11.833333 280 - -61.666667 -11.833333 240 - -61.500000 -11.833333 216 - -61.333333 -11.833333 231 - -61.166667 -11.833333 201 - -61.000000 -11.833333 209 - -60.833333 -11.833333 227 - -60.666667 -11.833333 328 - -60.500000 -11.833333 341 - -60.333333 -11.833333 371 - -60.166667 -11.833333 427 - -60.000000 -11.833333 423 - -59.833333 -11.833333 390 - -59.666667 -11.833333 334 - -59.500000 -11.833333 361 - -59.333333 -11.833333 388 - -59.166667 -11.833333 407 - -59.000000 -11.833333 425 - -58.833333 -11.833333 410 - -58.666667 -11.833333 289 - -58.500000 -11.833333 338 - -58.333333 -11.833333 276 - -58.166667 -11.833333 290 - -58.000000 -11.833333 285 - -57.833333 -11.833333 310 - -57.666667 -11.833333 337 - -57.500000 -11.833333 313 - -57.333333 -11.833333 290 - -57.166667 -11.833333 298 - -57.000000 -11.833333 315 - -56.833333 -11.833333 331 - -56.666667 -11.833333 333 - -56.500000 -11.833333 362 - -56.333333 -11.833333 372 - -56.166667 -11.833333 384 - -56.000000 -11.833333 373 - -55.833333 -11.833333 330 - -55.666667 -11.833333 323 - -55.500000 -11.833333 373 - -55.333333 -11.833333 353 - -55.166667 -11.833333 343 - -55.000000 -11.833333 354 - -54.833333 -11.833333 373 - -54.666667 -11.833333 376 - -54.500000 -11.833333 381 - -54.333333 -11.833333 339 - -54.166667 -11.833333 339 - -54.000000 -11.833333 349 - -53.833333 -11.833333 345 - -53.666667 -11.833333 316 - -53.500000 -11.833333 311 - -53.333333 -11.833333 329 - -53.166667 -11.833333 303 - -53.000000 -11.833333 325 - -52.833333 -11.833333 317 - -52.666667 -11.833333 326 - -52.500000 -11.833333 308 - -52.333333 -11.833333 345 - -52.166667 -11.833333 318 - -52.000000 -11.833333 375 - -51.833333 -11.833333 389 - -51.666667 -11.833333 319 - -51.500000 -11.833333 360 - -51.333333 -11.833333 246 - -51.166667 -11.833333 209 - -51.000000 -11.833333 195 - -50.833333 -11.833333 196 - -50.666667 -11.833333 195 - -50.500000 -11.833333 195 - -50.333333 -11.833333 194 - -50.166667 -11.833333 195 - -50.000000 -11.833333 194 - -49.833333 -11.833333 190 - -49.666667 -11.833333 192 - -49.500000 -11.833333 238 - -49.333333 -11.833333 233 - -49.166667 -11.833333 286 - -49.000000 -11.833333 255 - -48.833333 -11.833333 245 - -48.666667 -11.833333 244 - -48.500000 -11.833333 277 - -48.333333 -11.833333 274 - -48.166667 -11.833333 311 - -48.000000 -11.833333 303 - -47.833333 -11.833333 310 - -47.666667 -11.833333 302 - -47.500000 -11.833333 312 - -47.333333 -11.833333 353 - -47.166667 -11.833333 343 - -47.000000 -11.833333 384 - -46.833333 -11.833333 461 - -46.666667 -11.833333 639 - -46.500000 -11.833333 609 - -46.333333 -11.833333 864 - -46.166667 -11.833333 821 - -46.000000 -11.833333 781 - -45.833333 -11.833333 781 - -45.666667 -11.833333 766 - -45.500000 -11.833333 752 - -45.333333 -11.833333 609 - -45.166667 -11.833333 481 - -45.000000 -11.833333 673 - -44.833333 -11.833333 493 - -44.666667 -11.833333 448 - -44.500000 -11.833333 438 - -44.333333 -11.833333 430 - -44.166667 -11.833333 434 - -44.000000 -11.833333 446 - -43.833333 -11.833333 448 - -43.666667 -11.833333 677 - -43.500000 -11.833333 448 - -43.333333 -11.833333 413 - -43.166667 -11.833333 426 - -43.000000 -11.833333 434 - -42.833333 -11.833333 593 - -42.666667 -11.833333 732 - -42.500000 -11.833333 988 - -42.333333 -11.833333 1078 - -42.166667 -11.833333 878 - -42.000000 -11.833333 795 - -41.833333 -11.833333 786 - -41.666667 -11.833333 812 - -41.500000 -11.833333 791 - -41.333333 -11.833333 946 - -41.166667 -11.833333 946 - -41.000000 -11.833333 784 - -40.833333 -11.833333 805 - -40.666667 -11.833333 606 - -40.500000 -11.833333 665 - -40.333333 -11.833333 465 - -40.166667 -11.833333 425 - -40.000000 -11.833333 338 - -65.000000 -12.000000 132 - -64.833333 -12.000000 160 - -64.666667 -12.000000 167 - -64.500000 -12.000000 174 - -64.333333 -12.000000 168 - -64.166667 -12.000000 186 - -64.000000 -12.000000 181 - -63.833333 -12.000000 168 - -63.666667 -12.000000 198 - -63.500000 -12.000000 182 - -63.333333 -12.000000 210 - -63.166667 -12.000000 176 - -63.000000 -12.000000 165 - -62.833333 -12.000000 174 - -62.666667 -12.000000 334 - -62.500000 -12.000000 175 - -62.333333 -12.000000 327 - -62.166667 -12.000000 403 - -62.000000 -12.000000 398 - -61.833333 -12.000000 381 - -61.666667 -12.000000 337 - -61.500000 -12.000000 262 - -61.333333 -12.000000 213 - -61.166667 -12.000000 216 - -61.000000 -12.000000 283 - -60.833333 -12.000000 308 - -60.666667 -12.000000 275 - -60.500000 -12.000000 351 - -60.333333 -12.000000 370 - -60.166667 -12.000000 435 - -60.000000 -12.000000 395 - -59.833333 -12.000000 447 - -59.666667 -12.000000 427 - -59.500000 -12.000000 394 - -59.333333 -12.000000 469 - -59.166667 -12.000000 354 - -59.000000 -12.000000 354 - -58.833333 -12.000000 302 - -58.666667 -12.000000 284 - -58.500000 -12.000000 305 - -58.333333 -12.000000 325 - -58.166667 -12.000000 298 - -58.000000 -12.000000 273 - -57.833333 -12.000000 293 - -57.666667 -12.000000 332 - -57.500000 -12.000000 361 - -57.333333 -12.000000 326 - -57.166667 -12.000000 281 - -57.000000 -12.000000 318 - -56.833333 -12.000000 350 - -56.666667 -12.000000 344 - -56.500000 -12.000000 348 - -56.333333 -12.000000 378 - -56.166667 -12.000000 390 - -56.000000 -12.000000 351 - -55.833333 -12.000000 376 - -55.666667 -12.000000 360 - -55.500000 -12.000000 362 - -55.333333 -12.000000 357 - -55.166667 -12.000000 377 - -55.000000 -12.000000 313 - -54.833333 -12.000000 389 - -54.666667 -12.000000 371 - -54.500000 -12.000000 310 - -54.333333 -12.000000 351 - -54.166667 -12.000000 360 - -54.000000 -12.000000 324 - -53.833333 -12.000000 317 - -53.666667 -12.000000 290 - -53.500000 -12.000000 295 - -53.333333 -12.000000 318 - -53.166667 -12.000000 324 - -53.000000 -12.000000 327 - -52.833333 -12.000000 323 - -52.666667 -12.000000 318 - -52.500000 -12.000000 341 - -52.333333 -12.000000 301 - -52.166667 -12.000000 339 - -52.000000 -12.000000 333 - -51.833333 -12.000000 373 - -51.666667 -12.000000 298 - -51.500000 -12.000000 322 - -51.333333 -12.000000 270 - -51.166667 -12.000000 227 - -51.000000 -12.000000 200 - -50.833333 -12.000000 197 - -50.666667 -12.000000 198 - -50.500000 -12.000000 196 - -50.333333 -12.000000 195 - -50.166667 -12.000000 196 - -50.000000 -12.000000 197 - -49.833333 -12.000000 195 - -49.666667 -12.000000 196 - -49.500000 -12.000000 245 - -49.333333 -12.000000 282 - -49.166667 -12.000000 274 - -49.000000 -12.000000 264 - -48.833333 -12.000000 271 - -48.666667 -12.000000 241 - -48.500000 -12.000000 245 - -48.333333 -12.000000 326 - -48.166667 -12.000000 329 - -48.000000 -12.000000 386 - -47.833333 -12.000000 520 - -47.666667 -12.000000 342 - -47.500000 -12.000000 329 - -47.333333 -12.000000 322 - -47.166667 -12.000000 352 - -47.000000 -12.000000 375 - -46.833333 -12.000000 436 - -46.666667 -12.000000 393 - -46.500000 -12.000000 470 - -46.333333 -12.000000 846 - -46.166667 -12.000000 846 - -46.000000 -12.000000 807 - -45.833333 -12.000000 772 - -45.666667 -12.000000 766 - -45.500000 -12.000000 748 - -45.333333 -12.000000 739 - -45.166667 -12.000000 742 - -45.000000 -12.000000 457 - -44.833333 -12.000000 458 - -44.666667 -12.000000 470 - -44.500000 -12.000000 475 - -44.333333 -12.000000 482 - -44.166667 -12.000000 483 - -44.000000 -12.000000 716 - -43.833333 -12.000000 502 - -43.666667 -12.000000 469 - -43.500000 -12.000000 620 - -43.333333 -12.000000 415 - -43.166667 -12.000000 548 - -43.000000 -12.000000 445 - -42.833333 -12.000000 467 - -42.666667 -12.000000 913 - -42.500000 -12.000000 872 - -42.333333 -12.000000 1082 - -42.166667 -12.000000 1175 - -42.000000 -12.000000 833 - -41.833333 -12.000000 806 - -41.666667 -12.000000 843 - -41.500000 -12.000000 1030 - -41.333333 -12.000000 950 - -41.166667 -12.000000 810 - -41.000000 -12.000000 640 - -40.833333 -12.000000 710 - -40.666667 -12.000000 540 - -40.500000 -12.000000 459 - -40.333333 -12.000000 372 - -40.166667 -12.000000 341 - -40.000000 -12.000000 307 - -65.000000 -12.166667 145 - -64.833333 -12.166667 157 - -64.666667 -12.166667 132 - -64.500000 -12.166667 149 - -64.333333 -12.166667 165 - -64.166667 -12.166667 163 - -64.000000 -12.166667 172 - -63.833333 -12.166667 226 - -63.666667 -12.166667 189 - -63.500000 -12.166667 163 - -63.333333 -12.166667 162 - -63.166667 -12.166667 166 - -63.000000 -12.166667 175 - -62.833333 -12.166667 185 - -62.666667 -12.166667 193 - -62.500000 -12.166667 189 - -62.333333 -12.166667 436 - -62.166667 -12.166667 450 - -62.000000 -12.166667 445 - -61.833333 -12.166667 414 - -61.666667 -12.166667 335 - -61.500000 -12.166667 302 - -61.333333 -12.166667 273 - -61.166667 -12.166667 252 - -61.000000 -12.166667 306 - -60.833333 -12.166667 312 - -60.666667 -12.166667 322 - -60.500000 -12.166667 326 - -60.333333 -12.166667 371 - -60.166667 -12.166667 420 - -60.000000 -12.166667 440 - -59.833333 -12.166667 413 - -59.666667 -12.166667 469 - -59.500000 -12.166667 377 - -59.333333 -12.166667 337 - -59.166667 -12.166667 401 - -59.000000 -12.166667 344 - -58.833333 -12.166667 293 - -58.666667 -12.166667 290 - -58.500000 -12.166667 278 - -58.333333 -12.166667 343 - -58.166667 -12.166667 278 - -58.000000 -12.166667 287 - -57.833333 -12.166667 277 - -57.666667 -12.166667 279 - -57.500000 -12.166667 302 - -57.333333 -12.166667 377 - -57.166667 -12.166667 308 - -57.000000 -12.166667 322 - -56.833333 -12.166667 333 - -56.666667 -12.166667 305 - -56.500000 -12.166667 355 - -56.333333 -12.166667 400 - -56.166667 -12.166667 371 - -56.000000 -12.166667 374 - -55.833333 -12.166667 375 - -55.666667 -12.166667 370 - -55.500000 -12.166667 342 - -55.333333 -12.166667 371 - -55.166667 -12.166667 356 - -55.000000 -12.166667 389 - -54.833333 -12.166667 325 - -54.666667 -12.166667 352 - -54.500000 -12.166667 379 - -54.333333 -12.166667 356 - -54.166667 -12.166667 339 - -54.000000 -12.166667 346 - -53.833333 -12.166667 289 - -53.666667 -12.166667 311 - -53.500000 -12.166667 326 - -53.333333 -12.166667 288 - -53.166667 -12.166667 313 - -53.000000 -12.166667 313 - -52.833333 -12.166667 312 - -52.666667 -12.166667 331 - -52.500000 -12.166667 345 - -52.333333 -12.166667 312 - -52.166667 -12.166667 289 - -52.000000 -12.166667 333 - -51.833333 -12.166667 330 - -51.666667 -12.166667 332 - -51.500000 -12.166667 267 - -51.333333 -12.166667 266 - -51.166667 -12.166667 224 - -51.000000 -12.166667 201 - -50.833333 -12.166667 199 - -50.666667 -12.166667 201 - -50.500000 -12.166667 203 - -50.333333 -12.166667 199 - -50.166667 -12.166667 197 - -50.000000 -12.166667 199 - -49.833333 -12.166667 216 - -49.666667 -12.166667 213 - -49.500000 -12.166667 239 - -49.333333 -12.166667 306 - -49.166667 -12.166667 270 - -49.000000 -12.166667 290 - -48.833333 -12.166667 307 - -48.666667 -12.166667 258 - -48.500000 -12.166667 245 - -48.333333 -12.166667 295 - -48.166667 -12.166667 305 - -48.000000 -12.166667 367 - -47.833333 -12.166667 627 - -47.666667 -12.166667 470 - -47.500000 -12.166667 356 - -47.333333 -12.166667 381 - -47.166667 -12.166667 386 - -47.000000 -12.166667 617 - -46.833333 -12.166667 364 - -46.666667 -12.166667 394 - -46.500000 -12.166667 472 - -46.333333 -12.166667 886 - -46.166667 -12.166667 816 - -46.000000 -12.166667 756 - -45.833333 -12.166667 774 - -45.666667 -12.166667 726 - -45.500000 -12.166667 699 - -45.333333 -12.166667 730 - -45.166667 -12.166667 539 - -45.000000 -12.166667 455 - -44.833333 -12.166667 693 - -44.666667 -12.166667 752 - -44.500000 -12.166667 765 - -44.333333 -12.166667 789 - -44.166667 -12.166667 766 - -44.000000 -12.166667 785 - -43.833333 -12.166667 859 - -43.666667 -12.166667 461 - -43.500000 -12.166667 478 - -43.333333 -12.166667 497 - -43.166667 -12.166667 465 - -43.000000 -12.166667 867 - -42.833333 -12.166667 446 - -42.666667 -12.166667 546 - -42.500000 -12.166667 559 - -42.333333 -12.166667 1081 - -42.166667 -12.166667 1086 - -42.000000 -12.166667 917 - -41.833333 -12.166667 1013 - -41.666667 -12.166667 783 - -41.500000 -12.166667 799 - -41.333333 -12.166667 887 - -41.166667 -12.166667 535 - -41.000000 -12.166667 672 - -40.833333 -12.166667 612 - -40.666667 -12.166667 536 - -40.500000 -12.166667 435 - -40.333333 -12.166667 361 - -40.166667 -12.166667 278 - -40.000000 -12.166667 267 - -65.000000 -12.333333 150 - -64.833333 -12.333333 164 - -64.666667 -12.333333 184 - -64.500000 -12.333333 136 - -64.333333 -12.333333 293 - -64.166667 -12.333333 184 - -64.000000 -12.333333 192 - -63.833333 -12.333333 165 - -63.666667 -12.333333 169 - -63.500000 -12.333333 166 - -63.333333 -12.333333 186 - -63.166667 -12.333333 151 - -63.000000 -12.333333 166 - -62.833333 -12.333333 160 - -62.666667 -12.333333 179 - -62.500000 -12.333333 194 - -62.333333 -12.333333 243 - -62.166667 -12.333333 284 - -62.000000 -12.333333 216 - -61.833333 -12.333333 271 - -61.666667 -12.333333 458 - -61.500000 -12.333333 296 - -61.333333 -12.333333 332 - -61.166667 -12.333333 325 - -61.000000 -12.333333 287 - -60.833333 -12.333333 297 - -60.666667 -12.333333 319 - -60.500000 -12.333333 316 - -60.333333 -12.333333 450 - -60.166667 -12.333333 490 - -60.000000 -12.333333 473 - -59.833333 -12.333333 496 - -59.666667 -12.333333 424 - -59.500000 -12.333333 376 - -59.333333 -12.333333 397 - -59.166667 -12.333333 355 - -59.000000 -12.333333 383 - -58.833333 -12.333333 292 - -58.666667 -12.333333 350 - -58.500000 -12.333333 258 - -58.333333 -12.333333 341 - -58.166667 -12.333333 309 - -58.000000 -12.333333 289 - -57.833333 -12.333333 305 - -57.666667 -12.333333 313 - -57.500000 -12.333333 318 - -57.333333 -12.333333 348 - -57.166667 -12.333333 358 - -57.000000 -12.333333 289 - -56.833333 -12.333333 311 - -56.666667 -12.333333 287 - -56.500000 -12.333333 333 - -56.333333 -12.333333 392 - -56.166667 -12.333333 377 - -56.000000 -12.333333 339 - -55.833333 -12.333333 384 - -55.666667 -12.333333 375 - -55.500000 -12.333333 354 - -55.333333 -12.333333 390 - -55.166667 -12.333333 349 - -55.000000 -12.333333 372 - -54.833333 -12.333333 376 - -54.666667 -12.333333 335 - -54.500000 -12.333333 321 - -54.333333 -12.333333 325 - -54.166667 -12.333333 344 - -54.000000 -12.333333 354 - -53.833333 -12.333333 335 - -53.666667 -12.333333 331 - -53.500000 -12.333333 318 - -53.333333 -12.333333 313 - -53.166667 -12.333333 292 - -53.000000 -12.333333 289 - -52.833333 -12.333333 316 - -52.666667 -12.333333 343 - -52.500000 -12.333333 343 - -52.333333 -12.333333 328 - -52.166667 -12.333333 335 - -52.000000 -12.333333 352 - -51.833333 -12.333333 333 - -51.666667 -12.333333 371 - -51.500000 -12.333333 318 - -51.333333 -12.333333 222 - -51.166667 -12.333333 220 - -51.000000 -12.333333 206 - -50.833333 -12.333333 204 - -50.666667 -12.333333 204 - -50.500000 -12.333333 202 - -50.333333 -12.333333 201 - -50.166667 -12.333333 201 - -50.000000 -12.333333 210 - -49.833333 -12.333333 235 - -49.666667 -12.333333 212 - -49.500000 -12.333333 221 - -49.333333 -12.333333 267 - -49.166667 -12.333333 280 - -49.000000 -12.333333 273 - -48.833333 -12.333333 264 - -48.666667 -12.333333 265 - -48.500000 -12.333333 315 - -48.333333 -12.333333 286 - -48.166667 -12.333333 285 - -48.000000 -12.333333 367 - -47.833333 -12.333333 366 - -47.666667 -12.333333 326 - -47.500000 -12.333333 354 - -47.333333 -12.333333 380 - -47.166667 -12.333333 354 - -47.000000 -12.333333 362 - -46.833333 -12.333333 359 - -46.666667 -12.333333 398 - -46.500000 -12.333333 492 - -46.333333 -12.333333 899 - -46.166667 -12.333333 859 - -46.000000 -12.333333 813 - -45.833333 -12.333333 752 - -45.666667 -12.333333 726 - -45.500000 -12.333333 711 - -45.333333 -12.333333 700 - -45.166667 -12.333333 730 - -45.000000 -12.333333 522 - -44.833333 -12.333333 682 - -44.666667 -12.333333 668 - -44.500000 -12.333333 734 - -44.333333 -12.333333 755 - -44.166667 -12.333333 795 - -44.000000 -12.333333 856 - -43.833333 -12.333333 615 - -43.666667 -12.333333 494 - -43.500000 -12.333333 492 - -43.333333 -12.333333 452 - -43.166667 -12.333333 469 - -43.000000 -12.333333 1018 - -42.833333 -12.333333 486 - -42.666667 -12.333333 470 - -42.500000 -12.333333 495 - -42.333333 -12.333333 1157 - -42.166667 -12.333333 1082 - -42.000000 -12.333333 1046 - -41.833333 -12.333333 1092 - -41.666667 -12.333333 744 - -41.500000 -12.333333 692 - -41.333333 -12.333333 810 - -41.166667 -12.333333 458 - -41.000000 -12.333333 637 - -40.833333 -12.333333 620 - -40.666667 -12.333333 503 - -40.500000 -12.333333 601 - -40.333333 -12.333333 343 - -40.166667 -12.333333 269 - -40.000000 -12.333333 291 - -65.000000 -12.500000 140 - -64.833333 -12.500000 159 - -64.666667 -12.500000 154 - -64.500000 -12.500000 143 - -64.333333 -12.500000 135 - -64.166667 -12.500000 136 - -64.000000 -12.500000 138 - -63.833333 -12.500000 141 - -63.666667 -12.500000 143 - -63.500000 -12.500000 146 - -63.333333 -12.500000 139 - -63.166667 -12.500000 140 - -63.000000 -12.500000 159 - -62.833333 -12.500000 179 - -62.666667 -12.500000 183 - -62.500000 -12.500000 301 - -62.333333 -12.500000 256 - -62.166667 -12.500000 193 - -62.000000 -12.500000 205 - -61.833333 -12.500000 243 - -61.666667 -12.500000 469 - -61.500000 -12.500000 428 - -61.333333 -12.500000 407 - -61.166667 -12.500000 344 - -61.000000 -12.500000 263 - -60.833333 -12.500000 342 - -60.666667 -12.500000 448 - -60.500000 -12.500000 461 - -60.333333 -12.500000 473 - -60.166667 -12.500000 518 - -60.000000 -12.500000 596 - -59.833333 -12.500000 505 - -59.666667 -12.500000 368 - -59.500000 -12.500000 337 - -59.333333 -12.500000 365 - -59.166667 -12.500000 367 - -59.000000 -12.500000 412 - -58.833333 -12.500000 370 - -58.666667 -12.500000 352 - -58.500000 -12.500000 314 - -58.333333 -12.500000 322 - -58.166667 -12.500000 354 - -58.000000 -12.500000 333 - -57.833333 -12.500000 330 - -57.666667 -12.500000 271 - -57.500000 -12.500000 329 - -57.333333 -12.500000 302 - -57.166667 -12.500000 342 - -57.000000 -12.500000 304 - -56.833333 -12.500000 317 - -56.666667 -12.500000 353 - -56.500000 -12.500000 323 - -56.333333 -12.500000 345 - -56.166667 -12.500000 382 - -56.000000 -12.500000 369 - -55.833333 -12.500000 362 - -55.666667 -12.500000 384 - -55.500000 -12.500000 356 - -55.333333 -12.500000 408 - -55.166667 -12.500000 409 - -55.000000 -12.500000 402 - -54.833333 -12.500000 356 - -54.666667 -12.500000 345 - -54.500000 -12.500000 335 - -54.333333 -12.500000 362 - -54.166667 -12.500000 320 - -54.000000 -12.500000 321 - -53.833333 -12.500000 349 - -53.666667 -12.500000 323 - -53.500000 -12.500000 301 - -53.333333 -12.500000 321 - -53.166667 -12.500000 317 - -53.000000 -12.500000 326 - -52.833333 -12.500000 333 - -52.666667 -12.500000 334 - -52.500000 -12.500000 352 - -52.333333 -12.500000 320 - -52.166667 -12.500000 345 - -52.000000 -12.500000 325 - -51.833333 -12.500000 356 - -51.666667 -12.500000 387 - -51.500000 -12.500000 323 - -51.333333 -12.500000 231 - -51.166667 -12.500000 213 - -51.000000 -12.500000 207 - -50.833333 -12.500000 207 - -50.666667 -12.500000 205 - -50.500000 -12.500000 206 - -50.333333 -12.500000 207 - -50.166667 -12.500000 225 - -50.000000 -12.500000 226 - -49.833333 -12.500000 306 - -49.666667 -12.500000 260 - -49.500000 -12.500000 245 - -49.333333 -12.500000 226 - -49.166667 -12.500000 268 - -49.000000 -12.500000 262 - -48.833333 -12.500000 268 - -48.666667 -12.500000 286 - -48.500000 -12.500000 319 - -48.333333 -12.500000 316 - -48.166667 -12.500000 269 - -48.000000 -12.500000 308 - -47.833333 -12.500000 339 - -47.666667 -12.500000 320 - -47.500000 -12.500000 328 - -47.333333 -12.500000 336 - -47.166667 -12.500000 353 - -47.000000 -12.500000 396 - -46.833333 -12.500000 362 - -46.666667 -12.500000 411 - -46.500000 -12.500000 470 - -46.333333 -12.500000 553 - -46.166667 -12.500000 788 - -46.000000 -12.500000 821 - -45.833333 -12.500000 779 - -45.666667 -12.500000 732 - -45.500000 -12.500000 723 - -45.333333 -12.500000 709 - -45.166667 -12.500000 732 - -45.000000 -12.500000 696 - -44.833333 -12.500000 706 - -44.666667 -12.500000 740 - -44.500000 -12.500000 776 - -44.333333 -12.500000 786 - -44.166667 -12.500000 833 - -44.000000 -12.500000 632 - -43.833333 -12.500000 471 - -43.666667 -12.500000 450 - -43.500000 -12.500000 453 - -43.333333 -12.500000 583 - -43.166667 -12.500000 440 - -43.000000 -12.500000 532 - -42.833333 -12.500000 653 - -42.666667 -12.500000 474 - -42.500000 -12.500000 504 - -42.333333 -12.500000 864 - -42.166667 -12.500000 966 - -42.000000 -12.500000 1179 - -41.833333 -12.500000 993 - -41.666667 -12.500000 964 - -41.500000 -12.500000 991 - -41.333333 -12.500000 402 - -41.166667 -12.500000 462 - -41.000000 -12.500000 621 - -40.833333 -12.500000 546 - -40.666667 -12.500000 540 - -40.500000 -12.500000 359 - -40.333333 -12.500000 334 - -40.166667 -12.500000 251 - -40.000000 -12.500000 233 - -65.000000 -12.666667 134 - -64.833333 -12.666667 133 - -64.666667 -12.666667 158 - -64.500000 -12.666667 143 - -64.333333 -12.666667 144 - -64.166667 -12.666667 150 - -64.000000 -12.666667 131 - -63.833333 -12.666667 154 - -63.666667 -12.666667 151 - -63.500000 -12.666667 155 - -63.333333 -12.666667 142 - -63.166667 -12.666667 147 - -63.000000 -12.666667 141 - -62.833333 -12.666667 143 - -62.666667 -12.666667 174 - -62.500000 -12.666667 192 - -62.333333 -12.666667 190 - -62.166667 -12.666667 177 - -62.000000 -12.666667 192 - -61.833333 -12.666667 204 - -61.666667 -12.666667 349 - -61.500000 -12.666667 201 - -61.333333 -12.666667 378 - -61.166667 -12.666667 333 - -61.000000 -12.666667 309 - -60.833333 -12.666667 295 - -60.666667 -12.666667 333 - -60.500000 -12.666667 483 - -60.333333 -12.666667 552 - -60.166667 -12.666667 522 - -60.000000 -12.666667 507 - -59.833333 -12.666667 429 - -59.666667 -12.666667 322 - -59.500000 -12.666667 438 - -59.333333 -12.666667 354 - -59.166667 -12.666667 449 - -59.000000 -12.666667 353 - -58.833333 -12.666667 421 - -58.666667 -12.666667 353 - -58.500000 -12.666667 331 - -58.333333 -12.666667 321 - -58.166667 -12.666667 398 - -58.000000 -12.666667 411 - -57.833333 -12.666667 345 - -57.666667 -12.666667 328 - -57.500000 -12.666667 340 - -57.333333 -12.666667 339 - -57.166667 -12.666667 326 - -57.000000 -12.666667 322 - -56.833333 -12.666667 291 - -56.666667 -12.666667 326 - -56.500000 -12.666667 344 - -56.333333 -12.666667 397 - -56.166667 -12.666667 347 - -56.000000 -12.666667 406 - -55.833333 -12.666667 378 - -55.666667 -12.666667 373 - -55.500000 -12.666667 393 - -55.333333 -12.666667 419 - -55.166667 -12.666667 423 - -55.000000 -12.666667 379 - -54.833333 -12.666667 355 - -54.666667 -12.666667 338 - -54.500000 -12.666667 350 - -54.333333 -12.666667 317 - -54.166667 -12.666667 347 - -54.000000 -12.666667 358 - -53.833333 -12.666667 315 - -53.666667 -12.666667 340 - -53.500000 -12.666667 336 - -53.333333 -12.666667 326 - -53.166667 -12.666667 330 - -53.000000 -12.666667 309 - -52.833333 -12.666667 329 - -52.666667 -12.666667 306 - -52.500000 -12.666667 347 - -52.333333 -12.666667 319 - -52.166667 -12.666667 368 - -52.000000 -12.666667 373 - -51.833333 -12.666667 356 - -51.666667 -12.666667 313 - -51.500000 -12.666667 273 - -51.333333 -12.666667 228 - -51.166667 -12.666667 212 - -51.000000 -12.666667 212 - -50.833333 -12.666667 209 - -50.666667 -12.666667 208 - -50.500000 -12.666667 210 - -50.333333 -12.666667 209 - -50.166667 -12.666667 214 - -50.000000 -12.666667 235 - -49.833333 -12.666667 280 - -49.666667 -12.666667 274 - -49.500000 -12.666667 257 - -49.333333 -12.666667 223 - -49.166667 -12.666667 245 - -49.000000 -12.666667 273 - -48.833333 -12.666667 287 - -48.666667 -12.666667 564 - -48.500000 -12.666667 420 - -48.333333 -12.666667 338 - -48.166667 -12.666667 361 - -48.000000 -12.666667 323 - -47.833333 -12.666667 282 - -47.666667 -12.666667 339 - -47.500000 -12.666667 341 - -47.333333 -12.666667 384 - -47.166667 -12.666667 377 - -47.000000 -12.666667 535 - -46.833333 -12.666667 423 - -46.666667 -12.666667 384 - -46.500000 -12.666667 443 - -46.333333 -12.666667 533 - -46.166667 -12.666667 886 - -46.000000 -12.666667 835 - -45.833333 -12.666667 765 - -45.666667 -12.666667 759 - -45.500000 -12.666667 731 - -45.333333 -12.666667 737 - -45.166667 -12.666667 722 - -45.000000 -12.666667 708 - -44.833333 -12.666667 741 - -44.666667 -12.666667 778 - -44.500000 -12.666667 786 - -44.333333 -12.666667 782 - -44.166667 -12.666667 767 - -44.000000 -12.666667 528 - -43.833333 -12.666667 486 - -43.666667 -12.666667 460 - -43.500000 -12.666667 440 - -43.333333 -12.666667 441 - -43.166667 -12.666667 427 - -43.000000 -12.666667 474 - -42.833333 -12.666667 984 - -42.666667 -12.666667 519 - -42.500000 -12.666667 526 - -42.333333 -12.666667 572 - -42.166667 -12.666667 1225 - -42.000000 -12.666667 1197 - -41.833333 -12.666667 1030 - -41.666667 -12.666667 953 - -41.500000 -12.666667 1307 - -41.333333 -12.666667 346 - -41.166667 -12.666667 411 - -41.000000 -12.666667 598 - -40.833333 -12.666667 512 - -40.666667 -12.666667 349 - -40.500000 -12.666667 436 - -40.333333 -12.666667 280 - -40.166667 -12.666667 251 - -40.000000 -12.666667 227 - -65.000000 -12.833333 139 - -64.833333 -12.833333 141 - -64.666667 -12.833333 153 - -64.500000 -12.833333 141 - -64.333333 -12.833333 138 - -64.166667 -12.833333 175 - -64.000000 -12.833333 146 - -63.833333 -12.833333 138 - -63.666667 -12.833333 154 - -63.500000 -12.833333 158 - -63.333333 -12.833333 182 - -63.166667 -12.833333 154 - -63.000000 -12.833333 150 - -62.833333 -12.833333 143 - -62.666667 -12.833333 145 - -62.500000 -12.833333 149 - -62.333333 -12.833333 160 - -62.166667 -12.833333 188 - -62.000000 -12.833333 167 - -61.833333 -12.833333 163 - -61.666667 -12.833333 186 - -61.500000 -12.833333 193 - -61.333333 -12.833333 236 - -61.166667 -12.833333 294 - -61.000000 -12.833333 299 - -60.833333 -12.833333 301 - -60.666667 -12.833333 374 - -60.500000 -12.833333 338 - -60.333333 -12.833333 502 - -60.166667 -12.833333 570 - -60.000000 -12.833333 589 - -59.833333 -12.833333 521 - -59.666667 -12.833333 481 - -59.500000 -12.833333 457 - -59.333333 -12.833333 439 - -59.166667 -12.833333 366 - -59.000000 -12.833333 427 - -58.833333 -12.833333 387 - -58.666667 -12.833333 345 - -58.500000 -12.833333 391 - -58.333333 -12.833333 326 - -58.166667 -12.833333 408 - -58.000000 -12.833333 408 - -57.833333 -12.833333 413 - -57.666667 -12.833333 340 - -57.500000 -12.833333 335 - -57.333333 -12.833333 319 - -57.166667 -12.833333 354 - -57.000000 -12.833333 338 - -56.833333 -12.833333 322 - -56.666667 -12.833333 298 - -56.500000 -12.833333 380 - -56.333333 -12.833333 404 - -56.166667 -12.833333 369 - -56.000000 -12.833333 366 - -55.833333 -12.833333 403 - -55.666667 -12.833333 337 - -55.500000 -12.833333 417 - -55.333333 -12.833333 427 - -55.166667 -12.833333 415 - -55.000000 -12.833333 378 - -54.833333 -12.833333 363 - -54.666667 -12.833333 348 - -54.500000 -12.833333 381 - -54.333333 -12.833333 317 - -54.166667 -12.833333 316 - -54.000000 -12.833333 352 - -53.833333 -12.833333 338 - -53.666667 -12.833333 360 - -53.500000 -12.833333 357 - -53.333333 -12.833333 344 - -53.166667 -12.833333 342 - -53.000000 -12.833333 307 - -52.833333 -12.833333 304 - -52.666667 -12.833333 347 - -52.500000 -12.833333 335 - -52.333333 -12.833333 348 - -52.166667 -12.833333 377 - -52.000000 -12.833333 350 - -51.833333 -12.833333 382 - -51.666667 -12.833333 294 - -51.500000 -12.833333 242 - -51.333333 -12.833333 224 - -51.166667 -12.833333 214 - -51.000000 -12.833333 214 - -50.833333 -12.833333 210 - -50.666667 -12.833333 213 - -50.500000 -12.833333 214 - -50.333333 -12.833333 212 - -50.166667 -12.833333 285 - -50.000000 -12.833333 293 - -49.833333 -12.833333 315 - -49.666667 -12.833333 261 - -49.500000 -12.833333 265 - -49.333333 -12.833333 244 - -49.166667 -12.833333 261 - -49.000000 -12.833333 296 - -48.833333 -12.833333 308 - -48.666667 -12.833333 409 - -48.500000 -12.833333 429 - -48.333333 -12.833333 348 - -48.166667 -12.833333 441 - -48.000000 -12.833333 910 - -47.833333 -12.833333 317 - -47.666667 -12.833333 336 - -47.500000 -12.833333 371 - -47.333333 -12.833333 407 - -47.166667 -12.833333 444 - -47.000000 -12.833333 572 - -46.833333 -12.833333 733 - -46.666667 -12.833333 622 - -46.500000 -12.833333 425 - -46.333333 -12.833333 559 - -46.166667 -12.833333 905 - -46.000000 -12.833333 790 - -45.833333 -12.833333 807 - -45.666667 -12.833333 749 - -45.500000 -12.833333 756 - -45.333333 -12.833333 720 - -45.166667 -12.833333 741 - -45.000000 -12.833333 735 - -44.833333 -12.833333 767 - -44.666667 -12.833333 749 - -44.500000 -12.833333 788 - -44.333333 -12.833333 812 - -44.166667 -12.833333 829 - -44.000000 -12.833333 720 - -43.833333 -12.833333 505 - -43.666667 -12.833333 465 - -43.500000 -12.833333 442 - -43.333333 -12.833333 424 - -43.166667 -12.833333 447 - -43.000000 -12.833333 628 - -42.833333 -12.833333 866 - -42.666667 -12.833333 590 - -42.500000 -12.833333 501 - -42.333333 -12.833333 541 - -42.166667 -12.833333 873 - -42.000000 -12.833333 1155 - -41.833333 -12.833333 1103 - -41.666667 -12.833333 1260 - -41.500000 -12.833333 1154 - -41.333333 -12.833333 533 - -41.166667 -12.833333 363 - -41.000000 -12.833333 536 - -40.833333 -12.833333 652 - -40.666667 -12.833333 368 - -40.500000 -12.833333 450 - -40.333333 -12.833333 413 - -40.166667 -12.833333 300 - -40.000000 -12.833333 292 - -65.000000 -13.000000 143 - -64.833333 -13.000000 138 - -64.666667 -13.000000 138 - -64.500000 -13.000000 146 - -64.333333 -13.000000 134 - -64.166667 -13.000000 135 - -64.000000 -13.000000 146 - -63.833333 -13.000000 144 - -63.666667 -13.000000 175 - -63.500000 -13.000000 169 - -63.333333 -13.000000 179 - -63.166667 -13.000000 139 - -63.000000 -13.000000 149 - -62.833333 -13.000000 157 - -62.666667 -13.000000 158 - -62.500000 -13.000000 156 - -62.333333 -13.000000 220 - -62.166667 -13.000000 151 - -62.000000 -13.000000 160 - -61.833333 -13.000000 159 - -61.666667 -13.000000 179 - -61.500000 -13.000000 168 - -61.333333 -13.000000 205 - -61.166667 -13.000000 221 - -61.000000 -13.000000 253 - -60.833333 -13.000000 263 - -60.666667 -13.000000 554 - -60.500000 -13.000000 362 - -60.333333 -13.000000 322 - -60.166667 -13.000000 372 - -60.000000 -13.000000 566 - -59.833333 -13.000000 555 - -59.666667 -13.000000 535 - -59.500000 -13.000000 478 - -59.333333 -13.000000 449 - -59.166667 -13.000000 391 - -59.000000 -13.000000 431 - -58.833333 -13.000000 425 - -58.666667 -13.000000 457 - -58.500000 -13.000000 386 - -58.333333 -13.000000 378 - -58.166667 -13.000000 398 - -58.000000 -13.000000 415 - -57.833333 -13.000000 425 - -57.666667 -13.000000 375 - -57.500000 -13.000000 339 - -57.333333 -13.000000 319 - -57.166667 -13.000000 331 - -57.000000 -13.000000 386 - -56.833333 -13.000000 331 - -56.666667 -13.000000 300 - -56.500000 -13.000000 340 - -56.333333 -13.000000 371 - -56.166667 -13.000000 402 - -56.000000 -13.000000 405 - -55.833333 -13.000000 410 - -55.666667 -13.000000 356 - -55.500000 -13.000000 415 - -55.333333 -13.000000 418 - -55.166667 -13.000000 445 - -55.000000 -13.000000 403 - -54.833333 -13.000000 357 - -54.666667 -13.000000 347 - -54.500000 -13.000000 380 - -54.333333 -13.000000 365 - -54.166667 -13.000000 362 - -54.000000 -13.000000 325 - -53.833333 -13.000000 382 - -53.666667 -13.000000 359 - -53.500000 -13.000000 371 - -53.333333 -13.000000 343 - -53.166667 -13.000000 364 - -53.000000 -13.000000 335 - -52.833333 -13.000000 344 - -52.666667 -13.000000 367 - -52.500000 -13.000000 367 - -52.333333 -13.000000 355 - -52.166667 -13.000000 342 - -52.000000 -13.000000 397 - -51.833333 -13.000000 360 - -51.666667 -13.000000 261 - -51.500000 -13.000000 236 - -51.333333 -13.000000 224 - -51.166667 -13.000000 219 - -51.000000 -13.000000 217 - -50.833333 -13.000000 215 - -50.666667 -13.000000 216 - -50.500000 -13.000000 212 - -50.333333 -13.000000 221 - -50.166667 -13.000000 259 - -50.000000 -13.000000 270 - -49.833333 -13.000000 277 - -49.666667 -13.000000 294 - -49.500000 -13.000000 244 - -49.333333 -13.000000 285 - -49.166667 -13.000000 304 - -49.000000 -13.000000 409 - -48.833333 -13.000000 306 - -48.666667 -13.000000 344 - -48.500000 -13.000000 774 - -48.333333 -13.000000 432 - -48.166667 -13.000000 302 - -48.000000 -13.000000 743 - -47.833333 -13.000000 371 - -47.666667 -13.000000 335 - -47.500000 -13.000000 353 - -47.333333 -13.000000 404 - -47.166667 -13.000000 409 - -47.000000 -13.000000 584 - -46.833333 -13.000000 579 - -46.666667 -13.000000 638 - -46.500000 -13.000000 693 - -46.333333 -13.000000 684 - -46.166667 -13.000000 922 - -46.000000 -13.000000 841 - -45.833333 -13.000000 828 - -45.666667 -13.000000 777 - -45.500000 -13.000000 764 - -45.333333 -13.000000 762 - -45.166667 -13.000000 754 - -45.000000 -13.000000 752 - -44.833333 -13.000000 650 - -44.666667 -13.000000 702 - -44.500000 -13.000000 747 - -44.333333 -13.000000 783 - -44.166667 -13.000000 631 - -44.000000 -13.000000 522 - -43.833333 -13.000000 473 - -43.666667 -13.000000 461 - -43.500000 -13.000000 439 - -43.333333 -13.000000 430 - -43.166667 -13.000000 452 - -43.000000 -13.000000 883 - -42.833333 -13.000000 922 - -42.666667 -13.000000 634 - -42.500000 -13.000000 544 - -42.333333 -13.000000 554 - -42.166667 -13.000000 884 - -42.000000 -13.000000 1263 - -41.833333 -13.000000 1279 - -41.666667 -13.000000 1242 - -41.500000 -13.000000 1087 - -41.333333 -13.000000 982 - -41.166667 -13.000000 445 - -41.000000 -13.000000 604 - -40.833333 -13.000000 320 - -40.666667 -13.000000 281 - -40.500000 -13.000000 296 - -40.333333 -13.000000 718 - -40.166667 -13.000000 542 - -40.000000 -13.000000 538 - -65.000000 -13.166667 136 - -64.833333 -13.166667 134 - -64.666667 -13.166667 138 - -64.500000 -13.166667 139 - -64.333333 -13.166667 136 - -64.166667 -13.166667 137 - -64.000000 -13.166667 141 - -63.833333 -13.166667 140 - -63.666667 -13.166667 153 - -63.500000 -13.166667 198 - -63.333333 -13.166667 164 - -63.166667 -13.166667 148 - -63.000000 -13.166667 141 - -62.833333 -13.166667 188 - -62.666667 -13.166667 169 - -62.500000 -13.166667 175 - -62.333333 -13.166667 162 - -62.166667 -13.166667 165 - -62.000000 -13.166667 160 - -61.833333 -13.166667 158 - -61.666667 -13.166667 166 - -61.500000 -13.166667 174 - -61.333333 -13.166667 185 - -61.166667 -13.166667 193 - -61.000000 -13.166667 232 - -60.833333 -13.166667 255 - -60.666667 -13.166667 269 - -60.500000 -13.166667 412 - -60.333333 -13.166667 274 - -60.166667 -13.166667 291 - -60.000000 -13.166667 469 - -59.833333 -13.166667 559 - -59.666667 -13.166667 501 - -59.500000 -13.166667 438 - -59.333333 -13.166667 423 - -59.166667 -13.166667 437 - -59.000000 -13.166667 374 - -58.833333 -13.166667 487 - -58.666667 -13.166667 513 - -58.500000 -13.166667 444 - -58.333333 -13.166667 429 - -58.166667 -13.166667 415 - -58.000000 -13.166667 483 - -57.833333 -13.166667 478 - -57.666667 -13.166667 392 - -57.500000 -13.166667 313 - -57.333333 -13.166667 376 - -57.166667 -13.166667 308 - -57.000000 -13.166667 377 - -56.833333 -13.166667 351 - -56.666667 -13.166667 320 - -56.500000 -13.166667 397 - -56.333333 -13.166667 367 - -56.166667 -13.166667 415 - -56.000000 -13.166667 410 - -55.833333 -13.166667 405 - -55.666667 -13.166667 349 - -55.500000 -13.166667 431 - -55.333333 -13.166667 439 - -55.166667 -13.166667 437 - -55.000000 -13.166667 432 - -54.833333 -13.166667 354 - -54.666667 -13.166667 400 - -54.500000 -13.166667 383 - -54.333333 -13.166667 390 - -54.166667 -13.166667 352 - -54.000000 -13.166667 325 - -53.833333 -13.166667 392 - -53.666667 -13.166667 357 - -53.500000 -13.166667 356 - -53.333333 -13.166667 378 - -53.166667 -13.166667 399 - -53.000000 -13.166667 390 - -52.833333 -13.166667 379 - -52.666667 -13.166667 318 - -52.500000 -13.166667 360 - -52.333333 -13.166667 366 - -52.166667 -13.166667 353 - -52.000000 -13.166667 333 - -51.833333 -13.166667 386 - -51.666667 -13.166667 309 - -51.500000 -13.166667 250 - -51.333333 -13.166667 230 - -51.166667 -13.166667 218 - -51.000000 -13.166667 219 - -50.833333 -13.166667 216 - -50.666667 -13.166667 214 - -50.500000 -13.166667 214 - -50.333333 -13.166667 255 - -50.166667 -13.166667 350 - -50.000000 -13.166667 312 - -49.833333 -13.166667 296 - -49.666667 -13.166667 284 - -49.500000 -13.166667 253 - -49.333333 -13.166667 312 - -49.166667 -13.166667 313 - -49.000000 -13.166667 327 - -48.833333 -13.166667 313 - -48.666667 -13.166667 519 - -48.500000 -13.166667 660 - -48.333333 -13.166667 444 - -48.166667 -13.166667 310 - -48.000000 -13.166667 551 - -47.833333 -13.166667 878 - -47.666667 -13.166667 332 - -47.500000 -13.166667 341 - -47.333333 -13.166667 415 - -47.166667 -13.166667 424 - -47.000000 -13.166667 490 - -46.833333 -13.166667 677 - -46.666667 -13.166667 543 - -46.500000 -13.166667 608 - -46.333333 -13.166667 745 - -46.166667 -13.166667 942 - -46.000000 -13.166667 869 - -45.833333 -13.166667 841 - -45.666667 -13.166667 801 - -45.500000 -13.166667 761 - -45.333333 -13.166667 735 - -45.166667 -13.166667 760 - -45.000000 -13.166667 675 - -44.833333 -13.166667 734 - -44.666667 -13.166667 611 - -44.500000 -13.166667 694 - -44.333333 -13.166667 781 - -44.166667 -13.166667 642 - -44.000000 -13.166667 517 - -43.833333 -13.166667 472 - -43.666667 -13.166667 436 - -43.500000 -13.166667 436 - -43.333333 -13.166667 442 - -43.166667 -13.166667 450 - -43.000000 -13.166667 493 - -42.833333 -13.166667 659 - -42.666667 -13.166667 680 - -42.500000 -13.166667 622 - -42.333333 -13.166667 568 - -42.166667 -13.166667 908 - -42.000000 -13.166667 1185 - -41.833333 -13.166667 1349 - -41.666667 -13.166667 906 - -41.500000 -13.166667 1146 - -41.333333 -13.166667 1387 - -41.166667 -13.166667 835 - -41.000000 -13.166667 572 - -40.833333 -13.166667 391 - -40.666667 -13.166667 323 - -40.500000 -13.166667 629 - -40.333333 -13.166667 819 - -40.166667 -13.166667 842 - -40.000000 -13.166667 596 - -65.000000 -13.333333 137 - -64.833333 -13.333333 140 - -64.666667 -13.333333 138 - -64.500000 -13.333333 135 - -64.333333 -13.333333 137 - -64.166667 -13.333333 140 - -64.000000 -13.333333 140 - -63.833333 -13.333333 140 - -63.666667 -13.333333 142 - -63.500000 -13.333333 152 - -63.333333 -13.333333 143 - -63.166667 -13.333333 143 - -63.000000 -13.333333 147 - -62.833333 -13.333333 164 - -62.666667 -13.333333 210 - -62.500000 -13.333333 213 - -62.333333 -13.333333 152 - -62.166667 -13.333333 159 - -62.000000 -13.333333 166 - -61.833333 -13.333333 156 - -61.666667 -13.333333 161 - -61.500000 -13.333333 164 - -61.333333 -13.333333 166 - -61.166667 -13.333333 179 - -61.000000 -13.333333 193 - -60.833333 -13.333333 204 - -60.666667 -13.333333 239 - -60.500000 -13.333333 359 - -60.333333 -13.333333 248 - -60.166667 -13.333333 396 - -60.000000 -13.333333 456 - -59.833333 -13.333333 609 - -59.666667 -13.333333 568 - -59.500000 -13.333333 455 - -59.333333 -13.333333 509 - -59.166667 -13.333333 457 - -59.000000 -13.333333 443 - -58.833333 -13.333333 494 - -58.666667 -13.333333 471 - -58.500000 -13.333333 522 - -58.333333 -13.333333 433 - -58.166667 -13.333333 504 - -58.000000 -13.333333 478 - -57.833333 -13.333333 449 - -57.666667 -13.333333 434 - -57.500000 -13.333333 391 - -57.333333 -13.333333 364 - -57.166667 -13.333333 354 - -57.000000 -13.333333 317 - -56.833333 -13.333333 343 - -56.666667 -13.333333 328 - -56.500000 -13.333333 349 - -56.333333 -13.333333 375 - -56.166667 -13.333333 404 - -56.000000 -13.333333 427 - -55.833333 -13.333333 413 - -55.666667 -13.333333 442 - -55.500000 -13.333333 353 - -55.333333 -13.333333 446 - -55.166667 -13.333333 431 - -55.000000 -13.333333 448 - -54.833333 -13.333333 413 - -54.666667 -13.333333 450 - -54.500000 -13.333333 423 - -54.333333 -13.333333 452 - -54.166667 -13.333333 407 - -54.000000 -13.333333 387 - -53.833333 -13.333333 391 - -53.666667 -13.333333 395 - -53.500000 -13.333333 397 - -53.333333 -13.333333 361 - -53.166667 -13.333333 414 - -53.000000 -13.333333 318 - -52.833333 -13.333333 394 - -52.666667 -13.333333 373 - -52.500000 -13.333333 307 - -52.333333 -13.333333 345 - -52.166667 -13.333333 370 - -52.000000 -13.333333 370 - -51.833333 -13.333333 395 - -51.666667 -13.333333 260 - -51.500000 -13.333333 242 - -51.333333 -13.333333 224 - -51.166667 -13.333333 224 - -51.000000 -13.333333 220 - -50.833333 -13.333333 220 - -50.666667 -13.333333 223 - -50.500000 -13.333333 235 - -50.333333 -13.333333 288 - -50.166667 -13.333333 332 - -50.000000 -13.333333 245 - -49.833333 -13.333333 268 - -49.666667 -13.333333 292 - -49.500000 -13.333333 304 - -49.333333 -13.333333 459 - -49.166667 -13.333333 359 - -49.000000 -13.333333 316 - -48.833333 -13.333333 338 - -48.666667 -13.333333 411 - -48.500000 -13.333333 712 - -48.333333 -13.333333 393 - -48.166667 -13.333333 300 - -48.000000 -13.333333 856 - -47.833333 -13.333333 978 - -47.666667 -13.333333 457 - -47.500000 -13.333333 617 - -47.333333 -13.333333 447 - -47.166667 -13.333333 459 - -47.000000 -13.333333 432 - -46.833333 -13.333333 684 - -46.666667 -13.333333 488 - -46.500000 -13.333333 609 - -46.333333 -13.333333 688 - -46.166667 -13.333333 942 - -46.000000 -13.333333 888 - -45.833333 -13.333333 828 - -45.666667 -13.333333 799 - -45.500000 -13.333333 766 - -45.333333 -13.333333 770 - -45.166667 -13.333333 731 - -45.000000 -13.333333 759 - -44.833333 -13.333333 674 - -44.666667 -13.333333 603 - -44.500000 -13.333333 573 - -44.333333 -13.333333 601 - -44.166667 -13.333333 599 - -44.000000 -13.333333 465 - -43.833333 -13.333333 478 - -43.666667 -13.333333 460 - -43.500000 -13.333333 437 - -43.333333 -13.333333 444 - -43.166667 -13.333333 465 - -43.000000 -13.333333 650 - -42.833333 -13.333333 728 - -42.666667 -13.333333 856 - -42.500000 -13.333333 635 - -42.333333 -13.333333 600 - -42.166667 -13.333333 783 - -42.000000 -13.333333 1014 - -41.833333 -13.333333 1220 - -41.666667 -13.333333 820 - -41.500000 -13.333333 1206 - -41.333333 -13.333333 1084 - -41.166667 -13.333333 689 - -41.000000 -13.333333 695 - -40.833333 -13.333333 488 - -40.666667 -13.333333 477 - -40.500000 -13.333333 898 - -40.333333 -13.333333 807 - -40.166667 -13.333333 644 - -40.000000 -13.333333 696 - -65.000000 -13.500000 137 - -64.833333 -13.500000 136 - -64.666667 -13.500000 139 - -64.500000 -13.500000 138 - -64.333333 -13.500000 142 - -64.166667 -13.500000 140 - -64.000000 -13.500000 140 - -63.833333 -13.500000 144 - -63.666667 -13.500000 143 - -63.500000 -13.500000 142 - -63.333333 -13.500000 143 - -63.166667 -13.500000 145 - -63.000000 -13.500000 145 - -62.833333 -13.500000 149 - -62.666667 -13.500000 200 - -62.500000 -13.500000 205 - -62.333333 -13.500000 173 - -62.166667 -13.500000 178 - -62.000000 -13.500000 175 - -61.833333 -13.500000 170 - -61.666667 -13.500000 162 - -61.500000 -13.500000 174 - -61.333333 -13.500000 170 - -61.166667 -13.500000 171 - -61.000000 -13.500000 170 - -60.833333 -13.500000 189 - -60.666667 -13.500000 205 - -60.500000 -13.500000 207 - -60.333333 -13.500000 243 - -60.166667 -13.500000 259 - -60.000000 -13.500000 486 - -59.833333 -13.500000 633 - -59.666667 -13.500000 634 - -59.500000 -13.500000 553 - -59.333333 -13.500000 546 - -59.166667 -13.500000 530 - -59.000000 -13.500000 513 - -58.833333 -13.500000 527 - -58.666667 -13.500000 543 - -58.500000 -13.500000 550 - -58.333333 -13.500000 469 - -58.166667 -13.500000 539 - -58.000000 -13.500000 508 - -57.833333 -13.500000 529 - -57.666667 -13.500000 428 - -57.500000 -13.500000 499 - -57.333333 -13.500000 350 - -57.166667 -13.500000 376 - -57.000000 -13.500000 351 - -56.833333 -13.500000 390 - -56.666667 -13.500000 337 - -56.500000 -13.500000 341 - -56.333333 -13.500000 361 - -56.166667 -13.500000 388 - -56.000000 -13.500000 411 - -55.833333 -13.500000 435 - -55.666667 -13.500000 421 - -55.500000 -13.500000 431 - -55.333333 -13.500000 361 - -55.166667 -13.500000 470 - -55.000000 -13.500000 451 - -54.833333 -13.500000 455 - -54.666667 -13.500000 407 - -54.500000 -13.500000 427 - -54.333333 -13.500000 489 - -54.166667 -13.500000 426 - -54.000000 -13.500000 483 - -53.833333 -13.500000 466 - -53.666667 -13.500000 350 - -53.500000 -13.500000 416 - -53.333333 -13.500000 369 - -53.166667 -13.500000 371 - -53.000000 -13.500000 381 - -52.833333 -13.500000 414 - -52.666667 -13.500000 356 - -52.500000 -13.500000 348 - -52.333333 -13.500000 399 - -52.166667 -13.500000 385 - -52.000000 -13.500000 408 - -51.833333 -13.500000 459 - -51.666667 -13.500000 275 - -51.500000 -13.500000 238 - -51.333333 -13.500000 228 - -51.166667 -13.500000 225 - -51.000000 -13.500000 223 - -50.833333 -13.500000 222 - -50.666667 -13.500000 223 - -50.500000 -13.500000 225 - -50.333333 -13.500000 249 - -50.166667 -13.500000 246 - -50.000000 -13.500000 235 - -49.833333 -13.500000 247 - -49.666667 -13.500000 301 - -49.500000 -13.500000 405 - -49.333333 -13.500000 437 - -49.166667 -13.500000 351 - -49.000000 -13.500000 335 - -48.833333 -13.500000 338 - -48.666667 -13.500000 472 - -48.500000 -13.500000 807 - -48.333333 -13.500000 384 - -48.166667 -13.500000 341 - -48.000000 -13.500000 444 - -47.833333 -13.500000 697 - -47.666667 -13.500000 1161 - -47.500000 -13.500000 1191 - -47.333333 -13.500000 393 - -47.166667 -13.500000 418 - -47.000000 -13.500000 431 - -46.833333 -13.500000 635 - -46.666667 -13.500000 434 - -46.500000 -13.500000 545 - -46.333333 -13.500000 727 - -46.166667 -13.500000 962 - -46.000000 -13.500000 890 - -45.833333 -13.500000 832 - -45.666667 -13.500000 803 - -45.500000 -13.500000 728 - -45.333333 -13.500000 720 - -45.166667 -13.500000 677 - -45.000000 -13.500000 743 - -44.833333 -13.500000 642 - -44.666667 -13.500000 564 - -44.500000 -13.500000 615 - -44.333333 -13.500000 534 - -44.166667 -13.500000 655 - -44.000000 -13.500000 622 - -43.833333 -13.500000 737 - -43.666667 -13.500000 463 - -43.500000 -13.500000 429 - -43.333333 -13.500000 448 - -43.166667 -13.500000 549 - -43.000000 -13.500000 580 - -42.833333 -13.500000 1033 - -42.666667 -13.500000 756 - -42.500000 -13.500000 797 - -42.333333 -13.500000 659 - -42.166667 -13.500000 796 - -42.000000 -13.500000 1257 - -41.833333 -13.500000 1112 - -41.666667 -13.500000 777 - -41.500000 -13.500000 1312 - -41.333333 -13.500000 1155 - -41.166667 -13.500000 678 - -41.000000 -13.500000 550 - -40.833333 -13.500000 399 - -40.666667 -13.500000 364 - -40.500000 -13.500000 819 - -40.333333 -13.500000 841 - -40.166667 -13.500000 790 - -40.000000 -13.500000 738 - -65.000000 -13.666667 140 - -64.833333 -13.666667 140 - -64.666667 -13.666667 138 - -64.500000 -13.666667 142 - -64.333333 -13.666667 143 - -64.166667 -13.666667 144 - -64.000000 -13.666667 143 - -63.833333 -13.666667 144 - -63.666667 -13.666667 146 - -63.500000 -13.666667 144 - -63.333333 -13.666667 165 - -63.166667 -13.666667 156 - -63.000000 -13.666667 148 - -62.833333 -13.666667 150 - -62.666667 -13.666667 181 - -62.500000 -13.666667 214 - -62.333333 -13.666667 186 - -62.166667 -13.666667 332 - -62.000000 -13.666667 194 - -61.833333 -13.666667 181 - -61.666667 -13.666667 160 - -61.500000 -13.666667 164 - -61.333333 -13.666667 208 - -61.166667 -13.666667 224 - -61.000000 -13.666667 204 - -60.833333 -13.666667 465 - -60.666667 -13.666667 192 - -60.500000 -13.666667 208 - -60.333333 -13.666667 227 - -60.166667 -13.666667 280 - -60.000000 -13.666667 490 - -59.833333 -13.666667 573 - -59.666667 -13.666667 665 - -59.500000 -13.666667 536 - -59.333333 -13.666667 575 - -59.166667 -13.666667 583 - -59.000000 -13.666667 515 - -58.833333 -13.666667 588 - -58.666667 -13.666667 524 - -58.500000 -13.666667 559 - -58.333333 -13.666667 556 - -58.166667 -13.666667 546 - -58.000000 -13.666667 512 - -57.833333 -13.666667 560 - -57.666667 -13.666667 473 - -57.500000 -13.666667 532 - -57.333333 -13.666667 450 - -57.166667 -13.666667 402 - -57.000000 -13.666667 462 - -56.833333 -13.666667 401 - -56.666667 -13.666667 383 - -56.500000 -13.666667 351 - -56.333333 -13.666667 358 - -56.166667 -13.666667 395 - -56.000000 -13.666667 461 - -55.833333 -13.666667 459 - -55.666667 -13.666667 460 - -55.500000 -13.666667 446 - -55.333333 -13.666667 446 - -55.166667 -13.666667 389 - -55.000000 -13.666667 470 - -54.833333 -13.666667 504 - -54.666667 -13.666667 423 - -54.500000 -13.666667 474 - -54.333333 -13.666667 544 - -54.166667 -13.666667 470 - -54.000000 -13.666667 510 - -53.833333 -13.666667 348 - -53.666667 -13.666667 428 - -53.500000 -13.666667 423 - -53.333333 -13.666667 394 - -53.166667 -13.666667 366 - -53.000000 -13.666667 407 - -52.833333 -13.666667 357 - -52.666667 -13.666667 450 - -52.500000 -13.666667 336 - -52.333333 -13.666667 356 - -52.166667 -13.666667 397 - -52.000000 -13.666667 408 - -51.833333 -13.666667 268 - -51.666667 -13.666667 237 - -51.500000 -13.666667 221 - -51.333333 -13.666667 227 - -51.166667 -13.666667 226 - -51.000000 -13.666667 227 - -50.833333 -13.666667 228 - -50.666667 -13.666667 284 - -50.500000 -13.666667 254 - -50.333333 -13.666667 240 - -50.166667 -13.666667 236 - -50.000000 -13.666667 251 - -49.833333 -13.666667 259 - -49.666667 -13.666667 352 - -49.500000 -13.666667 324 - -49.333333 -13.666667 388 - -49.166667 -13.666667 380 - -49.000000 -13.666667 390 - -48.833333 -13.666667 444 - -48.666667 -13.666667 570 - -48.500000 -13.666667 655 - -48.333333 -13.666667 685 - -48.166667 -13.666667 435 - -48.000000 -13.666667 528 - -47.833333 -13.666667 806 - -47.666667 -13.666667 899 - -47.500000 -13.666667 1186 - -47.333333 -13.666667 824 - -47.166667 -13.666667 896 - -47.000000 -13.666667 463 - -46.833333 -13.666667 428 - -46.666667 -13.666667 508 - -46.500000 -13.666667 596 - -46.333333 -13.666667 734 - -46.166667 -13.666667 970 - -46.000000 -13.666667 854 - -45.833333 -13.666667 857 - -45.666667 -13.666667 820 - -45.500000 -13.666667 789 - -45.333333 -13.666667 758 - -45.166667 -13.666667 697 - -45.000000 -13.666667 677 - -44.833333 -13.666667 710 - -44.666667 -13.666667 654 - -44.500000 -13.666667 559 - -44.333333 -13.666667 673 - -44.166667 -13.666667 738 - -44.000000 -13.666667 801 - -43.833333 -13.666667 735 - -43.666667 -13.666667 448 - -43.500000 -13.666667 430 - -43.333333 -13.666667 447 - -43.166667 -13.666667 477 - -43.000000 -13.666667 590 - -42.833333 -13.666667 683 - -42.666667 -13.666667 832 - -42.500000 -13.666667 877 - -42.333333 -13.666667 1056 - -42.166667 -13.666667 943 - -42.000000 -13.666667 749 - -41.833333 -13.666667 472 - -41.666667 -13.666667 553 - -41.500000 -13.666667 1051 - -41.333333 -13.666667 1044 - -41.166667 -13.666667 631 - -41.000000 -13.666667 440 - -40.833333 -13.666667 325 - -40.666667 -13.666667 354 - -40.500000 -13.666667 820 - -40.333333 -13.666667 657 - -40.166667 -13.666667 571 - -40.000000 -13.666667 599 - -65.000000 -13.833333 141 - -64.833333 -13.833333 141 - -64.666667 -13.833333 141 - -64.500000 -13.833333 142 - -64.333333 -13.833333 143 - -64.166667 -13.833333 148 - -64.000000 -13.833333 150 - -63.833333 -13.833333 147 - -63.666667 -13.833333 152 - -63.500000 -13.833333 145 - -63.333333 -13.833333 152 - -63.166667 -13.833333 154 - -63.000000 -13.833333 153 - -62.833333 -13.833333 153 - -62.666667 -13.833333 170 - -62.500000 -13.833333 221 - -62.333333 -13.833333 227 - -62.166667 -13.833333 229 - -62.000000 -13.833333 187 - -61.833333 -13.833333 218 - -61.666667 -13.833333 161 - -61.500000 -13.833333 174 - -61.333333 -13.833333 258 - -61.166667 -13.833333 238 - -61.000000 -13.833333 376 - -60.833333 -13.833333 552 - -60.666667 -13.833333 296 - -60.500000 -13.833333 181 - -60.333333 -13.833333 204 - -60.166667 -13.833333 242 - -60.000000 -13.833333 491 - -59.833333 -13.833333 540 - -59.666667 -13.833333 625 - -59.500000 -13.833333 587 - -59.333333 -13.833333 658 - -59.166667 -13.833333 619 - -59.000000 -13.833333 557 - -58.833333 -13.833333 615 - -58.666667 -13.833333 565 - -58.500000 -13.833333 556 - -58.333333 -13.833333 595 - -58.166667 -13.833333 588 - -58.000000 -13.833333 546 - -57.833333 -13.833333 556 - -57.666667 -13.833333 581 - -57.500000 -13.833333 546 - -57.333333 -13.833333 541 - -57.166667 -13.833333 540 - -57.000000 -13.833333 467 - -56.833333 -13.833333 412 - -56.666667 -13.833333 407 - -56.500000 -13.833333 372 - -56.333333 -13.833333 407 - -56.166667 -13.833333 438 - -56.000000 -13.833333 405 - -55.833333 -13.833333 501 - -55.666667 -13.833333 477 - -55.500000 -13.833333 482 - -55.333333 -13.833333 493 - -55.166667 -13.833333 404 - -55.000000 -13.833333 373 - -54.833333 -13.833333 478 - -54.666667 -13.833333 501 - -54.500000 -13.833333 466 - -54.333333 -13.833333 539 - -54.166667 -13.833333 533 - -54.000000 -13.833333 464 - -53.833333 -13.833333 367 - -53.666667 -13.833333 366 - -53.500000 -13.833333 411 - -53.333333 -13.833333 366 - -53.166667 -13.833333 419 - -53.000000 -13.833333 391 - -52.833333 -13.833333 365 - -52.666667 -13.833333 431 - -52.500000 -13.833333 410 - -52.333333 -13.833333 395 - -52.166667 -13.833333 388 - -52.000000 -13.833333 283 - -51.833333 -13.833333 339 - -51.666667 -13.833333 237 - -51.500000 -13.833333 237 - -51.333333 -13.833333 232 - -51.166667 -13.833333 231 - -51.000000 -13.833333 236 - -50.833333 -13.833333 238 - -50.666667 -13.833333 284 - -50.500000 -13.833333 257 - -50.333333 -13.833333 282 - -50.166667 -13.833333 288 - -50.000000 -13.833333 301 - -49.833333 -13.833333 299 - -49.666667 -13.833333 341 - -49.500000 -13.833333 310 - -49.333333 -13.833333 389 - -49.166667 -13.833333 365 - -49.000000 -13.833333 415 - -48.833333 -13.833333 756 - -48.666667 -13.833333 715 - -48.500000 -13.833333 712 - -48.333333 -13.833333 449 - -48.166667 -13.833333 840 - -48.000000 -13.833333 401 - -47.833333 -13.833333 451 - -47.666667 -13.833333 499 - -47.500000 -13.833333 849 - -47.333333 -13.833333 1116 - -47.166667 -13.833333 736 - -47.000000 -13.833333 990 - -46.833333 -13.833333 421 - -46.666667 -13.833333 459 - -46.500000 -13.833333 598 - -46.333333 -13.833333 682 - -46.166667 -13.833333 972 - -46.000000 -13.833333 911 - -45.833333 -13.833333 808 - -45.666667 -13.833333 826 - -45.500000 -13.833333 733 - -45.333333 -13.833333 755 - -45.166667 -13.833333 768 - -45.000000 -13.833333 708 - -44.833333 -13.833333 680 - -44.666667 -13.833333 720 - -44.500000 -13.833333 694 - -44.333333 -13.833333 731 - -44.166667 -13.833333 721 - -44.000000 -13.833333 484 - -43.833333 -13.833333 461 - -43.666667 -13.833333 450 - -43.500000 -13.833333 441 - -43.333333 -13.833333 455 - -43.166667 -13.833333 488 - -43.000000 -13.833333 500 - -42.833333 -13.833333 702 - -42.666667 -13.833333 929 - -42.500000 -13.833333 1028 - -42.333333 -13.833333 1023 - -42.166667 -13.833333 634 - -42.000000 -13.833333 581 - -41.833333 -13.833333 606 - -41.666667 -13.833333 504 - -41.500000 -13.833333 484 - -41.333333 -13.833333 541 - -41.166667 -13.833333 555 - -41.000000 -13.833333 295 - -40.833333 -13.833333 255 - -40.666667 -13.833333 235 - -40.500000 -13.833333 421 - -40.333333 -13.833333 407 - -40.166667 -13.833333 513 - -40.000000 -13.833333 348 - -65.000000 -14.000000 144 - -64.833333 -14.000000 142 - -64.666667 -14.000000 144 - -64.500000 -14.000000 156 - -64.333333 -14.000000 148 - -64.166667 -14.000000 162 - -64.000000 -14.000000 154 - -63.833333 -14.000000 160 - -63.666667 -14.000000 171 - -63.500000 -14.000000 198 - -63.333333 -14.000000 166 - -63.166667 -14.000000 178 - -63.000000 -14.000000 167 - -62.833333 -14.000000 166 - -62.666667 -14.000000 162 - -62.500000 -14.000000 169 - -62.333333 -14.000000 183 - -62.166667 -14.000000 180 - -62.000000 -14.000000 212 - -61.833333 -14.000000 193 - -61.666667 -14.000000 189 - -61.500000 -14.000000 174 - -61.333333 -14.000000 186 - -61.166667 -14.000000 227 - -61.000000 -14.000000 233 - -60.833333 -14.000000 527 - -60.666667 -14.000000 560 - -60.500000 -14.000000 393 - -60.333333 -14.000000 193 - -60.166667 -14.000000 230 - -60.000000 -14.000000 245 - -59.833333 -14.000000 288 - -59.666667 -14.000000 445 - -59.500000 -14.000000 574 - -59.333333 -14.000000 615 - -59.166667 -14.000000 672 - -59.000000 -14.000000 545 - -58.833333 -14.000000 639 - -58.666667 -14.000000 572 - -58.500000 -14.000000 545 - -58.333333 -14.000000 584 - -58.166667 -14.000000 626 - -58.000000 -14.000000 619 - -57.833333 -14.000000 506 - -57.666667 -14.000000 553 - -57.500000 -14.000000 578 - -57.333333 -14.000000 590 - -57.166667 -14.000000 528 - -57.000000 -14.000000 500 - -56.833333 -14.000000 380 - -56.666667 -14.000000 396 - -56.500000 -14.000000 423 - -56.333333 -14.000000 322 - -56.166667 -14.000000 394 - -56.000000 -14.000000 397 - -55.833333 -14.000000 491 - -55.666667 -14.000000 453 - -55.500000 -14.000000 509 - -55.333333 -14.000000 509 - -55.166667 -14.000000 441 - -55.000000 -14.000000 443 - -54.833333 -14.000000 430 - -54.666667 -14.000000 474 - -54.500000 -14.000000 473 - -54.333333 -14.000000 476 - -54.166667 -14.000000 527 - -54.000000 -14.000000 514 - -53.833333 -14.000000 402 - -53.666667 -14.000000 522 - -53.500000 -14.000000 413 - -53.333333 -14.000000 354 - -53.166667 -14.000000 410 - -53.000000 -14.000000 336 - -52.833333 -14.000000 451 - -52.666667 -14.000000 463 - -52.500000 -14.000000 372 - -52.333333 -14.000000 347 - -52.166667 -14.000000 446 - -52.000000 -14.000000 288 - -51.833333 -14.000000 243 - -51.666667 -14.000000 231 - -51.500000 -14.000000 238 - -51.333333 -14.000000 242 - -51.166667 -14.000000 236 - -51.000000 -14.000000 236 - -50.833333 -14.000000 239 - -50.666667 -14.000000 291 - -50.500000 -14.000000 252 - -50.333333 -14.000000 297 - -50.166667 -14.000000 258 - -50.000000 -14.000000 297 - -49.833333 -14.000000 306 - -49.666667 -14.000000 313 - -49.500000 -14.000000 381 - -49.333333 -14.000000 362 - -49.166667 -14.000000 470 - -49.000000 -14.000000 534 - -48.833333 -14.000000 754 - -48.666667 -14.000000 557 - -48.500000 -14.000000 517 - -48.333333 -14.000000 638 - -48.166667 -14.000000 612 - -48.000000 -14.000000 504 - -47.833333 -14.000000 492 - -47.666667 -14.000000 1132 - -47.500000 -14.000000 1559 - -47.333333 -14.000000 937 - -47.166667 -14.000000 891 - -47.000000 -14.000000 470 - -46.833333 -14.000000 428 - -46.666667 -14.000000 522 - -46.500000 -14.000000 542 - -46.333333 -14.000000 889 - -46.166667 -14.000000 892 - -46.000000 -14.000000 931 - -45.833333 -14.000000 884 - -45.666667 -14.000000 834 - -45.500000 -14.000000 805 - -45.333333 -14.000000 736 - -45.166667 -14.000000 694 - -45.000000 -14.000000 677 - -44.833333 -14.000000 673 - -44.666667 -14.000000 681 - -44.500000 -14.000000 696 - -44.333333 -14.000000 688 - -44.166667 -14.000000 563 - -44.000000 -14.000000 472 - -43.833333 -14.000000 458 - -43.666667 -14.000000 447 - -43.500000 -14.000000 458 - -43.333333 -14.000000 451 - -43.166667 -14.000000 466 - -43.000000 -14.000000 493 - -42.833333 -14.000000 513 - -42.666667 -14.000000 830 - -42.500000 -14.000000 974 - -42.333333 -14.000000 942 - -42.166667 -14.000000 555 - -42.000000 -14.000000 509 - -41.833333 -14.000000 485 - -41.666667 -14.000000 411 - -41.500000 -14.000000 432 - -41.333333 -14.000000 629 - -41.166667 -14.000000 441 - -41.000000 -14.000000 279 - -40.833333 -14.000000 342 - -40.666667 -14.000000 314 - -40.500000 -14.000000 402 - -40.333333 -14.000000 556 - -40.166667 -14.000000 327 - -40.000000 -14.000000 690 - -65.000000 -14.166667 151 - -64.833333 -14.166667 145 - -64.666667 -14.166667 149 - -64.500000 -14.166667 158 - -64.333333 -14.166667 154 - -64.166667 -14.166667 165 - -64.000000 -14.166667 154 - -63.833333 -14.166667 164 - -63.666667 -14.166667 170 - -63.500000 -14.166667 166 - -63.333333 -14.166667 234 - -63.166667 -14.166667 196 - -63.000000 -14.166667 173 - -62.833333 -14.166667 165 - -62.666667 -14.166667 176 - -62.500000 -14.166667 177 - -62.333333 -14.166667 187 - -62.166667 -14.166667 225 - -62.000000 -14.166667 241 - -61.833333 -14.166667 274 - -61.666667 -14.166667 214 - -61.500000 -14.166667 168 - -61.333333 -14.166667 182 - -61.166667 -14.166667 189 - -61.000000 -14.166667 212 - -60.833333 -14.166667 607 - -60.666667 -14.166667 593 - -60.500000 -14.166667 372 - -60.333333 -14.166667 197 - -60.166667 -14.166667 212 - -60.000000 -14.166667 231 - -59.833333 -14.166667 236 - -59.666667 -14.166667 241 - -59.500000 -14.166667 602 - -59.333333 -14.166667 641 - -59.166667 -14.166667 699 - -59.000000 -14.166667 605 - -58.833333 -14.166667 633 - -58.666667 -14.166667 631 - -58.500000 -14.166667 658 - -58.333333 -14.166667 627 - -58.166667 -14.166667 614 - -58.000000 -14.166667 651 - -57.833333 -14.166667 638 - -57.666667 -14.166667 566 - -57.500000 -14.166667 605 - -57.333333 -14.166667 566 - -57.166667 -14.166667 534 - -57.000000 -14.166667 541 - -56.833333 -14.166667 442 - -56.666667 -14.166667 409 - -56.500000 -14.166667 490 - -56.333333 -14.166667 388 - -56.166667 -14.166667 338 - -56.000000 -14.166667 353 - -55.833333 -14.166667 385 - -55.666667 -14.166667 455 - -55.500000 -14.166667 457 - -55.333333 -14.166667 568 - -55.166667 -14.166667 540 - -55.000000 -14.166667 523 - -54.833333 -14.166667 424 - -54.666667 -14.166667 528 - -54.500000 -14.166667 548 - -54.333333 -14.166667 470 - -54.166667 -14.166667 514 - -54.000000 -14.166667 593 - -53.833333 -14.166667 570 - -53.666667 -14.166667 492 - -53.500000 -14.166667 421 - -53.333333 -14.166667 412 - -53.166667 -14.166667 451 - -53.000000 -14.166667 357 - -52.833333 -14.166667 495 - -52.666667 -14.166667 391 - -52.500000 -14.166667 336 - -52.333333 -14.166667 320 - -52.166667 -14.166667 350 - -52.000000 -14.166667 265 - -51.833333 -14.166667 251 - -51.666667 -14.166667 244 - -51.500000 -14.166667 242 - -51.333333 -14.166667 241 - -51.166667 -14.166667 241 - -51.000000 -14.166667 242 - -50.833333 -14.166667 236 - -50.666667 -14.166667 243 - -50.500000 -14.166667 265 - -50.333333 -14.166667 286 - -50.166667 -14.166667 294 - -50.000000 -14.166667 364 - -49.833333 -14.166667 290 - -49.666667 -14.166667 341 - -49.500000 -14.166667 307 - -49.333333 -14.166667 356 - -49.166667 -14.166667 584 - -49.000000 -14.166667 573 - -48.833333 -14.166667 444 - -48.666667 -14.166667 465 - -48.500000 -14.166667 446 - -48.333333 -14.166667 468 - -48.166667 -14.166667 523 - -48.000000 -14.166667 654 - -47.833333 -14.166667 957 - -47.666667 -14.166667 1200 - -47.500000 -14.166667 1349 - -47.333333 -14.166667 776 - -47.166667 -14.166667 492 - -47.000000 -14.166667 445 - -46.833333 -14.166667 469 - -46.666667 -14.166667 528 - -46.500000 -14.166667 705 - -46.333333 -14.166667 835 - -46.166667 -14.166667 848 - -46.000000 -14.166667 937 - -45.833333 -14.166667 890 - -45.666667 -14.166667 829 - -45.500000 -14.166667 812 - -45.333333 -14.166667 793 - -45.166667 -14.166667 757 - -45.000000 -14.166667 740 - -44.833333 -14.166667 614 - -44.666667 -14.166667 560 - -44.500000 -14.166667 596 - -44.333333 -14.166667 531 - -44.166667 -14.166667 490 - -44.000000 -14.166667 474 - -43.833333 -14.166667 462 - -43.666667 -14.166667 439 - -43.500000 -14.166667 455 - -43.333333 -14.166667 458 - -43.166667 -14.166667 492 - -43.000000 -14.166667 529 - -42.833333 -14.166667 507 - -42.666667 -14.166667 746 - -42.500000 -14.166667 1052 - -42.333333 -14.166667 632 - -42.166667 -14.166667 559 - -42.000000 -14.166667 872 - -41.833333 -14.166667 573 - -41.666667 -14.166667 521 - -41.500000 -14.166667 381 - -41.333333 -14.166667 431 - -41.166667 -14.166667 315 - -41.000000 -14.166667 312 - -40.833333 -14.166667 335 - -40.666667 -14.166667 610 - -40.500000 -14.166667 754 - -40.333333 -14.166667 567 - -40.166667 -14.166667 736 - -40.000000 -14.166667 236 - -65.000000 -14.333333 157 - -64.833333 -14.333333 148 - -64.666667 -14.333333 149 - -64.500000 -14.333333 151 - -64.333333 -14.333333 171 - -64.166667 -14.333333 170 - -64.000000 -14.333333 157 - -63.833333 -14.333333 159 - -63.666667 -14.333333 165 - -63.500000 -14.333333 179 - -63.333333 -14.333333 206 - -63.166667 -14.333333 195 - -63.000000 -14.333333 168 - -62.833333 -14.333333 185 - -62.666667 -14.333333 187 - -62.500000 -14.333333 204 - -62.333333 -14.333333 191 - -62.166667 -14.333333 198 - -62.000000 -14.333333 207 - -61.833333 -14.333333 253 - -61.666667 -14.333333 249 - -61.500000 -14.333333 204 - -61.333333 -14.333333 176 - -61.166667 -14.333333 209 - -61.000000 -14.333333 201 - -60.833333 -14.333333 718 - -60.666667 -14.333333 643 - -60.500000 -14.333333 362 - -60.333333 -14.333333 381 - -60.166667 -14.333333 189 - -60.000000 -14.333333 208 - -59.833333 -14.333333 208 - -59.666667 -14.333333 243 - -59.500000 -14.333333 657 - -59.333333 -14.333333 693 - -59.166667 -14.333333 630 - -59.000000 -14.333333 645 - -58.833333 -14.333333 738 - -58.666667 -14.333333 699 - -58.500000 -14.333333 634 - -58.333333 -14.333333 688 - -58.166667 -14.333333 628 - -58.000000 -14.333333 604 - -57.833333 -14.333333 582 - -57.666667 -14.333333 530 - -57.500000 -14.333333 323 - -57.333333 -14.333333 295 - -57.166667 -14.333333 344 - -57.000000 -14.333333 331 - -56.833333 -14.333333 326 - -56.666667 -14.333333 364 - -56.500000 -14.333333 469 - -56.333333 -14.333333 386 - -56.166667 -14.333333 455 - -56.000000 -14.333333 443 - -55.833333 -14.333333 469 - -55.666667 -14.333333 453 - -55.500000 -14.333333 311 - -55.333333 -14.333333 317 - -55.166667 -14.333333 389 - -55.000000 -14.333333 436 - -54.833333 -14.333333 406 - -54.666667 -14.333333 412 - -54.500000 -14.333333 454 - -54.333333 -14.333333 449 - -54.166667 -14.333333 514 - -54.000000 -14.333333 615 - -53.833333 -14.333333 626 - -53.666667 -14.333333 492 - -53.500000 -14.333333 415 - -53.333333 -14.333333 403 - -53.166667 -14.333333 390 - -53.000000 -14.333333 367 - -52.833333 -14.333333 412 - -52.666667 -14.333333 445 - -52.500000 -14.333333 361 - -52.333333 -14.333333 295 - -52.166667 -14.333333 281 - -52.000000 -14.333333 311 - -51.833333 -14.333333 257 - -51.666667 -14.333333 250 - -51.500000 -14.333333 247 - -51.333333 -14.333333 245 - -51.166667 -14.333333 248 - -51.000000 -14.333333 241 - -50.833333 -14.333333 239 - -50.666667 -14.333333 246 - -50.500000 -14.333333 307 - -50.333333 -14.333333 277 - -50.166667 -14.333333 326 - -50.000000 -14.333333 372 - -49.833333 -14.333333 348 - -49.666667 -14.333333 343 - -49.500000 -14.333333 376 - -49.333333 -14.333333 598 - -49.166667 -14.333333 544 - -49.000000 -14.333333 451 - -48.833333 -14.333333 495 - -48.666667 -14.333333 591 - -48.500000 -14.333333 736 - -48.333333 -14.333333 516 - -48.166667 -14.333333 486 - -48.000000 -14.333333 718 - -47.833333 -14.333333 605 - -47.666667 -14.333333 1045 - -47.500000 -14.333333 1127 - -47.333333 -14.333333 1049 - -47.166667 -14.333333 493 - -47.000000 -14.333333 438 - -46.833333 -14.333333 458 - -46.666667 -14.333333 503 - -46.500000 -14.333333 774 - -46.333333 -14.333333 703 - -46.166667 -14.333333 785 - -46.000000 -14.333333 755 - -45.833333 -14.333333 894 - -45.666667 -14.333333 850 - -45.500000 -14.333333 828 - -45.333333 -14.333333 798 - -45.166667 -14.333333 710 - -45.000000 -14.333333 649 - -44.833333 -14.333333 675 - -44.666667 -14.333333 629 - -44.500000 -14.333333 512 - -44.333333 -14.333333 622 - -44.166667 -14.333333 489 - -44.000000 -14.333333 464 - -43.833333 -14.333333 445 - -43.666667 -14.333333 465 - -43.500000 -14.333333 482 - -43.333333 -14.333333 493 - -43.166667 -14.333333 540 - -43.000000 -14.333333 692 - -42.833333 -14.333333 645 - -42.666667 -14.333333 842 - -42.500000 -14.333333 873 - -42.333333 -14.333333 708 - -42.166667 -14.333333 625 - -42.000000 -14.333333 596 - -41.833333 -14.333333 534 - -41.666667 -14.333333 606 - -41.500000 -14.333333 489 - -41.333333 -14.333333 517 - -41.166667 -14.333333 453 - -41.000000 -14.333333 419 - -40.833333 -14.333333 656 - -40.666667 -14.333333 851 - -40.500000 -14.333333 608 - -40.333333 -14.333333 532 - -40.166667 -14.333333 723 - -40.000000 -14.333333 316 - -65.000000 -14.500000 160 - -64.833333 -14.500000 151 - -64.666667 -14.500000 150 - -64.500000 -14.500000 153 - -64.333333 -14.500000 171 - -64.166667 -14.500000 174 - -64.000000 -14.500000 169 - -63.833333 -14.500000 164 - -63.666667 -14.500000 167 - -63.500000 -14.500000 179 - -63.333333 -14.500000 185 - -63.166667 -14.500000 240 - -63.000000 -14.500000 210 - -62.833333 -14.500000 213 - -62.666667 -14.500000 189 - -62.500000 -14.500000 183 - -62.333333 -14.500000 206 - -62.166667 -14.500000 233 - -62.000000 -14.500000 200 - -61.833333 -14.500000 200 - -61.666667 -14.500000 274 - -61.500000 -14.500000 228 - -61.333333 -14.500000 190 - -61.166667 -14.500000 187 - -61.000000 -14.500000 196 - -60.833333 -14.500000 284 - -60.666667 -14.500000 646 - -60.500000 -14.500000 535 - -60.333333 -14.500000 486 - -60.166667 -14.500000 246 - -60.000000 -14.500000 204 - -59.833333 -14.500000 347 - -59.666667 -14.500000 253 - -59.500000 -14.500000 597 - -59.333333 -14.500000 743 - -59.166667 -14.500000 679 - -59.000000 -14.500000 679 - -58.833333 -14.500000 697 - -58.666667 -14.500000 696 - -58.500000 -14.500000 637 - -58.333333 -14.500000 625 - -58.166667 -14.500000 599 - -58.000000 -14.500000 524 - -57.833333 -14.500000 301 - -57.666667 -14.500000 296 - -57.500000 -14.500000 291 - -57.333333 -14.500000 298 - -57.166667 -14.500000 391 - -57.000000 -14.500000 416 - -56.833333 -14.500000 246 - -56.666667 -14.500000 223 - -56.500000 -14.500000 226 - -56.333333 -14.500000 430 - -56.166667 -14.500000 468 - -56.000000 -14.500000 324 - -55.833333 -14.500000 371 - -55.666667 -14.500000 361 - -55.500000 -14.500000 358 - -55.333333 -14.500000 424 - -55.166667 -14.500000 453 - -55.000000 -14.500000 427 - -54.833333 -14.500000 438 - -54.666667 -14.500000 458 - -54.500000 -14.500000 419 - -54.333333 -14.500000 450 - -54.166667 -14.500000 485 - -54.000000 -14.500000 533 - -53.833333 -14.500000 601 - -53.666667 -14.500000 583 - -53.500000 -14.500000 493 - -53.333333 -14.500000 523 - -53.166667 -14.500000 429 - -53.000000 -14.500000 459 - -52.833333 -14.500000 457 - -52.666667 -14.500000 491 - -52.500000 -14.500000 375 - -52.333333 -14.500000 279 - -52.166667 -14.500000 303 - -52.000000 -14.500000 276 - -51.833333 -14.500000 241 - -51.666667 -14.500000 268 - -51.500000 -14.500000 251 - -51.333333 -14.500000 249 - -51.166667 -14.500000 255 - -51.000000 -14.500000 247 - -50.833333 -14.500000 243 - -50.666667 -14.500000 259 - -50.500000 -14.500000 268 - -50.333333 -14.500000 306 - -50.166667 -14.500000 321 - -50.000000 -14.500000 411 - -49.833333 -14.500000 406 - -49.666667 -14.500000 361 - -49.500000 -14.500000 385 - -49.333333 -14.500000 715 - -49.166667 -14.500000 481 - -49.000000 -14.500000 504 - -48.833333 -14.500000 560 - -48.666667 -14.500000 659 - -48.500000 -14.500000 646 - -48.333333 -14.500000 622 - -48.166667 -14.500000 584 - -48.000000 -14.500000 686 - -47.833333 -14.500000 876 - -47.666667 -14.500000 890 - -47.500000 -14.500000 1020 - -47.333333 -14.500000 603 - -47.166667 -14.500000 452 - -47.000000 -14.500000 443 - -46.833333 -14.500000 471 - -46.666667 -14.500000 478 - -46.500000 -14.500000 563 - -46.333333 -14.500000 733 - -46.166667 -14.500000 701 - -46.000000 -14.500000 868 - -45.833333 -14.500000 885 - -45.666667 -14.500000 850 - -45.500000 -14.500000 835 - -45.333333 -14.500000 716 - -45.166667 -14.500000 746 - -45.000000 -14.500000 737 - -44.833333 -14.500000 577 - -44.666667 -14.500000 664 - -44.500000 -14.500000 646 - -44.333333 -14.500000 573 - -44.166667 -14.500000 525 - -44.000000 -14.500000 484 - -43.833333 -14.500000 448 - -43.666667 -14.500000 809 - -43.500000 -14.500000 507 - -43.333333 -14.500000 489 - -43.166667 -14.500000 522 - -43.000000 -14.500000 608 - -42.833333 -14.500000 769 - -42.666667 -14.500000 648 - -42.500000 -14.500000 784 - -42.333333 -14.500000 734 - -42.166667 -14.500000 614 - -42.000000 -14.500000 588 - -41.833333 -14.500000 599 - -41.666667 -14.500000 641 - -41.500000 -14.500000 584 - -41.333333 -14.500000 544 - -41.166667 -14.500000 490 - -41.000000 -14.500000 500 - -40.833333 -14.500000 606 - -40.666667 -14.500000 802 - -40.500000 -14.500000 823 - -40.333333 -14.500000 751 - -40.166667 -14.500000 895 - -40.000000 -14.500000 336 - -65.000000 -14.666667 159 - -64.833333 -14.666667 153 - -64.666667 -14.666667 156 - -64.500000 -14.666667 156 - -64.333333 -14.666667 165 - -64.166667 -14.666667 177 - -64.000000 -14.666667 172 - -63.833333 -14.666667 183 - -63.666667 -14.666667 182 - -63.500000 -14.666667 199 - -63.333333 -14.666667 188 - -63.166667 -14.666667 190 - -63.000000 -14.666667 249 - -62.833333 -14.666667 229 - -62.666667 -14.666667 195 - -62.500000 -14.666667 218 - -62.333333 -14.666667 213 - -62.166667 -14.666667 248 - -62.000000 -14.666667 206 - -61.833333 -14.666667 214 - -61.666667 -14.666667 245 - -61.500000 -14.666667 256 - -61.333333 -14.666667 211 - -61.166667 -14.666667 186 - -61.000000 -14.666667 216 - -60.833333 -14.666667 212 - -60.666667 -14.666667 783 - -60.500000 -14.666667 684 - -60.333333 -14.666667 608 - -60.166667 -14.666667 212 - -60.000000 -14.666667 194 - -59.833333 -14.666667 618 - -59.666667 -14.666667 290 - -59.500000 -14.666667 251 - -59.333333 -14.666667 620 - -59.166667 -14.666667 680 - -59.000000 -14.666667 682 - -58.833333 -14.666667 706 - -58.666667 -14.666667 621 - -58.500000 -14.666667 551 - -58.333333 -14.666667 672 - -58.166667 -14.666667 521 - -58.000000 -14.666667 359 - -57.833333 -14.666667 225 - -57.666667 -14.666667 330 - -57.500000 -14.666667 424 - -57.333333 -14.666667 512 - -57.166667 -14.666667 334 - -57.000000 -14.666667 221 - -56.833333 -14.666667 216 - -56.666667 -14.666667 213 - -56.500000 -14.666667 439 - -56.333333 -14.666667 416 - -56.166667 -14.666667 208 - -56.000000 -14.666667 221 - -55.833333 -14.666667 248 - -55.666667 -14.666667 296 - -55.500000 -14.666667 369 - -55.333333 -14.666667 428 - -55.166667 -14.666667 422 - -55.000000 -14.666667 462 - -54.833333 -14.666667 516 - -54.666667 -14.666667 483 - -54.500000 -14.666667 587 - -54.333333 -14.666667 650 - -54.166667 -14.666667 591 - -54.000000 -14.666667 535 - -53.833333 -14.666667 499 - -53.666667 -14.666667 487 - -53.500000 -14.666667 466 - -53.333333 -14.666667 555 - -53.166667 -14.666667 477 - -53.000000 -14.666667 354 - -52.833333 -14.666667 386 - -52.666667 -14.666667 349 - -52.500000 -14.666667 288 - -52.333333 -14.666667 266 - -52.166667 -14.666667 267 - -52.000000 -14.666667 280 - -51.833333 -14.666667 259 - -51.666667 -14.666667 257 - -51.500000 -14.666667 257 - -51.333333 -14.666667 253 - -51.166667 -14.666667 257 - -51.000000 -14.666667 249 - -50.833333 -14.666667 251 - -50.666667 -14.666667 265 - -50.500000 -14.666667 289 - -50.333333 -14.666667 329 - -50.166667 -14.666667 337 - -50.000000 -14.666667 522 - -49.833333 -14.666667 382 - -49.666667 -14.666667 467 - -49.500000 -14.666667 674 - -49.333333 -14.666667 666 - -49.166667 -14.666667 558 - -49.000000 -14.666667 494 - -48.833333 -14.666667 505 - -48.666667 -14.666667 545 - -48.500000 -14.666667 853 - -48.333333 -14.666667 841 - -48.166667 -14.666667 546 - -48.000000 -14.666667 1096 - -47.833333 -14.666667 1012 - -47.666667 -14.666667 1132 - -47.500000 -14.666667 1006 - -47.333333 -14.666667 504 - -47.166667 -14.666667 458 - -47.000000 -14.666667 454 - -46.833333 -14.666667 485 - -46.666667 -14.666667 489 - -46.500000 -14.666667 1016 - -46.333333 -14.666667 710 - -46.166667 -14.666667 782 - -46.000000 -14.666667 935 - -45.833333 -14.666667 846 - -45.666667 -14.666667 869 - -45.500000 -14.666667 738 - -45.333333 -14.666667 827 - -45.166667 -14.666667 819 - -45.000000 -14.666667 635 - -44.833333 -14.666667 785 - -44.666667 -14.666667 712 - -44.500000 -14.666667 759 - -44.333333 -14.666667 643 - -44.166667 -14.666667 542 - -44.000000 -14.666667 480 - -43.833333 -14.666667 448 - -43.666667 -14.666667 468 - -43.500000 -14.666667 478 - -43.333333 -14.666667 467 - -43.166667 -14.666667 489 - -43.000000 -14.666667 508 - -42.833333 -14.666667 540 - -42.666667 -14.666667 701 - -42.500000 -14.666667 863 - -42.333333 -14.666667 680 - -42.166667 -14.666667 734 - -42.000000 -14.666667 660 - -41.833333 -14.666667 799 - -41.666667 -14.666667 740 - -41.500000 -14.666667 639 - -41.333333 -14.666667 494 - -41.166667 -14.666667 450 - -41.000000 -14.666667 641 - -40.833333 -14.666667 900 - -40.666667 -14.666667 848 - -40.500000 -14.666667 917 - -40.333333 -14.666667 916 - -40.166667 -14.666667 699 - -40.000000 -14.666667 434 - -65.000000 -14.833333 159 - -64.833333 -14.833333 157 - -64.666667 -14.833333 160 - -64.500000 -14.833333 169 - -64.333333 -14.833333 170 - -64.166667 -14.833333 182 - -64.000000 -14.833333 172 - -63.833333 -14.833333 185 - -63.666667 -14.833333 190 - -63.500000 -14.833333 177 - -63.333333 -14.833333 199 - -63.166667 -14.833333 256 - -63.000000 -14.833333 269 - -62.833333 -14.833333 223 - -62.666667 -14.833333 220 - -62.500000 -14.833333 220 - -62.333333 -14.833333 277 - -62.166667 -14.833333 260 - -62.000000 -14.833333 217 - -61.833333 -14.833333 272 - -61.666667 -14.833333 264 - -61.500000 -14.833333 273 - -61.333333 -14.833333 211 - -61.166667 -14.833333 176 - -61.000000 -14.833333 175 - -60.833333 -14.833333 205 - -60.666667 -14.833333 203 - -60.500000 -14.833333 314 - -60.333333 -14.833333 677 - -60.166667 -14.833333 425 - -60.000000 -14.833333 201 - -59.833333 -14.833333 210 - -59.666667 -14.833333 739 - -59.500000 -14.833333 341 - -59.333333 -14.833333 327 - -59.166667 -14.833333 673 - -59.000000 -14.833333 649 - -58.833333 -14.833333 605 - -58.666667 -14.833333 530 - -58.500000 -14.833333 584 - -58.333333 -14.833333 560 - -58.166667 -14.833333 492 - -58.000000 -14.833333 412 - -57.833333 -14.833333 244 - -57.666667 -14.833333 206 - -57.500000 -14.833333 223 - -57.333333 -14.833333 171 - -57.166667 -14.833333 198 - -57.000000 -14.833333 187 - -56.833333 -14.833333 187 - -56.666667 -14.833333 266 - -56.500000 -14.833333 278 - -56.333333 -14.833333 201 - -56.166667 -14.833333 245 - -56.000000 -14.833333 272 - -55.833333 -14.833333 267 - -55.666667 -14.833333 266 - -55.500000 -14.833333 309 - -55.333333 -14.833333 317 - -55.166667 -14.833333 388 - -55.000000 -14.833333 416 - -54.833333 -14.833333 493 - -54.666667 -14.833333 625 - -54.500000 -14.833333 784 - -54.333333 -14.833333 687 - -54.166667 -14.833333 699 - -54.000000 -14.833333 645 - -53.833333 -14.833333 619 - -53.666667 -14.833333 616 - -53.500000 -14.833333 628 - -53.333333 -14.833333 474 - -53.166667 -14.833333 458 - -53.000000 -14.833333 436 - -52.833333 -14.833333 347 - -52.666667 -14.833333 303 - -52.500000 -14.833333 449 - -52.333333 -14.833333 304 - -52.166667 -14.833333 285 - -52.000000 -14.833333 259 - -51.833333 -14.833333 268 - -51.666667 -14.833333 263 - -51.500000 -14.833333 260 - -51.333333 -14.833333 265 - -51.166667 -14.833333 258 - -51.000000 -14.833333 253 - -50.833333 -14.833333 254 - -50.666667 -14.833333 308 - -50.500000 -14.833333 355 - -50.333333 -14.833333 303 - -50.166667 -14.833333 423 - -50.000000 -14.833333 408 - -49.833333 -14.833333 436 - -49.666667 -14.833333 905 - -49.500000 -14.833333 707 - -49.333333 -14.833333 549 - -49.166667 -14.833333 533 - -49.000000 -14.833333 544 - -48.833333 -14.833333 698 - -48.666667 -14.833333 559 - -48.500000 -14.833333 700 - -48.333333 -14.833333 885 - -48.166667 -14.833333 1086 - -48.000000 -14.833333 1048 - -47.833333 -14.833333 1102 - -47.666667 -14.833333 1142 - -47.500000 -14.833333 1144 - -47.333333 -14.833333 525 - -47.166667 -14.833333 484 - -47.000000 -14.833333 480 - -46.833333 -14.833333 504 - -46.666667 -14.833333 534 - -46.500000 -14.833333 972 - -46.333333 -14.833333 875 - -46.166667 -14.833333 787 - -46.000000 -14.833333 882 - -45.833333 -14.833333 812 - -45.666667 -14.833333 862 - -45.500000 -14.833333 776 - -45.333333 -14.833333 752 - -45.166667 -14.833333 800 - -45.000000 -14.833333 727 - -44.833333 -14.833333 743 - -44.666667 -14.833333 781 - -44.500000 -14.833333 782 - -44.333333 -14.833333 636 - -44.166667 -14.833333 673 - -44.000000 -14.833333 484 - -43.833333 -14.833333 467 - -43.666667 -14.833333 471 - -43.500000 -14.833333 463 - -43.333333 -14.833333 534 - -43.166667 -14.833333 525 - -43.000000 -14.833333 649 - -42.833333 -14.833333 744 - -42.666667 -14.833333 792 - -42.500000 -14.833333 1141 - -42.333333 -14.833333 788 - -42.166667 -14.833333 767 - -42.000000 -14.833333 740 - -41.833333 -14.833333 695 - -41.666667 -14.833333 618 - -41.500000 -14.833333 534 - -41.333333 -14.833333 507 - -41.166667 -14.833333 464 - -41.000000 -14.833333 842 - -40.833333 -14.833333 1031 - -40.666667 -14.833333 874 - -40.500000 -14.833333 907 - -40.333333 -14.833333 801 - -40.166667 -14.833333 452 - -40.000000 -14.833333 376 - -65.000000 -15.000000 158 - -64.833333 -15.000000 158 - -64.666667 -15.000000 160 - -64.500000 -15.000000 162 - -64.333333 -15.000000 171 - -64.166667 -15.000000 168 - -64.000000 -15.000000 188 - -63.833333 -15.000000 182 - -63.666667 -15.000000 189 - -63.500000 -15.000000 213 - -63.333333 -15.000000 222 - -63.166667 -15.000000 231 - -63.000000 -15.000000 293 - -62.833333 -15.000000 255 - -62.666667 -15.000000 226 - -62.500000 -15.000000 262 - -62.333333 -15.000000 236 - -62.166667 -15.000000 279 - -62.000000 -15.000000 252 - -61.833333 -15.000000 228 - -61.666667 -15.000000 250 - -61.500000 -15.000000 304 - -61.333333 -15.000000 238 - -61.166667 -15.000000 189 - -61.000000 -15.000000 200 - -60.833333 -15.000000 225 - -60.666667 -15.000000 206 - -60.500000 -15.000000 215 - -60.333333 -15.000000 273 - -60.166667 -15.000000 249 - -60.000000 -15.000000 232 - -59.833333 -15.000000 209 - -59.666667 -15.000000 214 - -59.500000 -15.000000 253 - -59.333333 -15.000000 248 - -59.166667 -15.000000 282 - -59.000000 -15.000000 582 - -58.833333 -15.000000 488 - -58.666667 -15.000000 561 - -58.500000 -15.000000 488 - -58.333333 -15.000000 569 - -58.166667 -15.000000 421 - -58.000000 -15.000000 231 - -57.833333 -15.000000 230 - -57.666667 -15.000000 238 - -57.500000 -15.000000 223 - -57.333333 -15.000000 192 - -57.166667 -15.000000 160 - -57.000000 -15.000000 197 - -56.833333 -15.000000 194 - -56.666667 -15.000000 239 - -56.500000 -15.000000 222 - -56.333333 -15.000000 278 - -56.166667 -15.000000 335 - -56.000000 -15.000000 332 - -55.833333 -15.000000 354 - -55.666667 -15.000000 284 - -55.500000 -15.000000 339 - -55.333333 -15.000000 577 - -55.166667 -15.000000 694 - -55.000000 -15.000000 704 - -54.833333 -15.000000 548 - -54.666667 -15.000000 729 - -54.500000 -15.000000 721 - -54.333333 -15.000000 698 - -54.166667 -15.000000 681 - -54.000000 -15.000000 670 - -53.833333 -15.000000 631 - -53.666667 -15.000000 593 - -53.500000 -15.000000 604 - -53.333333 -15.000000 530 - -53.166667 -15.000000 456 - -53.000000 -15.000000 456 - -52.833333 -15.000000 445 - -52.666667 -15.000000 510 - -52.500000 -15.000000 586 - -52.333333 -15.000000 316 - -52.166667 -15.000000 277 - -52.000000 -15.000000 281 - -51.833333 -15.000000 275 - -51.666667 -15.000000 267 - -51.500000 -15.000000 269 - -51.333333 -15.000000 264 - -51.166667 -15.000000 255 - -51.000000 -15.000000 257 - -50.833333 -15.000000 268 - -50.666667 -15.000000 290 - -50.500000 -15.000000 307 - -50.333333 -15.000000 330 - -50.166667 -15.000000 379 - -50.000000 -15.000000 561 - -49.833333 -15.000000 790 - -49.666667 -15.000000 642 - -49.500000 -15.000000 532 - -49.333333 -15.000000 508 - -49.166667 -15.000000 598 - -49.000000 -15.000000 1079 - -48.833333 -15.000000 551 - -48.666667 -15.000000 562 - -48.500000 -15.000000 843 - -48.333333 -15.000000 721 - -48.166667 -15.000000 782 - -48.000000 -15.000000 894 - -47.833333 -15.000000 877 - -47.666667 -15.000000 1078 - -47.500000 -15.000000 612 - -47.333333 -15.000000 783 - -47.166667 -15.000000 482 - -47.000000 -15.000000 524 - -46.833333 -15.000000 963 - -46.666667 -15.000000 787 - -46.500000 -15.000000 945 - -46.333333 -15.000000 926 - -46.166667 -15.000000 811 - -46.000000 -15.000000 846 - -45.833333 -15.000000 838 - -45.666667 -15.000000 733 - -45.500000 -15.000000 755 - -45.333333 -15.000000 815 - -45.166667 -15.000000 822 - -45.000000 -15.000000 737 - -44.833333 -15.000000 815 - -44.666667 -15.000000 820 - -44.500000 -15.000000 745 - -44.333333 -15.000000 740 - -44.166667 -15.000000 723 - -44.000000 -15.000000 447 - -43.833333 -15.000000 475 - -43.666667 -15.000000 476 - -43.500000 -15.000000 465 - -43.333333 -15.000000 481 - -43.166667 -15.000000 517 - -43.000000 -15.000000 898 - -42.833333 -15.000000 620 - -42.666667 -15.000000 1048 - -42.500000 -15.000000 994 - -42.333333 -15.000000 920 - -42.166667 -15.000000 809 - -42.000000 -15.000000 728 - -41.833333 -15.000000 1000 - -41.666667 -15.000000 746 - -41.500000 -15.000000 741 - -41.333333 -15.000000 588 - -41.166667 -15.000000 847 - -41.000000 -15.000000 832 - -40.833333 -15.000000 866 - -40.666667 -15.000000 658 - -40.500000 -15.000000 593 - -40.333333 -15.000000 406 - -40.166667 -15.000000 663 - -40.000000 -15.000000 410 - -65.000000 -15.166667 162 - -64.833333 -15.166667 160 - -64.666667 -15.166667 159 - -64.500000 -15.166667 162 - -64.333333 -15.166667 166 - -64.166667 -15.166667 180 - -64.000000 -15.166667 187 - -63.833333 -15.166667 186 - -63.666667 -15.166667 190 - -63.500000 -15.166667 188 - -63.333333 -15.166667 196 - -63.166667 -15.166667 213 - -63.000000 -15.166667 296 - -62.833333 -15.166667 259 - -62.666667 -15.166667 286 - -62.500000 -15.166667 236 - -62.333333 -15.166667 280 - -62.166667 -15.166667 306 - -62.000000 -15.166667 249 - -61.833333 -15.166667 263 - -61.666667 -15.166667 280 - -61.500000 -15.166667 287 - -61.333333 -15.166667 330 - -61.166667 -15.166667 234 - -61.000000 -15.166667 182 - -60.833333 -15.166667 203 - -60.666667 -15.166667 216 - -60.500000 -15.166667 196 - -60.333333 -15.166667 225 - -60.166667 -15.166667 259 - -60.000000 -15.166667 209 - -59.833333 -15.166667 211 - -59.666667 -15.166667 216 - -59.500000 -15.166667 271 - -59.333333 -15.166667 268 - -59.166667 -15.166667 352 - -59.000000 -15.166667 358 - -58.833333 -15.166667 524 - -58.666667 -15.166667 493 - -58.500000 -15.166667 511 - -58.333333 -15.166667 296 - -58.166667 -15.166667 310 - -58.000000 -15.166667 407 - -57.833333 -15.166667 217 - -57.666667 -15.166667 183 - -57.500000 -15.166667 201 - -57.333333 -15.166667 198 - -57.166667 -15.166667 155 - -57.000000 -15.166667 192 - -56.833333 -15.166667 303 - -56.666667 -15.166667 269 - -56.500000 -15.166667 250 - -56.333333 -15.166667 205 - -56.166667 -15.166667 309 - -56.000000 -15.166667 348 - -55.833333 -15.166667 441 - -55.666667 -15.166667 322 - -55.500000 -15.166667 330 - -55.333333 -15.166667 463 - -55.166667 -15.166667 701 - -55.000000 -15.166667 775 - -54.833333 -15.166667 710 - -54.666667 -15.166667 632 - -54.500000 -15.166667 711 - -54.333333 -15.166667 617 - -54.166667 -15.166667 611 - -54.000000 -15.166667 594 - -53.833333 -15.166667 554 - -53.666667 -15.166667 556 - -53.500000 -15.166667 525 - -53.333333 -15.166667 554 - -53.166667 -15.166667 380 - -53.000000 -15.166667 450 - -52.833333 -15.166667 399 - -52.666667 -15.166667 587 - -52.500000 -15.166667 694 - -52.333333 -15.166667 490 - -52.166667 -15.166667 307 - -52.000000 -15.166667 288 - -51.833333 -15.166667 276 - -51.666667 -15.166667 272 - -51.500000 -15.166667 268 - -51.333333 -15.166667 276 - -51.166667 -15.166667 255 - -51.000000 -15.166667 271 - -50.833333 -15.166667 347 - -50.666667 -15.166667 299 - -50.500000 -15.166667 331 - -50.333333 -15.166667 378 - -50.166667 -15.166667 437 - -50.000000 -15.166667 742 - -49.833333 -15.166667 663 - -49.666667 -15.166667 579 - -49.500000 -15.166667 533 - -49.333333 -15.166667 616 - -49.166667 -15.166667 734 - -49.000000 -15.166667 761 - -48.833333 -15.166667 612 - -48.666667 -15.166667 651 - -48.500000 -15.166667 611 - -48.333333 -15.166667 612 - -48.166667 -15.166667 684 - -48.000000 -15.166667 736 - -47.833333 -15.166667 908 - -47.666667 -15.166667 998 - -47.500000 -15.166667 698 - -47.333333 -15.166667 814 - -47.166667 -15.166667 527 - -47.000000 -15.166667 537 - -46.833333 -15.166667 936 - -46.666667 -15.166667 961 - -46.500000 -15.166667 942 - -46.333333 -15.166667 961 - -46.166667 -15.166667 803 - -46.000000 -15.166667 782 - -45.833333 -15.166667 773 - -45.666667 -15.166667 785 - -45.500000 -15.166667 781 - -45.333333 -15.166667 792 - -45.166667 -15.166667 733 - -45.000000 -15.166667 682 - -44.833333 -15.166667 663 - -44.666667 -15.166667 716 - -44.500000 -15.166667 817 - -44.333333 -15.166667 754 - -44.166667 -15.166667 471 - -44.000000 -15.166667 465 - -43.833333 -15.166667 475 - -43.666667 -15.166667 468 - -43.500000 -15.166667 485 - -43.333333 -15.166667 476 - -43.166667 -15.166667 501 - -43.000000 -15.166667 1015 - -42.833333 -15.166667 687 - -42.666667 -15.166667 984 - -42.500000 -15.166667 929 - -42.333333 -15.166667 996 - -42.166667 -15.166667 939 - -42.000000 -15.166667 1056 - -41.833333 -15.166667 895 - -41.666667 -15.166667 885 - -41.500000 -15.166667 890 - -41.333333 -15.166667 821 - -41.166667 -15.166667 844 - -41.000000 -15.166667 788 - -40.833333 -15.166667 810 - -40.666667 -15.166667 364 - -40.500000 -15.166667 365 - -40.333333 -15.166667 289 - -40.166667 -15.166667 500 - -40.000000 -15.166667 276 - -65.000000 -15.333333 170 - -64.833333 -15.333333 164 - -64.666667 -15.333333 164 - -64.500000 -15.333333 167 - -64.333333 -15.333333 168 - -64.166667 -15.333333 173 - -64.000000 -15.333333 183 - -63.833333 -15.333333 191 - -63.666667 -15.333333 182 - -63.500000 -15.333333 196 - -63.333333 -15.333333 192 - -63.166667 -15.333333 220 - -63.000000 -15.333333 308 - -62.833333 -15.333333 309 - -62.666667 -15.333333 350 - -62.500000 -15.333333 306 - -62.333333 -15.333333 257 - -62.166667 -15.333333 290 - -62.000000 -15.333333 295 - -61.833333 -15.333333 281 - -61.666667 -15.333333 291 - -61.500000 -15.333333 285 - -61.333333 -15.333333 312 - -61.166667 -15.333333 251 - -61.000000 -15.333333 232 - -60.833333 -15.333333 201 - -60.666667 -15.333333 226 - -60.500000 -15.333333 195 - -60.333333 -15.333333 227 - -60.166667 -15.333333 221 - -60.000000 -15.333333 203 - -59.833333 -15.333333 209 - -59.666667 -15.333333 222 - -59.500000 -15.333333 232 - -59.333333 -15.333333 336 - -59.166667 -15.333333 329 - -59.000000 -15.333333 363 - -58.833333 -15.333333 427 - -58.666667 -15.333333 207 - -58.500000 -15.333333 357 - -58.333333 -15.333333 238 - -58.166667 -15.333333 435 - -58.000000 -15.333333 180 - -57.833333 -15.333333 205 - -57.666667 -15.333333 201 - -57.500000 -15.333333 177 - -57.333333 -15.333333 182 - -57.166667 -15.333333 161 - -57.000000 -15.333333 221 - -56.833333 -15.333333 477 - -56.666667 -15.333333 275 - -56.500000 -15.333333 255 - -56.333333 -15.333333 220 - -56.166667 -15.333333 218 - -56.000000 -15.333333 276 - -55.833333 -15.333333 376 - -55.666667 -15.333333 575 - -55.500000 -15.333333 433 - -55.333333 -15.333333 572 - -55.166667 -15.333333 710 - -55.000000 -15.333333 635 - -54.833333 -15.333333 651 - -54.666667 -15.333333 644 - -54.500000 -15.333333 689 - -54.333333 -15.333333 574 - -54.166667 -15.333333 573 - -54.000000 -15.333333 557 - -53.833333 -15.333333 547 - -53.666667 -15.333333 522 - -53.500000 -15.333333 530 - -53.333333 -15.333333 461 - -53.166667 -15.333333 440 - -53.000000 -15.333333 388 - -52.833333 -15.333333 392 - -52.666667 -15.333333 670 - -52.500000 -15.333333 806 - -52.333333 -15.333333 775 - -52.166667 -15.333333 350 - -52.000000 -15.333333 296 - -51.833333 -15.333333 278 - -51.666667 -15.333333 286 - -51.500000 -15.333333 286 - -51.333333 -15.333333 280 - -51.166667 -15.333333 259 - -51.000000 -15.333333 271 - -50.833333 -15.333333 343 - -50.666667 -15.333333 344 - -50.500000 -15.333333 315 - -50.333333 -15.333333 398 - -50.166667 -15.333333 470 - -50.000000 -15.333333 666 - -49.833333 -15.333333 605 - -49.666667 -15.333333 624 - -49.500000 -15.333333 704 - -49.333333 -15.333333 568 - -49.166667 -15.333333 621 - -49.000000 -15.333333 653 - -48.833333 -15.333333 652 - -48.666667 -15.333333 682 - -48.500000 -15.333333 691 - -48.333333 -15.333333 774 - -48.166667 -15.333333 729 - -48.000000 -15.333333 776 - -47.833333 -15.333333 930 - -47.666667 -15.333333 984 - -47.500000 -15.333333 1110 - -47.333333 -15.333333 778 - -47.166667 -15.333333 930 - -47.000000 -15.333333 805 - -46.833333 -15.333333 1002 - -46.666667 -15.333333 948 - -46.500000 -15.333333 927 - -46.333333 -15.333333 555 - -46.166667 -15.333333 734 - -46.000000 -15.333333 844 - -45.833333 -15.333333 787 - -45.666667 -15.333333 859 - -45.500000 -15.333333 708 - -45.333333 -15.333333 633 - -45.166667 -15.333333 675 - -45.000000 -15.333333 586 - -44.833333 -15.333333 601 - -44.666667 -15.333333 651 - -44.500000 -15.333333 669 - -44.333333 -15.333333 613 - -44.166667 -15.333333 450 - -44.000000 -15.333333 497 - -43.833333 -15.333333 533 - -43.666667 -15.333333 474 - -43.500000 -15.333333 491 - -43.333333 -15.333333 488 - -43.166667 -15.333333 483 - -43.000000 -15.333333 501 - -42.833333 -15.333333 571 - -42.666667 -15.333333 962 - -42.500000 -15.333333 874 - -42.333333 -15.333333 986 - -42.166667 -15.333333 860 - -42.000000 -15.333333 861 - -41.833333 -15.333333 903 - -41.666667 -15.333333 934 - -41.500000 -15.333333 821 - -41.333333 -15.333333 830 - -41.166667 -15.333333 743 - -41.000000 -15.333333 813 - -40.833333 -15.333333 613 - -40.666667 -15.333333 502 - -40.500000 -15.333333 406 - -40.333333 -15.333333 309 - -40.166667 -15.333333 247 - -40.000000 -15.333333 210 - -65.000000 -15.500000 163 - -64.833333 -15.500000 171 - -64.666667 -15.500000 174 - -64.500000 -15.500000 171 - -64.333333 -15.500000 171 - -64.166667 -15.500000 174 - -64.000000 -15.500000 179 - -63.833333 -15.500000 184 - -63.666667 -15.500000 192 - -63.500000 -15.500000 202 - -63.333333 -15.500000 202 - -63.166667 -15.500000 197 - -63.000000 -15.500000 204 - -62.833333 -15.500000 251 - -62.666667 -15.500000 288 - -62.500000 -15.500000 344 - -62.333333 -15.500000 319 - -62.166667 -15.500000 305 - -62.000000 -15.500000 388 - -61.833333 -15.500000 359 - -61.666667 -15.500000 362 - -61.500000 -15.500000 282 - -61.333333 -15.500000 318 - -61.166667 -15.500000 278 - -61.000000 -15.500000 227 - -60.833333 -15.500000 220 - -60.666667 -15.500000 335 - -60.500000 -15.500000 235 - -60.333333 -15.500000 227 - -60.166667 -15.500000 210 - -60.000000 -15.500000 200 - -59.833333 -15.500000 209 - -59.666667 -15.500000 220 - -59.500000 -15.500000 245 - -59.333333 -15.500000 236 - -59.166667 -15.500000 343 - -59.000000 -15.500000 338 - -58.833333 -15.500000 316 - -58.666667 -15.500000 264 - -58.500000 -15.500000 215 - -58.333333 -15.500000 208 - -58.166667 -15.500000 194 - -58.000000 -15.500000 184 - -57.833333 -15.500000 150 - -57.666667 -15.500000 177 - -57.500000 -15.500000 159 - -57.333333 -15.500000 147 - -57.166667 -15.500000 203 - -57.000000 -15.500000 381 - -56.833333 -15.500000 317 - -56.666667 -15.500000 272 - -56.500000 -15.500000 230 - -56.333333 -15.500000 189 - -56.166667 -15.500000 169 - -56.000000 -15.500000 215 - -55.833333 -15.500000 343 - -55.666667 -15.500000 368 - -55.500000 -15.500000 726 - -55.333333 -15.500000 735 - -55.166667 -15.500000 701 - -55.000000 -15.500000 654 - -54.833333 -15.500000 668 - -54.666667 -15.500000 622 - -54.500000 -15.500000 644 - -54.333333 -15.500000 610 - -54.166667 -15.500000 625 - -54.000000 -15.500000 587 - -53.833333 -15.500000 594 - -53.666667 -15.500000 582 - -53.500000 -15.500000 568 - -53.333333 -15.500000 476 - -53.166667 -15.500000 513 - -53.000000 -15.500000 445 - -52.833333 -15.500000 467 - -52.666667 -15.500000 462 - -52.500000 -15.500000 687 - -52.333333 -15.500000 391 - -52.166667 -15.500000 318 - -52.000000 -15.500000 309 - -51.833333 -15.500000 300 - -51.666667 -15.500000 280 - -51.500000 -15.500000 294 - -51.333333 -15.500000 286 - -51.166667 -15.500000 284 - -51.000000 -15.500000 287 - -50.833333 -15.500000 287 - -50.666667 -15.500000 338 - -50.500000 -15.500000 425 - -50.333333 -15.500000 418 - -50.166667 -15.500000 678 - -50.000000 -15.500000 734 - -49.833333 -15.500000 734 - -49.666667 -15.500000 611 - -49.500000 -15.500000 585 - -49.333333 -15.500000 751 - -49.166667 -15.500000 628 - -49.000000 -15.500000 767 - -48.833333 -15.500000 856 - -48.666667 -15.500000 674 - -48.500000 -15.500000 693 - -48.333333 -15.500000 740 - -48.166667 -15.500000 894 - -48.000000 -15.500000 854 - -47.833333 -15.500000 751 - -47.666667 -15.500000 932 - -47.500000 -15.500000 1129 - -47.333333 -15.500000 847 - -47.166667 -15.500000 1007 - -47.000000 -15.500000 873 - -46.833333 -15.500000 757 - -46.666667 -15.500000 833 - -46.500000 -15.500000 940 - -46.333333 -15.500000 593 - -46.166667 -15.500000 711 - -46.000000 -15.500000 723 - -45.833333 -15.500000 803 - -45.666667 -15.500000 704 - -45.500000 -15.500000 694 - -45.333333 -15.500000 638 - -45.166667 -15.500000 593 - -45.000000 -15.500000 613 - -44.833333 -15.500000 593 - -44.666667 -15.500000 608 - -44.500000 -15.500000 562 - -44.333333 -15.500000 456 - -44.166667 -15.500000 486 - -44.000000 -15.500000 748 - -43.833333 -15.500000 579 - -43.666667 -15.500000 480 - -43.500000 -15.500000 530 - -43.333333 -15.500000 508 - -43.166667 -15.500000 518 - -43.000000 -15.500000 525 - -42.833333 -15.500000 740 - -42.666667 -15.500000 947 - -42.500000 -15.500000 926 - -42.333333 -15.500000 921 - -42.166667 -15.500000 961 - -42.000000 -15.500000 760 - -41.833333 -15.500000 775 - -41.666667 -15.500000 729 - -41.500000 -15.500000 767 - -41.333333 -15.500000 683 - -41.166667 -15.500000 729 - -41.000000 -15.500000 763 - -40.833333 -15.500000 819 - -40.666667 -15.500000 785 - -40.500000 -15.500000 348 - -40.333333 -15.500000 304 - -40.166667 -15.500000 418 - -40.000000 -15.500000 238 - -65.000000 -15.666667 165 - -64.833333 -15.666667 167 - -64.666667 -15.666667 180 - -64.500000 -15.666667 178 - -64.333333 -15.666667 187 - -64.166667 -15.666667 182 - -64.000000 -15.666667 178 - -63.833333 -15.666667 187 - -63.666667 -15.666667 202 - -63.500000 -15.666667 199 - -63.333333 -15.666667 208 - -63.166667 -15.666667 190 - -63.000000 -15.666667 236 - -62.833333 -15.666667 304 - -62.666667 -15.666667 372 - -62.500000 -15.666667 517 - -62.333333 -15.666667 390 - -62.166667 -15.666667 342 - -62.000000 -15.666667 341 - -61.833333 -15.666667 418 - -61.666667 -15.666667 422 - -61.500000 -15.666667 411 - -61.333333 -15.666667 350 - -61.166667 -15.666667 319 - -61.000000 -15.666667 269 - -60.833333 -15.666667 235 - -60.666667 -15.666667 288 - -60.500000 -15.666667 254 - -60.333333 -15.666667 240 - -60.166667 -15.666667 205 - -60.000000 -15.666667 209 - -59.833333 -15.666667 210 - -59.666667 -15.666667 228 - -59.500000 -15.666667 450 - -59.333333 -15.666667 400 - -59.166667 -15.666667 379 - -59.000000 -15.666667 274 - -58.833333 -15.666667 311 - -58.666667 -15.666667 190 - -58.500000 -15.666667 222 - -58.333333 -15.666667 213 - -58.166667 -15.666667 228 - -58.000000 -15.666667 237 - -57.833333 -15.666667 158 - -57.666667 -15.666667 157 - -57.500000 -15.666667 134 - -57.333333 -15.666667 249 - -57.166667 -15.666667 570 - -57.000000 -15.666667 448 - -56.833333 -15.666667 313 - -56.666667 -15.666667 365 - -56.500000 -15.666667 244 - -56.333333 -15.666667 259 - -56.166667 -15.666667 206 - -56.000000 -15.666667 191 - -55.833333 -15.666667 173 - -55.666667 -15.666667 195 - -55.500000 -15.666667 614 - -55.333333 -15.666667 794 - -55.166667 -15.666667 727 - -55.000000 -15.666667 432 - -54.833333 -15.666667 381 - -54.666667 -15.666667 542 - -54.500000 -15.666667 564 - -54.333333 -15.666667 452 - -54.166667 -15.666667 716 - -54.000000 -15.666667 622 - -53.833333 -15.666667 675 - -53.666667 -15.666667 566 - -53.500000 -15.666667 524 - -53.333333 -15.666667 448 - -53.166667 -15.666667 402 - -53.000000 -15.666667 410 - -52.833333 -15.666667 400 - -52.666667 -15.666667 452 - -52.500000 -15.666667 711 - -52.333333 -15.666667 408 - -52.166667 -15.666667 337 - -52.000000 -15.666667 348 - -51.833333 -15.666667 344 - -51.666667 -15.666667 312 - -51.500000 -15.666667 310 - -51.333333 -15.666667 315 - -51.166667 -15.666667 308 - -51.000000 -15.666667 301 - -50.833333 -15.666667 364 - -50.666667 -15.666667 347 - -50.500000 -15.666667 431 - -50.333333 -15.666667 518 - -50.166667 -15.666667 549 - -50.000000 -15.666667 768 - -49.833333 -15.666667 707 - -49.666667 -15.666667 613 - -49.500000 -15.666667 638 - -49.333333 -15.666667 713 - -49.166667 -15.666667 756 - -49.000000 -15.666667 843 - -48.833333 -15.666667 992 - -48.666667 -15.666667 844 - -48.500000 -15.666667 716 - -48.333333 -15.666667 941 - -48.166667 -15.666667 1212 - -48.000000 -15.666667 1091 - -47.833333 -15.666667 1089 - -47.666667 -15.666667 956 - -47.500000 -15.666667 1160 - -47.333333 -15.666667 874 - -47.166667 -15.666667 919 - -47.000000 -15.666667 720 - -46.833333 -15.666667 906 - -46.666667 -15.666667 637 - -46.500000 -15.666667 623 - -46.333333 -15.666667 586 - -46.166667 -15.666667 550 - -46.000000 -15.666667 545 - -45.833333 -15.666667 737 - -45.666667 -15.666667 697 - -45.500000 -15.666667 657 - -45.333333 -15.666667 648 - -45.166667 -15.666667 598 - -45.000000 -15.666667 534 - -44.833333 -15.666667 502 - -44.666667 -15.666667 463 - -44.500000 -15.666667 456 - -44.333333 -15.666667 490 - -44.166667 -15.666667 779 - -44.000000 -15.666667 710 - -43.833333 -15.666667 562 - -43.666667 -15.666667 508 - -43.500000 -15.666667 530 - -43.333333 -15.666667 523 - -43.166667 -15.666667 551 - -43.000000 -15.666667 546 - -42.833333 -15.666667 1280 - -42.666667 -15.666667 875 - -42.500000 -15.666667 848 - -42.333333 -15.666667 842 - -42.166667 -15.666667 821 - -42.000000 -15.666667 776 - -41.833333 -15.666667 785 - -41.666667 -15.666667 842 - -41.500000 -15.666667 795 - -41.333333 -15.666667 880 - -41.166667 -15.666667 773 - -41.000000 -15.666667 852 - -40.833333 -15.666667 925 - -40.666667 -15.666667 805 - -40.500000 -15.666667 323 - -40.333333 -15.666667 626 - -40.166667 -15.666667 454 - -40.000000 -15.666667 252 - -65.000000 -15.833333 169 - -64.833333 -15.833333 179 - -64.666667 -15.833333 184 - -64.500000 -15.833333 192 - -64.333333 -15.833333 189 - -64.166667 -15.833333 196 - -64.000000 -15.833333 195 - -63.833333 -15.833333 192 - -63.666667 -15.833333 194 - -63.500000 -15.833333 199 - -63.333333 -15.833333 201 - -63.166667 -15.833333 206 - -63.000000 -15.833333 248 - -62.833333 -15.833333 244 - -62.666667 -15.833333 320 - -62.500000 -15.833333 447 - -62.333333 -15.833333 472 - -62.166667 -15.833333 440 - -62.000000 -15.833333 408 - -61.833333 -15.833333 398 - -61.666667 -15.833333 389 - -61.500000 -15.833333 359 - -61.333333 -15.833333 353 - -61.166667 -15.833333 253 - -61.000000 -15.833333 291 - -60.833333 -15.833333 273 - -60.666667 -15.833333 253 - -60.500000 -15.833333 231 - -60.333333 -15.833333 218 - -60.166667 -15.833333 213 - -60.000000 -15.833333 205 - -59.833333 -15.833333 214 - -59.666667 -15.833333 229 - -59.500000 -15.833333 486 - -59.333333 -15.833333 595 - -59.166667 -15.833333 309 - -59.000000 -15.833333 283 - -58.833333 -15.833333 238 - -58.666667 -15.833333 197 - -58.500000 -15.833333 186 - -58.333333 -15.833333 182 - -58.166667 -15.833333 246 - -58.000000 -15.833333 158 - -57.833333 -15.833333 153 - -57.666667 -15.833333 131 - -57.500000 -15.833333 189 - -57.333333 -15.833333 206 - -57.166667 -15.833333 500 - -57.000000 -15.833333 190 - -56.833333 -15.833333 339 - -56.666667 -15.833333 220 - -56.500000 -15.833333 205 - -56.333333 -15.833333 224 - -56.166667 -15.833333 166 - -56.000000 -15.833333 151 - -55.833333 -15.833333 157 - -55.666667 -15.833333 233 - -55.500000 -15.833333 631 - -55.333333 -15.833333 815 - -55.166667 -15.833333 734 - -55.000000 -15.833333 405 - -54.833333 -15.833333 424 - -54.666667 -15.833333 383 - -54.500000 -15.833333 503 - -54.333333 -15.833333 441 - -54.166667 -15.833333 608 - -54.000000 -15.833333 663 - -53.833333 -15.833333 637 - -53.666667 -15.833333 631 - -53.500000 -15.833333 484 - -53.333333 -15.833333 438 - -53.166667 -15.833333 441 - -53.000000 -15.833333 391 - -52.833333 -15.833333 399 - -52.666667 -15.833333 380 - -52.500000 -15.833333 381 - -52.333333 -15.833333 382 - -52.166667 -15.833333 401 - -52.000000 -15.833333 317 - -51.833333 -15.833333 304 - -51.666667 -15.833333 316 - -51.500000 -15.833333 316 - -51.333333 -15.833333 350 - -51.166667 -15.833333 427 - -51.000000 -15.833333 323 - -50.833333 -15.833333 349 - -50.666667 -15.833333 361 - -50.500000 -15.833333 398 - -50.333333 -15.833333 421 - -50.166667 -15.833333 660 - -50.000000 -15.833333 675 - -49.833333 -15.833333 699 - -49.666667 -15.833333 836 - -49.500000 -15.833333 716 - -49.333333 -15.833333 709 - -49.166667 -15.833333 670 - -49.000000 -15.833333 764 - -48.833333 -15.833333 1137 - -48.666667 -15.833333 1211 - -48.500000 -15.833333 984 - -48.333333 -15.833333 1067 - -48.166667 -15.833333 1049 - -48.000000 -15.833333 1073 - -47.833333 -15.833333 1016 - -47.666667 -15.833333 1002 - -47.500000 -15.833333 895 - -47.333333 -15.833333 927 - -47.166667 -15.833333 937 - -47.000000 -15.833333 972 - -46.833333 -15.833333 832 - -46.666667 -15.833333 956 - -46.500000 -15.833333 934 - -46.333333 -15.833333 860 - -46.166667 -15.833333 516 - -46.000000 -15.833333 532 - -45.833333 -15.833333 546 - -45.666667 -15.833333 641 - -45.500000 -15.833333 649 - -45.333333 -15.833333 599 - -45.166667 -15.833333 544 - -45.000000 -15.833333 487 - -44.833333 -15.833333 479 - -44.666667 -15.833333 512 - -44.500000 -15.833333 625 - -44.333333 -15.833333 699 - -44.166667 -15.833333 870 - -44.000000 -15.833333 715 - -43.833333 -15.833333 609 - -43.666667 -15.833333 507 - -43.500000 -15.833333 532 - -43.333333 -15.833333 541 - -43.166667 -15.833333 806 - -43.000000 -15.833333 600 - -42.833333 -15.833333 815 - -42.666667 -15.833333 1032 - -42.500000 -15.833333 817 - -42.333333 -15.833333 960 - -42.166667 -15.833333 802 - -42.000000 -15.833333 917 - -41.833333 -15.833333 829 - -41.666667 -15.833333 844 - -41.500000 -15.833333 860 - -41.333333 -15.833333 737 - -41.166667 -15.833333 728 - -41.000000 -15.833333 874 - -40.833333 -15.833333 721 - -40.666667 -15.833333 545 - -40.500000 -15.833333 611 - -40.333333 -15.833333 308 - -40.166667 -15.833333 222 - -40.000000 -15.833333 194 - -65.000000 -16.000000 175 - -64.833333 -16.000000 181 - -64.666667 -16.000000 181 - -64.500000 -16.000000 181 - -64.333333 -16.000000 197 - -64.166667 -16.000000 192 - -64.000000 -16.000000 188 - -63.833333 -16.000000 204 - -63.666667 -16.000000 205 - -63.500000 -16.000000 207 - -63.333333 -16.000000 209 - -63.166667 -16.000000 211 - -63.000000 -16.000000 298 - -62.833333 -16.000000 357 - -62.666667 -16.000000 404 - -62.500000 -16.000000 419 - -62.333333 -16.000000 476 - -62.166667 -16.000000 465 - -62.000000 -16.000000 455 - -61.833333 -16.000000 386 - -61.666667 -16.000000 418 - -61.500000 -16.000000 401 - -61.333333 -16.000000 404 - -61.166667 -16.000000 348 - -61.000000 -16.000000 348 - -60.833333 -16.000000 339 - -60.666667 -16.000000 269 - -60.500000 -16.000000 235 - -60.333333 -16.000000 231 - -60.166667 -16.000000 223 - -60.000000 -16.000000 222 - -59.833333 -16.000000 226 - -59.666667 -16.000000 244 - -59.500000 -16.000000 478 - -59.333333 -16.000000 737 - -59.166667 -16.000000 232 - -59.000000 -16.000000 219 - -58.833333 -16.000000 220 - -58.666667 -16.000000 231 - -58.500000 -16.000000 178 - -58.333333 -16.000000 156 - -58.166667 -16.000000 175 - -58.000000 -16.000000 130 - -57.833333 -16.000000 132 - -57.666667 -16.000000 124 - -57.500000 -16.000000 346 - -57.333333 -16.000000 305 - -57.166667 -16.000000 139 - -57.000000 -16.000000 155 - -56.833333 -16.000000 174 - -56.666667 -16.000000 195 - -56.500000 -16.000000 145 - -56.333333 -16.000000 155 - -56.166667 -16.000000 146 - -56.000000 -16.000000 150 - -55.833333 -16.000000 138 - -55.666667 -16.000000 164 - -55.500000 -16.000000 322 - -55.333333 -16.000000 701 - -55.166667 -16.000000 580 - -55.000000 -16.000000 323 - -54.833333 -16.000000 324 - -54.666667 -16.000000 351 - -54.500000 -16.000000 462 - -54.333333 -16.000000 338 - -54.166667 -16.000000 388 - -54.000000 -16.000000 383 - -53.833333 -16.000000 507 - -53.666667 -16.000000 537 - -53.500000 -16.000000 589 - -53.333333 -16.000000 458 - -53.166667 -16.000000 461 - -53.000000 -16.000000 461 - -52.833333 -16.000000 368 - -52.666667 -16.000000 506 - -52.500000 -16.000000 454 - -52.333333 -16.000000 351 - -52.166667 -16.000000 358 - -52.000000 -16.000000 345 - -51.833333 -16.000000 311 - -51.666667 -16.000000 360 - -51.500000 -16.000000 396 - -51.333333 -16.000000 385 - -51.166667 -16.000000 350 - -51.000000 -16.000000 535 - -50.833333 -16.000000 488 - -50.666667 -16.000000 413 - -50.500000 -16.000000 401 - -50.333333 -16.000000 550 - -50.166667 -16.000000 519 - -50.000000 -16.000000 725 - -49.833333 -16.000000 733 - -49.666667 -16.000000 765 - -49.500000 -16.000000 777 - -49.333333 -16.000000 729 - -49.166667 -16.000000 713 - -49.000000 -16.000000 822 - -48.833333 -16.000000 1013 - -48.666667 -16.000000 1099 - -48.500000 -16.000000 994 - -48.333333 -16.000000 1030 - -48.166667 -16.000000 1072 - -48.000000 -16.000000 1233 - -47.833333 -16.000000 967 - -47.666667 -16.000000 868 - -47.500000 -16.000000 964 - -47.333333 -16.000000 896 - -47.166667 -16.000000 861 - -47.000000 -16.000000 861 - -46.833333 -16.000000 811 - -46.666667 -16.000000 958 - -46.500000 -16.000000 882 - -46.333333 -16.000000 586 - -46.166667 -16.000000 787 - -46.000000 -16.000000 497 - -45.833333 -16.000000 536 - -45.666667 -16.000000 562 - -45.500000 -16.000000 619 - -45.333333 -16.000000 568 - -45.166667 -16.000000 526 - -45.000000 -16.000000 463 - -44.833333 -16.000000 517 - -44.666667 -16.000000 630 - -44.500000 -16.000000 701 - -44.333333 -16.000000 747 - -44.166667 -16.000000 806 - -44.000000 -16.000000 767 - -43.833333 -16.000000 628 - -43.666667 -16.000000 509 - -43.500000 -16.000000 546 - -43.333333 -16.000000 644 - -43.166667 -16.000000 682 - -43.000000 -16.000000 859 - -42.833333 -16.000000 817 - -42.666667 -16.000000 852 - -42.500000 -16.000000 857 - -42.333333 -16.000000 612 - -42.166667 -16.000000 620 - -42.000000 -16.000000 917 - -41.833333 -16.000000 855 - -41.666667 -16.000000 917 - -41.500000 -16.000000 776 - -41.333333 -16.000000 676 - -41.166667 -16.000000 764 - -41.000000 -16.000000 437 - -40.833333 -16.000000 366 - -40.666667 -16.000000 517 - -40.500000 -16.000000 300 - -40.333333 -16.000000 231 - -40.166667 -16.000000 197 - -40.000000 -16.000000 138 - -65.000000 -16.166667 181 - -64.833333 -16.166667 184 - -64.666667 -16.166667 188 - -64.500000 -16.166667 193 - -64.333333 -16.166667 187 - -64.166667 -16.166667 207 - -64.000000 -16.166667 204 - -63.833333 -16.166667 195 - -63.666667 -16.166667 203 - -63.500000 -16.166667 213 - -63.333333 -16.166667 217 - -63.166667 -16.166667 220 - -63.000000 -16.166667 310 - -62.833333 -16.166667 406 - -62.666667 -16.166667 652 - -62.500000 -16.166667 482 - -62.333333 -16.166667 506 - -62.166667 -16.166667 612 - -62.000000 -16.166667 505 - -61.833333 -16.166667 445 - -61.666667 -16.166667 412 - -61.500000 -16.166667 434 - -61.333333 -16.166667 410 - -61.166667 -16.166667 372 - -61.000000 -16.166667 382 - -60.833333 -16.166667 378 - -60.666667 -16.166667 310 - -60.500000 -16.166667 251 - -60.333333 -16.166667 276 - -60.166667 -16.166667 238 - -60.000000 -16.166667 259 - -59.833333 -16.166667 247 - -59.666667 -16.166667 250 - -59.500000 -16.166667 444 - -59.333333 -16.166667 226 - -59.166667 -16.166667 180 - -59.000000 -16.166667 166 - -58.833333 -16.166667 146 - -58.666667 -16.166667 194 - -58.500000 -16.166667 152 - -58.333333 -16.166667 137 - -58.166667 -16.166667 228 - -58.000000 -16.166667 128 - -57.833333 -16.166667 120 - -57.666667 -16.166667 154 - -57.500000 -16.166667 451 - -57.333333 -16.166667 179 - -57.166667 -16.166667 122 - -57.000000 -16.166667 122 - -56.833333 -16.166667 133 - -56.666667 -16.166667 156 - -56.500000 -16.166667 127 - -56.333333 -16.166667 133 - -56.166667 -16.166667 139 - -56.000000 -16.166667 135 - -55.833333 -16.166667 135 - -55.666667 -16.166667 143 - -55.500000 -16.166667 170 - -55.333333 -16.166667 732 - -55.166667 -16.166667 633 - -55.000000 -16.166667 461 - -54.833333 -16.166667 277 - -54.666667 -16.166667 298 - -54.500000 -16.166667 417 - -54.333333 -16.166667 318 - -54.166667 -16.166667 391 - -54.000000 -16.166667 371 - -53.833333 -16.166667 609 - -53.666667 -16.166667 527 - -53.500000 -16.166667 485 - -53.333333 -16.166667 536 - -53.166667 -16.166667 433 - -53.000000 -16.166667 393 - -52.833333 -16.166667 459 - -52.666667 -16.166667 423 - -52.500000 -16.166667 362 - -52.333333 -16.166667 374 - -52.166667 -16.166667 448 - -52.000000 -16.166667 383 - -51.833333 -16.166667 360 - -51.666667 -16.166667 346 - -51.500000 -16.166667 446 - -51.333333 -16.166667 500 - -51.166667 -16.166667 364 - -51.000000 -16.166667 366 - -50.833333 -16.166667 419 - -50.666667 -16.166667 451 - -50.500000 -16.166667 654 - -50.333333 -16.166667 538 - -50.166667 -16.166667 654 - -50.000000 -16.166667 839 - -49.833333 -16.166667 746 - -49.666667 -16.166667 897 - -49.500000 -16.166667 923 - -49.333333 -16.166667 785 - -49.166667 -16.166667 1084 - -49.000000 -16.166667 1056 - -48.833333 -16.166667 1054 - -48.666667 -16.166667 905 - -48.500000 -16.166667 903 - -48.333333 -16.166667 1006 - -48.166667 -16.166667 945 - -48.000000 -16.166667 906 - -47.833333 -16.166667 963 - -47.666667 -16.166667 996 - -47.500000 -16.166667 961 - -47.333333 -16.166667 832 - -47.166667 -16.166667 701 - -47.000000 -16.166667 693 - -46.833333 -16.166667 759 - -46.666667 -16.166667 798 - -46.500000 -16.166667 919 - -46.333333 -16.166667 815 - -46.166667 -16.166667 563 - -46.000000 -16.166667 529 - -45.833333 -16.166667 499 - -45.666667 -16.166667 483 - -45.500000 -16.166667 542 - -45.333333 -16.166667 588 - -45.166667 -16.166667 469 - -45.000000 -16.166667 510 - -44.833333 -16.166667 664 - -44.666667 -16.166667 690 - -44.500000 -16.166667 813 - -44.333333 -16.166667 847 - -44.166667 -16.166667 801 - -44.000000 -16.166667 669 - -43.833333 -16.166667 548 - -43.666667 -16.166667 678 - -43.500000 -16.166667 555 - -43.333333 -16.166667 687 - -43.166667 -16.166667 862 - -43.000000 -16.166667 801 - -42.833333 -16.166667 782 - -42.666667 -16.166667 682 - -42.500000 -16.166667 887 - -42.333333 -16.166667 564 - -42.166667 -16.166667 704 - -42.000000 -16.166667 872 - -41.833333 -16.166667 638 - -41.666667 -16.166667 780 - -41.500000 -16.166667 706 - -41.333333 -16.166667 657 - -41.166667 -16.166667 823 - -41.000000 -16.166667 770 - -40.833333 -16.166667 357 - -40.666667 -16.166667 186 - -40.500000 -16.166667 228 - -40.333333 -16.166667 209 - -40.166667 -16.166667 238 - -40.000000 -16.166667 214 - -65.000000 -16.333333 186 - -64.833333 -16.333333 200 - -64.666667 -16.333333 193 - -64.500000 -16.333333 198 - -64.333333 -16.333333 205 - -64.166667 -16.333333 193 - -64.000000 -16.333333 201 - -63.833333 -16.333333 210 - -63.666667 -16.333333 211 - -63.500000 -16.333333 209 - -63.333333 -16.333333 222 - -63.166667 -16.333333 224 - -63.000000 -16.333333 238 - -62.833333 -16.333333 249 - -62.666667 -16.333333 471 - -62.500000 -16.333333 445 - -62.333333 -16.333333 464 - -62.166667 -16.333333 635 - -62.000000 -16.333333 534 - -61.833333 -16.333333 506 - -61.666667 -16.333333 467 - -61.500000 -16.333333 450 - -61.333333 -16.333333 441 - -61.166667 -16.333333 440 - -61.000000 -16.333333 402 - -60.833333 -16.333333 381 - -60.666667 -16.333333 330 - -60.500000 -16.333333 309 - -60.333333 -16.333333 341 - -60.166667 -16.333333 316 - -60.000000 -16.333333 308 - -59.833333 -16.333333 274 - -59.666667 -16.333333 227 - -59.500000 -16.333333 210 - -59.333333 -16.333333 200 - -59.166667 -16.333333 199 - -59.000000 -16.333333 129 - -58.833333 -16.333333 124 - -58.666667 -16.333333 146 - -58.500000 -16.333333 160 - -58.333333 -16.333333 157 - -58.166667 -16.333333 217 - -58.000000 -16.333333 122 - -57.833333 -16.333333 117 - -57.666667 -16.333333 239 - -57.500000 -16.333333 617 - -57.333333 -16.333333 136 - -57.166667 -16.333333 138 - -57.000000 -16.333333 109 - -56.833333 -16.333333 127 - -56.666667 -16.333333 126 - -56.500000 -16.333333 126 - -56.333333 -16.333333 130 - -56.166667 -16.333333 129 - -56.000000 -16.333333 131 - -55.833333 -16.333333 134 - -55.666667 -16.333333 143 - -55.500000 -16.333333 154 - -55.333333 -16.333333 530 - -55.166667 -16.333333 498 - -55.000000 -16.333333 435 - -54.833333 -16.333333 274 - -54.666667 -16.333333 357 - -54.500000 -16.333333 314 - -54.333333 -16.333333 241 - -54.166667 -16.333333 310 - -54.000000 -16.333333 368 - -53.833333 -16.333333 445 - -53.666667 -16.333333 500 - -53.500000 -16.333333 655 - -53.333333 -16.333333 705 - -53.166667 -16.333333 567 - -53.000000 -16.333333 584 - -52.833333 -16.333333 493 - -52.666667 -16.333333 445 - -52.500000 -16.333333 692 - -52.333333 -16.333333 938 - -52.166667 -16.333333 499 - -52.000000 -16.333333 367 - -51.833333 -16.333333 340 - -51.666667 -16.333333 393 - -51.500000 -16.333333 522 - -51.333333 -16.333333 462 - -51.166667 -16.333333 757 - -51.000000 -16.333333 477 - -50.833333 -16.333333 411 - -50.666667 -16.333333 595 - -50.500000 -16.333333 484 - -50.333333 -16.333333 633 - -50.166667 -16.333333 707 - -50.000000 -16.333333 841 - -49.833333 -16.333333 775 - -49.666667 -16.333333 733 - -49.500000 -16.333333 768 - -49.333333 -16.333333 828 - -49.166667 -16.333333 927 - -49.000000 -16.333333 950 - -48.833333 -16.333333 982 - -48.666667 -16.333333 940 - -48.500000 -16.333333 903 - -48.333333 -16.333333 844 - -48.166667 -16.333333 794 - -48.000000 -16.333333 892 - -47.833333 -16.333333 977 - -47.666667 -16.333333 928 - -47.500000 -16.333333 949 - -47.333333 -16.333333 882 - -47.166667 -16.333333 901 - -47.000000 -16.333333 621 - -46.833333 -16.333333 616 - -46.666667 -16.333333 726 - -46.500000 -16.333333 946 - -46.333333 -16.333333 897 - -46.166667 -16.333333 831 - -46.000000 -16.333333 710 - -45.833333 -16.333333 623 - -45.666667 -16.333333 525 - -45.500000 -16.333333 497 - -45.333333 -16.333333 488 - -45.166667 -16.333333 498 - -45.000000 -16.333333 542 - -44.833333 -16.333333 617 - -44.666667 -16.333333 627 - -44.500000 -16.333333 737 - -44.333333 -16.333333 758 - -44.166667 -16.333333 838 - -44.000000 -16.333333 755 - -43.833333 -16.333333 718 - -43.666667 -16.333333 596 - -43.500000 -16.333333 635 - -43.333333 -16.333333 917 - -43.166667 -16.333333 925 - -43.000000 -16.333333 908 - -42.833333 -16.333333 792 - -42.666667 -16.333333 888 - -42.500000 -16.333333 626 - -42.333333 -16.333333 537 - -42.166667 -16.333333 782 - -42.000000 -16.333333 545 - -41.833333 -16.333333 714 - -41.666667 -16.333333 656 - -41.500000 -16.333333 794 - -41.333333 -16.333333 606 - -41.166667 -16.333333 696 - -41.000000 -16.333333 976 - -40.833333 -16.333333 213 - -40.666667 -16.333333 519 - -40.500000 -16.333333 232 - -40.333333 -16.333333 571 - -40.166667 -16.333333 499 - -40.000000 -16.333333 732 - -65.000000 -16.500000 197 - -64.833333 -16.500000 201 - -64.666667 -16.500000 195 - -64.500000 -16.500000 205 - -64.333333 -16.500000 211 - -64.166667 -16.500000 206 - -64.000000 -16.500000 216 - -63.833333 -16.500000 203 - -63.666667 -16.500000 211 - -63.500000 -16.500000 216 - -63.333333 -16.500000 216 - -63.166667 -16.500000 222 - -63.000000 -16.500000 227 - -62.833333 -16.500000 240 - -62.666667 -16.500000 248 - -62.500000 -16.500000 281 - -62.333333 -16.500000 353 - -62.166667 -16.500000 482 - -62.000000 -16.500000 648 - -61.833333 -16.500000 441 - -61.666667 -16.500000 420 - -61.500000 -16.500000 450 - -61.333333 -16.500000 438 - -61.166667 -16.500000 468 - -61.000000 -16.500000 467 - -60.833333 -16.500000 487 - -60.666667 -16.500000 409 - -60.500000 -16.500000 396 - -60.333333 -16.500000 306 - -60.166667 -16.500000 270 - -60.000000 -16.500000 211 - -59.833333 -16.500000 213 - -59.666667 -16.500000 188 - -59.500000 -16.500000 173 - -59.333333 -16.500000 193 - -59.166667 -16.500000 182 - -59.000000 -16.500000 119 - -58.833333 -16.500000 112 - -58.666667 -16.500000 109 - -58.500000 -16.500000 104 - -58.333333 -16.500000 100 - -58.166667 -16.500000 160 - -58.000000 -16.500000 114 - -57.833333 -16.500000 113 - -57.666667 -16.500000 329 - -57.500000 -16.500000 368 - -57.333333 -16.500000 112 - -57.166667 -16.500000 129 - -57.000000 -16.500000 112 - -56.833333 -16.500000 118 - -56.666667 -16.500000 123 - -56.500000 -16.500000 124 - -56.333333 -16.500000 127 - -56.166667 -16.500000 133 - -56.000000 -16.500000 135 - -55.833333 -16.500000 138 - -55.666667 -16.500000 147 - -55.500000 -16.500000 156 - -55.333333 -16.500000 176 - -55.166667 -16.500000 422 - -55.000000 -16.500000 189 - -54.833333 -16.500000 224 - -54.666667 -16.500000 237 - -54.500000 -16.500000 241 - -54.333333 -16.500000 278 - -54.166667 -16.500000 272 - -54.000000 -16.500000 336 - -53.833333 -16.500000 542 - -53.666667 -16.500000 509 - -53.500000 -16.500000 575 - -53.333333 -16.500000 565 - -53.166667 -16.500000 724 - -53.000000 -16.500000 615 - -52.833333 -16.500000 552 - -52.666667 -16.500000 520 - -52.500000 -16.500000 495 - -52.333333 -16.500000 616 - -52.166667 -16.500000 767 - -52.000000 -16.500000 651 - -51.833333 -16.500000 385 - -51.666667 -16.500000 475 - -51.500000 -16.500000 713 - -51.333333 -16.500000 484 - -51.166667 -16.500000 531 - -51.000000 -16.500000 460 - -50.833333 -16.500000 637 - -50.666667 -16.500000 562 - -50.500000 -16.500000 450 - -50.333333 -16.500000 578 - -50.166667 -16.500000 611 - -50.000000 -16.500000 792 - -49.833333 -16.500000 703 - -49.666667 -16.500000 634 - -49.500000 -16.500000 750 - -49.333333 -16.500000 751 - -49.166667 -16.500000 819 - -49.000000 -16.500000 956 - -48.833333 -16.500000 1016 - -48.666667 -16.500000 904 - -48.500000 -16.500000 903 - -48.333333 -16.500000 1019 - -48.166667 -16.500000 930 - -48.000000 -16.500000 809 - -47.833333 -16.500000 808 - -47.666667 -16.500000 887 - -47.500000 -16.500000 881 - -47.333333 -16.500000 958 - -47.166667 -16.500000 917 - -47.000000 -16.500000 872 - -46.833333 -16.500000 583 - -46.666667 -16.500000 562 - -46.500000 -16.500000 578 - -46.333333 -16.500000 909 - -46.166667 -16.500000 846 - -46.000000 -16.500000 749 - -45.833333 -16.500000 603 - -45.666667 -16.500000 564 - -45.500000 -16.500000 611 - -45.333333 -16.500000 522 - -45.166667 -16.500000 509 - -45.000000 -16.500000 530 - -44.833333 -16.500000 574 - -44.666667 -16.500000 603 - -44.500000 -16.500000 725 - -44.333333 -16.500000 794 - -44.166667 -16.500000 841 - -44.000000 -16.500000 902 - -43.833333 -16.500000 703 - -43.666667 -16.500000 595 - -43.500000 -16.500000 663 - -43.333333 -16.500000 945 - -43.166667 -16.500000 908 - -43.000000 -16.500000 822 - -42.833333 -16.500000 670 - -42.666667 -16.500000 946 - -42.500000 -16.500000 632 - -42.333333 -16.500000 730 - -42.166667 -16.500000 776 - -42.000000 -16.500000 866 - -41.833333 -16.500000 566 - -41.666667 -16.500000 459 - -41.500000 -16.500000 336 - -41.333333 -16.500000 311 - -41.166667 -16.500000 729 - -41.000000 -16.500000 519 - -40.833333 -16.500000 557 - -40.666667 -16.500000 542 - -40.500000 -16.500000 409 - -40.333333 -16.500000 723 - -40.166667 -16.500000 548 - -40.000000 -16.500000 277 - -65.000000 -16.666667 215 - -64.833333 -16.666667 208 - -64.666667 -16.666667 201 - -64.500000 -16.666667 209 - -64.333333 -16.666667 209 - -64.166667 -16.666667 234 - -64.000000 -16.666667 227 - -63.833333 -16.666667 224 - -63.666667 -16.666667 213 - -63.500000 -16.666667 222 - -63.333333 -16.666667 220 - -63.166667 -16.666667 230 - -63.000000 -16.666667 235 - -62.833333 -16.666667 235 - -62.666667 -16.666667 241 - -62.500000 -16.666667 244 - -62.333333 -16.666667 447 - -62.166667 -16.666667 554 - -62.000000 -16.666667 442 - -61.833333 -16.666667 357 - -61.666667 -16.666667 441 - -61.500000 -16.666667 488 - -61.333333 -16.666667 451 - -61.166667 -16.666667 426 - -61.000000 -16.666667 453 - -60.833333 -16.666667 518 - -60.666667 -16.666667 464 - -60.500000 -16.666667 422 - -60.333333 -16.666667 269 - -60.166667 -16.666667 281 - -60.000000 -16.666667 259 - -59.833333 -16.666667 225 - -59.666667 -16.666667 227 - -59.500000 -16.666667 177 - -59.333333 -16.666667 169 - -59.166667 -16.666667 128 - -59.000000 -16.666667 144 - -58.833333 -16.666667 147 - -58.666667 -16.666667 103 - -58.500000 -16.666667 101 - -58.333333 -16.666667 107 - -58.166667 -16.666667 108 - -58.000000 -16.666667 128 - -57.833333 -16.666667 145 - -57.666667 -16.666667 141 - -57.500000 -16.666667 103 - -57.333333 -16.666667 104 - -57.166667 -16.666667 107 - -57.000000 -16.666667 114 - -56.833333 -16.666667 115 - -56.666667 -16.666667 119 - -56.500000 -16.666667 124 - -56.333333 -16.666667 129 - -56.166667 -16.666667 131 - -56.000000 -16.666667 142 - -55.833333 -16.666667 144 - -55.666667 -16.666667 148 - -55.500000 -16.666667 183 - -55.333333 -16.666667 171 - -55.166667 -16.666667 176 - -55.000000 -16.666667 371 - -54.833333 -16.666667 528 - -54.666667 -16.666667 464 - -54.500000 -16.666667 330 - -54.333333 -16.666667 317 - -54.166667 -16.666667 540 - -54.000000 -16.666667 499 - -53.833333 -16.666667 602 - -53.666667 -16.666667 677 - -53.500000 -16.666667 599 - -53.333333 -16.666667 541 - -53.166667 -16.666667 686 - -53.000000 -16.666667 596 - -52.833333 -16.666667 525 - -52.666667 -16.666667 533 - -52.500000 -16.666667 537 - -52.333333 -16.666667 543 - -52.166667 -16.666667 661 - -52.000000 -16.666667 712 - -51.833333 -16.666667 630 - -51.666667 -16.666667 668 - -51.500000 -16.666667 675 - -51.333333 -16.666667 611 - -51.166667 -16.666667 598 - -51.000000 -16.666667 581 - -50.833333 -16.666667 555 - -50.666667 -16.666667 787 - -50.500000 -16.666667 500 - -50.333333 -16.666667 620 - -50.166667 -16.666667 649 - -50.000000 -16.666667 681 - -49.833333 -16.666667 625 - -49.666667 -16.666667 609 - -49.500000 -16.666667 787 - -49.333333 -16.666667 789 - -49.166667 -16.666667 752 - -49.000000 -16.666667 866 - -48.833333 -16.666667 903 - -48.666667 -16.666667 992 - -48.500000 -16.666667 862 - -48.333333 -16.666667 820 - -48.166667 -16.666667 926 - -48.000000 -16.666667 840 - -47.833333 -16.666667 839 - -47.666667 -16.666667 976 - -47.500000 -16.666667 951 - -47.333333 -16.666667 908 - -47.166667 -16.666667 926 - -47.000000 -16.666667 850 - -46.833333 -16.666667 590 - -46.666667 -16.666667 592 - -46.500000 -16.666667 531 - -46.333333 -16.666667 627 - -46.166667 -16.666667 748 - -46.000000 -16.666667 703 - -45.833333 -16.666667 752 - -45.666667 -16.666667 649 - -45.500000 -16.666667 583 - -45.333333 -16.666667 533 - -45.166667 -16.666667 478 - -45.000000 -16.666667 506 - -44.833333 -16.666667 531 - -44.666667 -16.666667 715 - -44.500000 -16.666667 742 - -44.333333 -16.666667 835 - -44.166667 -16.666667 801 - -44.000000 -16.666667 826 - -43.833333 -16.666667 604 - -43.666667 -16.666667 603 - -43.500000 -16.666667 780 - -43.333333 -16.666667 967 - -43.166667 -16.666667 782 - -43.000000 -16.666667 806 - -42.833333 -16.666667 637 - -42.666667 -16.666667 786 - -42.500000 -16.666667 484 - -42.333333 -16.666667 432 - -42.166667 -16.666667 398 - -42.000000 -16.666667 444 - -41.833333 -16.666667 306 - -41.666667 -16.666667 712 - -41.500000 -16.666667 370 - -41.333333 -16.666667 708 - -41.166667 -16.666667 677 - -41.000000 -16.666667 284 - -40.833333 -16.666667 596 - -40.666667 -16.666667 639 - -40.500000 -16.666667 825 - -40.333333 -16.666667 840 - -40.166667 -16.666667 444 - -40.000000 -16.666667 468 - -65.000000 -16.833333 215 - -64.833333 -16.833333 200 - -64.666667 -16.833333 201 - -64.500000 -16.833333 205 - -64.333333 -16.833333 226 - -64.166667 -16.833333 239 - -64.000000 -16.833333 233 - -63.833333 -16.833333 224 - -63.666667 -16.833333 221 - -63.500000 -16.833333 219 - -63.333333 -16.833333 228 - -63.166667 -16.833333 239 - -63.000000 -16.833333 240 - -62.833333 -16.833333 243 - -62.666667 -16.833333 255 - -62.500000 -16.833333 253 - -62.333333 -16.833333 247 - -62.166667 -16.833333 379 - -62.000000 -16.833333 334 - -61.833333 -16.833333 398 - -61.666667 -16.833333 418 - -61.500000 -16.833333 401 - -61.333333 -16.833333 389 - -61.166667 -16.833333 431 - -61.000000 -16.833333 388 - -60.833333 -16.833333 401 - -60.666667 -16.833333 392 - -60.500000 -16.833333 337 - -60.333333 -16.833333 308 - -60.166667 -16.833333 289 - -60.000000 -16.833333 291 - -59.833333 -16.833333 212 - -59.666667 -16.833333 203 - -59.500000 -16.833333 171 - -59.333333 -16.833333 158 - -59.166667 -16.833333 132 - -59.000000 -16.833333 120 - -58.833333 -16.833333 111 - -58.666667 -16.833333 106 - -58.500000 -16.833333 99 - -58.333333 -16.833333 103 - -58.166667 -16.833333 105 - -58.000000 -16.833333 106 - -57.833333 -16.833333 108 - -57.666667 -16.833333 102 - -57.500000 -16.833333 107 - -57.333333 -16.833333 103 - -57.166667 -16.833333 108 - -57.000000 -16.833333 111 - -56.833333 -16.833333 113 - -56.666667 -16.833333 120 - -56.500000 -16.833333 122 - -56.333333 -16.833333 131 - -56.166667 -16.833333 138 - -56.000000 -16.833333 134 - -55.833333 -16.833333 139 - -55.666667 -16.833333 150 - -55.500000 -16.833333 155 - -55.333333 -16.833333 163 - -55.166667 -16.833333 168 - -55.000000 -16.833333 193 - -54.833333 -16.833333 475 - -54.666667 -16.833333 439 - -54.500000 -16.833333 321 - -54.333333 -16.833333 359 - -54.166667 -16.833333 416 - -54.000000 -16.833333 709 - -53.833333 -16.833333 747 - -53.666667 -16.833333 758 - -53.500000 -16.833333 690 - -53.333333 -16.833333 549 - -53.166667 -16.833333 496 - -53.000000 -16.833333 507 - -52.833333 -16.833333 456 - -52.666667 -16.833333 566 - -52.500000 -16.833333 606 - -52.333333 -16.833333 566 - -52.166667 -16.833333 582 - -52.000000 -16.833333 714 - -51.833333 -16.833333 658 - -51.666667 -16.833333 640 - -51.500000 -16.833333 818 - -51.333333 -16.833333 645 - -51.166667 -16.833333 531 - -51.000000 -16.833333 748 - -50.833333 -16.833333 583 - -50.666667 -16.833333 637 - -50.500000 -16.833333 743 - -50.333333 -16.833333 578 - -50.166667 -16.833333 665 - -50.000000 -16.833333 601 - -49.833333 -16.833333 654 - -49.666667 -16.833333 763 - -49.500000 -16.833333 748 - -49.333333 -16.833333 894 - -49.166667 -16.833333 698 - -49.000000 -16.833333 764 - -48.833333 -16.833333 874 - -48.666667 -16.833333 902 - -48.500000 -16.833333 955 - -48.333333 -16.833333 906 - -48.166667 -16.833333 948 - -48.000000 -16.833333 959 - -47.833333 -16.833333 852 - -47.666667 -16.833333 1140 - -47.500000 -16.833333 974 - -47.333333 -16.833333 925 - -47.166667 -16.833333 870 - -47.000000 -16.833333 826 - -46.833333 -16.833333 628 - -46.666667 -16.833333 545 - -46.500000 -16.833333 536 - -46.333333 -16.833333 539 - -46.166667 -16.833333 550 - -46.000000 -16.833333 644 - -45.833333 -16.833333 737 - -45.666667 -16.833333 678 - -45.500000 -16.833333 562 - -45.333333 -16.833333 531 - -45.166667 -16.833333 547 - -45.000000 -16.833333 515 - -44.833333 -16.833333 535 - -44.666667 -16.833333 694 - -44.500000 -16.833333 727 - -44.333333 -16.833333 880 - -44.166667 -16.833333 918 - -44.000000 -16.833333 901 - -43.833333 -16.833333 885 - -43.666667 -16.833333 662 - -43.500000 -16.833333 1112 - -43.333333 -16.833333 1159 - -43.166667 -16.833333 845 - -43.000000 -16.833333 813 - -42.833333 -16.833333 671 - -42.666667 -16.833333 725 - -42.500000 -16.833333 712 - -42.333333 -16.833333 381 - -42.166667 -16.833333 430 - -42.000000 -16.833333 313 - -41.833333 -16.833333 375 - -41.666667 -16.833333 811 - -41.500000 -16.833333 791 - -41.333333 -16.833333 759 - -41.166667 -16.833333 814 - -41.000000 -16.833333 409 - -40.833333 -16.833333 586 - -40.666667 -16.833333 851 - -40.500000 -16.833333 492 - -40.333333 -16.833333 448 - -40.166667 -16.833333 316 - -40.000000 -16.833333 191 - -65.000000 -17.000000 235 - -64.833333 -17.000000 215 - -64.666667 -17.000000 211 - -64.500000 -17.000000 219 - -64.333333 -17.000000 231 - -64.166667 -17.000000 236 - -64.000000 -17.000000 251 - -63.833333 -17.000000 249 - -63.666667 -17.000000 304 - -63.500000 -17.000000 237 - -63.333333 -17.000000 245 - -63.166667 -17.000000 240 - -63.000000 -17.000000 252 - -62.833333 -17.000000 249 - -62.666667 -17.000000 248 - -62.500000 -17.000000 251 - -62.333333 -17.000000 249 - -62.166667 -17.000000 256 - -62.000000 -17.000000 291 - -61.833333 -17.000000 320 - -61.666667 -17.000000 324 - -61.500000 -17.000000 435 - -61.333333 -17.000000 435 - -61.166667 -17.000000 380 - -61.000000 -17.000000 363 - -60.833333 -17.000000 315 - -60.666667 -17.000000 301 - -60.500000 -17.000000 320 - -60.333333 -17.000000 342 - -60.166667 -17.000000 369 - -60.000000 -17.000000 247 - -59.833333 -17.000000 223 - -59.666667 -17.000000 242 - -59.500000 -17.000000 234 - -59.333333 -17.000000 154 - -59.166667 -17.000000 134 - -59.000000 -17.000000 122 - -58.833333 -17.000000 119 - -58.666667 -17.000000 104 - -58.500000 -17.000000 99 - -58.333333 -17.000000 98 - -58.166667 -17.000000 100 - -58.000000 -17.000000 102 - -57.833333 -17.000000 103 - -57.666667 -17.000000 103 - -57.500000 -17.000000 101 - -57.333333 -17.000000 100 - -57.166667 -17.000000 104 - -57.000000 -17.000000 111 - -56.833333 -17.000000 115 - -56.666667 -17.000000 112 - -56.500000 -17.000000 115 - -56.333333 -17.000000 118 - -56.166667 -17.000000 127 - -56.000000 -17.000000 134 - -55.833333 -17.000000 134 - -55.666667 -17.000000 143 - -55.500000 -17.000000 150 - -55.333333 -17.000000 156 - -55.166667 -17.000000 157 - -55.000000 -17.000000 177 - -54.833333 -17.000000 457 - -54.666667 -17.000000 467 - -54.500000 -17.000000 339 - -54.333333 -17.000000 393 - -54.166667 -17.000000 747 - -54.000000 -17.000000 639 - -53.833333 -17.000000 649 - -53.666667 -17.000000 693 - -53.500000 -17.000000 819 - -53.333333 -17.000000 819 - -53.166667 -17.000000 522 - -53.000000 -17.000000 524 - -52.833333 -17.000000 481 - -52.666667 -17.000000 542 - -52.500000 -17.000000 608 - -52.333333 -17.000000 591 - -52.166667 -17.000000 646 - -52.000000 -17.000000 643 - -51.833333 -17.000000 738 - -51.666667 -17.000000 810 - -51.500000 -17.000000 600 - -51.333333 -17.000000 714 - -51.166667 -17.000000 538 - -51.000000 -17.000000 751 - -50.833333 -17.000000 829 - -50.666667 -17.000000 676 - -50.500000 -17.000000 691 - -50.333333 -17.000000 585 - -50.166667 -17.000000 672 - -50.000000 -17.000000 561 - -49.833333 -17.000000 634 - -49.666667 -17.000000 705 - -49.500000 -17.000000 758 - -49.333333 -17.000000 866 - -49.166667 -17.000000 759 - -49.000000 -17.000000 744 - -48.833333 -17.000000 834 - -48.666667 -17.000000 937 - -48.500000 -17.000000 830 - -48.333333 -17.000000 860 - -48.166667 -17.000000 821 - -48.000000 -17.000000 859 - -47.833333 -17.000000 816 - -47.666667 -17.000000 954 - -47.500000 -17.000000 921 - -47.333333 -17.000000 865 - -47.166667 -17.000000 836 - -47.000000 -17.000000 881 - -46.833333 -17.000000 590 - -46.666667 -17.000000 584 - -46.500000 -17.000000 527 - -46.333333 -17.000000 529 - -46.166667 -17.000000 502 - -46.000000 -17.000000 559 - -45.833333 -17.000000 591 - -45.666667 -17.000000 608 - -45.500000 -17.000000 509 - -45.333333 -17.000000 523 - -45.166667 -17.000000 657 - -45.000000 -17.000000 679 - -44.833333 -17.000000 479 - -44.666667 -17.000000 652 - -44.500000 -17.000000 675 - -44.333333 -17.000000 786 - -44.166667 -17.000000 853 - -44.000000 -17.000000 912 - -43.833333 -17.000000 817 - -43.666667 -17.000000 793 - -43.500000 -17.000000 1034 - -43.333333 -17.000000 1273 - -43.166667 -17.000000 897 - -43.000000 -17.000000 880 - -42.833333 -17.000000 799 - -42.666667 -17.000000 780 - -42.500000 -17.000000 550 - -42.333333 -17.000000 436 - -42.166667 -17.000000 422 - -42.000000 -17.000000 602 - -41.833333 -17.000000 599 - -41.666667 -17.000000 940 - -41.500000 -17.000000 877 - -41.333333 -17.000000 861 - -41.166667 -17.000000 769 - -41.000000 -17.000000 362 - -40.833333 -17.000000 335 - -40.666667 -17.000000 338 - -40.500000 -17.000000 286 - -40.333333 -17.000000 625 - -40.166667 -17.000000 624 - -40.000000 -17.000000 411 - -65.000000 -17.166667 349 - -64.833333 -17.166667 243 - -64.666667 -17.166667 230 - -64.500000 -17.166667 229 - -64.333333 -17.166667 242 - -64.166667 -17.166667 252 - -64.000000 -17.166667 262 - -63.833333 -17.166667 265 - -63.666667 -17.166667 265 - -63.500000 -17.166667 255 - -63.333333 -17.166667 265 - -63.166667 -17.166667 263 - -63.000000 -17.166667 255 - -62.833333 -17.166667 259 - -62.666667 -17.166667 265 - -62.500000 -17.166667 260 - -62.333333 -17.166667 259 - -62.166667 -17.166667 261 - -62.000000 -17.166667 257 - -61.833333 -17.166667 266 - -61.666667 -17.166667 252 - -61.500000 -17.166667 300 - -61.333333 -17.166667 351 - -61.166667 -17.166667 316 - -61.000000 -17.166667 291 - -60.833333 -17.166667 290 - -60.666667 -17.166667 338 - -60.500000 -17.166667 308 - -60.333333 -17.166667 330 - -60.166667 -17.166667 356 - -60.000000 -17.166667 413 - -59.833333 -17.166667 284 - -59.666667 -17.166667 256 - -59.500000 -17.166667 191 - -59.333333 -17.166667 166 - -59.166667 -17.166667 147 - -59.000000 -17.166667 131 - -58.833333 -17.166667 123 - -58.666667 -17.166667 116 - -58.500000 -17.166667 105 - -58.333333 -17.166667 97 - -58.166667 -17.166667 99 - -58.000000 -17.166667 98 - -57.833333 -17.166667 98 - -57.666667 -17.166667 99 - -57.500000 -17.166667 99 - -57.333333 -17.166667 100 - -57.166667 -17.166667 103 - -57.000000 -17.166667 109 - -56.833333 -17.166667 109 - -56.666667 -17.166667 110 - -56.500000 -17.166667 112 - -56.333333 -17.166667 119 - -56.166667 -17.166667 121 - -56.000000 -17.166667 122 - -55.833333 -17.166667 131 - -55.666667 -17.166667 138 - -55.500000 -17.166667 144 - -55.333333 -17.166667 145 - -55.166667 -17.166667 155 - -55.000000 -17.166667 166 - -54.833333 -17.166667 442 - -54.666667 -17.166667 510 - -54.500000 -17.166667 591 - -54.333333 -17.166667 646 - -54.166667 -17.166667 556 - -54.000000 -17.166667 525 - -53.833333 -17.166667 613 - -53.666667 -17.166667 704 - -53.500000 -17.166667 760 - -53.333333 -17.166667 736 - -53.166667 -17.166667 676 - -53.000000 -17.166667 745 - -52.833333 -17.166667 516 - -52.666667 -17.166667 548 - -52.500000 -17.166667 565 - -52.333333 -17.166667 643 - -52.166667 -17.166667 656 - -52.000000 -17.166667 776 - -51.833333 -17.166667 827 - -51.666667 -17.166667 931 - -51.500000 -17.166667 703 - -51.333333 -17.166667 608 - -51.166667 -17.166667 813 - -51.000000 -17.166667 774 - -50.833333 -17.166667 698 - -50.666667 -17.166667 625 - -50.500000 -17.166667 639 - -50.333333 -17.166667 550 - -50.166667 -17.166667 581 - -50.000000 -17.166667 585 - -49.833333 -17.166667 682 - -49.666667 -17.166667 554 - -49.500000 -17.166667 839 - -49.333333 -17.166667 758 - -49.166667 -17.166667 735 - -49.000000 -17.166667 776 - -48.833333 -17.166667 905 - -48.666667 -17.166667 745 - -48.500000 -17.166667 864 - -48.333333 -17.166667 885 - -48.166667 -17.166667 748 - -48.000000 -17.166667 717 - -47.833333 -17.166667 828 - -47.666667 -17.166667 852 - -47.500000 -17.166667 886 - -47.333333 -17.166667 801 - -47.166667 -17.166667 686 - -47.000000 -17.166667 768 - -46.833333 -17.166667 602 - -46.666667 -17.166667 576 - -46.500000 -17.166667 539 - -46.333333 -17.166667 561 - -46.166667 -17.166667 525 - -46.000000 -17.166667 690 - -45.833333 -17.166667 505 - -45.666667 -17.166667 541 - -45.500000 -17.166667 588 - -45.333333 -17.166667 629 - -45.166667 -17.166667 696 - -45.000000 -17.166667 700 - -44.833333 -17.166667 479 - -44.666667 -17.166667 493 - -44.500000 -17.166667 537 - -44.333333 -17.166667 659 - -44.166667 -17.166667 890 - -44.000000 -17.166667 656 - -43.833333 -17.166667 708 - -43.666667 -17.166667 760 - -43.500000 -17.166667 729 - -43.333333 -17.166667 1126 - -43.166667 -17.166667 942 - -43.000000 -17.166667 643 - -42.833333 -17.166667 903 - -42.666667 -17.166667 663 - -42.500000 -17.166667 628 - -42.333333 -17.166667 765 - -42.166667 -17.166667 793 - -42.000000 -17.166667 715 - -41.833333 -17.166667 874 - -41.666667 -17.166667 906 - -41.500000 -17.166667 659 - -41.333333 -17.166667 872 - -41.166667 -17.166667 589 - -41.000000 -17.166667 430 - -40.833333 -17.166667 287 - -40.666667 -17.166667 327 - -40.500000 -17.166667 296 - -40.333333 -17.166667 193 - -40.166667 -17.166667 259 - -40.000000 -17.166667 169 - -65.000000 -17.333333 843 - -64.833333 -17.333333 766 - -64.666667 -17.333333 974 - -64.500000 -17.333333 429 - -64.333333 -17.333333 298 - -64.166667 -17.333333 267 - -64.000000 -17.333333 285 - -63.833333 -17.333333 295 - -63.666667 -17.333333 295 - -63.500000 -17.333333 287 - -63.333333 -17.333333 290 - -63.166667 -17.333333 295 - -63.000000 -17.333333 276 - -62.833333 -17.333333 266 - -62.666667 -17.333333 270 - -62.500000 -17.333333 273 - -62.333333 -17.333333 269 - -62.166667 -17.333333 266 - -62.000000 -17.333333 267 - -61.833333 -17.333333 267 - -61.666667 -17.333333 264 - -61.500000 -17.333333 259 - -61.333333 -17.333333 377 - -61.166667 -17.333333 260 - -61.000000 -17.333333 262 - -60.833333 -17.333333 341 - -60.666667 -17.333333 275 - -60.500000 -17.333333 333 - -60.333333 -17.333333 323 - -60.166667 -17.333333 349 - -60.000000 -17.333333 402 - -59.833333 -17.333333 382 - -59.666667 -17.333333 291 - -59.500000 -17.333333 257 - -59.333333 -17.333333 222 - -59.166667 -17.333333 157 - -59.000000 -17.333333 144 - -58.833333 -17.333333 129 - -58.666667 -17.333333 113 - -58.500000 -17.333333 100 - -58.333333 -17.333333 97 - -58.166667 -17.333333 94 - -58.000000 -17.333333 96 - -57.833333 -17.333333 95 - -57.666667 -17.333333 95 - -57.500000 -17.333333 97 - -57.333333 -17.333333 103 - -57.166667 -17.333333 100 - -57.000000 -17.333333 107 - -56.833333 -17.333333 106 - -56.666667 -17.333333 114 - -56.500000 -17.333333 116 - -56.333333 -17.333333 115 - -56.166667 -17.333333 119 - -56.000000 -17.333333 126 - -55.833333 -17.333333 129 - -55.666667 -17.333333 133 - -55.500000 -17.333333 136 - -55.333333 -17.333333 142 - -55.166667 -17.333333 150 - -55.000000 -17.333333 170 - -54.833333 -17.333333 463 - -54.666667 -17.333333 543 - -54.500000 -17.333333 514 - -54.333333 -17.333333 554 - -54.166667 -17.333333 578 - -54.000000 -17.333333 671 - -53.833333 -17.333333 648 - -53.666667 -17.333333 718 - -53.500000 -17.333333 702 - -53.333333 -17.333333 682 - -53.166667 -17.333333 726 - -53.000000 -17.333333 745 - -52.833333 -17.333333 876 - -52.666667 -17.333333 883 - -52.500000 -17.333333 938 - -52.333333 -17.333333 898 - -52.166667 -17.333333 818 - -52.000000 -17.333333 763 - -51.833333 -17.333333 954 - -51.666667 -17.333333 998 - -51.500000 -17.333333 934 - -51.333333 -17.333333 800 - -51.166667 -17.333333 854 - -51.000000 -17.333333 693 - -50.833333 -17.333333 743 - -50.666667 -17.333333 590 - -50.500000 -17.333333 582 - -50.333333 -17.333333 591 - -50.166667 -17.333333 522 - -50.000000 -17.333333 527 - -49.833333 -17.333333 568 - -49.666667 -17.333333 565 - -49.500000 -17.333333 743 - -49.333333 -17.333333 686 - -49.166667 -17.333333 668 - -49.000000 -17.333333 748 - -48.833333 -17.333333 775 - -48.666667 -17.333333 780 - -48.500000 -17.333333 719 - -48.333333 -17.333333 775 - -48.166667 -17.333333 728 - -48.000000 -17.333333 943 - -47.833333 -17.333333 958 - -47.666667 -17.333333 902 - -47.500000 -17.333333 797 - -47.333333 -17.333333 870 - -47.166667 -17.333333 855 - -47.000000 -17.333333 603 - -46.833333 -17.333333 681 - -46.666667 -17.333333 652 - -46.500000 -17.333333 517 - -46.333333 -17.333333 539 - -46.166667 -17.333333 528 - -46.000000 -17.333333 538 - -45.833333 -17.333333 578 - -45.666667 -17.333333 705 - -45.500000 -17.333333 617 - -45.333333 -17.333333 638 - -45.166667 -17.333333 744 - -45.000000 -17.333333 530 - -44.833333 -17.333333 585 - -44.666667 -17.333333 557 - -44.500000 -17.333333 564 - -44.333333 -17.333333 624 - -44.166667 -17.333333 637 - -44.000000 -17.333333 710 - -43.833333 -17.333333 881 - -43.666667 -17.333333 857 - -43.500000 -17.333333 832 - -43.333333 -17.333333 655 - -43.166667 -17.333333 720 - -43.000000 -17.333333 820 - -42.833333 -17.333333 617 - -42.666667 -17.333333 824 - -42.500000 -17.333333 822 - -42.333333 -17.333333 586 - -42.166667 -17.333333 807 - -42.000000 -17.333333 881 - -41.833333 -17.333333 914 - -41.666667 -17.333333 744 - -41.500000 -17.333333 687 - -41.333333 -17.333333 387 - -41.166667 -17.333333 483 - -41.000000 -17.333333 303 - -40.833333 -17.333333 330 - -40.666667 -17.333333 228 - -40.500000 -17.333333 230 - -40.333333 -17.333333 217 - -40.166667 -17.333333 215 - -40.000000 -17.333333 196 - -65.000000 -17.500000 1156 - -64.833333 -17.500000 1576 - -64.666667 -17.500000 775 - -64.500000 -17.500000 1004 - -64.333333 -17.500000 705 - -64.166667 -17.500000 1079 - -64.000000 -17.500000 441 - -63.833333 -17.500000 345 - -63.666667 -17.500000 349 - -63.500000 -17.500000 338 - -63.333333 -17.500000 347 - -63.166667 -17.500000 332 - -63.000000 -17.500000 313 - -62.833333 -17.500000 289 - -62.666667 -17.500000 277 - -62.500000 -17.500000 277 - -62.333333 -17.500000 275 - -62.166667 -17.500000 274 - -62.000000 -17.500000 278 - -61.833333 -17.500000 272 - -61.666667 -17.500000 270 - -61.500000 -17.500000 254 - -61.333333 -17.500000 251 - -61.166667 -17.500000 262 - -61.000000 -17.500000 265 - -60.833333 -17.500000 256 - -60.666667 -17.500000 267 - -60.500000 -17.500000 301 - -60.333333 -17.500000 324 - -60.166667 -17.500000 409 - -60.000000 -17.500000 364 - -59.833333 -17.500000 379 - -59.666667 -17.500000 336 - -59.500000 -17.500000 295 - -59.333333 -17.500000 236 - -59.166667 -17.500000 564 - -59.000000 -17.500000 153 - -58.833333 -17.500000 138 - -58.666667 -17.500000 173 - -58.500000 -17.500000 118 - -58.333333 -17.500000 103 - -58.166667 -17.500000 106 - -58.000000 -17.500000 95 - -57.833333 -17.500000 93 - -57.666667 -17.500000 95 - -57.500000 -17.500000 94 - -57.333333 -17.500000 96 - -57.166667 -17.500000 98 - -57.000000 -17.500000 108 - -56.833333 -17.500000 105 - -56.666667 -17.500000 110 - -56.500000 -17.500000 116 - -56.333333 -17.500000 118 - -56.166667 -17.500000 120 - -56.000000 -17.500000 125 - -55.833333 -17.500000 132 - -55.666667 -17.500000 135 - -55.500000 -17.500000 138 - -55.333333 -17.500000 142 - -55.166667 -17.500000 325 - -55.000000 -17.500000 214 - -54.833333 -17.500000 491 - -54.666667 -17.500000 417 - -54.500000 -17.500000 498 - -54.333333 -17.500000 589 - -54.166667 -17.500000 669 - -54.000000 -17.500000 630 - -53.833333 -17.500000 648 - -53.666667 -17.500000 733 - -53.500000 -17.500000 613 - -53.333333 -17.500000 756 - -53.166667 -17.500000 745 - -53.000000 -17.500000 720 - -52.833333 -17.500000 927 - -52.666667 -17.500000 856 - -52.500000 -17.500000 779 - -52.333333 -17.500000 910 - -52.166667 -17.500000 843 - -52.000000 -17.500000 785 - -51.833333 -17.500000 860 - -51.666667 -17.500000 918 - -51.500000 -17.500000 926 - -51.333333 -17.500000 930 - -51.166667 -17.500000 883 - -51.000000 -17.500000 814 - -50.833333 -17.500000 705 - -50.666667 -17.500000 602 - -50.500000 -17.500000 540 - -50.333333 -17.500000 498 - -50.166667 -17.500000 492 - -50.000000 -17.500000 496 - -49.833333 -17.500000 589 - -49.666667 -17.500000 507 - -49.500000 -17.500000 647 - -49.333333 -17.500000 657 - -49.166667 -17.500000 685 - -49.000000 -17.500000 734 - -48.833333 -17.500000 745 - -48.666667 -17.500000 731 - -48.500000 -17.500000 673 - -48.333333 -17.500000 770 - -48.166667 -17.500000 818 - -48.000000 -17.500000 878 - -47.833333 -17.500000 923 - -47.666667 -17.500000 850 - -47.500000 -17.500000 860 - -47.333333 -17.500000 983 - -47.166667 -17.500000 955 - -47.000000 -17.500000 628 - -46.833333 -17.500000 579 - -46.666667 -17.500000 567 - -46.500000 -17.500000 529 - -46.333333 -17.500000 554 - -46.166667 -17.500000 556 - -46.000000 -17.500000 550 - -45.833333 -17.500000 685 - -45.666667 -17.500000 613 - -45.500000 -17.500000 722 - -45.333333 -17.500000 866 - -45.166667 -17.500000 881 - -45.000000 -17.500000 521 - -44.833333 -17.500000 628 - -44.666667 -17.500000 516 - -44.500000 -17.500000 993 - -44.333333 -17.500000 740 - -44.166667 -17.500000 950 - -44.000000 -17.500000 625 - -43.833333 -17.500000 666 - -43.666667 -17.500000 949 - -43.500000 -17.500000 653 - -43.333333 -17.500000 651 - -43.166667 -17.500000 861 - -43.000000 -17.500000 722 - -42.833333 -17.500000 763 - -42.666667 -17.500000 669 - -42.500000 -17.500000 817 - -42.333333 -17.500000 998 - -42.166667 -17.500000 681 - -42.000000 -17.500000 827 - -41.833333 -17.500000 963 - -41.666667 -17.500000 810 - -41.500000 -17.500000 581 - -41.333333 -17.500000 293 - -41.166667 -17.500000 439 - -41.000000 -17.500000 278 - -40.833333 -17.500000 327 - -40.666667 -17.500000 230 - -40.500000 -17.500000 317 - -40.333333 -17.500000 241 - -40.166667 -17.500000 203 - -40.000000 -17.500000 168 - -65.000000 -17.666667 3295 - -64.833333 -17.666667 3692 - -64.666667 -17.666667 2116 - -64.500000 -17.666667 1733 - -64.333333 -17.666667 1817 - -64.166667 -17.666667 1102 - -64.000000 -17.666667 957 - -63.833333 -17.666667 899 - -63.666667 -17.666667 420 - -63.500000 -17.666667 422 - -63.333333 -17.666667 403 - -63.166667 -17.666667 387 - -63.000000 -17.666667 352 - -62.833333 -17.666667 306 - -62.666667 -17.666667 289 - -62.500000 -17.666667 289 - -62.333333 -17.666667 282 - -62.166667 -17.666667 286 - -62.000000 -17.666667 278 - -61.833333 -17.666667 278 - -61.666667 -17.666667 274 - -61.500000 -17.666667 272 - -61.333333 -17.666667 270 - -61.166667 -17.666667 267 - -61.000000 -17.666667 267 - -60.833333 -17.666667 258 - -60.666667 -17.666667 272 - -60.500000 -17.666667 287 - -60.333333 -17.666667 310 - -60.166667 -17.666667 330 - -60.000000 -17.666667 296 - -59.833333 -17.666667 332 - -59.666667 -17.666667 312 - -59.500000 -17.666667 268 - -59.333333 -17.666667 318 - -59.166667 -17.666667 282 - -59.000000 -17.666667 184 - -58.833333 -17.666667 163 - -58.666667 -17.666667 154 - -58.500000 -17.666667 129 - -58.333333 -17.666667 125 - -58.166667 -17.666667 149 - -58.000000 -17.666667 150 - -57.833333 -17.666667 134 - -57.666667 -17.666667 94 - -57.500000 -17.666667 93 - -57.333333 -17.666667 97 - -57.166667 -17.666667 99 - -57.000000 -17.666667 103 - -56.833333 -17.666667 107 - -56.666667 -17.666667 115 - -56.500000 -17.666667 120 - -56.333333 -17.666667 122 - -56.166667 -17.666667 126 - -56.000000 -17.666667 130 - -55.833333 -17.666667 134 - -55.666667 -17.666667 142 - -55.500000 -17.666667 146 - -55.333333 -17.666667 147 - -55.166667 -17.666667 151 - -55.000000 -17.666667 159 - -54.833333 -17.666667 434 - -54.666667 -17.666667 501 - -54.500000 -17.666667 551 - -54.333333 -17.666667 478 - -54.166667 -17.666667 620 - -54.000000 -17.666667 493 - -53.833333 -17.666667 422 - -53.666667 -17.666667 713 - -53.500000 -17.666667 695 - -53.333333 -17.666667 846 - -53.166667 -17.666667 824 - -53.000000 -17.666667 758 - -52.833333 -17.666667 814 - -52.666667 -17.666667 828 - -52.500000 -17.666667 669 - -52.333333 -17.666667 707 - -52.166667 -17.666667 856 - -52.000000 -17.666667 719 - -51.833333 -17.666667 811 - -51.666667 -17.666667 890 - -51.500000 -17.666667 881 - -51.333333 -17.666667 846 - -51.166667 -17.666667 847 - -51.000000 -17.666667 788 - -50.833333 -17.666667 724 - -50.666667 -17.666667 616 - -50.500000 -17.666667 535 - -50.333333 -17.666667 519 - -50.166667 -17.666667 458 - -50.000000 -17.666667 483 - -49.833333 -17.666667 528 - -49.666667 -17.666667 567 - -49.500000 -17.666667 698 - -49.333333 -17.666667 728 - -49.166667 -17.666667 710 - -49.000000 -17.666667 853 - -48.833333 -17.666667 634 - -48.666667 -17.666667 741 - -48.500000 -17.666667 832 - -48.333333 -17.666667 785 - -48.166667 -17.666667 848 - -48.000000 -17.666667 875 - -47.833333 -17.666667 895 - -47.666667 -17.666667 792 - -47.500000 -17.666667 930 - -47.333333 -17.666667 860 - -47.166667 -17.666667 872 - -47.000000 -17.666667 670 - -46.833333 -17.666667 563 - -46.666667 -17.666667 583 - -46.500000 -17.666667 563 - -46.333333 -17.666667 563 - -46.166667 -17.666667 634 - -46.000000 -17.666667 673 - -45.833333 -17.666667 760 - -45.666667 -17.666667 651 - -45.500000 -17.666667 765 - -45.333333 -17.666667 872 - -45.166667 -17.666667 717 - -45.000000 -17.666667 545 - -44.833333 -17.666667 651 - -44.666667 -17.666667 498 - -44.500000 -17.666667 851 - -44.333333 -17.666667 1142 - -44.166667 -17.666667 705 - -44.000000 -17.666667 693 - -43.833333 -17.666667 996 - -43.666667 -17.666667 683 - -43.500000 -17.666667 824 - -43.333333 -17.666667 741 - -43.166667 -17.666667 795 - -43.000000 -17.666667 726 - -42.833333 -17.666667 911 - -42.666667 -17.666667 751 - -42.500000 -17.666667 966 - -42.333333 -17.666667 930 - -42.166667 -17.666667 861 - -42.000000 -17.666667 892 - -41.833333 -17.666667 536 - -41.666667 -17.666667 454 - -41.500000 -17.666667 447 - -41.333333 -17.666667 445 - -41.166667 -17.666667 321 - -41.000000 -17.666667 270 - -40.833333 -17.666667 260 - -40.666667 -17.666667 256 - -40.500000 -17.666667 227 - -40.333333 -17.666667 238 - -40.166667 -17.666667 218 - -40.000000 -17.666667 132 - -65.000000 -17.833333 2490 - -64.833333 -17.833333 2706 - -64.666667 -17.833333 2420 - -64.500000 -17.833333 2319 - -64.333333 -17.833333 2304 - -64.166667 -17.833333 1652 - -64.000000 -17.833333 1047 - -63.833333 -17.833333 805 - -63.666667 -17.833333 1520 - -63.500000 -17.833333 584 - -63.333333 -17.833333 518 - -63.166667 -17.833333 425 - -63.000000 -17.833333 369 - -62.833333 -17.833333 319 - -62.666667 -17.833333 301 - -62.500000 -17.833333 298 - -62.333333 -17.833333 290 - -62.166667 -17.833333 291 - -62.000000 -17.833333 291 - -61.833333 -17.833333 284 - -61.666667 -17.833333 281 - -61.500000 -17.833333 277 - -61.333333 -17.833333 272 - -61.166667 -17.833333 268 - -61.000000 -17.833333 353 - -60.833333 -17.833333 325 - -60.666667 -17.833333 293 - -60.500000 -17.833333 339 - -60.333333 -17.833333 387 - -60.166667 -17.833333 404 - -60.000000 -17.833333 297 - -59.833333 -17.833333 252 - -59.666667 -17.833333 294 - -59.500000 -17.833333 577 - -59.333333 -17.833333 493 - -59.166667 -17.833333 554 - -59.000000 -17.833333 490 - -58.833333 -17.833333 220 - -58.666667 -17.833333 457 - -58.500000 -17.833333 175 - -58.333333 -17.833333 147 - -58.166667 -17.833333 194 - -58.000000 -17.833333 194 - -57.833333 -17.833333 126 - -57.666667 -17.833333 178 - -57.500000 -17.833333 92 - -57.333333 -17.833333 97 - -57.166667 -17.833333 101 - -57.000000 -17.833333 104 - -56.833333 -17.833333 109 - -56.666667 -17.833333 113 - -56.500000 -17.833333 118 - -56.333333 -17.833333 125 - -56.166667 -17.833333 130 - -56.000000 -17.833333 135 - -55.833333 -17.833333 138 - -55.666667 -17.833333 145 - -55.500000 -17.833333 150 - -55.333333 -17.833333 155 - -55.166667 -17.833333 160 - -55.000000 -17.833333 167 - -54.833333 -17.833333 477 - -54.666667 -17.833333 277 - -54.500000 -17.833333 264 - -54.333333 -17.833333 294 - -54.166667 -17.833333 360 - -54.000000 -17.833333 333 - -53.833333 -17.833333 357 - -53.666667 -17.833333 437 - -53.500000 -17.833333 836 - -53.333333 -17.833333 859 - -53.166667 -17.833333 789 - -53.000000 -17.833333 886 - -52.833333 -17.833333 739 - -52.666667 -17.833333 653 - -52.500000 -17.833333 681 - -52.333333 -17.833333 596 - -52.166667 -17.833333 882 - -52.000000 -17.833333 836 - -51.833333 -17.833333 679 - -51.666667 -17.833333 760 - -51.500000 -17.833333 855 - -51.333333 -17.833333 779 - -51.166667 -17.833333 836 - -51.000000 -17.833333 726 - -50.833333 -17.833333 713 - -50.666667 -17.833333 627 - -50.500000 -17.833333 524 - -50.333333 -17.833333 506 - -50.166667 -17.833333 484 - -50.000000 -17.833333 498 - -49.833333 -17.833333 667 - -49.666667 -17.833333 785 - -49.500000 -17.833333 588 - -49.333333 -17.833333 750 - -49.166667 -17.833333 881 - -49.000000 -17.833333 736 - -48.833333 -17.833333 580 - -48.666667 -17.833333 905 - -48.500000 -17.833333 703 - -48.333333 -17.833333 736 - -48.166667 -17.833333 714 - -48.000000 -17.833333 814 - -47.833333 -17.833333 845 - -47.666667 -17.833333 724 - -47.500000 -17.833333 864 - -47.333333 -17.833333 790 - -47.166667 -17.833333 947 - -47.000000 -17.833333 731 - -46.833333 -17.833333 653 - -46.666667 -17.833333 624 - -46.500000 -17.833333 579 - -46.333333 -17.833333 598 - -46.166667 -17.833333 839 - -46.000000 -17.833333 802 - -45.833333 -17.833333 752 - -45.666667 -17.833333 773 - -45.500000 -17.833333 818 - -45.333333 -17.833333 784 - -45.166667 -17.833333 573 - -45.000000 -17.833333 687 - -44.833333 -17.833333 802 - -44.666667 -17.833333 752 - -44.500000 -17.833333 743 - -44.333333 -17.833333 1181 - -44.166667 -17.833333 667 - -44.000000 -17.833333 624 - -43.833333 -17.833333 1100 - -43.666667 -17.833333 1037 - -43.500000 -17.833333 723 - -43.333333 -17.833333 904 - -43.166667 -17.833333 836 - -43.000000 -17.833333 900 - -42.833333 -17.833333 1041 - -42.666667 -17.833333 802 - -42.500000 -17.833333 978 - -42.333333 -17.833333 565 - -42.166667 -17.833333 585 - -42.000000 -17.833333 761 - -41.833333 -17.833333 566 - -41.666667 -17.833333 628 - -41.500000 -17.833333 374 - -41.333333 -17.833333 386 - -41.166667 -17.833333 273 - -41.000000 -17.833333 393 - -40.833333 -17.833333 288 - -40.666667 -17.833333 250 - -40.500000 -17.833333 207 - -40.333333 -17.833333 129 - -40.166667 -17.833333 157 - -40.000000 -17.833333 107 - -65.000000 -18.000000 2040 - -64.833333 -18.000000 1834 - -64.666667 -18.000000 1624 - -64.500000 -18.000000 2060 - -64.333333 -18.000000 1898 - -64.166667 -18.000000 1668 - -64.000000 -18.000000 1505 - -63.833333 -18.000000 1347 - -63.666667 -18.000000 1530 - -63.500000 -18.000000 714 - -63.333333 -18.000000 622 - -63.166667 -18.000000 447 - -63.000000 -18.000000 365 - -62.833333 -18.000000 322 - -62.666667 -18.000000 318 - -62.500000 -18.000000 308 - -62.333333 -18.000000 308 - -62.166667 -18.000000 300 - -62.000000 -18.000000 296 - -61.833333 -18.000000 288 - -61.666667 -18.000000 285 - -61.500000 -18.000000 278 - -61.333333 -18.000000 275 - -61.166667 -18.000000 274 - -61.000000 -18.000000 321 - -60.833333 -18.000000 364 - -60.666667 -18.000000 406 - -60.500000 -18.000000 422 - -60.333333 -18.000000 421 - -60.166667 -18.000000 403 - -60.000000 -18.000000 430 - -59.833333 -18.000000 318 - -59.666667 -18.000000 240 - -59.500000 -18.000000 371 - -59.333333 -18.000000 658 - -59.166667 -18.000000 670 - -59.000000 -18.000000 452 - -58.833333 -18.000000 244 - -58.666667 -18.000000 313 - -58.500000 -18.000000 181 - -58.333333 -18.000000 204 - -58.166667 -18.000000 174 - -58.000000 -18.000000 203 - -57.833333 -18.000000 264 - -57.666667 -18.000000 174 - -57.500000 -18.000000 200 - -57.333333 -18.000000 94 - -57.166667 -18.000000 98 - -57.000000 -18.000000 102 - -56.833333 -18.000000 108 - -56.666667 -18.000000 113 - -56.500000 -18.000000 119 - -56.333333 -18.000000 123 - -56.166667 -18.000000 132 - -56.000000 -18.000000 137 - -55.833333 -18.000000 143 - -55.666667 -18.000000 148 - -55.500000 -18.000000 158 - -55.333333 -18.000000 162 - -55.166667 -18.000000 168 - -55.000000 -18.000000 170 - -54.833333 -18.000000 183 - -54.666667 -18.000000 349 - -54.500000 -18.000000 280 - -54.333333 -18.000000 315 - -54.166667 -18.000000 370 - -54.000000 -18.000000 322 - -53.833333 -18.000000 371 - -53.666667 -18.000000 349 - -53.500000 -18.000000 431 - -53.333333 -18.000000 554 - -53.166667 -18.000000 856 - -53.000000 -18.000000 879 - -52.833333 -18.000000 760 - -52.666667 -18.000000 710 - -52.500000 -18.000000 685 - -52.333333 -18.000000 642 - -52.166667 -18.000000 857 - -52.000000 -18.000000 790 - -51.833333 -18.000000 691 - -51.666667 -18.000000 609 - -51.500000 -18.000000 743 - -51.333333 -18.000000 727 - -51.166667 -18.000000 755 - -51.000000 -18.000000 710 - -50.833333 -18.000000 702 - -50.666667 -18.000000 659 - -50.500000 -18.000000 580 - -50.333333 -18.000000 504 - -50.166667 -18.000000 480 - -50.000000 -18.000000 588 - -49.833333 -18.000000 616 - -49.666667 -18.000000 707 - -49.500000 -18.000000 531 - -49.333333 -18.000000 810 - -49.166667 -18.000000 726 - -49.000000 -18.000000 635 - -48.833333 -18.000000 589 - -48.666667 -18.000000 676 - -48.500000 -18.000000 737 - -48.333333 -18.000000 727 - -48.166667 -18.000000 681 - -48.000000 -18.000000 784 - -47.833333 -18.000000 825 - -47.666667 -18.000000 753 - -47.500000 -18.000000 849 - -47.333333 -18.000000 759 - -47.166667 -18.000000 986 - -47.000000 -18.000000 730 - -46.833333 -18.000000 646 - -46.666667 -18.000000 563 - -46.500000 -18.000000 806 - -46.333333 -18.000000 819 - -46.166667 -18.000000 831 - -46.000000 -18.000000 797 - -45.833333 -18.000000 770 - -45.666667 -18.000000 792 - -45.500000 -18.000000 762 - -45.333333 -18.000000 758 - -45.166667 -18.000000 579 - -45.000000 -18.000000 706 - -44.833333 -18.000000 850 - -44.666667 -18.000000 800 - -44.500000 -18.000000 657 - -44.333333 -18.000000 1047 - -44.166667 -18.000000 566 - -44.000000 -18.000000 1196 - -43.833333 -18.000000 1172 - -43.666667 -18.000000 957 - -43.500000 -18.000000 968 - -43.333333 -18.000000 930 - -43.166667 -18.000000 918 - -43.000000 -18.000000 1013 - -42.833333 -18.000000 917 - -42.666667 -18.000000 827 - -42.500000 -18.000000 621 - -42.333333 -18.000000 482 - -42.166667 -18.000000 361 - -42.000000 -18.000000 578 - -41.833333 -18.000000 619 - -41.666667 -18.000000 582 - -41.500000 -18.000000 430 - -41.333333 -18.000000 645 - -41.166667 -18.000000 353 - -41.000000 -18.000000 290 - -40.833333 -18.000000 295 - -40.666667 -18.000000 322 - -40.500000 -18.000000 224 - -40.333333 -18.000000 167 - -40.166667 -18.000000 137 - -40.000000 -18.000000 54 - -65.000000 -18.166667 2211 - -64.833333 -18.166667 1757 - -64.666667 -18.166667 1735 - -64.500000 -18.166667 1611 - -64.333333 -18.166667 2015 - -64.166667 -18.166667 1799 - -64.000000 -18.166667 1708 - -63.833333 -18.166667 1624 - -63.666667 -18.166667 1591 - -63.500000 -18.166667 641 - -63.333333 -18.166667 723 - -63.166667 -18.166667 481 - -63.000000 -18.166667 375 - -62.833333 -18.166667 343 - -62.666667 -18.166667 330 - -62.500000 -18.166667 324 - -62.333333 -18.166667 315 - -62.166667 -18.166667 307 - -62.000000 -18.166667 303 - -61.833333 -18.166667 297 - -61.666667 -18.166667 288 - -61.500000 -18.166667 281 - -61.333333 -18.166667 279 - -61.166667 -18.166667 278 - -61.000000 -18.166667 279 - -60.833333 -18.166667 330 - -60.666667 -18.166667 425 - -60.500000 -18.166667 418 - -60.333333 -18.166667 484 - -60.166667 -18.166667 622 - -60.000000 -18.166667 391 - -59.833333 -18.166667 429 - -59.666667 -18.166667 288 - -59.500000 -18.166667 220 - -59.333333 -18.166667 222 - -59.166667 -18.166667 249 - -59.000000 -18.166667 356 - -58.833333 -18.166667 499 - -58.666667 -18.166667 334 - -58.500000 -18.166667 519 - -58.333333 -18.166667 341 - -58.166667 -18.166667 188 - -58.000000 -18.166667 218 - -57.833333 -18.166667 280 - -57.666667 -18.166667 315 - -57.500000 -18.166667 92 - -57.333333 -18.166667 93 - -57.166667 -18.166667 97 - -57.000000 -18.166667 102 - -56.833333 -18.166667 108 - -56.666667 -18.166667 114 - -56.500000 -18.166667 118 - -56.333333 -18.166667 125 - -56.166667 -18.166667 132 - -56.000000 -18.166667 139 - -55.833333 -18.166667 146 - -55.666667 -18.166667 152 - -55.500000 -18.166667 158 - -55.333333 -18.166667 165 - -55.166667 -18.166667 174 - -55.000000 -18.166667 180 - -54.833333 -18.166667 414 - -54.666667 -18.166667 340 - -54.500000 -18.166667 258 - -54.333333 -18.166667 321 - -54.166667 -18.166667 322 - -54.000000 -18.166667 316 - -53.833333 -18.166667 346 - -53.666667 -18.166667 688 - -53.500000 -18.166667 424 - -53.333333 -18.166667 604 - -53.166667 -18.166667 863 - -53.000000 -18.166667 809 - -52.833333 -18.166667 846 - -52.666667 -18.166667 779 - -52.500000 -18.166667 654 - -52.333333 -18.166667 601 - -52.166667 -18.166667 611 - -52.000000 -18.166667 852 - -51.833333 -18.166667 757 - -51.666667 -18.166667 721 - -51.500000 -18.166667 648 - -51.333333 -18.166667 637 - -51.166667 -18.166667 658 - -51.000000 -18.166667 761 - -50.833333 -18.166667 847 - -50.666667 -18.166667 680 - -50.500000 -18.166667 641 - -50.333333 -18.166667 580 - -50.166667 -18.166667 439 - -50.000000 -18.166667 517 - -49.833333 -18.166667 598 - -49.666667 -18.166667 702 - -49.500000 -18.166667 498 - -49.333333 -18.166667 641 - -49.166667 -18.166667 718 - -49.000000 -18.166667 756 - -48.833333 -18.166667 582 - -48.666667 -18.166667 573 - -48.500000 -18.166667 685 - -48.333333 -18.166667 767 - -48.166667 -18.166667 640 - -48.000000 -18.166667 824 - -47.833333 -18.166667 861 - -47.666667 -18.166667 703 - -47.500000 -18.166667 738 - -47.333333 -18.166667 782 - -47.166667 -18.166667 776 - -47.000000 -18.166667 848 - -46.833333 -18.166667 843 - -46.666667 -18.166667 727 - -46.500000 -18.166667 1001 - -46.333333 -18.166667 774 - -46.166667 -18.166667 765 - -46.000000 -18.166667 840 - -45.833333 -18.166667 834 - -45.666667 -18.166667 733 - -45.500000 -18.166667 676 - -45.333333 -18.166667 709 - -45.166667 -18.166667 573 - -45.000000 -18.166667 768 - -44.833333 -18.166667 863 - -44.666667 -18.166667 642 - -44.500000 -18.166667 602 - -44.333333 -18.166667 573 - -44.166667 -18.166667 630 - -44.000000 -18.166667 1126 - -43.833333 -18.166667 1119 - -43.666667 -18.166667 1087 - -43.500000 -18.166667 884 - -43.333333 -18.166667 1189 - -43.166667 -18.166667 1014 - -43.000000 -18.166667 770 - -42.833333 -18.166667 736 - -42.666667 -18.166667 645 - -42.500000 -18.166667 520 - -42.333333 -18.166667 505 - -42.166667 -18.166667 319 - -42.000000 -18.166667 380 - -41.833333 -18.166667 554 - -41.666667 -18.166667 424 - -41.500000 -18.166667 400 - -41.333333 -18.166667 390 - -41.166667 -18.166667 365 - -41.000000 -18.166667 248 - -40.833333 -18.166667 254 - -40.666667 -18.166667 255 - -40.500000 -18.166667 255 - -40.333333 -18.166667 183 - -40.166667 -18.166667 117 - -40.000000 -18.166667 76 - -65.000000 -18.333333 2450 - -64.833333 -18.333333 2577 - -64.666667 -18.333333 2094 - -64.500000 -18.333333 1691 - -64.333333 -18.333333 2410 - -64.166667 -18.333333 1656 - -64.000000 -18.333333 2061 - -63.833333 -18.333333 1653 - -63.666667 -18.333333 1255 - -63.500000 -18.333333 1098 - -63.333333 -18.333333 698 - -63.166667 -18.333333 502 - -63.000000 -18.333333 396 - -62.833333 -18.333333 358 - -62.666667 -18.333333 341 - -62.500000 -18.333333 328 - -62.333333 -18.333333 320 - -62.166667 -18.333333 315 - -62.000000 -18.333333 305 - -61.833333 -18.333333 298 - -61.666667 -18.333333 290 - -61.500000 -18.333333 287 - -61.333333 -18.333333 284 - -61.166667 -18.333333 281 - -61.000000 -18.333333 280 - -60.833333 -18.333333 304 - -60.666667 -18.333333 382 - -60.500000 -18.333333 450 - -60.333333 -18.333333 421 - -60.166667 -18.333333 426 - -60.000000 -18.333333 414 - -59.833333 -18.333333 285 - -59.666667 -18.333333 558 - -59.500000 -18.333333 286 - -59.333333 -18.333333 202 - -59.166667 -18.333333 192 - -59.000000 -18.333333 217 - -58.833333 -18.333333 591 - -58.666667 -18.333333 534 - -58.500000 -18.333333 383 - -58.333333 -18.333333 396 - -58.166667 -18.333333 369 - -58.000000 -18.333333 333 - -57.833333 -18.333333 352 - -57.666667 -18.333333 273 - -57.500000 -18.333333 90 - -57.333333 -18.333333 93 - -57.166667 -18.333333 96 - -57.000000 -18.333333 103 - -56.833333 -18.333333 106 - -56.666667 -18.333333 112 - -56.500000 -18.333333 119 - -56.333333 -18.333333 125 - -56.166667 -18.333333 133 - -56.000000 -18.333333 137 - -55.833333 -18.333333 142 - -55.666667 -18.333333 150 - -55.500000 -18.333333 157 - -55.333333 -18.333333 169 - -55.166667 -18.333333 180 - -55.000000 -18.333333 187 - -54.833333 -18.333333 391 - -54.666667 -18.333333 266 - -54.500000 -18.333333 262 - -54.333333 -18.333333 410 - -54.166667 -18.333333 421 - -54.000000 -18.333333 434 - -53.833333 -18.333333 379 - -53.666667 -18.333333 410 - -53.500000 -18.333333 446 - -53.333333 -18.333333 720 - -53.166667 -18.333333 704 - -53.000000 -18.333333 832 - -52.833333 -18.333333 848 - -52.666667 -18.333333 786 - -52.500000 -18.333333 743 - -52.333333 -18.333333 617 - -52.166667 -18.333333 637 - -52.000000 -18.333333 652 - -51.833333 -18.333333 708 - -51.666667 -18.333333 611 - -51.500000 -18.333333 622 - -51.333333 -18.333333 586 - -51.166667 -18.333333 597 - -51.000000 -18.333333 678 - -50.833333 -18.333333 567 - -50.666667 -18.333333 588 - -50.500000 -18.333333 763 - -50.333333 -18.333333 599 - -50.166667 -18.333333 453 - -50.000000 -18.333333 461 - -49.833333 -18.333333 542 - -49.666667 -18.333333 537 - -49.500000 -18.333333 606 - -49.333333 -18.333333 622 - -49.166667 -18.333333 489 - -49.000000 -18.333333 522 - -48.833333 -18.333333 518 - -48.666667 -18.333333 517 - -48.500000 -18.333333 573 - -48.333333 -18.333333 551 - -48.166667 -18.333333 622 - -48.000000 -18.333333 738 - -47.833333 -18.333333 685 - -47.666667 -18.333333 655 - -47.500000 -18.333333 770 - -47.333333 -18.333333 829 - -47.166667 -18.333333 803 - -47.000000 -18.333333 769 - -46.833333 -18.333333 788 - -46.666667 -18.333333 855 - -46.500000 -18.333333 925 - -46.333333 -18.333333 775 - -46.166667 -18.333333 769 - -46.000000 -18.333333 909 - -45.833333 -18.333333 794 - -45.666667 -18.333333 753 - -45.500000 -18.333333 745 - -45.333333 -18.333333 570 - -45.166667 -18.333333 734 - -45.000000 -18.333333 764 - -44.833333 -18.333333 880 - -44.666667 -18.333333 614 - -44.500000 -18.333333 652 - -44.333333 -18.333333 568 - -44.166667 -18.333333 650 - -44.000000 -18.333333 972 - -43.833333 -18.333333 1160 - -43.666667 -18.333333 1294 - -43.500000 -18.333333 968 - -43.333333 -18.333333 1158 - -43.166667 -18.333333 751 - -43.000000 -18.333333 757 - -42.833333 -18.333333 686 - -42.666667 -18.333333 672 - -42.500000 -18.333333 594 - -42.333333 -18.333333 345 - -42.166667 -18.333333 486 - -42.000000 -18.333333 286 - -41.833333 -18.333333 304 - -41.666667 -18.333333 452 - -41.500000 -18.333333 342 - -41.333333 -18.333333 354 - -41.166667 -18.333333 321 - -41.000000 -18.333333 292 - -40.833333 -18.333333 333 - -40.666667 -18.333333 219 - -40.500000 -18.333333 188 - -40.333333 -18.333333 158 - -40.166667 -18.333333 106 - -40.000000 -18.333333 62 - -65.000000 -18.500000 2215 - -64.833333 -18.500000 1515 - -64.666667 -18.500000 1553 - -64.500000 -18.500000 2147 - -64.333333 -18.500000 1148 - -64.166667 -18.500000 2011 - -64.000000 -18.500000 2016 - -63.833333 -18.500000 1865 - -63.666667 -18.500000 1495 - -63.500000 -18.500000 856 - -63.333333 -18.500000 710 - -63.166667 -18.500000 467 - -63.000000 -18.500000 375 - -62.833333 -18.500000 360 - -62.666667 -18.500000 348 - -62.500000 -18.500000 335 - -62.333333 -18.500000 329 - -62.166667 -18.500000 321 - -62.000000 -18.500000 311 - -61.833333 -18.500000 301 - -61.666667 -18.500000 298 - -61.500000 -18.500000 290 - -61.333333 -18.500000 288 - -61.166667 -18.500000 287 - -61.000000 -18.500000 280 - -60.833333 -18.500000 305 - -60.666667 -18.500000 307 - -60.500000 -18.500000 369 - -60.333333 -18.500000 387 - -60.166667 -18.500000 346 - -60.000000 -18.500000 437 - -59.833333 -18.500000 265 - -59.666667 -18.500000 224 - -59.500000 -18.500000 207 - -59.333333 -18.500000 250 - -59.166667 -18.500000 454 - -59.000000 -18.500000 168 - -58.833333 -18.500000 199 - -58.666667 -18.500000 235 - -58.500000 -18.500000 215 - -58.333333 -18.500000 226 - -58.166667 -18.500000 331 - -58.000000 -18.500000 242 - -57.833333 -18.500000 265 - -57.666667 -18.500000 211 - -57.500000 -18.500000 91 - -57.333333 -18.500000 94 - -57.166667 -18.500000 98 - -57.000000 -18.500000 101 - -56.833333 -18.500000 108 - -56.666667 -18.500000 111 - -56.500000 -18.500000 116 - -56.333333 -18.500000 120 - -56.166667 -18.500000 125 - -56.000000 -18.500000 134 - -55.833333 -18.500000 144 - -55.666667 -18.500000 151 - -55.500000 -18.500000 161 - -55.333333 -18.500000 171 - -55.166667 -18.500000 180 - -55.000000 -18.500000 197 - -54.833333 -18.500000 385 - -54.666667 -18.500000 211 - -54.500000 -18.500000 306 - -54.333333 -18.500000 342 - -54.166667 -18.500000 348 - -54.000000 -18.500000 329 - -53.833333 -18.500000 363 - -53.666667 -18.500000 343 - -53.500000 -18.500000 532 - -53.333333 -18.500000 609 - -53.166667 -18.500000 712 - -53.000000 -18.500000 822 - -52.833333 -18.500000 806 - -52.666667 -18.500000 826 - -52.500000 -18.500000 818 - -52.333333 -18.500000 708 - -52.166667 -18.500000 680 - -52.000000 -18.500000 702 - -51.833333 -18.500000 575 - -51.666667 -18.500000 516 - -51.500000 -18.500000 564 - -51.333333 -18.500000 596 - -51.166667 -18.500000 481 - -51.000000 -18.500000 587 - -50.833333 -18.500000 566 - -50.666667 -18.500000 553 - -50.500000 -18.500000 477 - -50.333333 -18.500000 478 - -50.166667 -18.500000 462 - -50.000000 -18.500000 435 - -49.833333 -18.500000 595 - -49.666667 -18.500000 510 - -49.500000 -18.500000 425 - -49.333333 -18.500000 498 - -49.166667 -18.500000 498 - -49.000000 -18.500000 630 - -48.833333 -18.500000 768 - -48.666667 -18.500000 656 - -48.500000 -18.500000 849 - -48.333333 -18.500000 668 - -48.166667 -18.500000 813 - -48.000000 -18.500000 668 - -47.833333 -18.500000 640 - -47.666667 -18.500000 712 - -47.500000 -18.500000 777 - -47.333333 -18.500000 775 - -47.166667 -18.500000 947 - -47.000000 -18.500000 826 - -46.833333 -18.500000 960 - -46.666667 -18.500000 934 - -46.500000 -18.500000 853 - -46.333333 -18.500000 995 - -46.166667 -18.500000 917 - -46.000000 -18.500000 901 - -45.833333 -18.500000 774 - -45.666667 -18.500000 753 - -45.500000 -18.500000 591 - -45.333333 -18.500000 578 - -45.166667 -18.500000 715 - -45.000000 -18.500000 820 - -44.833333 -18.500000 866 - -44.666667 -18.500000 633 - -44.500000 -18.500000 642 - -44.333333 -18.500000 626 - -44.166667 -18.500000 570 - -44.000000 -18.500000 1015 - -43.833333 -18.500000 1111 - -43.666667 -18.500000 1166 - -43.500000 -18.500000 976 - -43.333333 -18.500000 805 - -43.166667 -18.500000 833 - -43.000000 -18.500000 774 - -42.833333 -18.500000 768 - -42.666667 -18.500000 669 - -42.500000 -18.500000 675 - -42.333333 -18.500000 671 - -42.166667 -18.500000 391 - -42.000000 -18.500000 251 - -41.833333 -18.500000 358 - -41.666667 -18.500000 306 - -41.500000 -18.500000 537 - -41.333333 -18.500000 485 - -41.166667 -18.500000 851 - -41.000000 -18.500000 341 - -40.833333 -18.500000 518 - -40.666667 -18.500000 195 - -40.500000 -18.500000 168 - -40.333333 -18.500000 134 - -40.166667 -18.500000 93 - -40.000000 -18.500000 83 - -65.000000 -18.666667 2264 - -64.833333 -18.666667 1928 - -64.666667 -18.666667 1696 - -64.500000 -18.666667 1106 - -64.333333 -18.666667 1025 - -64.166667 -18.666667 2231 - -64.000000 -18.666667 1740 - -63.833333 -18.666667 1628 - -63.666667 -18.666667 765 - -63.500000 -18.666667 697 - -63.333333 -18.666667 566 - -63.166667 -18.666667 451 - -63.000000 -18.666667 390 - -62.833333 -18.666667 367 - -62.666667 -18.666667 351 - -62.500000 -18.666667 346 - -62.333333 -18.666667 333 - -62.166667 -18.666667 327 - -62.000000 -18.666667 318 - -61.833333 -18.666667 310 - -61.666667 -18.666667 302 - -61.500000 -18.666667 297 - -61.333333 -18.666667 292 - -61.166667 -18.666667 287 - -61.000000 -18.666667 360 - -60.833333 -18.666667 312 - -60.666667 -18.666667 403 - -60.500000 -18.666667 373 - -60.333333 -18.666667 353 - -60.166667 -18.666667 314 - -60.000000 -18.666667 365 - -59.833333 -18.666667 331 - -59.666667 -18.666667 241 - -59.500000 -18.666667 201 - -59.333333 -18.666667 179 - -59.166667 -18.666667 167 - -59.000000 -18.666667 151 - -58.833333 -18.666667 201 - -58.666667 -18.666667 161 - -58.500000 -18.666667 165 - -58.333333 -18.666667 152 - -58.166667 -18.666667 139 - -58.000000 -18.666667 137 - -57.833333 -18.666667 139 - -57.666667 -18.666667 128 - -57.500000 -18.666667 89 - -57.333333 -18.666667 90 - -57.166667 -18.666667 98 - -57.000000 -18.666667 102 - -56.833333 -18.666667 104 - -56.666667 -18.666667 108 - -56.500000 -18.666667 111 - -56.333333 -18.666667 117 - -56.166667 -18.666667 126 - -56.000000 -18.666667 133 - -55.833333 -18.666667 140 - -55.666667 -18.666667 152 - -55.500000 -18.666667 159 - -55.333333 -18.666667 166 - -55.166667 -18.666667 170 - -55.000000 -18.666667 210 - -54.833333 -18.666667 465 - -54.666667 -18.666667 285 - -54.500000 -18.666667 279 - -54.333333 -18.666667 312 - -54.166667 -18.666667 391 - -54.000000 -18.666667 411 - -53.833333 -18.666667 346 - -53.666667 -18.666667 395 - -53.500000 -18.666667 562 - -53.333333 -18.666667 607 - -53.166667 -18.666667 708 - -53.000000 -18.666667 711 - -52.833333 -18.666667 826 - -52.666667 -18.666667 824 - -52.500000 -18.666667 698 - -52.333333 -18.666667 692 - -52.166667 -18.666667 681 - -52.000000 -18.666667 699 - -51.833333 -18.666667 582 - -51.666667 -18.666667 572 - -51.500000 -18.666667 579 - -51.333333 -18.666667 454 - -51.166667 -18.666667 571 - -51.000000 -18.666667 510 - -50.833333 -18.666667 522 - -50.666667 -18.666667 551 - -50.500000 -18.666667 530 - -50.333333 -18.666667 427 - -50.166667 -18.666667 399 - -50.000000 -18.666667 422 - -49.833333 -18.666667 435 - -49.666667 -18.666667 494 - -49.500000 -18.666667 567 - -49.333333 -18.666667 473 - -49.166667 -18.666667 706 - -49.000000 -18.666667 751 - -48.833333 -18.666667 767 - -48.666667 -18.666667 896 - -48.500000 -18.666667 657 - -48.333333 -18.666667 575 - -48.166667 -18.666667 944 - -48.000000 -18.666667 915 - -47.833333 -18.666667 933 - -47.666667 -18.666667 820 - -47.500000 -18.666667 845 - -47.333333 -18.666667 787 - -47.166667 -18.666667 921 - -47.000000 -18.666667 998 - -46.833333 -18.666667 1163 - -46.666667 -18.666667 903 - -46.500000 -18.666667 841 - -46.333333 -18.666667 957 - -46.166667 -18.666667 813 - -46.000000 -18.666667 804 - -45.833333 -18.666667 810 - -45.666667 -18.666667 835 - -45.500000 -18.666667 704 - -45.333333 -18.666667 583 - -45.166667 -18.666667 570 - -45.000000 -18.666667 599 - -44.833333 -18.666667 732 - -44.666667 -18.666667 716 - -44.500000 -18.666667 635 - -44.333333 -18.666667 603 - -44.166667 -18.666667 570 - -44.000000 -18.666667 586 - -43.833333 -18.666667 990 - -43.666667 -18.666667 1021 - -43.500000 -18.666667 1239 - -43.333333 -18.666667 761 - -43.166667 -18.666667 789 - -43.000000 -18.666667 888 - -42.833333 -18.666667 833 - -42.666667 -18.666667 898 - -42.500000 -18.666667 846 - -42.333333 -18.666667 871 - -42.166667 -18.666667 396 - -42.000000 -18.666667 377 - -41.833333 -18.666667 192 - -41.666667 -18.666667 279 - -41.500000 -18.666667 409 - -41.333333 -18.666667 315 - -41.166667 -18.666667 242 - -41.000000 -18.666667 202 - -40.833333 -18.666667 200 - -40.666667 -18.666667 201 - -40.500000 -18.666667 121 - -40.333333 -18.666667 175 - -40.166667 -18.666667 30 - -40.000000 -18.666667 21 - -65.000000 -18.833333 2211 - -64.833333 -18.833333 2342 - -64.666667 -18.833333 2599 - -64.500000 -18.833333 1519 - -64.333333 -18.833333 2040 - -64.166667 -18.833333 2257 - -64.000000 -18.833333 2008 - -63.833333 -18.833333 1125 - -63.666667 -18.833333 763 - -63.500000 -18.833333 723 - -63.333333 -18.833333 429 - -63.166667 -18.833333 421 - -63.000000 -18.833333 392 - -62.833333 -18.833333 376 - -62.666667 -18.833333 360 - -62.500000 -18.833333 345 - -62.333333 -18.833333 337 - -62.166667 -18.833333 334 - -62.000000 -18.833333 329 - -61.833333 -18.833333 312 - -61.666667 -18.833333 343 - -61.500000 -18.833333 335 - -61.333333 -18.833333 356 - -61.166667 -18.833333 338 - -61.000000 -18.833333 351 - -60.833333 -18.833333 416 - -60.666667 -18.833333 406 - -60.500000 -18.833333 425 - -60.333333 -18.833333 310 - -60.166667 -18.833333 310 - -60.000000 -18.833333 271 - -59.833333 -18.833333 336 - -59.666667 -18.833333 335 - -59.500000 -18.833333 240 - -59.333333 -18.833333 208 - -59.166667 -18.833333 167 - -59.000000 -18.833333 170 - -58.833333 -18.833333 136 - -58.666667 -18.833333 129 - -58.500000 -18.833333 121 - -58.333333 -18.833333 109 - -58.166667 -18.833333 104 - -58.000000 -18.833333 90 - -57.833333 -18.833333 87 - -57.666667 -18.833333 87 - -57.500000 -18.833333 90 - -57.333333 -18.833333 88 - -57.166667 -18.833333 92 - -57.000000 -18.833333 95 - -56.833333 -18.833333 101 - -56.666667 -18.833333 103 - -56.500000 -18.833333 109 - -56.333333 -18.833333 116 - -56.166667 -18.833333 125 - -56.000000 -18.833333 130 - -55.833333 -18.833333 140 - -55.666667 -18.833333 145 - -55.500000 -18.833333 154 - -55.333333 -18.833333 157 - -55.166667 -18.833333 159 - -55.000000 -18.833333 255 - -54.833333 -18.833333 324 - -54.666667 -18.833333 382 - -54.500000 -18.833333 342 - -54.333333 -18.833333 347 - -54.166667 -18.833333 406 - -54.000000 -18.833333 451 - -53.833333 -18.833333 537 - -53.666667 -18.833333 607 - -53.500000 -18.833333 709 - -53.333333 -18.833333 527 - -53.166667 -18.833333 710 - -53.000000 -18.833333 688 - -52.833333 -18.833333 736 - -52.666667 -18.833333 827 - -52.500000 -18.833333 822 - -52.333333 -18.833333 563 - -52.166667 -18.833333 571 - -52.000000 -18.833333 619 - -51.833333 -18.833333 578 - -51.666667 -18.833333 509 - -51.500000 -18.833333 485 - -51.333333 -18.833333 619 - -51.166667 -18.833333 466 - -51.000000 -18.833333 486 - -50.833333 -18.833333 524 - -50.666667 -18.833333 525 - -50.500000 -18.833333 481 - -50.333333 -18.833333 444 - -50.166667 -18.833333 507 - -50.000000 -18.833333 422 - -49.833333 -18.833333 454 - -49.666667 -18.833333 563 - -49.500000 -18.833333 610 - -49.333333 -18.833333 630 - -49.166667 -18.833333 668 - -49.000000 -18.833333 687 - -48.833333 -18.833333 821 - -48.666667 -18.833333 822 - -48.500000 -18.833333 809 - -48.333333 -18.833333 872 - -48.166667 -18.833333 733 - -48.000000 -18.833333 903 - -47.833333 -18.833333 992 - -47.666667 -18.833333 891 - -47.500000 -18.833333 1030 - -47.333333 -18.833333 999 - -47.166667 -18.833333 944 - -47.000000 -18.833333 1016 - -46.833333 -18.833333 903 - -46.666667 -18.833333 858 - -46.500000 -18.833333 850 - -46.333333 -18.833333 869 - -46.166667 -18.833333 853 - -46.000000 -18.833333 860 - -45.833333 -18.833333 1015 - -45.666667 -18.833333 696 - -45.500000 -18.833333 633 - -45.333333 -18.833333 579 - -45.166667 -18.833333 574 - -45.000000 -18.833333 581 - -44.833333 -18.833333 612 - -44.666667 -18.833333 694 - -44.500000 -18.833333 727 - -44.333333 -18.833333 687 - -44.166667 -18.833333 630 - -44.000000 -18.833333 701 - -43.833333 -18.833333 1322 - -43.666667 -18.833333 1090 - -43.500000 -18.833333 719 - -43.333333 -18.833333 669 - -43.166667 -18.833333 745 - -43.000000 -18.833333 822 - -42.833333 -18.833333 933 - -42.666667 -18.833333 866 - -42.500000 -18.833333 803 - -42.333333 -18.833333 764 - -42.166667 -18.833333 420 - -42.000000 -18.833333 231 - -41.833333 -18.833333 232 - -41.666667 -18.833333 257 - -41.500000 -18.833333 290 - -41.333333 -18.833333 514 - -41.166667 -18.833333 485 - -41.000000 -18.833333 467 - -40.833333 -18.833333 308 - -40.666667 -18.833333 407 - -40.500000 -18.833333 162 - -40.333333 -18.833333 150 - -40.166667 -18.833333 92 - -40.000000 -18.833333 65 - -65.000000 -19.000000 2682 - -64.833333 -19.000000 2802 - -64.666667 -19.000000 2641 - -64.500000 -19.000000 1791 - -64.333333 -19.000000 2621 - -64.166667 -19.000000 1560 - -64.000000 -19.000000 1408 - -63.833333 -19.000000 1086 - -63.666667 -19.000000 744 - -63.500000 -19.000000 1049 - -63.333333 -19.000000 517 - -63.166667 -19.000000 498 - -63.000000 -19.000000 408 - -62.833333 -19.000000 378 - -62.666667 -19.000000 363 - -62.500000 -19.000000 353 - -62.333333 -19.000000 343 - -62.166667 -19.000000 343 - -62.000000 -19.000000 357 - -61.833333 -19.000000 368 - -61.666667 -19.000000 388 - -61.500000 -19.000000 391 - -61.333333 -19.000000 369 - -61.166667 -19.000000 363 - -61.000000 -19.000000 414 - -60.833333 -19.000000 394 - -60.666667 -19.000000 377 - -60.500000 -19.000000 360 - -60.333333 -19.000000 291 - -60.166667 -19.000000 285 - -60.000000 -19.000000 241 - -59.833333 -19.000000 244 - -59.666667 -19.000000 292 - -59.500000 -19.000000 378 - -59.333333 -19.000000 334 - -59.166667 -19.000000 229 - -59.000000 -19.000000 172 - -58.833333 -19.000000 133 - -58.666667 -19.000000 122 - -58.500000 -19.000000 110 - -58.333333 -19.000000 102 - -58.166667 -19.000000 100 - -58.000000 -19.000000 110 - -57.833333 -19.000000 158 - -57.666667 -19.000000 107 - -57.500000 -19.000000 87 - -57.333333 -19.000000 89 - -57.166667 -19.000000 89 - -57.000000 -19.000000 93 - -56.833333 -19.000000 95 - -56.666667 -19.000000 102 - -56.500000 -19.000000 109 - -56.333333 -19.000000 117 - -56.166667 -19.000000 121 - -56.000000 -19.000000 130 - -55.833333 -19.000000 134 - -55.666667 -19.000000 138 - -55.500000 -19.000000 143 - -55.333333 -19.000000 149 - -55.166667 -19.000000 158 - -55.000000 -19.000000 616 - -54.833333 -19.000000 504 - -54.666667 -19.000000 544 - -54.500000 -19.000000 456 - -54.333333 -19.000000 316 - -54.166667 -19.000000 337 - -54.000000 -19.000000 446 - -53.833333 -19.000000 423 - -53.666667 -19.000000 539 - -53.500000 -19.000000 554 - -53.333333 -19.000000 658 - -53.166667 -19.000000 544 - -53.000000 -19.000000 604 - -52.833333 -19.000000 690 - -52.666667 -19.000000 670 - -52.500000 -19.000000 537 - -52.333333 -19.000000 578 - -52.166667 -19.000000 599 - -52.000000 -19.000000 555 - -51.833333 -19.000000 587 - -51.666667 -19.000000 646 - -51.500000 -19.000000 530 - -51.333333 -19.000000 457 - -51.166667 -19.000000 454 - -51.000000 -19.000000 477 - -50.833333 -19.000000 450 - -50.666667 -19.000000 418 - -50.500000 -19.000000 399 - -50.333333 -19.000000 405 - -50.166667 -19.000000 621 - -50.000000 -19.000000 536 - -49.833333 -19.000000 523 - -49.666667 -19.000000 548 - -49.500000 -19.000000 584 - -49.333333 -19.000000 638 - -49.166667 -19.000000 637 - -49.000000 -19.000000 687 - -48.833333 -19.000000 725 - -48.666667 -19.000000 768 - -48.500000 -19.000000 796 - -48.333333 -19.000000 875 - -48.166667 -19.000000 871 - -48.000000 -19.000000 727 - -47.833333 -19.000000 930 - -47.666667 -19.000000 1008 - -47.500000 -19.000000 1001 - -47.333333 -19.000000 944 - -47.166667 -19.000000 905 - -47.000000 -19.000000 980 - -46.833333 -19.000000 972 - -46.666667 -19.000000 903 - -46.500000 -19.000000 881 - -46.333333 -19.000000 1038 - -46.166667 -19.000000 1078 - -46.000000 -19.000000 923 - -45.833333 -19.000000 925 - -45.666667 -19.000000 838 - -45.500000 -19.000000 593 - -45.333333 -19.000000 600 - -45.166667 -19.000000 674 - -45.000000 -19.000000 678 - -44.833333 -19.000000 733 - -44.666667 -19.000000 766 - -44.500000 -19.000000 792 - -44.333333 -19.000000 725 - -44.166667 -19.000000 667 - -44.000000 -19.000000 654 - -43.833333 -19.000000 742 - -43.666667 -19.000000 1399 - -43.500000 -19.000000 754 - -43.333333 -19.000000 688 - -43.166667 -19.000000 825 - -43.000000 -19.000000 592 - -42.833333 -19.000000 728 - -42.666667 -19.000000 780 - -42.500000 -19.000000 626 - -42.333333 -19.000000 301 - -42.166667 -19.000000 207 - -42.000000 -19.000000 240 - -41.833333 -19.000000 254 - -41.666667 -19.000000 220 - -41.500000 -19.000000 280 - -41.333333 -19.000000 431 - -41.166667 -19.000000 264 - -41.000000 -19.000000 765 - -40.833333 -19.000000 231 - -40.666667 -19.000000 227 - -40.500000 -19.000000 155 - -40.333333 -19.000000 134 - -40.166667 -19.000000 91 - -40.000000 -19.000000 34 - -65.000000 -19.166667 3130 - -64.833333 -19.166667 3160 - -64.666667 -19.166667 2620 - -64.500000 -19.166667 2213 - -64.333333 -19.166667 2274 - -64.166667 -19.166667 2025 - -64.000000 -19.166667 1173 - -63.833333 -19.166667 1560 - -63.666667 -19.166667 586 - -63.500000 -19.166667 810 - -63.333333 -19.166667 749 - -63.166667 -19.166667 594 - -63.000000 -19.166667 514 - -62.833333 -19.166667 428 - -62.666667 -19.166667 375 - -62.500000 -19.166667 374 - -62.333333 -19.166667 367 - -62.166667 -19.166667 356 - -62.000000 -19.166667 346 - -61.833333 -19.166667 352 - -61.666667 -19.166667 326 - -61.500000 -19.166667 364 - -61.333333 -19.166667 314 - -61.166667 -19.166667 314 - -61.000000 -19.166667 272 - -60.833333 -19.166667 300 - -60.666667 -19.166667 323 - -60.500000 -19.166667 312 - -60.333333 -19.166667 284 - -60.166667 -19.166667 227 - -60.000000 -19.166667 200 - -59.833333 -19.166667 236 - -59.666667 -19.166667 258 - -59.500000 -19.166667 271 - -59.333333 -19.166667 290 - -59.166667 -19.166667 330 - -59.000000 -19.166667 218 - -58.833333 -19.166667 164 - -58.666667 -19.166667 123 - -58.500000 -19.166667 112 - -58.333333 -19.166667 102 - -58.166667 -19.166667 96 - -58.000000 -19.166667 103 - -57.833333 -19.166667 108 - -57.666667 -19.166667 149 - -57.500000 -19.166667 561 - -57.333333 -19.166667 87 - -57.166667 -19.166667 85 - -57.000000 -19.166667 90 - -56.833333 -19.166667 95 - -56.666667 -19.166667 101 - -56.500000 -19.166667 106 - -56.333333 -19.166667 113 - -56.166667 -19.166667 118 - -56.000000 -19.166667 126 - -55.833333 -19.166667 128 - -55.666667 -19.166667 135 - -55.500000 -19.166667 138 - -55.333333 -19.166667 139 - -55.166667 -19.166667 155 - -55.000000 -19.166667 429 - -54.833333 -19.166667 523 - -54.666667 -19.166667 699 - -54.500000 -19.166667 657 - -54.333333 -19.166667 418 - -54.166667 -19.166667 356 - -54.000000 -19.166667 401 - -53.833333 -19.166667 583 - -53.666667 -19.166667 578 - -53.500000 -19.166667 564 - -53.333333 -19.166667 641 - -53.166667 -19.166667 623 - -53.000000 -19.166667 575 - -52.833333 -19.166667 599 - -52.666667 -19.166667 584 - -52.500000 -19.166667 566 - -52.333333 -19.166667 504 - -52.166667 -19.166667 524 - -52.000000 -19.166667 581 - -51.833333 -19.166667 697 - -51.666667 -19.166667 445 - -51.500000 -19.166667 417 - -51.333333 -19.166667 428 - -51.166667 -19.166667 433 - -51.000000 -19.166667 358 - -50.833333 -19.166667 455 - -50.666667 -19.166667 345 - -50.500000 -19.166667 449 - -50.333333 -19.166667 446 - -50.166667 -19.166667 478 - -50.000000 -19.166667 477 - -49.833333 -19.166667 529 - -49.666667 -19.166667 552 - -49.500000 -19.166667 566 - -49.333333 -19.166667 624 - -49.166667 -19.166667 649 - -49.000000 -19.166667 696 - -48.833333 -19.166667 706 - -48.666667 -19.166667 710 - -48.500000 -19.166667 774 - -48.333333 -19.166667 826 - -48.166667 -19.166667 885 - -48.000000 -19.166667 929 - -47.833333 -19.166667 849 - -47.666667 -19.166667 891 - -47.500000 -19.166667 938 - -47.333333 -19.166667 832 - -47.166667 -19.166667 809 - -47.000000 -19.166667 962 - -46.833333 -19.166667 904 - -46.666667 -19.166667 1012 - -46.500000 -19.166667 1023 - -46.333333 -19.166667 890 - -46.166667 -19.166667 1014 - -46.000000 -19.166667 1054 - -45.833333 -19.166667 831 - -45.666667 -19.166667 709 - -45.500000 -19.166667 627 - -45.333333 -19.166667 668 - -45.166667 -19.166667 669 - -45.000000 -19.166667 669 - -44.833333 -19.166667 696 - -44.666667 -19.166667 675 - -44.500000 -19.166667 732 - -44.333333 -19.166667 807 - -44.166667 -19.166667 704 - -44.000000 -19.166667 720 - -43.833333 -19.166667 1022 - -43.666667 -19.166667 1119 - -43.500000 -19.166667 1240 - -43.333333 -19.166667 561 - -43.166667 -19.166667 749 - -43.000000 -19.166667 731 - -42.833333 -19.166667 464 - -42.666667 -19.166667 418 - -42.500000 -19.166667 286 - -42.333333 -19.166667 266 - -42.166667 -19.166667 239 - -42.000000 -19.166667 407 - -41.833333 -19.166667 386 - -41.666667 -19.166667 331 - -41.500000 -19.166667 185 - -41.333333 -19.166667 387 - -41.166667 -19.166667 214 - -41.000000 -19.166667 268 - -40.833333 -19.166667 402 - -40.666667 -19.166667 179 - -40.500000 -19.166667 149 - -40.333333 -19.166667 142 - -40.166667 -19.166667 80 - -40.000000 -19.166667 48 - -65.000000 -19.333333 2222 - -64.833333 -19.333333 2792 - -64.666667 -19.333333 3224 - -64.500000 -19.333333 2332 - -64.333333 -19.333333 2112 - -64.166667 -19.333333 1769 - -64.000000 -19.333333 920 - -63.833333 -19.333333 1550 - -63.666667 -19.333333 845 - -63.500000 -19.333333 1062 - -63.333333 -19.333333 1364 - -63.166667 -19.333333 673 - -63.000000 -19.333333 571 - -62.833333 -19.333333 491 - -62.666667 -19.333333 400 - -62.500000 -19.333333 394 - -62.333333 -19.333333 383 - -62.166667 -19.333333 372 - -62.000000 -19.333333 353 - -61.833333 -19.333333 339 - -61.666667 -19.333333 331 - -61.500000 -19.333333 338 - -61.333333 -19.333333 321 - -61.166667 -19.333333 296 - -61.000000 -19.333333 269 - -60.833333 -19.333333 269 - -60.666667 -19.333333 246 - -60.500000 -19.333333 283 - -60.333333 -19.333333 272 - -60.166667 -19.333333 207 - -60.000000 -19.333333 176 - -59.833333 -19.333333 180 - -59.666667 -19.333333 203 - -59.500000 -19.333333 186 - -59.333333 -19.333333 245 - -59.166667 -19.333333 271 - -59.000000 -19.333333 311 - -58.833333 -19.333333 205 - -58.666667 -19.333333 135 - -58.500000 -19.333333 107 - -58.333333 -19.333333 100 - -58.166667 -19.333333 100 - -58.000000 -19.333333 84 - -57.833333 -19.333333 83 - -57.666667 -19.333333 83 - -57.500000 -19.333333 288 - -57.333333 -19.333333 86 - -57.166667 -19.333333 84 - -57.000000 -19.333333 90 - -56.833333 -19.333333 95 - -56.666667 -19.333333 99 - -56.500000 -19.333333 104 - -56.333333 -19.333333 108 - -56.166667 -19.333333 115 - -56.000000 -19.333333 118 - -55.833333 -19.333333 124 - -55.666667 -19.333333 127 - -55.500000 -19.333333 133 - -55.333333 -19.333333 145 - -55.166667 -19.333333 166 - -55.000000 -19.333333 255 - -54.833333 -19.333333 393 - -54.666667 -19.333333 638 - -54.500000 -19.333333 707 - -54.333333 -19.333333 390 - -54.166667 -19.333333 344 - -54.000000 -19.333333 398 - -53.833333 -19.333333 585 - -53.666667 -19.333333 490 - -53.500000 -19.333333 561 - -53.333333 -19.333333 562 - -53.166667 -19.333333 669 - -53.000000 -19.333333 605 - -52.833333 -19.333333 576 - -52.666667 -19.333333 441 - -52.500000 -19.333333 518 - -52.333333 -19.333333 507 - -52.166667 -19.333333 531 - -52.000000 -19.333333 500 - -51.833333 -19.333333 676 - -51.666667 -19.333333 486 - -51.500000 -19.333333 587 - -51.333333 -19.333333 477 - -51.166667 -19.333333 390 - -51.000000 -19.333333 388 - -50.833333 -19.333333 325 - -50.666667 -19.333333 447 - -50.500000 -19.333333 418 - -50.333333 -19.333333 463 - -50.166667 -19.333333 450 - -50.000000 -19.333333 470 - -49.833333 -19.333333 513 - -49.666667 -19.333333 662 - -49.500000 -19.333333 562 - -49.333333 -19.333333 544 - -49.166667 -19.333333 583 - -49.000000 -19.333333 609 - -48.833333 -19.333333 652 - -48.666667 -19.333333 715 - -48.500000 -19.333333 747 - -48.333333 -19.333333 749 - -48.166667 -19.333333 791 - -48.000000 -19.333333 971 - -47.833333 -19.333333 978 - -47.666667 -19.333333 907 - -47.500000 -19.333333 999 - -47.333333 -19.333333 994 - -47.166667 -19.333333 875 - -47.000000 -19.333333 884 - -46.833333 -19.333333 868 - -46.666667 -19.333333 874 - -46.500000 -19.333333 924 - -46.333333 -19.333333 998 - -46.166667 -19.333333 1145 - -46.000000 -19.333333 1107 - -45.833333 -19.333333 816 - -45.666667 -19.333333 674 - -45.500000 -19.333333 648 - -45.333333 -19.333333 623 - -45.166667 -19.333333 658 - -45.000000 -19.333333 657 - -44.833333 -19.333333 689 - -44.666667 -19.333333 716 - -44.500000 -19.333333 689 - -44.333333 -19.333333 819 - -44.166667 -19.333333 679 - -44.000000 -19.333333 641 - -43.833333 -19.333333 777 - -43.666667 -19.333333 784 - -43.500000 -19.333333 1039 - -43.333333 -19.333333 727 - -43.166667 -19.333333 661 - -43.000000 -19.333333 571 - -42.833333 -19.333333 829 - -42.666667 -19.333333 848 - -42.500000 -19.333333 288 - -42.333333 -19.333333 255 - -42.166667 -19.333333 233 - -42.000000 -19.333333 282 - -41.833333 -19.333333 320 - -41.666667 -19.333333 661 - -41.500000 -19.333333 761 - -41.333333 -19.333333 500 - -41.166667 -19.333333 230 - -41.000000 -19.333333 252 - -40.833333 -19.333333 560 - -40.666667 -19.333333 146 - -40.500000 -19.333333 509 - -40.333333 -19.333333 152 - -40.166667 -19.333333 46 - -40.000000 -19.333333 21 - -65.000000 -19.500000 2720 - -64.833333 -19.500000 2525 - -64.666667 -19.500000 3614 - -64.500000 -19.500000 2307 - -64.333333 -19.500000 2252 - -64.166667 -19.500000 2187 - -64.000000 -19.500000 1181 - -63.833333 -19.500000 1194 - -63.666667 -19.500000 841 - -63.500000 -19.500000 901 - -63.333333 -19.500000 1056 - -63.166667 -19.500000 748 - -63.000000 -19.500000 597 - -62.833333 -19.500000 505 - -62.666667 -19.500000 444 - -62.500000 -19.500000 417 - -62.333333 -19.500000 403 - -62.166667 -19.500000 384 - -62.000000 -19.500000 366 - -61.833333 -19.500000 344 - -61.666667 -19.500000 327 - -61.500000 -19.500000 309 - -61.333333 -19.500000 302 - -61.166667 -19.500000 303 - -61.000000 -19.500000 296 - -60.833333 -19.500000 257 - -60.666667 -19.500000 218 - -60.500000 -19.500000 217 - -60.333333 -19.500000 240 - -60.166667 -19.500000 228 - -60.000000 -19.500000 157 - -59.833333 -19.500000 155 - -59.666667 -19.500000 142 - -59.500000 -19.500000 139 - -59.333333 -19.500000 186 - -59.166667 -19.500000 224 - -59.000000 -19.500000 304 - -58.833333 -19.500000 193 - -58.666667 -19.500000 122 - -58.500000 -19.500000 96 - -58.333333 -19.500000 94 - -58.166667 -19.500000 85 - -58.000000 -19.500000 83 - -57.833333 -19.500000 83 - -57.666667 -19.500000 81 - -57.500000 -19.500000 83 - -57.333333 -19.500000 85 - -57.166667 -19.500000 89 - -57.000000 -19.500000 90 - -56.833333 -19.500000 93 - -56.666667 -19.500000 98 - -56.500000 -19.500000 102 - -56.333333 -19.500000 106 - -56.166667 -19.500000 112 - -56.000000 -19.500000 115 - -55.833333 -19.500000 118 - -55.666667 -19.500000 121 - -55.500000 -19.500000 125 - -55.333333 -19.500000 142 - -55.166667 -19.500000 451 - -55.000000 -19.500000 291 - -54.833333 -19.500000 469 - -54.666667 -19.500000 459 - -54.500000 -19.500000 692 - -54.333333 -19.500000 584 - -54.166667 -19.500000 388 - -54.000000 -19.500000 508 - -53.833333 -19.500000 654 - -53.666667 -19.500000 558 - -53.500000 -19.500000 522 - -53.333333 -19.500000 573 - -53.166667 -19.500000 515 - -53.000000 -19.500000 554 - -52.833333 -19.500000 488 - -52.666667 -19.500000 454 - -52.500000 -19.500000 431 - -52.333333 -19.500000 445 - -52.166667 -19.500000 436 - -52.000000 -19.500000 479 - -51.833333 -19.500000 717 - -51.666667 -19.500000 513 - -51.500000 -19.500000 438 - -51.333333 -19.500000 409 - -51.166667 -19.500000 426 - -51.000000 -19.500000 378 - -50.833333 -19.500000 341 - -50.666667 -19.500000 385 - -50.500000 -19.500000 464 - -50.333333 -19.500000 463 - -50.166667 -19.500000 451 - -50.000000 -19.500000 492 - -49.833333 -19.500000 606 - -49.666667 -19.500000 507 - -49.500000 -19.500000 520 - -49.333333 -19.500000 549 - -49.166667 -19.500000 665 - -49.000000 -19.500000 620 - -48.833333 -19.500000 675 - -48.666667 -19.500000 676 - -48.500000 -19.500000 752 - -48.333333 -19.500000 834 - -48.166667 -19.500000 819 - -48.000000 -19.500000 876 - -47.833333 -19.500000 985 - -47.666667 -19.500000 1010 - -47.500000 -19.500000 921 - -47.333333 -19.500000 1088 - -47.166667 -19.500000 907 - -47.000000 -19.500000 877 - -46.833333 -19.500000 986 - -46.666667 -19.500000 958 - -46.500000 -19.500000 908 - -46.333333 -19.500000 1007 - -46.166667 -19.500000 1071 - -46.000000 -19.500000 905 - -45.833333 -19.500000 693 - -45.666667 -19.500000 652 - -45.500000 -19.500000 696 - -45.333333 -19.500000 712 - -45.166667 -19.500000 693 - -45.000000 -19.500000 639 - -44.833333 -19.500000 666 - -44.666667 -19.500000 772 - -44.500000 -19.500000 702 - -44.333333 -19.500000 762 - -44.166667 -19.500000 783 - -44.000000 -19.500000 681 - -43.833333 -19.500000 706 - -43.666667 -19.500000 855 - -43.500000 -19.500000 1471 - -43.333333 -19.500000 630 - -43.166667 -19.500000 701 - -43.000000 -19.500000 861 - -42.833333 -19.500000 929 - -42.666667 -19.500000 587 - -42.500000 -19.500000 247 - -42.333333 -19.500000 479 - -42.166667 -19.500000 467 - -42.000000 -19.500000 726 - -41.833333 -19.500000 522 - -41.666667 -19.500000 336 - -41.500000 -19.500000 277 - -41.333333 -19.500000 199 - -41.166667 -19.500000 156 - -41.000000 -19.500000 67 - -40.833333 -19.500000 451 - -40.666667 -19.500000 152 - -40.500000 -19.500000 126 - -40.333333 -19.500000 32 - -40.166667 -19.500000 30 - -40.000000 -19.500000 17 - -65.000000 -19.666667 3089 - -64.833333 -19.666667 2206 - -64.666667 -19.666667 3192 - -64.500000 -19.666667 2169 - -64.333333 -19.666667 1820 - -64.166667 -19.666667 2088 - -64.000000 -19.666667 1807 - -63.833333 -19.666667 1043 - -63.666667 -19.666667 927 - -63.500000 -19.666667 1012 - -63.333333 -19.666667 1411 - -63.166667 -19.666667 772 - -63.000000 -19.666667 616 - -62.833333 -19.666667 529 - -62.666667 -19.666667 467 - -62.500000 -19.666667 444 - -62.333333 -19.666667 420 - -62.166667 -19.666667 396 - -62.000000 -19.666667 371 - -61.833333 -19.666667 425 - -61.666667 -19.666667 393 - -61.500000 -19.666667 346 - -61.333333 -19.666667 290 - -61.166667 -19.666667 273 - -61.000000 -19.666667 269 - -60.833333 -19.666667 237 - -60.666667 -19.666667 221 - -60.500000 -19.666667 207 - -60.333333 -19.666667 189 - -60.166667 -19.666667 209 - -60.000000 -19.666667 164 - -59.833333 -19.666667 137 - -59.666667 -19.666667 129 - -59.500000 -19.666667 119 - -59.333333 -19.666667 136 - -59.166667 -19.666667 168 - -59.000000 -19.666667 203 - -58.833333 -19.666667 176 - -58.666667 -19.666667 111 - -58.500000 -19.666667 84 - -58.333333 -19.666667 82 - -58.166667 -19.666667 81 - -58.000000 -19.666667 82 - -57.833333 -19.666667 81 - -57.666667 -19.666667 83 - -57.500000 -19.666667 84 - -57.333333 -19.666667 87 - -57.166667 -19.666667 89 - -57.000000 -19.666667 99 - -56.833333 -19.666667 93 - -56.666667 -19.666667 96 - -56.500000 -19.666667 101 - -56.333333 -19.666667 106 - -56.166667 -19.666667 109 - -56.000000 -19.666667 111 - -55.833333 -19.666667 117 - -55.666667 -19.666667 117 - -55.500000 -19.666667 119 - -55.333333 -19.666667 230 - -55.166667 -19.666667 354 - -55.000000 -19.666667 388 - -54.833333 -19.666667 535 - -54.666667 -19.666667 367 - -54.500000 -19.666667 472 - -54.333333 -19.666667 679 - -54.166667 -19.666667 600 - -54.000000 -19.666667 536 - -53.833333 -19.666667 632 - -53.666667 -19.666667 554 - -53.500000 -19.666667 442 - -53.333333 -19.666667 556 - -53.166667 -19.666667 475 - -53.000000 -19.666667 521 - -52.833333 -19.666667 424 - -52.666667 -19.666667 406 - -52.500000 -19.666667 428 - -52.333333 -19.666667 358 - -52.166667 -19.666667 407 - -52.000000 -19.666667 532 - -51.833333 -19.666667 497 - -51.666667 -19.666667 493 - -51.500000 -19.666667 471 - -51.333333 -19.666667 402 - -51.166667 -19.666667 390 - -51.000000 -19.666667 379 - -50.833333 -19.666667 446 - -50.666667 -19.666667 467 - -50.500000 -19.666667 450 - -50.333333 -19.666667 437 - -50.166667 -19.666667 447 - -50.000000 -19.666667 465 - -49.833333 -19.666667 510 - -49.666667 -19.666667 492 - -49.500000 -19.666667 481 - -49.333333 -19.666667 539 - -49.166667 -19.666667 588 - -49.000000 -19.666667 698 - -48.833333 -19.666667 734 - -48.666667 -19.666667 629 - -48.500000 -19.666667 683 - -48.333333 -19.666667 704 - -48.166667 -19.666667 716 - -48.000000 -19.666667 768 - -47.833333 -19.666667 833 - -47.666667 -19.666667 1021 - -47.500000 -19.666667 1045 - -47.333333 -19.666667 1070 - -47.166667 -19.666667 1169 - -47.000000 -19.666667 982 - -46.833333 -19.666667 1042 - -46.666667 -19.666667 937 - -46.500000 -19.666667 993 - -46.333333 -19.666667 1013 - -46.166667 -19.666667 1101 - -46.000000 -19.666667 1049 - -45.833333 -19.666667 688 - -45.666667 -19.666667 648 - -45.500000 -19.666667 632 - -45.333333 -19.666667 667 - -45.166667 -19.666667 760 - -45.000000 -19.666667 766 - -44.833333 -19.666667 878 - -44.666667 -19.666667 989 - -44.500000 -19.666667 703 - -44.333333 -19.666667 793 - -44.166667 -19.666667 878 - -44.000000 -19.666667 727 - -43.833333 -19.666667 840 - -43.666667 -19.666667 766 - -43.500000 -19.666667 742 - -43.333333 -19.666667 946 - -43.166667 -19.666667 863 - -43.000000 -19.666667 689 - -42.833333 -19.666667 520 - -42.666667 -19.666667 437 - -42.500000 -19.666667 262 - -42.333333 -19.666667 511 - -42.166667 -19.666667 689 - -42.000000 -19.666667 704 - -41.833333 -19.666667 384 - -41.666667 -19.666667 596 - -41.500000 -19.666667 233 - -41.333333 -19.666667 304 - -41.166667 -19.666667 425 - -41.000000 -19.666667 354 - -40.833333 -19.666667 172 - -40.666667 -19.666667 144 - -40.500000 -19.666667 317 - -40.333333 -19.666667 144 - -40.166667 -19.666667 47 - -40.000000 -19.666667 1 - -65.000000 -19.833333 3042 - -64.833333 -19.833333 3440 - -64.666667 -19.833333 2244 - -64.500000 -19.833333 2388 - -64.333333 -19.833333 2023 - -64.166667 -19.833333 2005 - -64.000000 -19.833333 1204 - -63.833333 -19.833333 1341 - -63.666667 -19.833333 1169 - -63.500000 -19.833333 1308 - -63.333333 -19.833333 1239 - -63.166667 -19.833333 769 - -63.000000 -19.833333 620 - -62.833333 -19.833333 538 - -62.666667 -19.833333 490 - -62.500000 -19.833333 456 - -62.333333 -19.833333 427 - -62.166667 -19.833333 400 - -62.000000 -19.833333 375 - -61.833333 -19.833333 360 - -61.666667 -19.833333 388 - -61.500000 -19.833333 343 - -61.333333 -19.833333 308 - -61.166667 -19.833333 263 - -61.000000 -19.833333 231 - -60.833333 -19.833333 216 - -60.666667 -19.833333 212 - -60.500000 -19.833333 199 - -60.333333 -19.833333 187 - -60.166667 -19.833333 174 - -60.000000 -19.833333 163 - -59.833333 -19.833333 138 - -59.666667 -19.833333 127 - -59.500000 -19.833333 118 - -59.333333 -19.833333 111 - -59.166667 -19.833333 112 - -59.000000 -19.833333 122 - -58.833333 -19.833333 118 - -58.666667 -19.833333 95 - -58.500000 -19.833333 91 - -58.333333 -19.833333 81 - -58.166667 -19.833333 79 - -58.000000 -19.833333 80 - -57.833333 -19.833333 101 - -57.666667 -19.833333 84 - -57.500000 -19.833333 84 - -57.333333 -19.833333 88 - -57.166667 -19.833333 96 - -57.000000 -19.833333 108 - -56.833333 -19.833333 95 - -56.666667 -19.833333 99 - -56.500000 -19.833333 103 - -56.333333 -19.833333 111 - -56.166667 -19.833333 115 - -56.000000 -19.833333 118 - -55.833333 -19.833333 123 - -55.666667 -19.833333 129 - -55.500000 -19.833333 144 - -55.333333 -19.833333 338 - -55.166667 -19.833333 357 - -55.000000 -19.833333 362 - -54.833333 -19.833333 294 - -54.666667 -19.833333 326 - -54.500000 -19.833333 350 - -54.333333 -19.833333 652 - -54.166667 -19.833333 637 - -54.000000 -19.833333 526 - -53.833333 -19.833333 598 - -53.666667 -19.833333 573 - -53.500000 -19.833333 488 - -53.333333 -19.833333 487 - -53.166667 -19.833333 402 - -53.000000 -19.833333 457 - -52.833333 -19.833333 483 - -52.666667 -19.833333 439 - -52.500000 -19.833333 475 - -52.333333 -19.833333 417 - -52.166667 -19.833333 413 - -52.000000 -19.833333 442 - -51.833333 -19.833333 493 - -51.666667 -19.833333 520 - -51.500000 -19.833333 447 - -51.333333 -19.833333 446 - -51.166667 -19.833333 430 - -51.000000 -19.833333 344 - -50.833333 -19.833333 386 - -50.666667 -19.833333 387 - -50.500000 -19.833333 415 - -50.333333 -19.833333 420 - -50.166667 -19.833333 423 - -50.000000 -19.833333 426 - -49.833333 -19.833333 477 - -49.666667 -19.833333 419 - -49.500000 -19.833333 461 - -49.333333 -19.833333 523 - -49.166667 -19.833333 536 - -49.000000 -19.833333 576 - -48.833333 -19.833333 585 - -48.666667 -19.833333 569 - -48.500000 -19.833333 638 - -48.333333 -19.833333 559 - -48.166667 -19.833333 669 - -48.000000 -19.833333 756 - -47.833333 -19.833333 694 - -47.666667 -19.833333 735 - -47.500000 -19.833333 959 - -47.333333 -19.833333 1104 - -47.166667 -19.833333 1040 - -47.000000 -19.833333 1142 - -46.833333 -19.833333 1184 - -46.666667 -19.833333 1202 - -46.500000 -19.833333 1062 - -46.333333 -19.833333 1182 - -46.166667 -19.833333 986 - -46.000000 -19.833333 693 - -45.833333 -19.833333 675 - -45.666667 -19.833333 694 - -45.500000 -19.833333 624 - -45.333333 -19.833333 736 - -45.166667 -19.833333 777 - -45.000000 -19.833333 804 - -44.833333 -19.833333 699 - -44.666667 -19.833333 848 - -44.500000 -19.833333 832 - -44.333333 -19.833333 752 - -44.166667 -19.833333 917 - -44.000000 -19.833333 836 - -43.833333 -19.833333 795 - -43.666667 -19.833333 1185 - -43.500000 -19.833333 812 - -43.333333 -19.833333 710 - -43.166667 -19.833333 873 - -43.000000 -19.833333 654 - -42.833333 -19.833333 799 - -42.666667 -19.833333 333 - -42.500000 -19.833333 276 - -42.333333 -19.833333 576 - -42.166667 -19.833333 799 - -42.000000 -19.833333 931 - -41.833333 -19.833333 583 - -41.666667 -19.833333 481 - -41.500000 -19.833333 275 - -41.333333 -19.833333 649 - -41.166667 -19.833333 376 - -41.000000 -19.833333 361 - -40.833333 -19.833333 270 - -40.666667 -19.833333 177 - -40.500000 -19.833333 674 - -40.333333 -19.833333 65 - -40.166667 -19.833333 45 - -40.000000 -19.833333 -19 - -65.000000 -20.000000 3229 - -64.833333 -20.000000 3833 - -64.666667 -20.000000 2391 - -64.500000 -20.000000 2972 - -64.333333 -20.000000 2600 - -64.166667 -20.000000 1973 - -64.000000 -20.000000 1261 - -63.833333 -20.000000 1532 - -63.666667 -20.000000 1013 - -63.500000 -20.000000 914 - -63.333333 -20.000000 844 - -63.166667 -20.000000 616 - -63.000000 -20.000000 572 - -62.833333 -20.000000 534 - -62.666667 -20.000000 493 - -62.500000 -20.000000 457 - -62.333333 -20.000000 427 - -62.166667 -20.000000 395 - -62.000000 -20.000000 370 - -61.833333 -20.000000 368 - -61.666667 -20.000000 356 - -61.500000 -20.000000 358 - -61.333333 -20.000000 326 - -61.166667 -20.000000 257 - -61.000000 -20.000000 250 - -60.833333 -20.000000 218 - -60.666667 -20.000000 198 - -60.500000 -20.000000 189 - -60.333333 -20.000000 181 - -60.166667 -20.000000 168 - -60.000000 -20.000000 155 - -59.833333 -20.000000 143 - -59.666667 -20.000000 132 - -59.500000 -20.000000 117 - -59.333333 -20.000000 114 - -59.166667 -20.000000 106 - -59.000000 -20.000000 101 - -58.833333 -20.000000 93 - -58.666667 -20.000000 92 - -58.500000 -20.000000 92 - -58.333333 -20.000000 85 - -58.166667 -20.000000 80 - -58.000000 -20.000000 83 - -57.833333 -20.000000 81 - -57.666667 -20.000000 81 - -57.500000 -20.000000 84 - -57.333333 -20.000000 87 - -57.166667 -20.000000 156 - -57.000000 -20.000000 273 - -56.833333 -20.000000 149 - -56.666667 -20.000000 105 - -56.500000 -20.000000 106 - -56.333333 -20.000000 160 - -56.166667 -20.000000 121 - -56.000000 -20.000000 125 - -55.833333 -20.000000 133 - -55.666667 -20.000000 141 - -55.500000 -20.000000 434 - -55.333333 -20.000000 211 - -55.166667 -20.000000 290 - -55.000000 -20.000000 310 - -54.833333 -20.000000 325 - -54.666667 -20.000000 290 - -54.500000 -20.000000 434 - -54.333333 -20.000000 631 - -54.166667 -20.000000 578 - -54.000000 -20.000000 504 - -53.833333 -20.000000 533 - -53.666667 -20.000000 556 - -53.500000 -20.000000 489 - -53.333333 -20.000000 457 - -53.166667 -20.000000 388 - -53.000000 -20.000000 421 - -52.833333 -20.000000 432 - -52.666667 -20.000000 417 - -52.500000 -20.000000 419 - -52.333333 -20.000000 407 - -52.166667 -20.000000 339 - -52.000000 -20.000000 408 - -51.833333 -20.000000 497 - -51.666667 -20.000000 415 - -51.500000 -20.000000 429 - -51.333333 -20.000000 400 - -51.166667 -20.000000 379 - -51.000000 -20.000000 323 - -50.833333 -20.000000 370 - -50.666667 -20.000000 386 - -50.500000 -20.000000 420 - -50.333333 -20.000000 473 - -50.166667 -20.000000 415 - -50.000000 -20.000000 389 - -49.833333 -20.000000 450 - -49.666667 -20.000000 445 - -49.500000 -20.000000 417 - -49.333333 -20.000000 444 - -49.166667 -20.000000 467 - -49.000000 -20.000000 524 - -48.833333 -20.000000 581 - -48.666667 -20.000000 487 - -48.500000 -20.000000 505 - -48.333333 -20.000000 553 - -48.166667 -20.000000 561 - -48.000000 -20.000000 534 - -47.833333 -20.000000 533 - -47.666667 -20.000000 549 - -47.500000 -20.000000 547 - -47.333333 -20.000000 946 - -47.166667 -20.000000 1150 - -47.000000 -20.000000 1065 - -46.833333 -20.000000 1173 - -46.666667 -20.000000 1139 - -46.500000 -20.000000 988 - -46.333333 -20.000000 981 - -46.166667 -20.000000 815 - -46.000000 -20.000000 677 - -45.833333 -20.000000 694 - -45.666667 -20.000000 667 - -45.500000 -20.000000 672 - -45.333333 -20.000000 844 - -45.166667 -20.000000 790 - -45.000000 -20.000000 768 - -44.833333 -20.000000 754 - -44.666667 -20.000000 772 - -44.500000 -20.000000 907 - -44.333333 -20.000000 800 - -44.166667 -20.000000 783 - -44.000000 -20.000000 1013 - -43.833333 -20.000000 799 - -43.666667 -20.000000 1334 - -43.500000 -20.000000 858 - -43.333333 -20.000000 730 - -43.166667 -20.000000 700 - -43.000000 -20.000000 855 - -42.833333 -20.000000 613 - -42.666667 -20.000000 276 - -42.500000 -20.000000 289 - -42.333333 -20.000000 520 - -42.166667 -20.000000 918 - -42.000000 -20.000000 793 - -41.833333 -20.000000 656 - -41.666667 -20.000000 494 - -41.500000 -20.000000 418 - -41.333333 -20.000000 665 - -41.166667 -20.000000 507 - -41.000000 -20.000000 396 - -40.833333 -20.000000 895 - -40.666667 -20.000000 750 - -40.500000 -20.000000 482 - -40.333333 -20.000000 17 - -40.166667 -20.000000 22 - -40.000000 -20.000000 -32 - -65.000000 -20.166667 3270 - -64.833333 -20.166667 4052 - -64.666667 -20.166667 2538 - -64.500000 -20.166667 2521 - -64.333333 -20.166667 2269 - -64.166667 -20.166667 1632 - -64.000000 -20.166667 1188 - -63.833333 -20.166667 989 - -63.666667 -20.166667 970 - -63.500000 -20.166667 886 - -63.333333 -20.166667 942 - -63.166667 -20.166667 838 - -63.000000 -20.166667 601 - -62.833333 -20.166667 523 - -62.666667 -20.166667 485 - -62.500000 -20.166667 450 - -62.333333 -20.166667 420 - -62.166667 -20.166667 393 - -62.000000 -20.166667 367 - -61.833333 -20.166667 347 - -61.666667 -20.166667 316 - -61.500000 -20.166667 293 - -61.333333 -20.166667 283 - -61.166667 -20.166667 252 - -61.000000 -20.166667 232 - -60.833333 -20.166667 215 - -60.666667 -20.166667 198 - -60.500000 -20.166667 184 - -60.333333 -20.166667 172 - -60.166667 -20.166667 160 - -60.000000 -20.166667 150 - -59.833333 -20.166667 139 - -59.666667 -20.166667 128 - -59.500000 -20.166667 121 - -59.333333 -20.166667 111 - -59.166667 -20.166667 106 - -59.000000 -20.166667 102 - -58.833333 -20.166667 97 - -58.666667 -20.166667 90 - -58.500000 -20.166667 90 - -58.333333 -20.166667 87 - -58.166667 -20.166667 80 - -58.000000 -20.166667 81 - -57.833333 -20.166667 80 - -57.666667 -20.166667 82 - -57.500000 -20.166667 85 - -57.333333 -20.166667 84 - -57.166667 -20.166667 123 - -57.000000 -20.166667 542 - -56.833333 -20.166667 304 - -56.666667 -20.166667 115 - -56.500000 -20.166667 114 - -56.333333 -20.166667 156 - -56.166667 -20.166667 157 - -56.000000 -20.166667 131 - -55.833333 -20.166667 141 - -55.666667 -20.166667 213 - -55.500000 -20.166667 212 - -55.333333 -20.166667 457 - -55.166667 -20.166667 221 - -55.000000 -20.166667 237 - -54.833333 -20.166667 273 - -54.666667 -20.166667 435 - -54.500000 -20.166667 615 - -54.333333 -20.166667 616 - -54.166667 -20.166667 573 - -54.000000 -20.166667 546 - -53.833333 -20.166667 461 - -53.666667 -20.166667 439 - -53.500000 -20.166667 516 - -53.333333 -20.166667 493 - -53.166667 -20.166667 398 - -53.000000 -20.166667 360 - -52.833333 -20.166667 426 - -52.666667 -20.166667 439 - -52.500000 -20.166667 367 - -52.333333 -20.166667 401 - -52.166667 -20.166667 362 - -52.000000 -20.166667 399 - -51.833333 -20.166667 444 - -51.666667 -20.166667 368 - -51.500000 -20.166667 396 - -51.333333 -20.166667 427 - -51.166667 -20.166667 336 - -51.000000 -20.166667 343 - -50.833333 -20.166667 425 - -50.666667 -20.166667 429 - -50.500000 -20.166667 460 - -50.333333 -20.166667 475 - -50.166667 -20.166667 469 - -50.000000 -20.166667 460 - -49.833333 -20.166667 476 - -49.666667 -20.166667 420 - -49.500000 -20.166667 472 - -49.333333 -20.166667 446 - -49.166667 -20.166667 458 - -49.000000 -20.166667 455 - -48.833333 -20.166667 446 - -48.666667 -20.166667 442 - -48.500000 -20.166667 499 - -48.333333 -20.166667 492 - -48.166667 -20.166667 542 - -48.000000 -20.166667 542 - -47.833333 -20.166667 570 - -47.666667 -20.166667 726 - -47.500000 -20.166667 690 - -47.333333 -20.166667 670 - -47.166667 -20.166667 903 - -47.000000 -20.166667 1017 - -46.833333 -20.166667 1208 - -46.666667 -20.166667 1303 - -46.500000 -20.166667 1046 - -46.333333 -20.166667 780 - -46.166667 -20.166667 798 - -46.000000 -20.166667 774 - -45.833333 -20.166667 671 - -45.666667 -20.166667 665 - -45.500000 -20.166667 744 - -45.333333 -20.166667 1003 - -45.166667 -20.166667 844 - -45.000000 -20.166667 843 - -44.833333 -20.166667 779 - -44.666667 -20.166667 880 - -44.500000 -20.166667 995 - -44.333333 -20.166667 841 - -44.166667 -20.166667 783 - -44.000000 -20.166667 1030 - -43.833333 -20.166667 965 - -43.666667 -20.166667 1139 - -43.500000 -20.166667 1032 - -43.333333 -20.166667 832 - -43.166667 -20.166667 798 - -43.000000 -20.166667 571 - -42.833333 -20.166667 357 - -42.666667 -20.166667 419 - -42.500000 -20.166667 425 - -42.333333 -20.166667 612 - -42.166667 -20.166667 1071 - -42.000000 -20.166667 667 - -41.833333 -20.166667 716 - -41.666667 -20.166667 616 - -41.500000 -20.166667 825 - -41.333333 -20.166667 1046 - -41.166667 -20.166667 584 - -41.000000 -20.166667 1113 - -40.833333 -20.166667 955 - -40.666667 -20.166667 763 - -40.500000 -20.166667 106 - -40.333333 -20.166667 186 - -40.166667 -20.166667 -10 - -40.000000 -20.166667 -38 - -65.000000 -20.333333 3307 - -64.833333 -20.333333 2577 - -64.666667 -20.333333 2513 - -64.500000 -20.333333 1672 - -64.333333 -20.333333 2138 - -64.166667 -20.333333 1365 - -64.000000 -20.333333 1213 - -63.833333 -20.333333 1210 - -63.666667 -20.333333 1305 - -63.500000 -20.333333 1128 - -63.333333 -20.333333 914 - -63.166667 -20.333333 756 - -63.000000 -20.333333 610 - -62.833333 -20.333333 545 - -62.666667 -20.333333 488 - -62.500000 -20.333333 446 - -62.333333 -20.333333 414 - -62.166667 -20.333333 380 - -62.000000 -20.333333 364 - -61.833333 -20.333333 336 - -61.666667 -20.333333 313 - -61.500000 -20.333333 290 - -61.333333 -20.333333 272 - -61.166667 -20.333333 248 - -61.000000 -20.333333 228 - -60.833333 -20.333333 211 - -60.666667 -20.333333 196 - -60.500000 -20.333333 181 - -60.333333 -20.333333 550 - -60.166667 -20.333333 153 - -60.000000 -20.333333 145 - -59.833333 -20.333333 137 - -59.666667 -20.333333 126 - -59.500000 -20.333333 121 - -59.333333 -20.333333 111 - -59.166667 -20.333333 108 - -59.000000 -20.333333 101 - -58.833333 -20.333333 98 - -58.666667 -20.333333 96 - -58.500000 -20.333333 89 - -58.333333 -20.333333 91 - -58.166667 -20.333333 88 - -58.000000 -20.333333 80 - -57.833333 -20.333333 80 - -57.666667 -20.333333 82 - -57.500000 -20.333333 82 - -57.333333 -20.333333 84 - -57.166667 -20.333333 158 - -57.000000 -20.333333 263 - -56.833333 -20.333333 157 - -56.666667 -20.333333 125 - -56.500000 -20.333333 138 - -56.333333 -20.333333 141 - -56.166667 -20.333333 198 - -56.000000 -20.333333 146 - -55.833333 -20.333333 144 - -55.666667 -20.333333 398 - -55.500000 -20.333333 237 - -55.333333 -20.333333 213 - -55.166667 -20.333333 222 - -55.000000 -20.333333 269 - -54.833333 -20.333333 346 - -54.666667 -20.333333 524 - -54.500000 -20.333333 603 - -54.333333 -20.333333 618 - -54.166667 -20.333333 560 - -54.000000 -20.333333 497 - -53.833333 -20.333333 446 - -53.666667 -20.333333 481 - -53.500000 -20.333333 504 - -53.333333 -20.333333 437 - -53.166667 -20.333333 411 - -53.000000 -20.333333 356 - -52.833333 -20.333333 362 - -52.666667 -20.333333 442 - -52.500000 -20.333333 416 - -52.333333 -20.333333 404 - -52.166667 -20.333333 315 - -52.000000 -20.333333 402 - -51.833333 -20.333333 402 - -51.666667 -20.333333 379 - -51.500000 -20.333333 360 - -51.333333 -20.333333 325 - -51.166667 -20.333333 323 - -51.000000 -20.333333 359 - -50.833333 -20.333333 351 - -50.666667 -20.333333 433 - -50.500000 -20.333333 446 - -50.333333 -20.333333 442 - -50.166667 -20.333333 483 - -50.000000 -20.333333 496 - -49.833333 -20.333333 526 - -49.666667 -20.333333 481 - -49.500000 -20.333333 517 - -49.333333 -20.333333 484 - -49.166667 -20.333333 462 - -49.000000 -20.333333 494 - -48.833333 -20.333333 490 - -48.666667 -20.333333 517 - -48.500000 -20.333333 459 - -48.333333 -20.333333 512 - -48.166667 -20.333333 551 - -48.000000 -20.333333 535 - -47.833333 -20.333333 623 - -47.666667 -20.333333 769 - -47.500000 -20.333333 943 - -47.333333 -20.333333 753 - -47.166667 -20.333333 845 - -47.000000 -20.333333 669 - -46.833333 -20.333333 717 - -46.666667 -20.333333 915 - -46.500000 -20.333333 869 - -46.333333 -20.333333 851 - -46.166667 -20.333333 809 - -46.000000 -20.333333 715 - -45.833333 -20.333333 710 - -45.666667 -20.333333 689 - -45.500000 -20.333333 818 - -45.333333 -20.333333 1062 - -45.166667 -20.333333 905 - -45.000000 -20.333333 800 - -44.833333 -20.333333 795 - -44.666667 -20.333333 778 - -44.500000 -20.333333 1068 - -44.333333 -20.333333 845 - -44.166667 -20.333333 919 - -44.000000 -20.333333 1125 - -43.833333 -20.333333 1033 - -43.666667 -20.333333 1069 - -43.500000 -20.333333 1200 - -43.333333 -20.333333 790 - -43.166667 -20.333333 600 - -43.000000 -20.333333 574 - -42.833333 -20.333333 502 - -42.666667 -20.333333 414 - -42.500000 -20.333333 719 - -42.333333 -20.333333 695 - -42.166667 -20.333333 841 - -42.000000 -20.333333 949 - -41.833333 -20.333333 798 - -41.666667 -20.333333 926 - -41.500000 -20.333333 896 - -41.333333 -20.333333 1155 - -41.166667 -20.333333 863 - -41.000000 -20.333333 1038 - -40.833333 -20.333333 896 - -40.666667 -20.333333 659 - -40.500000 -20.333333 450 - -40.333333 -20.333333 15 - -40.166667 -20.333333 -27 - -40.000000 -20.333333 -43 - -65.000000 -20.500000 3395 - -64.833333 -20.500000 3448 - -64.666667 -20.500000 1533 - -64.500000 -20.500000 1812 - -64.333333 -20.500000 1735 - -64.166667 -20.500000 1089 - -64.000000 -20.500000 1263 - -63.833333 -20.500000 1221 - -63.666667 -20.500000 1513 - -63.500000 -20.500000 1058 - -63.333333 -20.500000 973 - -63.166667 -20.500000 778 - -63.000000 -20.500000 651 - -62.833333 -20.500000 524 - -62.666667 -20.500000 482 - -62.500000 -20.500000 437 - -62.333333 -20.500000 402 - -62.166667 -20.500000 369 - -62.000000 -20.500000 348 - -61.833333 -20.500000 324 - -61.666667 -20.500000 301 - -61.500000 -20.500000 276 - -61.333333 -20.500000 254 - -61.166667 -20.500000 229 - -61.000000 -20.500000 220 - -60.833333 -20.500000 201 - -60.666667 -20.500000 189 - -60.500000 -20.500000 174 - -60.333333 -20.500000 162 - -60.166667 -20.500000 151 - -60.000000 -20.500000 138 - -59.833333 -20.500000 132 - -59.666667 -20.500000 126 - -59.500000 -20.500000 119 - -59.333333 -20.500000 111 - -59.166667 -20.500000 107 - -59.000000 -20.500000 103 - -58.833333 -20.500000 98 - -58.666667 -20.500000 95 - -58.500000 -20.500000 93 - -58.333333 -20.500000 94 - -58.166667 -20.500000 89 - -58.000000 -20.500000 79 - -57.833333 -20.500000 80 - -57.666667 -20.500000 79 - -57.500000 -20.500000 83 - -57.333333 -20.500000 96 - -57.166667 -20.500000 210 - -57.000000 -20.500000 159 - -56.833333 -20.500000 323 - -56.666667 -20.500000 200 - -56.500000 -20.500000 183 - -56.333333 -20.500000 128 - -56.166667 -20.500000 215 - -56.000000 -20.500000 212 - -55.833333 -20.500000 158 - -55.666667 -20.500000 185 - -55.500000 -20.500000 281 - -55.333333 -20.500000 302 - -55.166667 -20.500000 248 - -55.000000 -20.500000 283 - -54.833333 -20.500000 493 - -54.666667 -20.500000 527 - -54.500000 -20.500000 632 - -54.333333 -20.500000 499 - -54.166667 -20.500000 490 - -54.000000 -20.500000 551 - -53.833333 -20.500000 453 - -53.666667 -20.500000 414 - -53.500000 -20.500000 426 - -53.333333 -20.500000 459 - -53.166667 -20.500000 370 - -53.000000 -20.500000 370 - -52.833333 -20.500000 315 - -52.666667 -20.500000 399 - -52.500000 -20.500000 400 - -52.333333 -20.500000 402 - -52.166667 -20.500000 387 - -52.000000 -20.500000 369 - -51.833333 -20.500000 382 - -51.666667 -20.500000 321 - -51.500000 -20.500000 311 - -51.333333 -20.500000 361 - -51.166667 -20.500000 326 - -51.000000 -20.500000 365 - -50.833333 -20.500000 375 - -50.666667 -20.500000 359 - -50.500000 -20.500000 352 - -50.333333 -20.500000 408 - -50.166667 -20.500000 396 - -50.000000 -20.500000 458 - -49.833333 -20.500000 499 - -49.666667 -20.500000 489 - -49.500000 -20.500000 452 - -49.333333 -20.500000 538 - -49.166667 -20.500000 482 - -49.000000 -20.500000 508 - -48.833333 -20.500000 493 - -48.666667 -20.500000 568 - -48.500000 -20.500000 513 - -48.333333 -20.500000 493 - -48.166667 -20.500000 566 - -48.000000 -20.500000 602 - -47.833333 -20.500000 573 - -47.666667 -20.500000 794 - -47.500000 -20.500000 924 - -47.333333 -20.500000 826 - -47.166667 -20.500000 1100 - -47.000000 -20.500000 1066 - -46.833333 -20.500000 740 - -46.666667 -20.500000 709 - -46.500000 -20.500000 1044 - -46.333333 -20.500000 945 - -46.166667 -20.500000 822 - -46.000000 -20.500000 814 - -45.833333 -20.500000 795 - -45.666667 -20.500000 853 - -45.500000 -20.500000 811 - -45.333333 -20.500000 936 - -45.166667 -20.500000 870 - -45.000000 -20.500000 806 - -44.833333 -20.500000 841 - -44.666667 -20.500000 898 - -44.500000 -20.500000 803 - -44.333333 -20.500000 1094 - -44.166667 -20.500000 1045 - -44.000000 -20.500000 858 - -43.833333 -20.500000 944 - -43.666667 -20.500000 1300 - -43.500000 -20.500000 1015 - -43.333333 -20.500000 750 - -43.166667 -20.500000 734 - -43.000000 -20.500000 540 - -42.833333 -20.500000 668 - -42.666667 -20.500000 480 - -42.500000 -20.500000 839 - -42.333333 -20.500000 1033 - -42.166667 -20.500000 1105 - -42.000000 -20.500000 1056 - -41.833333 -20.500000 1750 - -41.666667 -20.500000 854 - -41.500000 -20.500000 423 - -41.333333 -20.500000 473 - -41.166667 -20.500000 555 - -41.000000 -20.500000 1089 - -40.833333 -20.500000 662 - -40.666667 -20.500000 673 - -40.500000 -20.500000 21 - -40.333333 -20.500000 -8 - -40.166667 -20.500000 -32 - -40.000000 -20.500000 -60 - -65.000000 -20.666667 3663 - -64.833333 -20.666667 3133 - -64.666667 -20.666667 3147 - -64.500000 -20.666667 2796 - -64.333333 -20.666667 1655 - -64.166667 -20.666667 1054 - -64.000000 -20.666667 1024 - -63.833333 -20.666667 1425 - -63.666667 -20.666667 1098 - -63.500000 -20.666667 1017 - -63.333333 -20.666667 840 - -63.166667 -20.666667 732 - -63.000000 -20.666667 587 - -62.833333 -20.666667 510 - -62.666667 -20.666667 454 - -62.500000 -20.666667 421 - -62.333333 -20.666667 389 - -62.166667 -20.666667 353 - -62.000000 -20.666667 334 - -61.833333 -20.666667 315 - -61.666667 -20.666667 285 - -61.500000 -20.666667 265 - -61.333333 -20.666667 246 - -61.166667 -20.666667 227 - -61.000000 -20.666667 211 - -60.833333 -20.666667 195 - -60.666667 -20.666667 178 - -60.500000 -20.666667 170 - -60.333333 -20.666667 156 - -60.166667 -20.666667 146 - -60.000000 -20.666667 136 - -59.833333 -20.666667 128 - -59.666667 -20.666667 123 - -59.500000 -20.666667 116 - -59.333333 -20.666667 113 - -59.166667 -20.666667 106 - -59.000000 -20.666667 104 - -58.833333 -20.666667 101 - -58.666667 -20.666667 99 - -58.500000 -20.666667 95 - -58.333333 -20.666667 90 - -58.166667 -20.666667 91 - -58.000000 -20.666667 81 - -57.833333 -20.666667 80 - -57.666667 -20.666667 81 - -57.500000 -20.666667 195 - -57.333333 -20.666667 131 - -57.166667 -20.666667 158 - -57.000000 -20.666667 351 - -56.833333 -20.666667 536 - -56.666667 -20.666667 347 - -56.500000 -20.666667 166 - -56.333333 -20.666667 200 - -56.166667 -20.666667 153 - -56.000000 -20.666667 205 - -55.833333 -20.666667 187 - -55.666667 -20.666667 286 - -55.500000 -20.666667 286 - -55.333333 -20.666667 247 - -55.166667 -20.666667 291 - -55.000000 -20.666667 305 - -54.833333 -20.666667 506 - -54.666667 -20.666667 482 - -54.500000 -20.666667 560 - -54.333333 -20.666667 595 - -54.166667 -20.666667 567 - -54.000000 -20.666667 471 - -53.833333 -20.666667 445 - -53.666667 -20.666667 370 - -53.500000 -20.666667 388 - -53.333333 -20.666667 433 - -53.166667 -20.666667 442 - -53.000000 -20.666667 404 - -52.833333 -20.666667 431 - -52.666667 -20.666667 296 - -52.500000 -20.666667 392 - -52.333333 -20.666667 351 - -52.166667 -20.666667 386 - -52.000000 -20.666667 308 - -51.833333 -20.666667 299 - -51.666667 -20.666667 315 - -51.500000 -20.666667 278 - -51.333333 -20.666667 310 - -51.166667 -20.666667 324 - -51.000000 -20.666667 344 - -50.833333 -20.666667 375 - -50.666667 -20.666667 435 - -50.500000 -20.666667 422 - -50.333333 -20.666667 435 - -50.166667 -20.666667 498 - -50.000000 -20.666667 454 - -49.833333 -20.666667 458 - -49.666667 -20.666667 528 - -49.500000 -20.666667 521 - -49.333333 -20.666667 511 - -49.166667 -20.666667 513 - -49.000000 -20.666667 518 - -48.833333 -20.666667 558 - -48.666667 -20.666667 566 - -48.500000 -20.666667 541 - -48.333333 -20.666667 470 - -48.166667 -20.666667 532 - -48.000000 -20.666667 649 - -47.833333 -20.666667 757 - -47.666667 -20.666667 666 - -47.500000 -20.666667 752 - -47.333333 -20.666667 719 - -47.166667 -20.666667 881 - -47.000000 -20.666667 796 - -46.833333 -20.666667 707 - -46.666667 -20.666667 787 - -46.500000 -20.666667 673 - -46.333333 -20.666667 689 - -46.166667 -20.666667 912 - -46.000000 -20.666667 781 - -45.833333 -20.666667 770 - -45.666667 -20.666667 809 - -45.500000 -20.666667 809 - -45.333333 -20.666667 829 - -45.166667 -20.666667 1024 - -45.000000 -20.666667 983 - -44.833333 -20.666667 959 - -44.666667 -20.666667 953 - -44.500000 -20.666667 1005 - -44.333333 -20.666667 1057 - -44.166667 -20.666667 1014 - -44.000000 -20.666667 972 - -43.833333 -20.666667 996 - -43.666667 -20.666667 860 - -43.500000 -20.666667 804 - -43.333333 -20.666667 745 - -43.166667 -20.666667 728 - -43.000000 -20.666667 642 - -42.833333 -20.666667 714 - -42.666667 -20.666667 654 - -42.500000 -20.666667 1189 - -42.333333 -20.666667 863 - -42.166667 -20.666667 758 - -42.000000 -20.666667 834 - -41.833333 -20.666667 819 - -41.666667 -20.666667 761 - -41.500000 -20.666667 264 - -41.333333 -20.666667 421 - -41.166667 -20.666667 125 - -41.000000 -20.666667 664 - -40.833333 -20.666667 648 - -40.666667 -20.666667 43 - -40.500000 -20.666667 2 - -40.333333 -20.666667 -16 - -40.166667 -20.666667 -39 - -40.000000 -20.666667 -61 - -65.000000 -20.833333 2933 - -64.833333 -20.833333 2787 - -64.666667 -20.833333 2036 - -64.500000 -20.833333 2620 - -64.333333 -20.833333 1310 - -64.166667 -20.833333 927 - -64.000000 -20.833333 1071 - -63.833333 -20.833333 1135 - -63.666667 -20.833333 840 - -63.500000 -20.833333 1145 - -63.333333 -20.833333 634 - -63.166667 -20.833333 647 - -63.000000 -20.833333 558 - -62.833333 -20.833333 475 - -62.666667 -20.833333 430 - -62.500000 -20.833333 390 - -62.333333 -20.833333 373 - -62.166667 -20.833333 354 - -62.000000 -20.833333 323 - -61.833333 -20.833333 302 - -61.666667 -20.833333 280 - -61.500000 -20.833333 257 - -61.333333 -20.833333 240 - -61.166667 -20.833333 220 - -61.000000 -20.833333 202 - -60.833333 -20.833333 190 - -60.666667 -20.833333 173 - -60.500000 -20.833333 161 - -60.333333 -20.833333 149 - -60.166667 -20.833333 142 - -60.000000 -20.833333 135 - -59.833333 -20.833333 128 - -59.666667 -20.833333 122 - -59.500000 -20.833333 117 - -59.333333 -20.833333 112 - -59.166667 -20.833333 106 - -59.000000 -20.833333 101 - -58.833333 -20.833333 98 - -58.666667 -20.833333 96 - -58.500000 -20.833333 91 - -58.333333 -20.833333 89 - -58.166667 -20.833333 87 - -58.000000 -20.833333 84 - -57.833333 -20.833333 80 - -57.666667 -20.833333 86 - -57.500000 -20.833333 104 - -57.333333 -20.833333 114 - -57.166667 -20.833333 137 - -57.000000 -20.833333 214 - -56.833333 -20.833333 607 - -56.666667 -20.833333 529 - -56.500000 -20.833333 257 - -56.333333 -20.833333 331 - -56.166667 -20.833333 187 - -56.000000 -20.833333 157 - -55.833333 -20.833333 236 - -55.666667 -20.833333 211 - -55.500000 -20.833333 307 - -55.333333 -20.833333 308 - -55.166667 -20.833333 257 - -55.000000 -20.833333 319 - -54.833333 -20.833333 510 - -54.666667 -20.833333 463 - -54.500000 -20.833333 504 - -54.333333 -20.833333 514 - -54.166667 -20.833333 526 - -54.000000 -20.833333 460 - -53.833333 -20.833333 439 - -53.666667 -20.833333 450 - -53.500000 -20.833333 372 - -53.333333 -20.833333 412 - -53.166667 -20.833333 393 - -53.000000 -20.833333 421 - -52.833333 -20.833333 408 - -52.666667 -20.833333 378 - -52.500000 -20.833333 328 - -52.333333 -20.833333 339 - -52.166667 -20.833333 335 - -52.000000 -20.833333 395 - -51.833333 -20.833333 323 - -51.666667 -20.833333 273 - -51.500000 -20.833333 363 - -51.333333 -20.833333 356 - -51.166667 -20.833333 396 - -51.000000 -20.833333 341 - -50.833333 -20.833333 321 - -50.666667 -20.833333 339 - -50.500000 -20.833333 390 - -50.333333 -20.833333 378 - -50.166667 -20.833333 420 - -50.000000 -20.833333 443 - -49.833333 -20.833333 474 - -49.666667 -20.833333 504 - -49.500000 -20.833333 542 - -49.333333 -20.833333 501 - -49.166667 -20.833333 507 - -49.000000 -20.833333 506 - -48.833333 -20.833333 525 - -48.666667 -20.833333 543 - -48.500000 -20.833333 573 - -48.333333 -20.833333 539 - -48.166667 -20.833333 522 - -48.000000 -20.833333 569 - -47.833333 -20.833333 642 - -47.666667 -20.833333 830 - -47.500000 -20.833333 794 - -47.333333 -20.833333 762 - -47.166667 -20.833333 814 - -47.000000 -20.833333 848 - -46.833333 -20.833333 816 - -46.666667 -20.833333 907 - -46.500000 -20.833333 853 - -46.333333 -20.833333 832 - -46.166667 -20.833333 766 - -46.000000 -20.833333 958 - -45.833333 -20.833333 840 - -45.666667 -20.833333 789 - -45.500000 -20.833333 834 - -45.333333 -20.833333 890 - -45.166667 -20.833333 888 - -45.000000 -20.833333 966 - -44.833333 -20.833333 1072 - -44.666667 -20.833333 1056 - -44.500000 -20.833333 1103 - -44.333333 -20.833333 1116 - -44.166667 -20.833333 1052 - -44.000000 -20.833333 951 - -43.833333 -20.833333 1026 - -43.666667 -20.833333 760 - -43.500000 -20.833333 805 - -43.333333 -20.833333 750 - -43.166667 -20.833333 656 - -43.000000 -20.833333 759 - -42.833333 -20.833333 759 - -42.666667 -20.833333 788 - -42.500000 -20.833333 1201 - -42.333333 -20.833333 615 - -42.166667 -20.833333 725 - -42.000000 -20.833333 366 - -41.833333 -20.833333 699 - -41.666667 -20.833333 672 - -41.500000 -20.833333 619 - -41.333333 -20.833333 207 - -41.166667 -20.833333 79 - -41.000000 -20.833333 94 - -40.833333 -20.833333 49 - -40.666667 -20.833333 -1 - -40.500000 -20.833333 -19 - -40.333333 -20.833333 -30 - -40.166667 -20.833333 -47 - -40.000000 -20.833333 -969 - -65.000000 -21.000000 2325 - -64.833333 -21.000000 3578 - -64.666667 -21.000000 2465 - -64.500000 -21.000000 2479 - -64.333333 -21.000000 1388 - -64.166667 -21.000000 1020 - -64.000000 -21.000000 623 - -63.833333 -21.000000 763 - -63.666667 -21.000000 700 - -63.500000 -21.000000 941 - -63.333333 -21.000000 550 - -63.166667 -21.000000 565 - -63.000000 -21.000000 552 - -62.833333 -21.000000 438 - -62.666667 -21.000000 393 - -62.500000 -21.000000 365 - -62.333333 -21.000000 348 - -62.166667 -21.000000 330 - -62.000000 -21.000000 313 - -61.833333 -21.000000 291 - -61.666667 -21.000000 266 - -61.500000 -21.000000 249 - -61.333333 -21.000000 228 - -61.166667 -21.000000 211 - -61.000000 -21.000000 194 - -60.833333 -21.000000 179 - -60.666667 -21.000000 168 - -60.500000 -21.000000 157 - -60.333333 -21.000000 148 - -60.166667 -21.000000 142 - -60.000000 -21.000000 134 - -59.833333 -21.000000 128 - -59.666667 -21.000000 124 - -59.500000 -21.000000 120 - -59.333333 -21.000000 112 - -59.166667 -21.000000 106 - -59.000000 -21.000000 104 - -58.833333 -21.000000 98 - -58.666667 -21.000000 97 - -58.500000 -21.000000 95 - -58.333333 -21.000000 90 - -58.166667 -21.000000 85 - -58.000000 -21.000000 84 - -57.833333 -21.000000 78 - -57.666667 -21.000000 91 - -57.500000 -21.000000 101 - -57.333333 -21.000000 340 - -57.166667 -21.000000 154 - -57.000000 -21.000000 211 - -56.833333 -21.000000 602 - -56.666667 -21.000000 647 - -56.500000 -21.000000 368 - -56.333333 -21.000000 273 - -56.166667 -21.000000 218 - -56.000000 -21.000000 191 - -55.833333 -21.000000 280 - -55.666667 -21.000000 290 - -55.500000 -21.000000 250 - -55.333333 -21.000000 442 - -55.166667 -21.000000 534 - -55.000000 -21.000000 452 - -54.833333 -21.000000 489 - -54.666667 -21.000000 493 - -54.500000 -21.000000 402 - -54.333333 -21.000000 472 - -54.166667 -21.000000 446 - -54.000000 -21.000000 443 - -53.833333 -21.000000 416 - -53.666667 -21.000000 429 - -53.500000 -21.000000 434 - -53.333333 -21.000000 373 - -53.166667 -21.000000 359 - -53.000000 -21.000000 435 - -52.833333 -21.000000 428 - -52.666667 -21.000000 405 - -52.500000 -21.000000 357 - -52.333333 -21.000000 363 - -52.166667 -21.000000 295 - -52.000000 -21.000000 310 - -51.833333 -21.000000 381 - -51.666667 -21.000000 273 - -51.500000 -21.000000 348 - -51.333333 -21.000000 380 - -51.166667 -21.000000 441 - -51.000000 -21.000000 349 - -50.833333 -21.000000 346 - -50.666667 -21.000000 387 - -50.500000 -21.000000 360 - -50.333333 -21.000000 367 - -50.166667 -21.000000 428 - -50.000000 -21.000000 451 - -49.833333 -21.000000 428 - -49.666667 -21.000000 468 - -49.500000 -21.000000 478 - -49.333333 -21.000000 471 - -49.166667 -21.000000 522 - -49.000000 -21.000000 557 - -48.833333 -21.000000 526 - -48.666667 -21.000000 539 - -48.500000 -21.000000 581 - -48.333333 -21.000000 619 - -48.166667 -21.000000 506 - -48.000000 -21.000000 510 - -47.833333 -21.000000 534 - -47.666667 -21.000000 828 - -47.500000 -21.000000 786 - -47.333333 -21.000000 770 - -47.166667 -21.000000 827 - -47.000000 -21.000000 1105 - -46.833333 -21.000000 1045 - -46.666667 -21.000000 958 - -46.500000 -21.000000 1031 - -46.333333 -21.000000 1110 - -46.166667 -21.000000 838 - -46.000000 -21.000000 768 - -45.833333 -21.000000 946 - -45.666667 -21.000000 1138 - -45.500000 -21.000000 775 - -45.333333 -21.000000 893 - -45.166667 -21.000000 850 - -45.000000 -21.000000 923 - -44.833333 -21.000000 943 - -44.666667 -21.000000 911 - -44.500000 -21.000000 963 - -44.333333 -21.000000 1094 - -44.166667 -21.000000 1055 - -44.000000 -21.000000 1038 - -43.833333 -21.000000 1126 - -43.666667 -21.000000 885 - -43.500000 -21.000000 736 - -43.333333 -21.000000 845 - -43.166667 -21.000000 760 - -43.000000 -21.000000 816 - -42.833333 -21.000000 382 - -42.666667 -21.000000 407 - -42.500000 -21.000000 706 - -42.333333 -21.000000 410 - -42.166667 -21.000000 445 - -42.000000 -21.000000 237 - -41.833333 -21.000000 266 - -41.666667 -21.000000 422 - -41.500000 -21.000000 555 - -41.333333 -21.000000 599 - -41.166667 -21.000000 176 - -41.000000 -21.000000 7 - -40.833333 -21.000000 5 - -40.666667 -21.000000 -9 - -40.500000 -21.000000 -20 - -40.333333 -21.000000 -34 - -40.166667 -21.000000 -498 - -40.000000 -21.000000 -1446 - -65.000000 -21.166667 2972 - -64.833333 -21.166667 2756 - -64.666667 -21.166667 3049 - -64.500000 -21.166667 1738 - -64.333333 -21.166667 1164 - -64.166667 -21.166667 1512 - -64.000000 -21.166667 728 - -63.833333 -21.166667 821 - -63.666667 -21.166667 569 - -63.500000 -21.166667 898 - -63.333333 -21.166667 435 - -63.166667 -21.166667 472 - -63.000000 -21.166667 572 - -62.833333 -21.166667 403 - -62.666667 -21.166667 361 - -62.500000 -21.166667 333 - -62.333333 -21.166667 320 - -62.166667 -21.166667 306 - -62.000000 -21.166667 294 - -61.833333 -21.166667 277 - -61.666667 -21.166667 259 - -61.500000 -21.166667 238 - -61.333333 -21.166667 219 - -61.166667 -21.166667 202 - -61.000000 -21.166667 188 - -60.833333 -21.166667 175 - -60.666667 -21.166667 164 - -60.500000 -21.166667 154 - -60.333333 -21.166667 147 - -60.166667 -21.166667 141 - -60.000000 -21.166667 139 - -59.833333 -21.166667 134 - -59.666667 -21.166667 126 - -59.500000 -21.166667 118 - -59.333333 -21.166667 113 - -59.166667 -21.166667 111 - -59.000000 -21.166667 106 - -58.833333 -21.166667 100 - -58.666667 -21.166667 99 - -58.500000 -21.166667 95 - -58.333333 -21.166667 89 - -58.166667 -21.166667 86 - -58.000000 -21.166667 84 - -57.833333 -21.166667 84 - -57.666667 -21.166667 97 - -57.500000 -21.166667 118 - -57.333333 -21.166667 160 - -57.166667 -21.166667 176 - -57.000000 -21.166667 252 - -56.833333 -21.166667 628 - -56.666667 -21.166667 589 - -56.500000 -21.166667 332 - -56.333333 -21.166667 274 - -56.166667 -21.166667 234 - -56.000000 -21.166667 301 - -55.833333 -21.166667 195 - -55.666667 -21.166667 262 - -55.500000 -21.166667 470 - -55.333333 -21.166667 487 - -55.166667 -21.166667 548 - -55.000000 -21.166667 442 - -54.833333 -21.166667 422 - -54.666667 -21.166667 468 - -54.500000 -21.166667 522 - -54.333333 -21.166667 445 - -54.166667 -21.166667 447 - -54.000000 -21.166667 367 - -53.833333 -21.166667 441 - -53.666667 -21.166667 388 - -53.500000 -21.166667 383 - -53.333333 -21.166667 422 - -53.166667 -21.166667 331 - -53.000000 -21.166667 401 - -52.833333 -21.166667 437 - -52.666667 -21.166667 398 - -52.500000 -21.166667 398 - -52.333333 -21.166667 355 - -52.166667 -21.166667 364 - -52.000000 -21.166667 316 - -51.833333 -21.166667 273 - -51.666667 -21.166667 271 - -51.500000 -21.166667 322 - -51.333333 -21.166667 365 - -51.166667 -21.166667 400 - -51.000000 -21.166667 425 - -50.833333 -21.166667 406 - -50.666667 -21.166667 387 - -50.500000 -21.166667 382 - -50.333333 -21.166667 380 - -50.166667 -21.166667 376 - -50.000000 -21.166667 408 - -49.833333 -21.166667 397 - -49.666667 -21.166667 391 - -49.500000 -21.166667 416 - -49.333333 -21.166667 417 - -49.166667 -21.166667 459 - -49.000000 -21.166667 548 - -48.833333 -21.166667 562 - -48.666667 -21.166667 587 - -48.500000 -21.166667 595 - -48.333333 -21.166667 566 - -48.166667 -21.166667 499 - -48.000000 -21.166667 582 - -47.833333 -21.166667 561 - -47.666667 -21.166667 529 - -47.500000 -21.166667 600 - -47.333333 -21.166667 714 - -47.166667 -21.166667 926 - -47.000000 -21.166667 935 - -46.833333 -21.166667 987 - -46.666667 -21.166667 1107 - -46.500000 -21.166667 1100 - -46.333333 -21.166667 994 - -46.166667 -21.166667 918 - -46.000000 -21.166667 780 - -45.833333 -21.166667 843 - -45.666667 -21.166667 849 - -45.500000 -21.166667 851 - -45.333333 -21.166667 897 - -45.166667 -21.166667 828 - -45.000000 -21.166667 886 - -44.833333 -21.166667 901 - -44.666667 -21.166667 933 - -44.500000 -21.166667 919 - -44.333333 -21.166667 997 - -44.166667 -21.166667 956 - -44.000000 -21.166667 943 - -43.833333 -21.166667 1110 - -43.666667 -21.166667 1186 - -43.500000 -21.166667 836 - -43.333333 -21.166667 747 - -43.166667 -21.166667 605 - -43.000000 -21.166667 388 - -42.833333 -21.166667 327 - -42.666667 -21.166667 684 - -42.500000 -21.166667 265 - -42.333333 -21.166667 272 - -42.166667 -21.166667 196 - -42.000000 -21.166667 260 - -41.833333 -21.166667 158 - -41.666667 -21.166667 104 - -41.500000 -21.166667 149 - -41.333333 -21.166667 46 - -41.166667 -21.166667 58 - -41.000000 -21.166667 21 - -40.833333 -21.166667 -4 - -40.666667 -21.166667 -14 - -40.500000 -21.166667 -18 - -40.333333 -21.166667 -41 - -40.166667 -21.166667 -883 - -40.000000 -21.166667 -1379 - -65.000000 -21.333333 3301 - -64.833333 -21.333333 2623 - -64.666667 -21.333333 2455 - -64.500000 -21.333333 2577 - -64.333333 -21.333333 2549 - -64.166667 -21.333333 1074 - -64.000000 -21.333333 842 - -63.833333 -21.333333 767 - -63.666667 -21.333333 1088 - -63.500000 -21.333333 591 - -63.333333 -21.333333 355 - -63.166667 -21.333333 377 - -63.000000 -21.333333 532 - -62.833333 -21.333333 370 - -62.666667 -21.333333 322 - -62.500000 -21.333333 308 - -62.333333 -21.333333 293 - -62.166667 -21.333333 285 - -62.000000 -21.333333 273 - -61.833333 -21.333333 260 - -61.666667 -21.333333 244 - -61.500000 -21.333333 229 - -61.333333 -21.333333 213 - -61.166667 -21.333333 193 - -61.000000 -21.333333 185 - -60.833333 -21.333333 176 - -60.666667 -21.333333 163 - -60.500000 -21.333333 157 - -60.333333 -21.333333 152 - -60.166667 -21.333333 145 - -60.000000 -21.333333 139 - -59.833333 -21.333333 131 - -59.666667 -21.333333 127 - -59.500000 -21.333333 121 - -59.333333 -21.333333 111 - -59.166667 -21.333333 110 - -59.000000 -21.333333 107 - -58.833333 -21.333333 100 - -58.666667 -21.333333 99 - -58.500000 -21.333333 93 - -58.333333 -21.333333 94 - -58.166667 -21.333333 86 - -58.000000 -21.333333 82 - -57.833333 -21.333333 82 - -57.666667 -21.333333 95 - -57.500000 -21.333333 115 - -57.333333 -21.333333 167 - -57.166667 -21.333333 226 - -57.000000 -21.333333 258 - -56.833333 -21.333333 414 - -56.666667 -21.333333 417 - -56.500000 -21.333333 314 - -56.333333 -21.333333 266 - -56.166667 -21.333333 235 - -56.000000 -21.333333 326 - -55.833333 -21.333333 277 - -55.666667 -21.333333 423 - -55.500000 -21.333333 538 - -55.333333 -21.333333 479 - -55.166667 -21.333333 445 - -55.000000 -21.333333 420 - -54.833333 -21.333333 369 - -54.666667 -21.333333 368 - -54.500000 -21.333333 485 - -54.333333 -21.333333 472 - -54.166667 -21.333333 373 - -54.000000 -21.333333 390 - -53.833333 -21.333333 386 - -53.666667 -21.333333 383 - -53.500000 -21.333333 393 - -53.333333 -21.333333 353 - -53.166667 -21.333333 367 - -53.000000 -21.333333 390 - -52.833333 -21.333333 393 - -52.666667 -21.333333 411 - -52.500000 -21.333333 309 - -52.333333 -21.333333 326 - -52.166667 -21.333333 333 - -52.000000 -21.333333 317 - -51.833333 -21.333333 333 - -51.666667 -21.333333 375 - -51.500000 -21.333333 311 - -51.333333 -21.333333 346 - -51.166667 -21.333333 353 - -51.000000 -21.333333 363 - -50.833333 -21.333333 377 - -50.666667 -21.333333 428 - -50.500000 -21.333333 425 - -50.333333 -21.333333 404 - -50.166667 -21.333333 369 - -50.000000 -21.333333 403 - -49.833333 -21.333333 383 - -49.666667 -21.333333 381 - -49.500000 -21.333333 429 - -49.333333 -21.333333 437 - -49.166667 -21.333333 493 - -49.000000 -21.333333 510 - -48.833333 -21.333333 492 - -48.666667 -21.333333 568 - -48.500000 -21.333333 633 - -48.333333 -21.333333 591 - -48.166667 -21.333333 603 - -48.000000 -21.333333 572 - -47.833333 -21.333333 633 - -47.666667 -21.333333 625 - -47.500000 -21.333333 650 - -47.333333 -21.333333 778 - -47.166667 -21.333333 678 - -47.000000 -21.333333 635 - -46.833333 -21.333333 760 - -46.666667 -21.333333 980 - -46.500000 -21.333333 941 - -46.333333 -21.333333 842 - -46.166667 -21.333333 837 - -46.000000 -21.333333 772 - -45.833333 -21.333333 774 - -45.666667 -21.333333 865 - -45.500000 -21.333333 968 - -45.333333 -21.333333 952 - -45.166667 -21.333333 846 - -45.000000 -21.333333 1153 - -44.833333 -21.333333 915 - -44.666667 -21.333333 958 - -44.500000 -21.333333 951 - -44.333333 -21.333333 1015 - -44.166667 -21.333333 1052 - -44.000000 -21.333333 1054 - -43.833333 -21.333333 1113 - -43.666667 -21.333333 1164 - -43.500000 -21.333333 886 - -43.333333 -21.333333 646 - -43.166667 -21.333333 487 - -43.000000 -21.333333 380 - -42.833333 -21.333333 299 - -42.666667 -21.333333 234 - -42.500000 -21.333333 261 - -42.333333 -21.333333 362 - -42.166667 -21.333333 482 - -42.000000 -21.333333 179 - -41.833333 -21.333333 330 - -41.666667 -21.333333 126 - -41.500000 -21.333333 126 - -41.333333 -21.333333 71 - -41.166667 -21.333333 59 - -41.000000 -21.333333 16 - -40.833333 -21.333333 -12 - -40.666667 -21.333333 -21 - -40.500000 -21.333333 -20 - -40.333333 -21.333333 -42 - -40.166667 -21.333333 -758 - -40.000000 -21.333333 -1286 - -65.000000 -21.500000 3822 - -64.833333 -21.500000 2663 - -64.666667 -21.500000 2197 - -64.500000 -21.500000 2204 - -64.333333 -21.500000 2177 - -64.166667 -21.500000 1296 - -64.000000 -21.500000 1159 - -63.833333 -21.500000 936 - -63.666667 -21.500000 868 - -63.500000 -21.500000 552 - -63.333333 -21.500000 393 - -63.166667 -21.500000 455 - -63.000000 -21.500000 425 - -62.833333 -21.500000 310 - -62.666667 -21.500000 300 - -62.500000 -21.500000 288 - -62.333333 -21.500000 274 - -62.166667 -21.500000 267 - -62.000000 -21.500000 252 - -61.833333 -21.500000 242 - -61.666667 -21.500000 231 - -61.500000 -21.500000 222 - -61.333333 -21.500000 211 - -61.166667 -21.500000 197 - -61.000000 -21.500000 183 - -60.833333 -21.500000 175 - -60.666667 -21.500000 167 - -60.500000 -21.500000 162 - -60.333333 -21.500000 155 - -60.166667 -21.500000 147 - -60.000000 -21.500000 139 - -59.833333 -21.500000 130 - -59.666667 -21.500000 126 - -59.500000 -21.500000 123 - -59.333333 -21.500000 117 - -59.166667 -21.500000 108 - -59.000000 -21.500000 107 - -58.833333 -21.500000 101 - -58.666667 -21.500000 101 - -58.500000 -21.500000 99 - -58.333333 -21.500000 92 - -58.166667 -21.500000 90 - -58.000000 -21.500000 83 - -57.833333 -21.500000 81 - -57.666667 -21.500000 99 - -57.500000 -21.500000 145 - -57.333333 -21.500000 218 - -57.166667 -21.500000 321 - -57.000000 -21.500000 507 - -56.833333 -21.500000 384 - -56.666667 -21.500000 408 - -56.500000 -21.500000 340 - -56.333333 -21.500000 251 - -56.166667 -21.500000 284 - -56.000000 -21.500000 249 - -55.833333 -21.500000 381 - -55.666667 -21.500000 457 - -55.500000 -21.500000 546 - -55.333333 -21.500000 476 - -55.166667 -21.500000 363 - -55.000000 -21.500000 376 - -54.833333 -21.500000 351 - -54.666667 -21.500000 338 - -54.500000 -21.500000 342 - -54.333333 -21.500000 350 - -54.166667 -21.500000 395 - -54.000000 -21.500000 342 - -53.833333 -21.500000 342 - -53.666667 -21.500000 393 - -53.500000 -21.500000 378 - -53.333333 -21.500000 312 - -53.166667 -21.500000 406 - -53.000000 -21.500000 342 - -52.833333 -21.500000 371 - -52.666667 -21.500000 395 - -52.500000 -21.500000 367 - -52.333333 -21.500000 333 - -52.166667 -21.500000 377 - -52.000000 -21.500000 255 - -51.833333 -21.500000 365 - -51.666667 -21.500000 384 - -51.500000 -21.500000 405 - -51.333333 -21.500000 367 - -51.166667 -21.500000 397 - -51.000000 -21.500000 353 - -50.833333 -21.500000 407 - -50.666667 -21.500000 364 - -50.500000 -21.500000 423 - -50.333333 -21.500000 478 - -50.166667 -21.500000 423 - -50.000000 -21.500000 480 - -49.833333 -21.500000 422 - -49.666667 -21.500000 419 - -49.500000 -21.500000 411 - -49.333333 -21.500000 442 - -49.166667 -21.500000 434 - -49.000000 -21.500000 486 - -48.833333 -21.500000 533 - -48.666667 -21.500000 534 - -48.500000 -21.500000 575 - -48.333333 -21.500000 629 - -48.166667 -21.500000 601 - -48.000000 -21.500000 535 - -47.833333 -21.500000 650 - -47.666667 -21.500000 853 - -47.500000 -21.500000 730 - -47.333333 -21.500000 661 - -47.166667 -21.500000 585 - -47.000000 -21.500000 649 - -46.833333 -21.500000 928 - -46.666667 -21.500000 886 - -46.500000 -21.500000 940 - -46.333333 -21.500000 815 - -46.166667 -21.500000 849 - -46.000000 -21.500000 806 - -45.833333 -21.500000 832 - -45.666667 -21.500000 796 - -45.500000 -21.500000 836 - -45.333333 -21.500000 969 - -45.166667 -21.500000 967 - -45.000000 -21.500000 983 - -44.833333 -21.500000 1035 - -44.666667 -21.500000 1006 - -44.500000 -21.500000 1003 - -44.333333 -21.500000 951 - -44.166667 -21.500000 983 - -44.000000 -21.500000 1107 - -43.833333 -21.500000 1179 - -43.666667 -21.500000 809 - -43.500000 -21.500000 848 - -43.333333 -21.500000 542 - -43.166667 -21.500000 410 - -43.000000 -21.500000 388 - -42.833333 -21.500000 291 - -42.666667 -21.500000 238 - -42.500000 -21.500000 304 - -42.333333 -21.500000 188 - -42.166667 -21.500000 139 - -42.000000 -21.500000 354 - -41.833333 -21.500000 150 - -41.666667 -21.500000 100 - -41.500000 -21.500000 83 - -41.333333 -21.500000 54 - -41.166667 -21.500000 18 - -41.000000 -21.500000 -3 - -40.833333 -21.500000 -15 - -40.666667 -21.500000 -22 - -40.500000 -21.500000 -31 - -40.333333 -21.500000 -34 - -40.166667 -21.500000 -531 - -40.000000 -21.500000 -1048 - -65.000000 -21.666667 4023 - -64.833333 -21.666667 2083 - -64.666667 -21.666667 1750 - -64.500000 -21.666667 2185 - -64.333333 -21.666667 1433 - -64.166667 -21.666667 1207 - -64.000000 -21.666667 1480 - -63.833333 -21.666667 1177 - -63.666667 -21.666667 1138 - -63.500000 -21.666667 591 - -63.333333 -21.666667 438 - -63.166667 -21.666667 489 - -63.000000 -21.666667 317 - -62.833333 -21.666667 308 - -62.666667 -21.666667 294 - -62.500000 -21.666667 284 - -62.333333 -21.666667 274 - -62.166667 -21.666667 257 - -62.000000 -21.666667 248 - -61.833333 -21.666667 240 - -61.666667 -21.666667 226 - -61.500000 -21.666667 218 - -61.333333 -21.666667 206 - -61.166667 -21.666667 198 - -61.000000 -21.666667 191 - -60.833333 -21.666667 179 - -60.666667 -21.666667 171 - -60.500000 -21.666667 163 - -60.333333 -21.666667 155 - -60.166667 -21.666667 148 - -60.000000 -21.666667 143 - -59.833333 -21.666667 136 - -59.666667 -21.666667 129 - -59.500000 -21.666667 123 - -59.333333 -21.666667 118 - -59.166667 -21.666667 114 - -59.000000 -21.666667 109 - -58.833333 -21.666667 107 - -58.666667 -21.666667 105 - -58.500000 -21.666667 99 - -58.333333 -21.666667 95 - -58.166667 -21.666667 92 - -58.000000 -21.666667 85 - -57.833333 -21.666667 84 - -57.666667 -21.666667 105 - -57.500000 -21.666667 128 - -57.333333 -21.666667 205 - -57.166667 -21.666667 246 - -57.000000 -21.666667 332 - -56.833333 -21.666667 439 - -56.666667 -21.666667 408 - -56.500000 -21.666667 314 - -56.333333 -21.666667 316 - -56.166667 -21.666667 295 - -56.000000 -21.666667 320 - -55.833333 -21.666667 432 - -55.666667 -21.666667 571 - -55.500000 -21.666667 495 - -55.333333 -21.666667 461 - -55.166667 -21.666667 380 - -55.000000 -21.666667 338 - -54.833333 -21.666667 391 - -54.666667 -21.666667 354 - -54.500000 -21.666667 321 - -54.333333 -21.666667 306 - -54.166667 -21.666667 336 - -54.000000 -21.666667 366 - -53.833333 -21.666667 338 - -53.666667 -21.666667 363 - -53.500000 -21.666667 375 - -53.333333 -21.666667 332 - -53.166667 -21.666667 362 - -53.000000 -21.666667 348 - -52.833333 -21.666667 275 - -52.666667 -21.666667 341 - -52.500000 -21.666667 334 - -52.333333 -21.666667 279 - -52.166667 -21.666667 257 - -52.000000 -21.666667 267 - -51.833333 -21.666667 338 - -51.666667 -21.666667 306 - -51.500000 -21.666667 337 - -51.333333 -21.666667 391 - -51.166667 -21.666667 363 - -51.000000 -21.666667 401 - -50.833333 -21.666667 402 - -50.666667 -21.666667 411 - -50.500000 -21.666667 402 - -50.333333 -21.666667 397 - -50.166667 -21.666667 422 - -50.000000 -21.666667 435 - -49.833333 -21.666667 464 - -49.666667 -21.666667 459 - -49.500000 -21.666667 445 - -49.333333 -21.666667 456 - -49.166667 -21.666667 401 - -49.000000 -21.666667 447 - -48.833333 -21.666667 496 - -48.666667 -21.666667 539 - -48.500000 -21.666667 546 - -48.333333 -21.666667 603 - -48.166667 -21.666667 640 - -48.000000 -21.666667 570 - -47.833333 -21.666667 542 - -47.666667 -21.666667 664 - -47.500000 -21.666667 648 - -47.333333 -21.666667 798 - -47.166667 -21.666667 593 - -47.000000 -21.666667 594 - -46.833333 -21.666667 983 - -46.666667 -21.666667 1229 - -46.500000 -21.666667 906 - -46.333333 -21.666667 1092 - -46.166667 -21.666667 1029 - -46.000000 -21.666667 960 - -45.833333 -21.666667 876 - -45.666667 -21.666667 864 - -45.500000 -21.666667 963 - -45.333333 -21.666667 852 - -45.166667 -21.666667 900 - -45.000000 -21.666667 934 - -44.833333 -21.666667 1064 - -44.666667 -21.666667 1050 - -44.500000 -21.666667 982 - -44.333333 -21.666667 995 - -44.166667 -21.666667 1107 - -44.000000 -21.666667 1093 - -43.833333 -21.666667 936 - -43.666667 -21.666667 770 - -43.500000 -21.666667 752 - -43.333333 -21.666667 853 - -43.166667 -21.666667 775 - -43.000000 -21.666667 583 - -42.833333 -21.666667 578 - -42.666667 -21.666667 422 - -42.500000 -21.666667 260 - -42.333333 -21.666667 174 - -42.166667 -21.666667 101 - -42.000000 -21.666667 120 - -41.833333 -21.666667 164 - -41.666667 -21.666667 197 - -41.500000 -21.666667 30 - -41.333333 -21.666667 15 - -41.166667 -21.666667 3 - -41.000000 -21.666667 -2 - -40.833333 -21.666667 -14 - -40.666667 -21.666667 -19 - -40.500000 -21.666667 -31 - -40.333333 -21.666667 -38 - -40.166667 -21.666667 -139 - -40.000000 -21.666667 -709 - -65.000000 -21.833333 4029 - -64.833333 -21.833333 2192 - -64.666667 -21.833333 2099 - -64.500000 -21.833333 1503 - -64.333333 -21.833333 1092 - -64.166667 -21.833333 1257 - -64.000000 -21.833333 1790 - -63.833333 -21.833333 1293 - -63.666667 -21.833333 903 - -63.500000 -21.833333 562 - -63.333333 -21.833333 446 - -63.166667 -21.833333 365 - -63.000000 -21.833333 308 - -62.833333 -21.833333 302 - -62.666667 -21.833333 290 - -62.500000 -21.833333 279 - -62.333333 -21.833333 264 - -62.166667 -21.833333 255 - -62.000000 -21.833333 249 - -61.833333 -21.833333 235 - -61.666667 -21.833333 225 - -61.500000 -21.833333 213 - -61.333333 -21.833333 204 - -61.166667 -21.833333 198 - -61.000000 -21.833333 189 - -60.833333 -21.833333 180 - -60.666667 -21.833333 174 - -60.500000 -21.833333 163 - -60.333333 -21.833333 153 - -60.166667 -21.833333 151 - -60.000000 -21.833333 144 - -59.833333 -21.833333 134 - -59.666667 -21.833333 130 - -59.500000 -21.833333 124 - -59.333333 -21.833333 117 - -59.166667 -21.833333 112 - -59.000000 -21.833333 110 - -58.833333 -21.833333 109 - -58.666667 -21.833333 99 - -58.500000 -21.833333 98 - -58.333333 -21.833333 94 - -58.166667 -21.833333 89 - -58.000000 -21.833333 83 - -57.833333 -21.833333 78 - -57.666667 -21.833333 96 - -57.500000 -21.833333 153 - -57.333333 -21.833333 261 - -57.166667 -21.833333 182 - -57.000000 -21.833333 384 - -56.833333 -21.833333 387 - -56.666667 -21.833333 272 - -56.500000 -21.833333 283 - -56.333333 -21.833333 288 - -56.166667 -21.833333 374 - -56.000000 -21.833333 457 - -55.833333 -21.833333 579 - -55.666667 -21.833333 612 - -55.500000 -21.833333 465 - -55.333333 -21.833333 435 - -55.166667 -21.833333 408 - -55.000000 -21.833333 324 - -54.833333 -21.833333 302 - -54.666667 -21.833333 316 - -54.500000 -21.833333 293 - -54.333333 -21.833333 380 - -54.166667 -21.833333 381 - -54.000000 -21.833333 301 - -53.833333 -21.833333 301 - -53.666667 -21.833333 334 - -53.500000 -21.833333 297 - -53.333333 -21.833333 368 - -53.166667 -21.833333 401 - -53.000000 -21.833333 435 - -52.833333 -21.833333 424 - -52.666667 -21.833333 377 - -52.500000 -21.833333 380 - -52.333333 -21.833333 254 - -52.166667 -21.833333 276 - -52.000000 -21.833333 350 - -51.833333 -21.833333 353 - -51.666667 -21.833333 334 - -51.500000 -21.833333 323 - -51.333333 -21.833333 332 - -51.166667 -21.833333 341 - -51.000000 -21.833333 411 - -50.833333 -21.833333 443 - -50.666667 -21.833333 440 - -50.500000 -21.833333 463 - -50.333333 -21.833333 438 - -50.166667 -21.833333 437 - -50.000000 -21.833333 454 - -49.833333 -21.833333 494 - -49.666667 -21.833333 497 - -49.500000 -21.833333 456 - -49.333333 -21.833333 448 - -49.166667 -21.833333 461 - -49.000000 -21.833333 427 - -48.833333 -21.833333 422 - -48.666667 -21.833333 420 - -48.500000 -21.833333 533 - -48.333333 -21.833333 573 - -48.166667 -21.833333 666 - -48.000000 -21.833333 713 - -47.833333 -21.833333 688 - -47.666667 -21.833333 670 - -47.500000 -21.833333 544 - -47.333333 -21.833333 621 - -47.166667 -21.833333 625 - -47.000000 -21.833333 744 - -46.833333 -21.833333 857 - -46.666667 -21.833333 1294 - -46.500000 -21.833333 1355 - -46.333333 -21.833333 1115 - -46.166667 -21.833333 1221 - -46.000000 -21.833333 1038 - -45.833333 -21.833333 891 - -45.666667 -21.833333 859 - -45.500000 -21.833333 889 - -45.333333 -21.833333 930 - -45.166667 -21.833333 908 - -45.000000 -21.833333 978 - -44.833333 -21.833333 1089 - -44.666667 -21.833333 1124 - -44.500000 -21.833333 998 - -44.333333 -21.833333 1108 - -44.166667 -21.833333 1217 - -44.000000 -21.833333 982 - -43.833333 -21.833333 828 - -43.666667 -21.833333 892 - -43.500000 -21.833333 707 - -43.333333 -21.833333 592 - -43.166667 -21.833333 653 - -43.000000 -21.833333 526 - -42.833333 -21.833333 569 - -42.666667 -21.833333 282 - -42.500000 -21.833333 282 - -42.333333 -21.833333 342 - -42.166667 -21.833333 155 - -42.000000 -21.833333 110 - -41.833333 -21.833333 1066 - -41.666667 -21.833333 67 - -41.500000 -21.833333 38 - -41.333333 -21.833333 6 - -41.166667 -21.833333 2 - -41.000000 -21.833333 0 - -40.833333 -21.833333 -21 - -40.666667 -21.833333 -20 - -40.500000 -21.833333 -31 - -40.333333 -21.833333 -51 - -40.166667 -21.833333 -83 - -40.000000 -21.833333 -473 - -65.000000 -22.000000 3194 - -64.833333 -22.000000 2374 - -64.666667 -22.000000 1968 - -64.500000 -22.000000 1344 - -64.333333 -22.000000 1166 - -64.166667 -22.000000 862 - -64.000000 -22.000000 835 - -63.833333 -22.000000 750 - -63.666667 -22.000000 636 - -63.500000 -22.000000 521 - -63.333333 -22.000000 405 - -63.166667 -22.000000 349 - -63.000000 -22.000000 303 - -62.833333 -22.000000 288 - -62.666667 -22.000000 281 - -62.500000 -22.000000 274 - -62.333333 -22.000000 261 - -62.166667 -22.000000 254 - -62.000000 -22.000000 244 - -61.833333 -22.000000 234 - -61.666667 -22.000000 224 - -61.500000 -22.000000 212 - -61.333333 -22.000000 204 - -61.166667 -22.000000 195 - -61.000000 -22.000000 187 - -60.833333 -22.000000 177 - -60.666667 -22.000000 168 - -60.500000 -22.000000 163 - -60.333333 -22.000000 157 - -60.166667 -22.000000 147 - -60.000000 -22.000000 140 - -59.833333 -22.000000 134 - -59.666667 -22.000000 130 - -59.500000 -22.000000 123 - -59.333333 -22.000000 115 - -59.166667 -22.000000 112 - -59.000000 -22.000000 109 - -58.833333 -22.000000 102 - -58.666667 -22.000000 100 - -58.500000 -22.000000 97 - -58.333333 -22.000000 92 - -58.166667 -22.000000 87 - -58.000000 -22.000000 74 - -57.833333 -22.000000 84 - -57.666667 -22.000000 93 - -57.500000 -22.000000 150 - -57.333333 -22.000000 143 - -57.166667 -22.000000 193 - -57.000000 -22.000000 263 - -56.833333 -22.000000 332 - -56.666667 -22.000000 213 - -56.500000 -22.000000 207 - -56.333333 -22.000000 225 - -56.166667 -22.000000 286 - -56.000000 -22.000000 487 - -55.833333 -22.000000 648 - -55.666667 -22.000000 615 - -55.500000 -22.000000 572 - -55.333333 -22.000000 425 - -55.166667 -22.000000 386 - -55.000000 -22.000000 406 - -54.833333 -22.000000 313 - -54.666667 -22.000000 305 - -54.500000 -22.000000 291 - -54.333333 -22.000000 290 - -54.166667 -22.000000 291 - -54.000000 -22.000000 338 - -53.833333 -22.000000 337 - -53.666667 -22.000000 313 - -53.500000 -22.000000 309 - -53.333333 -22.000000 395 - -53.166667 -22.000000 375 - -53.000000 -22.000000 346 - -52.833333 -22.000000 425 - -52.666667 -22.000000 399 - -52.500000 -22.000000 293 - -52.333333 -22.000000 252 - -52.166667 -22.000000 345 - -52.000000 -22.000000 349 - -51.833333 -22.000000 388 - -51.666667 -22.000000 394 - -51.500000 -22.000000 384 - -51.333333 -22.000000 389 - -51.166667 -22.000000 410 - -51.000000 -22.000000 407 - -50.833333 -22.000000 386 - -50.666667 -22.000000 447 - -50.500000 -22.000000 430 - -50.333333 -22.000000 488 - -50.166667 -22.000000 471 - -50.000000 -22.000000 460 - -49.833333 -22.000000 467 - -49.666667 -22.000000 467 - -49.500000 -22.000000 550 - -49.333333 -22.000000 530 - -49.166667 -22.000000 476 - -49.000000 -22.000000 505 - -48.833333 -22.000000 480 - -48.666667 -22.000000 478 - -48.500000 -22.000000 525 - -48.333333 -22.000000 511 - -48.166667 -22.000000 583 - -48.000000 -22.000000 790 - -47.833333 -22.000000 879 - -47.666667 -22.000000 745 - -47.500000 -22.000000 746 - -47.333333 -22.000000 600 - -47.166667 -22.000000 594 - -47.000000 -22.000000 612 - -46.833333 -22.000000 726 - -46.666667 -22.000000 1250 - -46.500000 -22.000000 1323 - -46.333333 -22.000000 1174 - -46.166667 -22.000000 1278 - -46.000000 -22.000000 1343 - -45.833333 -22.000000 853 - -45.666667 -22.000000 867 - -45.500000 -22.000000 1157 - -45.333333 -22.000000 914 - -45.166667 -22.000000 921 - -45.000000 -22.000000 908 - -44.833333 -22.000000 956 - -44.666667 -22.000000 1537 - -44.500000 -22.000000 1135 - -44.333333 -22.000000 1158 - -44.166667 -22.000000 1239 - -44.000000 -22.000000 1172 - -43.833333 -22.000000 821 - -43.666667 -22.000000 847 - -43.500000 -22.000000 533 - -43.333333 -22.000000 392 - -43.166667 -22.000000 381 - -43.000000 -22.000000 362 - -42.833333 -22.000000 560 - -42.666667 -22.000000 329 - -42.500000 -22.000000 663 - -42.333333 -22.000000 510 - -42.166667 -22.000000 347 - -42.000000 -22.000000 601 - -41.833333 -22.000000 101 - -41.666667 -22.000000 77 - -41.500000 -22.000000 2 - -41.333333 -22.000000 1 - -41.166667 -22.000000 3 - -41.000000 -22.000000 4 - -40.833333 -22.000000 -16 - -40.666667 -22.000000 -29 - -40.500000 -22.000000 -47 - -40.333333 -22.000000 -53 - -40.166667 -22.000000 -62 - -40.000000 -22.000000 -443 - -65.000000 -22.166667 2897 - -64.833333 -22.166667 2755 - -64.666667 -22.166667 1310 - -64.500000 -22.166667 1199 - -64.333333 -22.166667 873 - -64.166667 -22.166667 691 - -64.000000 -22.166667 615 - -63.833333 -22.166667 740 - -63.666667 -22.166667 587 - -63.500000 -22.166667 429 - -63.333333 -22.166667 379 - -63.166667 -22.166667 336 - -63.000000 -22.166667 296 - -62.833333 -22.166667 275 - -62.666667 -22.166667 269 - -62.500000 -22.166667 264 - -62.333333 -22.166667 258 - -62.166667 -22.166667 248 - -62.000000 -22.166667 237 - -61.833333 -22.166667 229 - -61.666667 -22.166667 217 - -61.500000 -22.166667 210 - -61.333333 -22.166667 202 - -61.166667 -22.166667 192 - -61.000000 -22.166667 185 - -60.833333 -22.166667 173 - -60.666667 -22.166667 168 - -60.500000 -22.166667 160 - -60.333333 -22.166667 153 - -60.166667 -22.166667 145 - -60.000000 -22.166667 137 - -59.833333 -22.166667 131 - -59.666667 -22.166667 124 - -59.500000 -22.166667 122 - -59.333333 -22.166667 117 - -59.166667 -22.166667 113 - -59.000000 -22.166667 108 - -58.833333 -22.166667 104 - -58.666667 -22.166667 104 - -58.500000 -22.166667 96 - -58.333333 -22.166667 94 - -58.166667 -22.166667 86 - -58.000000 -22.166667 80 - -57.833333 -22.166667 86 - -57.666667 -22.166667 95 - -57.500000 -22.166667 108 - -57.333333 -22.166667 126 - -57.166667 -22.166667 157 - -57.000000 -22.166667 221 - -56.833333 -22.166667 260 - -56.666667 -22.166667 195 - -56.500000 -22.166667 198 - -56.333333 -22.166667 249 - -56.166667 -22.166667 325 - -56.000000 -22.166667 537 - -55.833333 -22.166667 635 - -55.666667 -22.166667 494 - -55.500000 -22.166667 480 - -55.333333 -22.166667 435 - -55.166667 -22.166667 412 - -55.000000 -22.166667 455 - -54.833333 -22.166667 424 - -54.666667 -22.166667 354 - -54.500000 -22.166667 354 - -54.333333 -22.166667 315 - -54.166667 -22.166667 325 - -54.000000 -22.166667 372 - -53.833333 -22.166667 360 - -53.666667 -22.166667 285 - -53.500000 -22.166667 388 - -53.333333 -22.166667 397 - -53.166667 -22.166667 344 - -53.000000 -22.166667 337 - -52.833333 -22.166667 371 - -52.666667 -22.166667 284 - -52.500000 -22.166667 258 - -52.333333 -22.166667 392 - -52.166667 -22.166667 335 - -52.000000 -22.166667 412 - -51.833333 -22.166667 369 - -51.666667 -22.166667 398 - -51.500000 -22.166667 356 - -51.333333 -22.166667 418 - -51.166667 -22.166667 479 - -51.000000 -22.166667 445 - -50.833333 -22.166667 474 - -50.666667 -22.166667 477 - -50.500000 -22.166667 408 - -50.333333 -22.166667 409 - -50.166667 -22.166667 486 - -50.000000 -22.166667 612 - -49.833333 -22.166667 536 - -49.666667 -22.166667 622 - -49.500000 -22.166667 568 - -49.333333 -22.166667 477 - -49.166667 -22.166667 499 - -49.000000 -22.166667 553 - -48.833333 -22.166667 497 - -48.666667 -22.166667 531 - -48.500000 -22.166667 640 - -48.333333 -22.166667 507 - -48.166667 -22.166667 676 - -48.000000 -22.166667 789 - -47.833333 -22.166667 775 - -47.666667 -22.166667 676 - -47.500000 -22.166667 662 - -47.333333 -22.166667 617 - -47.166667 -22.166667 639 - -47.000000 -22.166667 667 - -46.833333 -22.166667 720 - -46.666667 -22.166667 1032 - -46.500000 -22.166667 1131 - -46.333333 -22.166667 1363 - -46.166667 -22.166667 874 - -46.000000 -22.166667 874 - -45.833333 -22.166667 828 - -45.666667 -22.166667 920 - -45.500000 -22.166667 1072 - -45.333333 -22.166667 974 - -45.166667 -22.166667 1035 - -45.000000 -22.166667 992 - -44.833333 -22.166667 1497 - -44.666667 -22.166667 1236 - -44.500000 -22.166667 1228 - -44.333333 -22.166667 1407 - -44.166667 -22.166667 703 - -44.000000 -22.166667 515 - -43.833333 -22.166667 739 - -43.666667 -22.166667 491 - -43.500000 -22.166667 676 - -43.333333 -22.166667 361 - -43.166667 -22.166667 301 - -43.000000 -22.166667 743 - -42.833333 -22.166667 888 - -42.666667 -22.166667 960 - -42.500000 -22.166667 859 - -42.333333 -22.166667 735 - -42.166667 -22.166667 1055 - -42.000000 -22.166667 150 - -41.833333 -22.166667 133 - -41.666667 -22.166667 43 - -41.500000 -22.166667 8 - -41.333333 -22.166667 5 - -41.166667 -22.166667 -8 - -41.000000 -22.166667 -25 - -40.833333 -22.166667 -48 - -40.666667 -22.166667 -57 - -40.500000 -22.166667 -83 - -40.333333 -22.166667 -44 - -40.166667 -22.166667 -129 - -40.000000 -22.166667 -284 - -65.000000 -22.333333 3308 - -64.833333 -22.333333 2855 - -64.666667 -22.333333 1509 - -64.500000 -22.333333 840 - -64.333333 -22.333333 1268 - -64.166667 -22.333333 827 - -64.000000 -22.333333 836 - -63.833333 -22.333333 898 - -63.666667 -22.333333 463 - -63.500000 -22.333333 410 - -63.333333 -22.333333 362 - -63.166667 -22.333333 320 - -63.000000 -22.333333 290 - -62.833333 -22.333333 266 - -62.666667 -22.333333 262 - -62.500000 -22.333333 255 - -62.333333 -22.333333 247 - -62.166667 -22.333333 240 - -62.000000 -22.333333 233 - -61.833333 -22.333333 227 - -61.666667 -22.333333 214 - -61.500000 -22.333333 206 - -61.333333 -22.333333 199 - -61.166667 -22.333333 190 - -61.000000 -22.333333 184 - -60.833333 -22.333333 174 - -60.666667 -22.333333 166 - -60.500000 -22.333333 157 - -60.333333 -22.333333 150 - -60.166667 -22.333333 142 - -60.000000 -22.333333 135 - -59.833333 -22.333333 130 - -59.666667 -22.333333 124 - -59.500000 -22.333333 122 - -59.333333 -22.333333 115 - -59.166667 -22.333333 108 - -59.000000 -22.333333 103 - -58.833333 -22.333333 104 - -58.666667 -22.333333 102 - -58.500000 -22.333333 97 - -58.333333 -22.333333 94 - -58.166667 -22.333333 86 - -58.000000 -22.333333 81 - -57.833333 -22.333333 88 - -57.666667 -22.333333 99 - -57.500000 -22.333333 265 - -57.333333 -22.333333 140 - -57.166667 -22.333333 168 - -57.000000 -22.333333 182 - -56.833333 -22.333333 170 - -56.666667 -22.333333 209 - -56.500000 -22.333333 226 - -56.333333 -22.333333 300 - -56.166667 -22.333333 358 - -56.000000 -22.333333 357 - -55.833333 -22.333333 686 - -55.666667 -22.333333 635 - -55.500000 -22.333333 518 - -55.333333 -22.333333 479 - -55.166667 -22.333333 413 - -55.000000 -22.333333 353 - -54.833333 -22.333333 388 - -54.666667 -22.333333 351 - -54.500000 -22.333333 324 - -54.333333 -22.333333 327 - -54.166667 -22.333333 411 - -54.000000 -22.333333 410 - -53.833333 -22.333333 380 - -53.666667 -22.333333 376 - -53.500000 -22.333333 262 - -53.333333 -22.333333 309 - -53.166667 -22.333333 276 - -53.000000 -22.333333 273 - -52.833333 -22.333333 252 - -52.666667 -22.333333 332 - -52.500000 -22.333333 369 - -52.333333 -22.333333 428 - -52.166667 -22.333333 390 - -52.000000 -22.333333 388 - -51.833333 -22.333333 337 - -51.666667 -22.333333 391 - -51.500000 -22.333333 453 - -51.333333 -22.333333 457 - -51.166667 -22.333333 441 - -51.000000 -22.333333 411 - -50.833333 -22.333333 481 - -50.666667 -22.333333 519 - -50.500000 -22.333333 530 - -50.333333 -22.333333 498 - -50.166667 -22.333333 458 - -50.000000 -22.333333 468 - -49.833333 -22.333333 612 - -49.666667 -22.333333 667 - -49.500000 -22.333333 554 - -49.333333 -22.333333 516 - -49.166667 -22.333333 517 - -49.000000 -22.333333 579 - -48.833333 -22.333333 558 - -48.666667 -22.333333 471 - -48.500000 -22.333333 559 - -48.333333 -22.333333 728 - -48.166667 -22.333333 567 - -48.000000 -22.333333 685 - -47.833333 -22.333333 721 - -47.666667 -22.333333 604 - -47.500000 -22.333333 622 - -47.333333 -22.333333 627 - -47.166667 -22.333333 602 - -47.000000 -22.333333 596 - -46.833333 -22.333333 635 - -46.666667 -22.333333 798 - -46.500000 -22.333333 1003 - -46.333333 -22.333333 941 - -46.166667 -22.333333 1030 - -46.000000 -22.333333 871 - -45.833333 -22.333333 854 - -45.666667 -22.333333 862 - -45.500000 -22.333333 881 - -45.333333 -22.333333 1180 - -45.166667 -22.333333 1574 - -45.000000 -22.333333 1063 - -44.833333 -22.333333 1078 - -44.666667 -22.333333 2252 - -44.500000 -22.333333 1095 - -44.333333 -22.333333 673 - -44.166667 -22.333333 652 - -44.000000 -22.333333 598 - -43.833333 -22.333333 686 - -43.666667 -22.333333 369 - -43.500000 -22.333333 582 - -43.333333 -22.333333 715 - -43.166667 -22.333333 680 - -43.000000 -22.333333 1039 - -42.833333 -22.333333 1046 - -42.666667 -22.333333 1101 - -42.500000 -22.333333 1135 - -42.333333 -22.333333 818 - -42.166667 -22.333333 642 - -42.000000 -22.333333 36 - -41.833333 -22.333333 26 - -41.666667 -22.333333 -4 - -41.500000 -22.333333 -19 - -41.333333 -22.333333 -23 - -41.166667 -22.333333 -34 - -41.000000 -22.333333 -48 - -40.833333 -22.333333 -59 - -40.666667 -22.333333 -64 - -40.500000 -22.333333 -109 - -40.333333 -22.333333 -126 - -40.166667 -22.333333 -443 - -40.000000 -22.333333 -877 - -65.000000 -22.500000 2806 - -64.833333 -22.500000 1843 - -64.666667 -22.500000 1036 - -64.500000 -22.500000 946 - -64.333333 -22.500000 778 - -64.166667 -22.500000 489 - -64.000000 -22.500000 577 - -63.833333 -22.500000 659 - -63.666667 -22.500000 400 - -63.500000 -22.500000 359 - -63.333333 -22.500000 330 - -63.166667 -22.500000 304 - -63.000000 -22.500000 275 - -62.833333 -22.500000 257 - -62.666667 -22.500000 253 - -62.500000 -22.500000 247 - -62.333333 -22.500000 243 - -62.166667 -22.500000 234 - -62.000000 -22.500000 226 - -61.833333 -22.500000 220 - -61.666667 -22.500000 211 - -61.500000 -22.500000 204 - -61.333333 -22.500000 195 - -61.166667 -22.500000 188 - -61.000000 -22.500000 180 - -60.833333 -22.500000 170 - -60.666667 -22.500000 163 - -60.500000 -22.500000 155 - -60.333333 -22.500000 148 - -60.166667 -22.500000 141 - -60.000000 -22.500000 133 - -59.833333 -22.500000 125 - -59.666667 -22.500000 122 - -59.500000 -22.500000 116 - -59.333333 -22.500000 116 - -59.166667 -22.500000 109 - -59.000000 -22.500000 107 - -58.833333 -22.500000 103 - -58.666667 -22.500000 97 - -58.500000 -22.500000 94 - -58.333333 -22.500000 92 - -58.166667 -22.500000 87 - -58.000000 -22.500000 84 - -57.833333 -22.500000 79 - -57.666667 -22.500000 103 - -57.500000 -22.500000 183 - -57.333333 -22.500000 196 - -57.166667 -22.500000 234 - -57.000000 -22.500000 239 - -56.833333 -22.500000 191 - -56.666667 -22.500000 180 - -56.500000 -22.500000 207 - -56.333333 -22.500000 387 - -56.166667 -22.500000 314 - -56.000000 -22.500000 385 - -55.833333 -22.500000 422 - -55.666667 -22.500000 607 - -55.500000 -22.500000 557 - -55.333333 -22.500000 486 - -55.166667 -22.500000 451 - -55.000000 -22.500000 397 - -54.833333 -22.500000 395 - -54.666667 -22.500000 353 - -54.500000 -22.500000 412 - -54.333333 -22.500000 430 - -54.166667 -22.500000 382 - -54.000000 -22.500000 355 - -53.833333 -22.500000 344 - -53.666667 -22.500000 312 - -53.500000 -22.500000 248 - -53.333333 -22.500000 267 - -53.166667 -22.500000 250 - -53.000000 -22.500000 240 - -52.833333 -22.500000 325 - -52.666667 -22.500000 390 - -52.500000 -22.500000 396 - -52.333333 -22.500000 354 - -52.166667 -22.500000 285 - -52.000000 -22.500000 289 - -51.833333 -22.500000 382 - -51.666667 -22.500000 367 - -51.500000 -22.500000 394 - -51.333333 -22.500000 457 - -51.166667 -22.500000 425 - -51.000000 -22.500000 443 - -50.833333 -22.500000 465 - -50.666667 -22.500000 506 - -50.500000 -22.500000 450 - -50.333333 -22.500000 499 - -50.166667 -22.500000 535 - -50.000000 -22.500000 515 - -49.833333 -22.500000 516 - -49.666667 -22.500000 501 - -49.500000 -22.500000 528 - -49.333333 -22.500000 559 - -49.166667 -22.500000 595 - -49.000000 -22.500000 613 - -48.833333 -22.500000 562 - -48.666667 -22.500000 544 - -48.500000 -22.500000 508 - -48.333333 -22.500000 544 - -48.166667 -22.500000 614 - -48.000000 -22.500000 882 - -47.833333 -22.500000 514 - -47.666667 -22.500000 534 - -47.500000 -22.500000 691 - -47.333333 -22.500000 657 - -47.166667 -22.500000 668 - -47.000000 -22.500000 648 - -46.833333 -22.500000 681 - -46.666667 -22.500000 740 - -46.500000 -22.500000 798 - -46.333333 -22.500000 1327 - -46.166667 -22.500000 1407 - -46.000000 -22.500000 884 - -45.833333 -22.500000 926 - -45.666667 -22.500000 1097 - -45.500000 -22.500000 897 - -45.333333 -22.500000 1251 - -45.166667 -22.500000 1733 - -45.000000 -22.500000 963 - -44.833333 -22.500000 814 - -44.666667 -22.500000 487 - -44.500000 -22.500000 445 - -44.333333 -22.500000 629 - -44.166667 -22.500000 500 - -44.000000 -22.500000 386 - -43.833333 -22.500000 466 - -43.666667 -22.500000 519 - -43.500000 -22.500000 378 - -43.333333 -22.500000 1034 - -43.166667 -22.500000 907 - -43.000000 -22.500000 401 - -42.833333 -22.500000 33 - -42.666667 -22.500000 65 - -42.500000 -22.500000 147 - -42.333333 -22.500000 154 - -42.166667 -22.500000 26 - -42.000000 -22.500000 18 - -41.833333 -22.500000 -17 - -41.666667 -22.500000 -32 - -41.500000 -22.500000 -37 - -41.333333 -22.500000 -43 - -41.166667 -22.500000 -55 - -41.000000 -22.500000 -50 - -40.833333 -22.500000 -65 - -40.666667 -22.500000 -96 - -40.500000 -22.500000 -277 - -40.333333 -22.500000 -712 - -40.166667 -22.500000 -896 - -40.000000 -22.500000 -1179 - -65.000000 -22.666667 2700 - -64.833333 -22.666667 1502 - -64.666667 -22.666667 832 - -64.500000 -22.666667 717 - -64.333333 -22.666667 596 - -64.166667 -22.666667 554 - -64.000000 -22.666667 499 - -63.833333 -22.666667 455 - -63.666667 -22.666667 356 - -63.500000 -22.666667 309 - -63.333333 -22.666667 297 - -63.166667 -22.666667 277 - -63.000000 -22.666667 259 - -62.833333 -22.666667 245 - -62.666667 -22.666667 239 - -62.500000 -22.666667 238 - -62.333333 -22.666667 233 - -62.166667 -22.666667 229 - -62.000000 -22.666667 221 - -61.833333 -22.666667 214 - -61.666667 -22.666667 206 - -61.500000 -22.666667 201 - -61.333333 -22.666667 193 - -61.166667 -22.666667 185 - -61.000000 -22.666667 176 - -60.833333 -22.666667 168 - -60.666667 -22.666667 160 - -60.500000 -22.666667 156 - -60.333333 -22.666667 148 - -60.166667 -22.666667 139 - -60.000000 -22.666667 132 - -59.833333 -22.666667 127 - -59.666667 -22.666667 121 - -59.500000 -22.666667 117 - -59.333333 -22.666667 114 - -59.166667 -22.666667 110 - -59.000000 -22.666667 106 - -58.833333 -22.666667 102 - -58.666667 -22.666667 100 - -58.500000 -22.666667 96 - -58.333333 -22.666667 91 - -58.166667 -22.666667 89 - -58.000000 -22.666667 78 - -57.833333 -22.666667 72 - -57.666667 -22.666667 127 - -57.500000 -22.666667 180 - -57.333333 -22.666667 215 - -57.166667 -22.666667 238 - -57.000000 -22.666667 175 - -56.833333 -22.666667 148 - -56.666667 -22.666667 167 - -56.500000 -22.666667 217 - -56.333333 -22.666667 218 - -56.166667 -22.666667 235 - -56.000000 -22.666667 293 - -55.833333 -22.666667 549 - -55.666667 -22.666667 524 - -55.500000 -22.666667 572 - -55.333333 -22.666667 495 - -55.166667 -22.666667 522 - -55.000000 -22.666667 422 - -54.833333 -22.666667 422 - -54.666667 -22.666667 425 - -54.500000 -22.666667 434 - -54.333333 -22.666667 434 - -54.166667 -22.666667 393 - -54.000000 -22.666667 358 - -53.833333 -22.666667 347 - -53.666667 -22.666667 261 - -53.500000 -22.666667 248 - -53.333333 -22.666667 243 - -53.166667 -22.666667 238 - -53.000000 -22.666667 331 - -52.833333 -22.666667 375 - -52.666667 -22.666667 325 - -52.500000 -22.666667 360 - -52.333333 -22.666667 301 - -52.166667 -22.666667 277 - -52.000000 -22.666667 325 - -51.833333 -22.666667 334 - -51.666667 -22.666667 298 - -51.500000 -22.666667 324 - -51.333333 -22.666667 325 - -51.166667 -22.666667 334 - -51.000000 -22.666667 386 - -50.833333 -22.666667 372 - -50.666667 -22.666667 495 - -50.500000 -22.666667 506 - -50.333333 -22.666667 498 - -50.166667 -22.666667 528 - -50.000000 -22.666667 494 - -49.833333 -22.666667 555 - -49.666667 -22.666667 552 - -49.500000 -22.666667 566 - -49.333333 -22.666667 527 - -49.166667 -22.666667 648 - -49.000000 -22.666667 646 - -48.833333 -22.666667 624 - -48.666667 -22.666667 640 - -48.500000 -22.666667 569 - -48.333333 -22.666667 458 - -48.166667 -22.666667 542 - -48.000000 -22.666667 454 - -47.833333 -22.666667 472 - -47.666667 -22.666667 492 - -47.500000 -22.666667 539 - -47.333333 -22.666667 583 - -47.166667 -22.666667 580 - -47.000000 -22.666667 582 - -46.833333 -22.666667 688 - -46.666667 -22.666667 907 - -46.500000 -22.666667 1061 - -46.333333 -22.666667 1396 - -46.166667 -22.666667 1132 - -46.000000 -22.666667 1252 - -45.833333 -22.666667 1342 - -45.666667 -22.666667 1195 - -45.500000 -22.666667 1493 - -45.333333 -22.666667 1128 - -45.166667 -22.666667 592 - -45.000000 -22.666667 552 - -44.833333 -22.666667 668 - -44.666667 -22.666667 607 - -44.500000 -22.666667 856 - -44.333333 -22.666667 532 - -44.166667 -22.666667 547 - -44.000000 -22.666667 475 - -43.833333 -22.666667 316 - -43.666667 -22.666667 66 - -43.500000 -22.666667 71 - -43.333333 -22.666667 15 - -43.166667 -22.666667 32 - -43.000000 -22.666667 5 - -42.833333 -22.666667 17 - -42.666667 -22.666667 181 - -42.500000 -22.666667 60 - -42.333333 -22.666667 28 - -42.166667 -22.666667 23 - -42.000000 -22.666667 5 - -41.833333 -22.666667 -24 - -41.666667 -22.666667 -47 - -41.500000 -22.666667 -51 - -41.333333 -22.666667 -54 - -41.166667 -22.666667 -60 - -41.000000 -22.666667 -64 - -40.833333 -22.666667 -77 - -40.666667 -22.666667 -131 - -40.500000 -22.666667 -778 - -40.333333 -22.666667 -945 - -40.166667 -22.666667 -1210 - -40.000000 -22.666667 -1910 - -65.000000 -22.833333 1771 - -64.833333 -22.833333 1471 - -64.666667 -22.833333 928 - -64.500000 -22.833333 669 - -64.333333 -22.833333 363 - -64.166667 -22.833333 788 - -64.000000 -22.833333 426 - -63.833333 -22.833333 369 - -63.666667 -22.833333 303 - -63.500000 -22.833333 270 - -63.333333 -22.833333 262 - -63.166667 -22.833333 252 - -63.000000 -22.833333 237 - -62.833333 -22.833333 237 - -62.666667 -22.833333 232 - -62.500000 -22.833333 227 - -62.333333 -22.833333 229 - -62.166667 -22.833333 222 - -62.000000 -22.833333 218 - -61.833333 -22.833333 207 - -61.666667 -22.833333 201 - -61.500000 -22.833333 196 - -61.333333 -22.833333 186 - -61.166667 -22.833333 182 - -61.000000 -22.833333 175 - -60.833333 -22.833333 166 - -60.666667 -22.833333 160 - -60.500000 -22.833333 155 - -60.333333 -22.833333 147 - -60.166667 -22.833333 142 - -60.000000 -22.833333 132 - -59.833333 -22.833333 126 - -59.666667 -22.833333 122 - -59.500000 -22.833333 118 - -59.333333 -22.833333 112 - -59.166667 -22.833333 107 - -59.000000 -22.833333 104 - -58.833333 -22.833333 102 - -58.666667 -22.833333 102 - -58.500000 -22.833333 99 - -58.333333 -22.833333 90 - -58.166667 -22.833333 87 - -58.000000 -22.833333 82 - -57.833333 -22.833333 70 - -57.666667 -22.833333 91 - -57.500000 -22.833333 113 - -57.333333 -22.833333 124 - -57.166667 -22.833333 137 - -57.000000 -22.833333 129 - -56.833333 -22.833333 132 - -56.666667 -22.833333 135 - -56.500000 -22.833333 164 - -56.333333 -22.833333 234 - -56.166667 -22.833333 468 - -56.000000 -22.833333 313 - -55.833333 -22.833333 396 - -55.666667 -22.833333 596 - -55.500000 -22.833333 496 - -55.333333 -22.833333 470 - -55.166667 -22.833333 415 - -55.000000 -22.833333 402 - -54.833333 -22.833333 321 - -54.666667 -22.833333 369 - -54.500000 -22.833333 361 - -54.333333 -22.833333 363 - -54.166667 -22.833333 381 - -54.000000 -22.833333 308 - -53.833333 -22.833333 354 - -53.666667 -22.833333 241 - -53.500000 -22.833333 238 - -53.333333 -22.833333 288 - -53.166667 -22.833333 384 - -53.000000 -22.833333 346 - -52.833333 -22.833333 407 - -52.666667 -22.833333 471 - -52.500000 -22.833333 437 - -52.333333 -22.833333 394 - -52.166667 -22.833333 427 - -52.000000 -22.833333 394 - -51.833333 -22.833333 385 - -51.666667 -22.833333 454 - -51.500000 -22.833333 435 - -51.333333 -22.833333 330 - -51.166667 -22.833333 333 - -51.000000 -22.833333 333 - -50.833333 -22.833333 334 - -50.666667 -22.833333 411 - -50.500000 -22.833333 429 - -50.333333 -22.833333 444 - -50.166667 -22.833333 467 - -50.000000 -22.833333 428 - -49.833333 -22.833333 466 - -49.666667 -22.833333 587 - -49.500000 -22.833333 611 - -49.333333 -22.833333 643 - -49.166667 -22.833333 627 - -49.000000 -22.833333 680 - -48.833333 -22.833333 737 - -48.666667 -22.833333 718 - -48.500000 -22.833333 779 - -48.333333 -22.833333 588 - -48.166667 -22.833333 504 - -48.000000 -22.833333 486 - -47.833333 -22.833333 531 - -47.666667 -22.833333 588 - -47.500000 -22.833333 621 - -47.333333 -22.833333 598 - -47.166667 -22.833333 611 - -47.000000 -22.833333 684 - -46.833333 -22.833333 831 - -46.666667 -22.833333 852 - -46.500000 -22.833333 990 - -46.333333 -22.833333 937 - -46.166667 -22.833333 1207 - -46.000000 -22.833333 1501 - -45.833333 -22.833333 1538 - -45.666667 -22.833333 1160 - -45.500000 -22.833333 733 - -45.333333 -22.833333 553 - -45.166667 -22.833333 599 - -45.000000 -22.833333 1082 - -44.833333 -22.833333 1094 - -44.666667 -22.833333 1594 - -44.500000 -22.833333 1449 - -44.333333 -22.833333 1093 - -44.166667 -22.833333 720 - -44.000000 -22.833333 482 - -43.833333 -22.833333 23 - -43.666667 -22.833333 9 - -43.500000 -22.833333 180 - -43.333333 -22.833333 17 - -43.166667 -22.833333 0 - -43.000000 -22.833333 30 - -42.833333 -22.833333 63 - -42.666667 -22.833333 253 - -42.500000 -22.833333 194 - -42.333333 -22.833333 24 - -42.166667 -22.833333 53 - -42.000000 -22.833333 17 - -41.833333 -22.833333 -39 - -41.666667 -22.833333 -54 - -41.500000 -22.833333 -67 - -41.333333 -22.833333 -67 - -41.166667 -22.833333 -75 - -41.000000 -22.833333 -100 - -40.833333 -22.833333 -100 - -40.666667 -22.833333 -736 - -40.500000 -22.833333 -1232 - -40.333333 -22.833333 -1394 - -40.166667 -22.833333 -2080 - -40.000000 -22.833333 -2607 - -65.000000 -23.000000 4207 - -64.833333 -23.000000 1785 - -64.666667 -23.000000 1216 - -64.500000 -23.000000 703 - -64.333333 -23.000000 336 - -64.166667 -23.000000 519 - -64.000000 -23.000000 385 - -63.833333 -23.000000 322 - -63.666667 -23.000000 273 - -63.500000 -23.000000 253 - -63.333333 -23.000000 243 - -63.166667 -23.000000 237 - -63.000000 -23.000000 229 - -62.833333 -23.000000 228 - -62.666667 -23.000000 225 - -62.500000 -23.000000 221 - -62.333333 -23.000000 220 - -62.166667 -23.000000 214 - -62.000000 -23.000000 211 - -61.833333 -23.000000 207 - -61.666667 -23.000000 196 - -61.500000 -23.000000 193 - -61.333333 -23.000000 183 - -61.166667 -23.000000 181 - -61.000000 -23.000000 171 - -60.833333 -23.000000 164 - -60.666667 -23.000000 158 - -60.500000 -23.000000 153 - -60.333333 -23.000000 147 - -60.166667 -23.000000 139 - -60.000000 -23.000000 133 - -59.833333 -23.000000 127 - -59.666667 -23.000000 120 - -59.500000 -23.000000 117 - -59.333333 -23.000000 113 - -59.166667 -23.000000 108 - -59.000000 -23.000000 106 - -58.833333 -23.000000 103 - -58.666667 -23.000000 99 - -58.500000 -23.000000 96 - -58.333333 -23.000000 92 - -58.166667 -23.000000 91 - -58.000000 -23.000000 86 - -57.833333 -23.000000 77 - -57.666667 -23.000000 79 - -57.500000 -23.000000 101 - -57.333333 -23.000000 91 - -57.166667 -23.000000 141 - -57.000000 -23.000000 119 - -56.833333 -23.000000 129 - -56.666667 -23.000000 134 - -56.500000 -23.000000 237 - -56.333333 -23.000000 351 - -56.166667 -23.000000 278 - -56.000000 -23.000000 241 - -55.833333 -23.000000 339 - -55.666667 -23.000000 306 - -55.500000 -23.000000 482 - -55.333333 -23.000000 410 - -55.166667 -23.000000 402 - -55.000000 -23.000000 385 - -54.833333 -23.000000 429 - -54.666667 -23.000000 296 - -54.500000 -23.000000 285 - -54.333333 -23.000000 328 - -54.166667 -23.000000 339 - -54.000000 -23.000000 295 - -53.833333 -23.000000 309 - -53.666667 -23.000000 235 - -53.500000 -23.000000 332 - -53.333333 -23.000000 344 - -53.166667 -23.000000 419 - -53.000000 -23.000000 383 - -52.833333 -23.000000 429 - -52.666667 -23.000000 453 - -52.500000 -23.000000 466 - -52.333333 -23.000000 425 - -52.166667 -23.000000 462 - -52.000000 -23.000000 383 - -51.833333 -23.000000 422 - -51.666667 -23.000000 499 - -51.500000 -23.000000 586 - -51.333333 -23.000000 404 - -51.166667 -23.000000 573 - -51.000000 -23.000000 366 - -50.833333 -23.000000 428 - -50.666667 -23.000000 378 - -50.500000 -23.000000 390 - -50.333333 -23.000000 428 - -50.166667 -23.000000 438 - -50.000000 -23.000000 471 - -49.833333 -23.000000 500 - -49.666667 -23.000000 507 - -49.500000 -23.000000 670 - -49.333333 -23.000000 717 - -49.166667 -23.000000 691 - -49.000000 -23.000000 709 - -48.833333 -23.000000 723 - -48.666667 -23.000000 758 - -48.500000 -23.000000 859 - -48.333333 -23.000000 800 - -48.166667 -23.000000 571 - -48.000000 -23.000000 501 - -47.833333 -23.000000 528 - -47.666667 -23.000000 515 - -47.500000 -23.000000 519 - -47.333333 -23.000000 604 - -47.166667 -23.000000 622 - -47.000000 -23.000000 719 - -46.833333 -23.000000 772 - -46.666667 -23.000000 778 - -46.500000 -23.000000 888 - -46.333333 -23.000000 878 - -46.166667 -23.000000 1193 - -46.000000 -23.000000 727 - -45.833333 -23.000000 671 - -45.666667 -23.000000 550 - -45.500000 -23.000000 562 - -45.333333 -23.000000 827 - -45.166667 -23.000000 975 - -45.000000 -23.000000 937 - -44.833333 -23.000000 1173 - -44.666667 -23.000000 893 - -44.500000 -23.000000 352 - -44.333333 -23.000000 165 - -44.166667 -23.000000 496 - -44.000000 -23.000000 -1 - -43.833333 -23.000000 -5 - -43.666667 -23.000000 -1 - -43.500000 -23.000000 5 - -43.333333 -23.000000 8 - -43.166667 -23.000000 -23 - -43.000000 -23.000000 -21 - -42.833333 -23.000000 -24 - -42.666667 -23.000000 -40 - -42.500000 -23.000000 -58 - -42.333333 -23.000000 -61 - -42.166667 -23.000000 -65 - -42.000000 -23.000000 88 - -41.833333 -23.000000 -67 - -41.666667 -23.000000 -89 - -41.500000 -23.000000 -74 - -41.333333 -23.000000 -78 - -41.166667 -23.000000 -91 - -41.000000 -23.000000 -85 - -40.833333 -23.000000 -603 - -40.666667 -23.000000 -1279 - -40.500000 -23.000000 -1783 - -40.333333 -23.000000 -2338 - -40.166667 -23.000000 -2476 - -40.000000 -23.000000 -2713 - -65.000000 -23.166667 3467 - -64.833333 -23.166667 2763 - -64.666667 -23.166667 718 - -64.500000 -23.166667 613 - -64.333333 -23.166667 364 - -64.166667 -23.166667 412 - -64.000000 -23.166667 280 - -63.833333 -23.166667 276 - -63.666667 -23.166667 265 - -63.500000 -23.166667 254 - -63.333333 -23.166667 245 - -63.166667 -23.166667 241 - -63.000000 -23.166667 230 - -62.833333 -23.166667 223 - -62.666667 -23.166667 220 - -62.500000 -23.166667 216 - -62.333333 -23.166667 213 - -62.166667 -23.166667 209 - -62.000000 -23.166667 206 - -61.833333 -23.166667 199 - -61.666667 -23.166667 192 - -61.500000 -23.166667 187 - -61.333333 -23.166667 185 - -61.166667 -23.166667 177 - -61.000000 -23.166667 166 - -60.833333 -23.166667 161 - -60.666667 -23.166667 158 - -60.500000 -23.166667 150 - -60.333333 -23.166667 148 - -60.166667 -23.166667 141 - -60.000000 -23.166667 133 - -59.833333 -23.166667 128 - -59.666667 -23.166667 121 - -59.500000 -23.166667 117 - -59.333333 -23.166667 115 - -59.166667 -23.166667 111 - -59.000000 -23.166667 110 - -58.833333 -23.166667 104 - -58.666667 -23.166667 101 - -58.500000 -23.166667 96 - -58.333333 -23.166667 94 - -58.166667 -23.166667 90 - -58.000000 -23.166667 85 - -57.833333 -23.166667 81 - -57.666667 -23.166667 76 - -57.500000 -23.166667 121 - -57.333333 -23.166667 137 - -57.166667 -23.166667 101 - -57.000000 -23.166667 107 - -56.833333 -23.166667 157 - -56.666667 -23.166667 268 - -56.500000 -23.166667 305 - -56.333333 -23.166667 211 - -56.166667 -23.166667 229 - -56.000000 -23.166667 369 - -55.833333 -23.166667 230 - -55.666667 -23.166667 402 - -55.500000 -23.166667 466 - -55.333333 -23.166667 470 - -55.166667 -23.166667 451 - -55.000000 -23.166667 442 - -54.833333 -23.166667 377 - -54.666667 -23.166667 376 - -54.500000 -23.166667 344 - -54.333333 -23.166667 351 - -54.166667 -23.166667 252 - -54.000000 -23.166667 240 - -53.833333 -23.166667 272 - -53.666667 -23.166667 235 - -53.500000 -23.166667 240 - -53.333333 -23.166667 267 - -53.166667 -23.166667 323 - -53.000000 -23.166667 331 - -52.833333 -23.166667 377 - -52.666667 -23.166667 314 - -52.500000 -23.166667 399 - -52.333333 -23.166667 442 - -52.166667 -23.166667 492 - -52.000000 -23.166667 420 - -51.833333 -23.166667 565 - -51.666667 -23.166667 575 - -51.500000 -23.166667 580 - -51.333333 -23.166667 521 - -51.166667 -23.166667 568 - -51.000000 -23.166667 377 - -50.833333 -23.166667 427 - -50.666667 -23.166667 589 - -50.500000 -23.166667 428 - -50.333333 -23.166667 507 - -50.166667 -23.166667 442 - -50.000000 -23.166667 532 - -49.833333 -23.166667 518 - -49.666667 -23.166667 607 - -49.500000 -23.166667 581 - -49.333333 -23.166667 539 - -49.166667 -23.166667 624 - -49.000000 -23.166667 613 - -48.833333 -23.166667 744 - -48.666667 -23.166667 673 - -48.500000 -23.166667 676 - -48.333333 -23.166667 651 - -48.166667 -23.166667 546 - -48.000000 -23.166667 533 - -47.833333 -23.166667 532 - -47.666667 -23.166667 543 - -47.500000 -23.166667 520 - -47.333333 -23.166667 541 - -47.166667 -23.166667 684 - -47.000000 -23.166667 733 - -46.833333 -23.166667 779 - -46.666667 -23.166667 867 - -46.500000 -23.166667 1087 - -46.333333 -23.166667 889 - -46.166667 -23.166667 770 - -46.000000 -23.166667 642 - -45.833333 -23.166667 573 - -45.666667 -23.166667 628 - -45.500000 -23.166667 680 - -45.333333 -23.166667 866 - -45.166667 -23.166667 893 - -45.000000 -23.166667 1211 - -44.833333 -23.166667 1465 - -44.666667 -23.166667 0 - -44.500000 -23.166667 -24 - -44.333333 -23.166667 217 - -44.166667 -23.166667 323 - -44.000000 -23.166667 -28 - -43.833333 -23.166667 -36 - -43.666667 -23.166667 -42 - -43.500000 -23.166667 -46 - -43.333333 -23.166667 -57 - -43.166667 -23.166667 -63 - -43.000000 -23.166667 -74 - -42.833333 -23.166667 -78 - -42.666667 -23.166667 -92 - -42.500000 -23.166667 -103 - -42.333333 -23.166667 -109 - -42.166667 -23.166667 -115 - -42.000000 -23.166667 -123 - -41.833333 -23.166667 -111 - -41.666667 -23.166667 -106 - -41.500000 -23.166667 -92 - -41.333333 -23.166667 -92 - -41.166667 -23.166667 -110 - -41.000000 -23.166667 -198 - -40.833333 -23.166667 -1362 - -40.666667 -23.166667 -1951 - -40.500000 -23.166667 -2195 - -40.333333 -23.166667 -2486 - -40.166667 -23.166667 -2661 - -40.000000 -23.166667 -2769 - -65.000000 -23.333333 3771 - -64.833333 -23.333333 2319 - -64.666667 -23.333333 726 - -64.500000 -23.333333 472 - -64.333333 -23.333333 330 - -64.166667 -23.333333 300 - -64.000000 -23.333333 284 - -63.833333 -23.333333 275 - -63.666667 -23.333333 266 - -63.500000 -23.333333 254 - -63.333333 -23.333333 246 - -63.166667 -23.333333 236 - -63.000000 -23.333333 228 - -62.833333 -23.333333 222 - -62.666667 -23.333333 216 - -62.500000 -23.333333 211 - -62.333333 -23.333333 210 - -62.166667 -23.333333 205 - -62.000000 -23.333333 198 - -61.833333 -23.333333 197 - -61.666667 -23.333333 190 - -61.500000 -23.333333 187 - -61.333333 -23.333333 177 - -61.166667 -23.333333 170 - -61.000000 -23.333333 165 - -60.833333 -23.333333 160 - -60.666667 -23.333333 154 - -60.500000 -23.333333 150 - -60.333333 -23.333333 144 - -60.166667 -23.333333 139 - -60.000000 -23.333333 134 - -59.833333 -23.333333 129 - -59.666667 -23.333333 121 - -59.500000 -23.333333 121 - -59.333333 -23.333333 115 - -59.166667 -23.333333 110 - -59.000000 -23.333333 107 - -58.833333 -23.333333 104 - -58.666667 -23.333333 99 - -58.500000 -23.333333 99 - -58.333333 -23.333333 95 - -58.166667 -23.333333 92 - -58.000000 -23.333333 85 - -57.833333 -23.333333 80 - -57.666667 -23.333333 76 - -57.500000 -23.333333 71 - -57.333333 -23.333333 126 - -57.166667 -23.333333 173 - -57.000000 -23.333333 168 - -56.833333 -23.333333 208 - -56.666667 -23.333333 206 - -56.500000 -23.333333 242 - -56.333333 -23.333333 184 - -56.166667 -23.333333 200 - -56.000000 -23.333333 332 - -55.833333 -23.333333 280 - -55.666667 -23.333333 416 - -55.500000 -23.333333 492 - -55.333333 -23.333333 440 - -55.166667 -23.333333 360 - -55.000000 -23.333333 337 - -54.833333 -23.333333 357 - -54.666667 -23.333333 355 - -54.500000 -23.333333 382 - -54.333333 -23.333333 289 - -54.166667 -23.333333 315 - -54.000000 -23.333333 271 - -53.833333 -23.333333 230 - -53.666667 -23.333333 285 - -53.500000 -23.333333 327 - -53.333333 -23.333333 373 - -53.166667 -23.333333 360 - -53.000000 -23.333333 347 - -52.833333 -23.333333 367 - -52.666667 -23.333333 273 - -52.500000 -23.333333 340 - -52.333333 -23.333333 424 - -52.166667 -23.333333 513 - -52.000000 -23.333333 463 - -51.833333 -23.333333 432 - -51.666667 -23.333333 600 - -51.500000 -23.333333 743 - -51.333333 -23.333333 635 - -51.166667 -23.333333 547 - -51.000000 -23.333333 408 - -50.833333 -23.333333 526 - -50.666667 -23.333333 487 - -50.500000 -23.333333 515 - -50.333333 -23.333333 593 - -50.166667 -23.333333 491 - -50.000000 -23.333333 525 - -49.833333 -23.333333 574 - -49.666667 -23.333333 481 - -49.500000 -23.333333 822 - -49.333333 -23.333333 676 - -49.166667 -23.333333 580 - -49.000000 -23.333333 570 - -48.833333 -23.333333 640 - -48.666667 -23.333333 563 - -48.500000 -23.333333 624 - -48.333333 -23.333333 633 - -48.166667 -23.333333 698 - -48.000000 -23.333333 612 - -47.833333 -23.333333 609 - -47.666667 -23.333333 565 - -47.500000 -23.333333 567 - -47.333333 -23.333333 626 - -47.166667 -23.333333 675 - -47.000000 -23.333333 734 - -46.833333 -23.333333 763 - -46.666667 -23.333333 792 - -46.500000 -23.333333 849 - -46.333333 -23.333333 715 - -46.166667 -23.333333 707 - -46.000000 -23.333333 619 - -45.833333 -23.333333 644 - -45.666667 -23.333333 688 - -45.500000 -23.333333 793 - -45.333333 -23.333333 932 - -45.166667 -23.333333 1023 - -45.000000 -23.333333 300 - -44.833333 -23.333333 174 - -44.666667 -23.333333 65 - -44.500000 -23.333333 -23 - -44.333333 -23.333333 -32 - -44.166667 -23.333333 -43 - -44.000000 -23.333333 -58 - -43.833333 -23.333333 -60 - -43.666667 -23.333333 -66 - -43.500000 -23.333333 -78 - -43.333333 -23.333333 -87 - -43.166667 -23.333333 -108 - -43.000000 -23.333333 -104 - -42.833333 -23.333333 -106 - -42.666667 -23.333333 -106 - -42.500000 -23.333333 -117 - -42.333333 -23.333333 -127 - -42.166667 -23.333333 -131 - -42.000000 -23.333333 -133 - -41.833333 -23.333333 -133 - -41.666667 -23.333333 -128 - -41.500000 -23.333333 -113 - -41.333333 -23.333333 -98 - -41.166667 -23.333333 -125 - -41.000000 -23.333333 -757 - -40.833333 -23.333333 -1859 - -40.666667 -23.333333 -2259 - -40.500000 -23.333333 -2516 - -40.333333 -23.333333 -2610 - -40.166667 -23.333333 -2743 - -40.000000 -23.333333 -2832 - -65.000000 -23.500000 2130 - -64.833333 -23.500000 2474 - -64.666667 -23.500000 885 - -64.500000 -23.500000 541 - -64.333333 -23.500000 323 - -64.166667 -23.500000 311 - -64.000000 -23.500000 336 - -63.833333 -23.500000 349 - -63.666667 -23.500000 282 - -63.500000 -23.500000 252 - -63.333333 -23.500000 244 - -63.166667 -23.500000 235 - -63.000000 -23.500000 228 - -62.833333 -23.500000 220 - -62.666667 -23.500000 214 - -62.500000 -23.500000 210 - -62.333333 -23.500000 203 - -62.166667 -23.500000 197 - -62.000000 -23.500000 195 - -61.833333 -23.500000 194 - -61.666667 -23.500000 187 - -61.500000 -23.500000 177 - -61.333333 -23.500000 174 - -61.166667 -23.500000 171 - -61.000000 -23.500000 164 - -60.833333 -23.500000 156 - -60.666667 -23.500000 155 - -60.500000 -23.500000 143 - -60.333333 -23.500000 140 - -60.166667 -23.500000 137 - -60.000000 -23.500000 130 - -59.833333 -23.500000 128 - -59.666667 -23.500000 120 - -59.500000 -23.500000 117 - -59.333333 -23.500000 113 - -59.166667 -23.500000 110 - -59.000000 -23.500000 108 - -58.833333 -23.500000 101 - -58.666667 -23.500000 97 - -58.500000 -23.500000 94 - -58.333333 -23.500000 90 - -58.166667 -23.500000 88 - -58.000000 -23.500000 83 - -57.833333 -23.500000 78 - -57.666667 -23.500000 78 - -57.500000 -23.500000 69 - -57.333333 -23.500000 82 - -57.166667 -23.500000 94 - -57.000000 -23.500000 145 - -56.833333 -23.500000 224 - -56.666667 -23.500000 199 - -56.500000 -23.500000 192 - -56.333333 -23.500000 334 - -56.166667 -23.500000 373 - -56.000000 -23.500000 311 - -55.833333 -23.500000 269 - -55.666667 -23.500000 425 - -55.500000 -23.500000 390 - -55.333333 -23.500000 376 - -55.166667 -23.500000 377 - -55.000000 -23.500000 318 - -54.833333 -23.500000 297 - -54.666667 -23.500000 367 - -54.500000 -23.500000 392 - -54.333333 -23.500000 341 - -54.166667 -23.500000 317 - -54.000000 -23.500000 228 - -53.833333 -23.500000 315 - -53.666667 -23.500000 365 - -53.500000 -23.500000 398 - -53.333333 -23.500000 406 - -53.166667 -23.500000 366 - -53.000000 -23.500000 322 - -52.833333 -23.500000 441 - -52.666667 -23.500000 413 - -52.500000 -23.500000 319 - -52.333333 -23.500000 356 - -52.166667 -23.500000 345 - -52.000000 -23.500000 452 - -51.833333 -23.500000 519 - -51.666667 -23.500000 641 - -51.500000 -23.500000 626 - -51.333333 -23.500000 732 - -51.166667 -23.500000 530 - -51.000000 -23.500000 483 - -50.833333 -23.500000 571 - -50.666667 -23.500000 710 - -50.500000 -23.500000 759 - -50.333333 -23.500000 655 - -50.166667 -23.500000 493 - -50.000000 -23.500000 517 - -49.833333 -23.500000 648 - -49.666667 -23.500000 489 - -49.500000 -23.500000 493 - -49.333333 -23.500000 654 - -49.166667 -23.500000 589 - -49.000000 -23.500000 664 - -48.833333 -23.500000 648 - -48.666667 -23.500000 614 - -48.500000 -23.500000 608 - -48.333333 -23.500000 741 - -48.166667 -23.500000 715 - -48.000000 -23.500000 741 - -47.833333 -23.500000 555 - -47.666667 -23.500000 600 - -47.500000 -23.500000 605 - -47.333333 -23.500000 702 - -47.166667 -23.500000 791 - -47.000000 -23.500000 878 - -46.833333 -23.500000 760 - -46.666667 -23.500000 744 - -46.500000 -23.500000 768 - -46.333333 -23.500000 739 - -46.166667 -23.500000 753 - -46.000000 -23.500000 732 - -45.833333 -23.500000 889 - -45.666667 -23.500000 1058 - -45.500000 -23.500000 746 - -45.333333 -23.500000 818 - -45.166667 -23.500000 20 - -45.000000 -23.500000 -22 - -44.833333 -23.500000 -28 - -44.666667 -23.500000 -36 - -44.500000 -23.500000 -49 - -44.333333 -23.500000 -51 - -44.166667 -23.500000 -26 - -44.000000 -23.500000 -76 - -43.833333 -23.500000 -92 - -43.666667 -23.500000 -92 - -43.500000 -23.500000 -117 - -43.333333 -23.500000 -119 - -43.166667 -23.500000 -119 - -43.000000 -23.500000 -113 - -42.833333 -23.500000 -124 - -42.666667 -23.500000 -127 - -42.500000 -23.500000 -129 - -42.333333 -23.500000 -137 - -42.166667 -23.500000 -163 - -42.000000 -23.500000 -212 - -41.833333 -23.500000 -142 - -41.666667 -23.500000 -141 - -41.500000 -23.500000 -135 - -41.333333 -23.500000 -113 - -41.166667 -23.500000 -486 - -41.000000 -23.500000 -1556 - -40.833333 -23.500000 -2064 - -40.666667 -23.500000 -2472 - -40.500000 -23.500000 -2691 - -40.333333 -23.500000 -2784 - -40.166667 -23.500000 -2833 - -40.000000 -23.500000 -2901 - -65.000000 -23.666667 1912 - -64.833333 -23.666667 1336 - -64.666667 -23.666667 902 - -64.500000 -23.666667 367 - -64.333333 -23.666667 352 - -64.166667 -23.666667 357 - -64.000000 -23.666667 438 - -63.833333 -23.666667 506 - -63.666667 -23.666667 294 - -63.500000 -23.666667 246 - -63.333333 -23.666667 241 - -63.166667 -23.666667 232 - -63.000000 -23.666667 224 - -62.833333 -23.666667 216 - -62.666667 -23.666667 213 - -62.500000 -23.666667 207 - -62.333333 -23.666667 204 - -62.166667 -23.666667 198 - -62.000000 -23.666667 192 - -61.833333 -23.666667 187 - -61.666667 -23.666667 181 - -61.500000 -23.666667 179 - -61.333333 -23.666667 170 - -61.166667 -23.666667 169 - -61.000000 -23.666667 164 - -60.833333 -23.666667 156 - -60.666667 -23.666667 152 - -60.500000 -23.666667 146 - -60.333333 -23.666667 138 - -60.166667 -23.666667 136 - -60.000000 -23.666667 131 - -59.833333 -23.666667 124 - -59.666667 -23.666667 118 - -59.500000 -23.666667 116 - -59.333333 -23.666667 114 - -59.166667 -23.666667 109 - -59.000000 -23.666667 105 - -58.833333 -23.666667 101 - -58.666667 -23.666667 98 - -58.500000 -23.666667 94 - -58.333333 -23.666667 94 - -58.166667 -23.666667 87 - -58.000000 -23.666667 88 - -57.833333 -23.666667 78 - -57.666667 -23.666667 78 - -57.500000 -23.666667 70 - -57.333333 -23.666667 78 - -57.166667 -23.666667 97 - -57.000000 -23.666667 161 - -56.833333 -23.666667 216 - -56.666667 -23.666667 137 - -56.500000 -23.666667 159 - -56.333333 -23.666667 251 - -56.166667 -23.666667 264 - -56.000000 -23.666667 187 - -55.833333 -23.666667 228 - -55.666667 -23.666667 239 - -55.500000 -23.666667 389 - -55.333333 -23.666667 365 - -55.166667 -23.666667 377 - -55.000000 -23.666667 376 - -54.833333 -23.666667 381 - -54.666667 -23.666667 251 - -54.500000 -23.666667 308 - -54.333333 -23.666667 373 - -54.166667 -23.666667 294 - -54.000000 -23.666667 228 - -53.833333 -23.666667 262 - -53.666667 -23.666667 312 - -53.500000 -23.666667 408 - -53.333333 -23.666667 450 - -53.166667 -23.666667 345 - -53.000000 -23.666667 432 - -52.833333 -23.666667 494 - -52.666667 -23.666667 469 - -52.500000 -23.666667 427 - -52.333333 -23.666667 364 - -52.166667 -23.666667 316 - -52.000000 -23.666667 384 - -51.833333 -23.666667 481 - -51.666667 -23.666667 588 - -51.500000 -23.666667 578 - -51.333333 -23.666667 727 - -51.166667 -23.666667 642 - -51.000000 -23.666667 660 - -50.833333 -23.666667 773 - -50.666667 -23.666667 857 - -50.500000 -23.666667 764 - -50.333333 -23.666667 567 - -50.166667 -23.666667 527 - -50.000000 -23.666667 566 - -49.833333 -23.666667 662 - -49.666667 -23.666667 576 - -49.500000 -23.666667 525 - -49.333333 -23.666667 602 - -49.166667 -23.666667 652 - -49.000000 -23.666667 648 - -48.833333 -23.666667 755 - -48.666667 -23.666667 632 - -48.500000 -23.666667 631 - -48.333333 -23.666667 712 - -48.166667 -23.666667 673 - -48.000000 -23.666667 644 - -47.833333 -23.666667 659 - -47.666667 -23.666667 608 - -47.500000 -23.666667 748 - -47.333333 -23.666667 920 - -47.166667 -23.666667 892 - -47.000000 -23.666667 927 - -46.833333 -23.666667 790 - -46.666667 -23.666667 780 - -46.500000 -23.666667 769 - -46.333333 -23.666667 800 - -46.166667 -23.666667 788 - -46.000000 -23.666667 802 - -45.833333 -23.666667 931 - -45.666667 -23.666667 802 - -45.500000 -23.666667 64 - -45.333333 -23.666667 -1 - -45.166667 -23.666667 -21 - -45.000000 -23.666667 -34 - -44.833333 -23.666667 -46 - -44.666667 -23.666667 -36 - -44.500000 -23.666667 -60 - -44.333333 -23.666667 -76 - -44.166667 -23.666667 -85 - -44.000000 -23.666667 -99 - -43.833333 -23.666667 -106 - -43.666667 -23.666667 -116 - -43.500000 -23.666667 -115 - -43.333333 -23.666667 -121 - -43.166667 -23.666667 -117 - -43.000000 -23.666667 -122 - -42.833333 -23.666667 -124 - -42.666667 -23.666667 -151 - -42.500000 -23.666667 -202 - -42.333333 -23.666667 -352 - -42.166667 -23.666667 -414 - -42.000000 -23.666667 -408 - -41.833333 -23.666667 -241 - -41.666667 -23.666667 -151 - -41.500000 -23.666667 -294 - -41.333333 -23.666667 -652 - -41.166667 -23.666667 -1257 - -41.000000 -23.666667 -1869 - -40.833333 -23.666667 -2198 - -40.666667 -23.666667 -2537 - -40.500000 -23.666667 -2722 - -40.333333 -23.666667 -2851 - -40.166667 -23.666667 -3020 - -40.000000 -23.666667 -2977 - -65.000000 -23.833333 1195 - -64.833333 -23.833333 637 - -64.666667 -23.833333 377 - -64.500000 -23.833333 532 - -64.333333 -23.833333 523 - -64.166667 -23.833333 427 - -64.000000 -23.833333 481 - -63.833333 -23.833333 348 - -63.666667 -23.833333 266 - -63.500000 -23.833333 235 - -63.333333 -23.833333 233 - -63.166667 -23.833333 228 - -63.000000 -23.833333 221 - -62.833333 -23.833333 214 - -62.666667 -23.833333 209 - -62.500000 -23.833333 203 - -62.333333 -23.833333 202 - -62.166667 -23.833333 195 - -62.000000 -23.833333 189 - -61.833333 -23.833333 184 - -61.666667 -23.833333 181 - -61.500000 -23.833333 174 - -61.333333 -23.833333 169 - -61.166667 -23.833333 165 - -61.000000 -23.833333 158 - -60.833333 -23.833333 157 - -60.666667 -23.833333 155 - -60.500000 -23.833333 148 - -60.333333 -23.833333 140 - -60.166667 -23.833333 137 - -60.000000 -23.833333 130 - -59.833333 -23.833333 122 - -59.666667 -23.833333 118 - -59.500000 -23.833333 117 - -59.333333 -23.833333 114 - -59.166667 -23.833333 110 - -59.000000 -23.833333 103 - -58.833333 -23.833333 102 - -58.666667 -23.833333 101 - -58.500000 -23.833333 96 - -58.333333 -23.833333 91 - -58.166667 -23.833333 88 - -58.000000 -23.833333 85 - -57.833333 -23.833333 82 - -57.666667 -23.833333 79 - -57.500000 -23.833333 71 - -57.333333 -23.833333 68 - -57.166667 -23.833333 77 - -57.000000 -23.833333 123 - -56.833333 -23.833333 171 - -56.666667 -23.833333 176 - -56.500000 -23.833333 154 - -56.333333 -23.833333 176 - -56.166667 -23.833333 219 - -56.000000 -23.833333 153 - -55.833333 -23.833333 216 - -55.666667 -23.833333 232 - -55.500000 -23.833333 372 - -55.333333 -23.833333 387 - -55.166667 -23.833333 377 - -55.000000 -23.833333 342 - -54.833333 -23.833333 300 - -54.666667 -23.833333 358 - -54.500000 -23.833333 302 - -54.333333 -23.833333 237 - -54.166667 -23.833333 262 - -54.000000 -23.833333 226 - -53.833333 -23.833333 365 - -53.666667 -23.833333 335 - -53.500000 -23.833333 311 - -53.333333 -23.833333 449 - -53.166667 -23.833333 411 - -53.000000 -23.833333 387 - -52.833333 -23.833333 491 - -52.666667 -23.833333 548 - -52.500000 -23.833333 521 - -52.333333 -23.833333 425 - -52.166667 -23.833333 371 - -52.000000 -23.833333 337 - -51.833333 -23.833333 440 - -51.666667 -23.833333 487 - -51.500000 -23.833333 455 - -51.333333 -23.833333 779 - -51.166667 -23.833333 884 - -51.000000 -23.833333 746 - -50.833333 -23.833333 666 - -50.666667 -23.833333 921 - -50.500000 -23.833333 617 - -50.333333 -23.833333 607 - -50.166667 -23.833333 713 - -50.000000 -23.833333 647 - -49.833333 -23.833333 624 - -49.666667 -23.833333 595 - -49.500000 -23.833333 566 - -49.333333 -23.833333 589 - -49.166667 -23.833333 630 - -49.000000 -23.833333 622 - -48.833333 -23.833333 697 - -48.666667 -23.833333 678 - -48.500000 -23.833333 681 - -48.333333 -23.833333 632 - -48.166667 -23.833333 656 - -48.000000 -23.833333 713 - -47.833333 -23.833333 726 - -47.666667 -23.833333 740 - -47.500000 -23.833333 997 - -47.333333 -23.833333 1013 - -47.166667 -23.833333 899 - -47.000000 -23.833333 869 - -46.833333 -23.833333 769 - -46.666667 -23.833333 785 - -46.500000 -23.833333 751 - -46.333333 -23.833333 267 - -46.166667 -23.833333 14 - -46.000000 -23.833333 -2 - -45.833333 -23.833333 -3 - -45.666667 -23.833333 -9 - -45.500000 -23.833333 129 - -45.333333 -23.833333 504 - -45.166667 -23.833333 -5 - -45.000000 -23.833333 -45 - -44.833333 -23.833333 -74 - -44.666667 -23.833333 -93 - -44.500000 -23.833333 -83 - -44.333333 -23.833333 -96 - -44.166667 -23.833333 -112 - -44.000000 -23.833333 -114 - -43.833333 -23.833333 -124 - -43.666667 -23.833333 -129 - -43.500000 -23.833333 -137 - -43.333333 -23.833333 -132 - -43.166667 -23.833333 -161 - -43.000000 -23.833333 -185 - -42.833333 -23.833333 -324 - -42.666667 -23.833333 -510 - -42.500000 -23.833333 -591 - -42.333333 -23.833333 -688 - -42.166667 -23.833333 -688 - -42.000000 -23.833333 -732 - -41.833333 -23.833333 -783 - -41.666667 -23.833333 -897 - -41.500000 -23.833333 -954 - -41.333333 -23.833333 -1230 - -41.166667 -23.833333 -1623 - -41.000000 -23.833333 -2013 - -40.833333 -23.833333 -2357 - -40.666667 -23.833333 -2497 - -40.500000 -23.833333 -2765 - -40.333333 -23.833333 -2848 - -40.166667 -23.833333 -2928 - -40.000000 -23.833333 -2999 - -65.000000 -24.000000 823 - -64.833333 -24.000000 578 - -64.666667 -24.000000 391 - -64.500000 -24.000000 978 - -64.333333 -24.000000 762 - -64.166667 -24.000000 572 - -64.000000 -24.000000 392 - -63.833333 -24.000000 317 - -63.666667 -24.000000 262 - -63.500000 -24.000000 230 - -63.333333 -24.000000 224 - -63.166667 -24.000000 221 - -63.000000 -24.000000 216 - -62.833333 -24.000000 212 - -62.666667 -24.000000 206 - -62.500000 -24.000000 200 - -62.333333 -24.000000 194 - -62.166667 -24.000000 192 - -62.000000 -24.000000 187 - -61.833333 -24.000000 183 - -61.666667 -24.000000 178 - -61.500000 -24.000000 172 - -61.333333 -24.000000 166 - -61.166667 -24.000000 162 - -61.000000 -24.000000 156 - -60.833333 -24.000000 153 - -60.666667 -24.000000 149 - -60.500000 -24.000000 145 - -60.333333 -24.000000 140 - -60.166667 -24.000000 134 - -60.000000 -24.000000 129 - -59.833333 -24.000000 125 - -59.666667 -24.000000 117 - -59.500000 -24.000000 113 - -59.333333 -24.000000 114 - -59.166667 -24.000000 110 - -59.000000 -24.000000 104 - -58.833333 -24.000000 101 - -58.666667 -24.000000 99 - -58.500000 -24.000000 95 - -58.333333 -24.000000 91 - -58.166667 -24.000000 91 - -58.000000 -24.000000 82 - -57.833333 -24.000000 81 - -57.666667 -24.000000 73 - -57.500000 -24.000000 70 - -57.333333 -24.000000 68 - -57.166667 -24.000000 70 - -57.000000 -24.000000 112 - -56.833333 -24.000000 97 - -56.666667 -24.000000 91 - -56.500000 -24.000000 170 - -56.333333 -24.000000 184 - -56.166667 -24.000000 241 - -56.000000 -24.000000 191 - -55.833333 -24.000000 172 - -55.666667 -24.000000 211 - -55.500000 -24.000000 227 - -55.333333 -24.000000 439 - -55.166667 -24.000000 403 - -55.000000 -24.000000 364 - -54.833333 -24.000000 326 - -54.666667 -24.000000 313 - -54.500000 -24.000000 279 - -54.333333 -24.000000 301 - -54.166667 -24.000000 220 - -54.000000 -24.000000 228 - -53.833333 -24.000000 275 - -53.666667 -24.000000 349 - -53.500000 -24.000000 361 - -53.333333 -24.000000 369 - -53.166667 -24.000000 408 - -53.000000 -24.000000 424 - -52.833333 -24.000000 402 - -52.666667 -24.000000 535 - -52.500000 -24.000000 587 - -52.333333 -24.000000 540 - -52.166667 -24.000000 427 - -52.000000 -24.000000 358 - -51.833333 -24.000000 459 - -51.666667 -24.000000 374 - -51.500000 -24.000000 595 - -51.333333 -24.000000 798 - -51.166667 -24.000000 865 - -51.000000 -24.000000 747 - -50.833333 -24.000000 686 - -50.666667 -24.000000 590 - -50.500000 -24.000000 768 - -50.333333 -24.000000 692 - -50.166667 -24.000000 728 - -50.000000 -24.000000 610 - -49.833333 -24.000000 834 - -49.666667 -24.000000 655 - -49.500000 -24.000000 564 - -49.333333 -24.000000 624 - -49.166667 -24.000000 635 - -49.000000 -24.000000 703 - -48.833333 -24.000000 683 - -48.666667 -24.000000 682 - -48.500000 -24.000000 722 - -48.333333 -24.000000 707 - -48.166667 -24.000000 637 - -48.000000 -24.000000 721 - -47.833333 -24.000000 758 - -47.666667 -24.000000 752 - -47.500000 -24.000000 791 - -47.333333 -24.000000 637 - -47.166667 -24.000000 691 - -47.000000 -24.000000 750 - -46.833333 -24.000000 662 - -46.666667 -24.000000 219 - -46.500000 -24.000000 9 - -46.333333 -24.000000 -1 - -46.166667 -24.000000 -5 - -46.000000 -24.000000 -22 - -45.833333 -24.000000 -25 - -45.666667 -24.000000 -29 - -45.500000 -24.000000 -27 - -45.333333 -24.000000 -33 - -45.166667 -24.000000 -74 - -45.000000 -24.000000 -77 - -44.833333 -24.000000 -80 - -44.666667 -24.000000 -95 - -44.500000 -24.000000 -131 - -44.333333 -24.000000 -135 - -44.166667 -24.000000 -134 - -44.000000 -24.000000 -127 - -43.833333 -24.000000 -136 - -43.666667 -24.000000 -158 - -43.500000 -24.000000 -151 - -43.333333 -24.000000 -160 - -43.166667 -24.000000 -309 - -43.000000 -24.000000 -504 - -42.833333 -24.000000 -606 - -42.666667 -24.000000 -711 - -42.500000 -24.000000 -839 - -42.333333 -24.000000 -946 - -42.166667 -24.000000 -1085 - -42.000000 -24.000000 -1164 - -41.833333 -24.000000 -1306 - -41.666667 -24.000000 -1453 - -41.500000 -24.000000 -1447 - -41.333333 -24.000000 -1776 - -41.166667 -24.000000 -2155 - -41.000000 -24.000000 -2373 - -40.833333 -24.000000 -2460 - -40.666667 -24.000000 -2721 - -40.500000 -24.000000 -2856 - -40.333333 -24.000000 -2938 - -40.166667 -24.000000 -2961 - -40.000000 -24.000000 -2997 - -65.000000 -24.166667 1170 - -64.833333 -24.166667 487 - -64.666667 -24.166667 449 - -64.500000 -24.166667 2346 - -64.333333 -24.166667 1639 - -64.166667 -24.166667 883 - -64.000000 -24.166667 373 - -63.833333 -24.166667 289 - -63.666667 -24.166667 261 - -63.500000 -24.166667 244 - -63.333333 -24.166667 227 - -63.166667 -24.166667 219 - -63.000000 -24.166667 213 - -62.833333 -24.166667 208 - -62.666667 -24.166667 204 - -62.500000 -24.166667 198 - -62.333333 -24.166667 191 - -62.166667 -24.166667 187 - -62.000000 -24.166667 182 - -61.833333 -24.166667 179 - -61.666667 -24.166667 174 - -61.500000 -24.166667 169 - -61.333333 -24.166667 164 - -61.166667 -24.166667 161 - -61.000000 -24.166667 155 - -60.833333 -24.166667 150 - -60.666667 -24.166667 144 - -60.500000 -24.166667 145 - -60.333333 -24.166667 141 - -60.166667 -24.166667 136 - -60.000000 -24.166667 132 - -59.833333 -24.166667 123 - -59.666667 -24.166667 121 - -59.500000 -24.166667 114 - -59.333333 -24.166667 111 - -59.166667 -24.166667 108 - -59.000000 -24.166667 105 - -58.833333 -24.166667 102 - -58.666667 -24.166667 99 - -58.500000 -24.166667 95 - -58.333333 -24.166667 90 - -58.166667 -24.166667 87 - -58.000000 -24.166667 82 - -57.833333 -24.166667 77 - -57.666667 -24.166667 74 - -57.500000 -24.166667 73 - -57.333333 -24.166667 69 - -57.166667 -24.166667 75 - -57.000000 -24.166667 76 - -56.833333 -24.166667 89 - -56.666667 -24.166667 195 - -56.500000 -24.166667 171 - -56.333333 -24.166667 150 - -56.166667 -24.166667 139 - -56.000000 -24.166667 223 - -55.833333 -24.166667 176 - -55.666667 -24.166667 175 - -55.500000 -24.166667 173 - -55.333333 -24.166667 193 - -55.166667 -24.166667 295 - -55.000000 -24.166667 347 - -54.833333 -24.166667 356 - -54.666667 -24.166667 347 - -54.500000 -24.166667 291 - -54.333333 -24.166667 235 - -54.166667 -24.166667 321 - -54.000000 -24.166667 263 - -53.833333 -24.166667 249 - -53.666667 -24.166667 274 - -53.500000 -24.166667 350 - -53.333333 -24.166667 350 - -53.166667 -24.166667 425 - -53.000000 -24.166667 444 - -52.833333 -24.166667 541 - -52.666667 -24.166667 541 - -52.500000 -24.166667 653 - -52.333333 -24.166667 599 - -52.166667 -24.166667 532 - -52.000000 -24.166667 432 - -51.833333 -24.166667 535 - -51.666667 -24.166667 617 - -51.500000 -24.166667 526 - -51.333333 -24.166667 430 - -51.166667 -24.166667 661 - -51.000000 -24.166667 819 - -50.833333 -24.166667 744 - -50.666667 -24.166667 691 - -50.500000 -24.166667 845 - -50.333333 -24.166667 912 - -50.166667 -24.166667 806 - -50.000000 -24.166667 765 - -49.833333 -24.166667 860 - -49.666667 -24.166667 813 - -49.500000 -24.166667 742 - -49.333333 -24.166667 822 - -49.166667 -24.166667 881 - -49.000000 -24.166667 889 - -48.833333 -24.166667 951 - -48.666667 -24.166667 865 - -48.500000 -24.166667 789 - -48.333333 -24.166667 814 - -48.166667 -24.166667 840 - -48.000000 -24.166667 744 - -47.833333 -24.166667 242 - -47.666667 -24.166667 128 - -47.500000 -24.166667 309 - -47.333333 -24.166667 77 - -47.166667 -24.166667 331 - -47.000000 -24.166667 81 - -46.833333 -24.166667 12 - -46.666667 -24.166667 -4 - -46.500000 -24.166667 -19 - -46.333333 -24.166667 -24 - -46.166667 -24.166667 -26 - -46.000000 -24.166667 -30 - -45.833333 -24.166667 -26 - -45.666667 -24.166667 -30 - -45.500000 -24.166667 -54 - -45.333333 -24.166667 -81 - -45.166667 -24.166667 -70 - -45.000000 -24.166667 -65 - -44.833333 -24.166667 -92 - -44.666667 -24.166667 -125 - -44.500000 -24.166667 -125 - -44.333333 -24.166667 -150 - -44.166667 -24.166667 -147 - -44.000000 -24.166667 -169 - -43.833333 -24.166667 -187 - -43.666667 -24.166667 -181 - -43.500000 -24.166667 -271 - -43.333333 -24.166667 -511 - -43.166667 -24.166667 -639 - -43.000000 -24.166667 -825 - -42.833333 -24.166667 -997 - -42.666667 -24.166667 -1131 - -42.500000 -24.166667 -1241 - -42.333333 -24.166667 -1378 - -42.166667 -24.166667 -1484 - -42.000000 -24.166667 -1499 - -41.833333 -24.166667 -1668 - -41.666667 -24.166667 -1761 - -41.500000 -24.166667 -1861 - -41.333333 -24.166667 -2099 - -41.166667 -24.166667 -2253 - -41.000000 -24.166667 -2486 - -40.833333 -24.166667 -2754 - -40.666667 -24.166667 -2834 - -40.500000 -24.166667 -2888 - -40.333333 -24.166667 -2907 - -40.166667 -24.166667 -3016 - -40.000000 -24.166667 -3053 - -65.000000 -24.333333 861 - -64.833333 -24.333333 556 - -64.666667 -24.333333 579 - -64.500000 -24.333333 1292 - -64.333333 -24.333333 1278 - -64.166667 -24.333333 514 - -64.000000 -24.333333 359 - -63.833333 -24.333333 313 - -63.666667 -24.333333 275 - -63.500000 -24.333333 249 - -63.333333 -24.333333 235 - -63.166667 -24.333333 226 - -63.000000 -24.333333 219 - -62.833333 -24.333333 209 - -62.666667 -24.333333 201 - -62.500000 -24.333333 193 - -62.333333 -24.333333 189 - -62.166667 -24.333333 184 - -62.000000 -24.333333 180 - -61.833333 -24.333333 177 - -61.666667 -24.333333 170 - -61.500000 -24.333333 164 - -61.333333 -24.333333 154 - -61.166667 -24.333333 155 - -61.000000 -24.333333 153 - -60.833333 -24.333333 146 - -60.666667 -24.333333 143 - -60.500000 -24.333333 140 - -60.333333 -24.333333 135 - -60.166667 -24.333333 130 - -60.000000 -24.333333 128 - -59.833333 -24.333333 125 - -59.666667 -24.333333 118 - -59.500000 -24.333333 113 - -59.333333 -24.333333 109 - -59.166667 -24.333333 107 - -59.000000 -24.333333 103 - -58.833333 -24.333333 99 - -58.666667 -24.333333 97 - -58.500000 -24.333333 92 - -58.333333 -24.333333 88 - -58.166667 -24.333333 86 - -58.000000 -24.333333 83 - -57.833333 -24.333333 78 - -57.666667 -24.333333 73 - -57.500000 -24.333333 72 - -57.333333 -24.333333 69 - -57.166667 -24.333333 65 - -57.000000 -24.333333 68 - -56.833333 -24.333333 121 - -56.666667 -24.333333 190 - -56.500000 -24.333333 231 - -56.333333 -24.333333 199 - -56.166667 -24.333333 213 - -56.000000 -24.333333 267 - -55.833333 -24.333333 221 - -55.666667 -24.333333 237 - -55.500000 -24.333333 199 - -55.333333 -24.333333 233 - -55.166667 -24.333333 252 - -55.000000 -24.333333 364 - -54.833333 -24.333333 328 - -54.666667 -24.333333 307 - -54.500000 -24.333333 292 - -54.333333 -24.333333 313 - -54.166667 -24.333333 363 - -54.000000 -24.333333 318 - -53.833333 -24.333333 351 - -53.666667 -24.333333 355 - -53.500000 -24.333333 394 - -53.333333 -24.333333 334 - -53.166667 -24.333333 406 - -53.000000 -24.333333 421 - -52.833333 -24.333333 551 - -52.666667 -24.333333 632 - -52.500000 -24.333333 764 - -52.333333 -24.333333 687 - -52.166667 -24.333333 534 - -52.000000 -24.333333 448 - -51.833333 -24.333333 575 - -51.666667 -24.333333 774 - -51.500000 -24.333333 439 - -51.333333 -24.333333 704 - -51.166667 -24.333333 606 - -51.000000 -24.333333 544 - -50.833333 -24.333333 823 - -50.666667 -24.333333 762 - -50.500000 -24.333333 793 - -50.333333 -24.333333 978 - -50.166667 -24.333333 970 - -50.000000 -24.333333 1054 - -49.833333 -24.333333 1146 - -49.666667 -24.333333 1212 - -49.500000 -24.333333 925 - -49.333333 -24.333333 902 - -49.166667 -24.333333 1002 - -49.000000 -24.333333 962 - -48.833333 -24.333333 978 - -48.666667 -24.333333 934 - -48.500000 -24.333333 689 - -48.333333 -24.333333 864 - -48.166667 -24.333333 161 - -48.000000 -24.333333 48 - -47.833333 -24.333333 21 - -47.666667 -24.333333 27 - -47.500000 -24.333333 129 - -47.333333 -24.333333 467 - -47.166667 -24.333333 198 - -47.000000 -24.333333 5 - -46.833333 -24.333333 -1 - -46.666667 -24.333333 -24 - -46.500000 -24.333333 -22 - -46.333333 -24.333333 -26 - -46.166667 -24.333333 -1 - -46.000000 -24.333333 -46 - -45.833333 -24.333333 -49 - -45.666667 -24.333333 -48 - -45.500000 -24.333333 -46 - -45.333333 -24.333333 -63 - -45.166667 -24.333333 -75 - -45.000000 -24.333333 -79 - -44.833333 -24.333333 -124 - -44.666667 -24.333333 -108 - -44.500000 -24.333333 -158 - -44.333333 -24.333333 -156 - -44.166667 -24.333333 -317 - -44.000000 -24.333333 -436 - -43.833333 -24.333333 -540 - -43.666667 -24.333333 -688 - -43.500000 -24.333333 -821 - -43.333333 -24.333333 -908 - -43.166667 -24.333333 -1065 - -43.000000 -24.333333 -1186 - -42.833333 -24.333333 -1338 - -42.666667 -24.333333 -1475 - -42.500000 -24.333333 -1577 - -42.333333 -24.333333 -1572 - -42.166667 -24.333333 -1548 - -42.000000 -24.333333 -1708 - -41.833333 -24.333333 -1969 - -41.666667 -24.333333 -2045 - -41.500000 -24.333333 -2103 - -41.333333 -24.333333 -2220 - -41.166667 -24.333333 -2410 - -41.000000 -24.333333 -2629 - -40.833333 -24.333333 -2789 - -40.666667 -24.333333 -2847 - -40.500000 -24.333333 -2966 - -40.333333 -24.333333 -3013 - -40.166667 -24.333333 -3029 - -40.000000 -24.333333 -3031 - -65.000000 -24.500000 712 - -64.833333 -24.500000 558 - -64.666667 -24.500000 757 - -64.500000 -24.500000 1887 - -64.333333 -24.500000 810 - -64.166667 -24.500000 445 - -64.000000 -24.500000 366 - -63.833333 -24.500000 325 - -63.666667 -24.500000 290 - -63.500000 -24.500000 262 - -63.333333 -24.500000 245 - -63.166667 -24.500000 238 - -63.000000 -24.500000 227 - -62.833333 -24.500000 214 - -62.666667 -24.500000 206 - -62.500000 -24.500000 196 - -62.333333 -24.500000 189 - -62.166667 -24.500000 184 - -62.000000 -24.500000 177 - -61.833333 -24.500000 169 - -61.666667 -24.500000 167 - -61.500000 -24.500000 163 - -61.333333 -24.500000 158 - -61.166667 -24.500000 153 - -61.000000 -24.500000 149 - -60.833333 -24.500000 146 - -60.666667 -24.500000 140 - -60.500000 -24.500000 135 - -60.333333 -24.500000 132 - -60.166667 -24.500000 127 - -60.000000 -24.500000 123 - -59.833333 -24.500000 120 - -59.666667 -24.500000 115 - -59.500000 -24.500000 108 - -59.333333 -24.500000 109 - -59.166667 -24.500000 104 - -59.000000 -24.500000 100 - -58.833333 -24.500000 98 - -58.666667 -24.500000 93 - -58.500000 -24.500000 92 - -58.333333 -24.500000 87 - -58.166667 -24.500000 86 - -58.000000 -24.500000 78 - -57.833333 -24.500000 76 - -57.666667 -24.500000 75 - -57.500000 -24.500000 71 - -57.333333 -24.500000 68 - -57.166667 -24.500000 62 - -57.000000 -24.500000 73 - -56.833333 -24.500000 99 - -56.666667 -24.500000 126 - -56.500000 -24.500000 248 - -56.333333 -24.500000 232 - -56.166667 -24.500000 307 - -56.000000 -24.500000 152 - -55.833333 -24.500000 217 - -55.666667 -24.500000 220 - -55.500000 -24.500000 246 - -55.333333 -24.500000 293 - -55.166667 -24.500000 344 - -55.000000 -24.500000 356 - -54.833333 -24.500000 387 - -54.666667 -24.500000 291 - -54.500000 -24.500000 271 - -54.333333 -24.500000 217 - -54.166667 -24.500000 308 - -54.000000 -24.500000 394 - -53.833333 -24.500000 435 - -53.666667 -24.500000 436 - -53.500000 -24.500000 469 - -53.333333 -24.500000 440 - -53.166667 -24.500000 321 - -53.000000 -24.500000 432 - -52.833333 -24.500000 415 - -52.666667 -24.500000 488 - -52.500000 -24.500000 616 - -52.333333 -24.500000 813 - -52.166667 -24.500000 688 - -52.000000 -24.500000 567 - -51.833333 -24.500000 604 - -51.666667 -24.500000 882 - -51.500000 -24.500000 600 - -51.333333 -24.500000 701 - -51.166667 -24.500000 827 - -51.000000 -24.500000 630 - -50.833333 -24.500000 912 - -50.666667 -24.500000 776 - -50.500000 -24.500000 741 - -50.333333 -24.500000 772 - -50.166667 -24.500000 1128 - -50.000000 -24.500000 1083 - -49.833333 -24.500000 1041 - -49.666667 -24.500000 971 - -49.500000 -24.500000 1003 - -49.333333 -24.500000 839 - -49.166667 -24.500000 729 - -49.000000 -24.500000 850 - -48.833333 -24.500000 977 - -48.666667 -24.500000 667 - -48.500000 -24.500000 278 - -48.333333 -24.500000 316 - -48.166667 -24.500000 104 - -48.000000 -24.500000 96 - -47.833333 -24.500000 15 - -47.666667 -24.500000 12 - -47.500000 -24.500000 12 - -47.333333 -24.500000 13 - -47.166667 -24.500000 13 - -47.000000 -24.500000 -12 - -46.833333 -24.500000 -24 - -46.666667 -24.500000 -9 - -46.500000 -24.500000 -31 - -46.333333 -24.500000 -36 - -46.166667 -24.500000 -44 - -46.000000 -24.500000 -56 - -45.833333 -24.500000 -58 - -45.666667 -24.500000 -58 - -45.500000 -24.500000 -58 - -45.333333 -24.500000 -63 - -45.166667 -24.500000 -43 - -45.000000 -24.500000 -137 - -44.833333 -24.500000 -133 - -44.666667 -24.500000 -157 - -44.500000 -24.500000 -196 - -44.333333 -24.500000 -437 - -44.166667 -24.500000 -537 - -44.000000 -24.500000 -670 - -43.833333 -24.500000 -841 - -43.666667 -24.500000 -906 - -43.500000 -24.500000 -1177 - -43.333333 -24.500000 -1394 - -43.166667 -24.500000 -1445 - -43.000000 -24.500000 -1477 - -42.833333 -24.500000 -1607 - -42.666667 -24.500000 -1640 - -42.500000 -24.500000 -1720 - -42.333333 -24.500000 -1803 - -42.166667 -24.500000 -1850 - -42.000000 -24.500000 -2009 - -41.833333 -24.500000 -2143 - -41.666667 -24.500000 -2277 - -41.500000 -24.500000 -2370 - -41.333333 -24.500000 -2388 - -41.166667 -24.500000 -2639 - -41.000000 -24.500000 -2722 - -40.833333 -24.500000 -2794 - -40.666667 -24.500000 -2848 - -40.500000 -24.500000 -2940 - -40.333333 -24.500000 -3036 - -40.166667 -24.500000 -3061 - -40.000000 -24.500000 -3041 - -65.000000 -24.666667 678 - -64.833333 -24.666667 910 - -64.666667 -24.666667 1227 - -64.500000 -24.666667 1296 - -64.333333 -24.666667 594 - -64.166667 -24.666667 451 - -64.000000 -24.666667 386 - -63.833333 -24.666667 332 - -63.666667 -24.666667 293 - -63.500000 -24.666667 266 - -63.333333 -24.666667 258 - -63.166667 -24.666667 245 - -63.000000 -24.666667 232 - -62.833333 -24.666667 222 - -62.666667 -24.666667 212 - -62.500000 -24.666667 202 - -62.333333 -24.666667 193 - -62.166667 -24.666667 184 - -62.000000 -24.666667 173 - -61.833333 -24.666667 168 - -61.666667 -24.666667 161 - -61.500000 -24.666667 156 - -61.333333 -24.666667 154 - -61.166667 -24.666667 150 - -61.000000 -24.666667 149 - -60.833333 -24.666667 143 - -60.666667 -24.666667 137 - -60.500000 -24.666667 134 - -60.333333 -24.666667 127 - -60.166667 -24.666667 124 - -60.000000 -24.666667 121 - -59.833333 -24.666667 122 - -59.666667 -24.666667 115 - -59.500000 -24.666667 111 - -59.333333 -24.666667 104 - -59.166667 -24.666667 103 - -59.000000 -24.666667 100 - -58.833333 -24.666667 95 - -58.666667 -24.666667 90 - -58.500000 -24.666667 87 - -58.333333 -24.666667 85 - -58.166667 -24.666667 84 - -58.000000 -24.666667 78 - -57.833333 -24.666667 75 - -57.666667 -24.666667 72 - -57.500000 -24.666667 69 - -57.333333 -24.666667 67 - -57.166667 -24.666667 61 - -57.000000 -24.666667 66 - -56.833333 -24.666667 81 - -56.666667 -24.666667 101 - -56.500000 -24.666667 138 - -56.333333 -24.666667 249 - -56.166667 -24.666667 217 - -56.000000 -24.666667 244 - -55.833333 -24.666667 207 - -55.666667 -24.666667 290 - -55.500000 -24.666667 263 - -55.333333 -24.666667 262 - -55.166667 -24.666667 349 - -55.000000 -24.666667 351 - -54.833333 -24.666667 265 - -54.666667 -24.666667 252 - -54.500000 -24.666667 276 - -54.333333 -24.666667 217 - -54.166667 -24.666667 271 - -54.000000 -24.666667 321 - -53.833333 -24.666667 513 - -53.666667 -24.666667 506 - -53.500000 -24.666667 565 - -53.333333 -24.666667 573 - -53.166667 -24.666667 457 - -53.000000 -24.666667 379 - -52.833333 -24.666667 489 - -52.666667 -24.666667 438 - -52.500000 -24.666667 647 - -52.333333 -24.666667 655 - -52.166667 -24.666667 830 - -52.000000 -24.666667 827 - -51.833333 -24.666667 845 - -51.666667 -24.666667 814 - -51.500000 -24.666667 611 - -51.333333 -24.666667 931 - -51.166667 -24.666667 776 - -51.000000 -24.666667 786 - -50.833333 -24.666667 915 - -50.666667 -24.666667 893 - -50.500000 -24.666667 812 - -50.333333 -24.666667 916 - -50.166667 -24.666667 1100 - -50.000000 -24.666667 1021 - -49.833333 -24.666667 1014 - -49.666667 -24.666667 1048 - -49.500000 -24.666667 901 - -49.333333 -24.666667 640 - -49.166667 -24.666667 316 - -49.000000 -24.666667 409 - -48.833333 -24.666667 164 - -48.666667 -24.666667 286 - -48.500000 -24.666667 704 - -48.333333 -24.666667 153 - -48.166667 -24.666667 149 - -48.000000 -24.666667 49 - -47.833333 -24.666667 21 - -47.666667 -24.666667 12 - -47.500000 -24.666667 124 - -47.333333 -24.666667 -3 - -47.166667 -24.666667 -15 - -47.000000 -24.666667 -25 - -46.833333 -24.666667 -30 - -46.666667 -24.666667 -35 - -46.500000 -24.666667 -43 - -46.333333 -24.666667 -49 - -46.166667 -24.666667 -63 - -46.000000 -24.666667 -55 - -45.833333 -24.666667 -60 - -45.666667 -24.666667 -60 - -45.500000 -24.666667 -140 - -45.333333 -24.666667 -69 - -45.166667 -24.666667 -84 - -45.000000 -24.666667 -121 - -44.833333 -24.666667 -132 - -44.666667 -24.666667 -140 - -44.500000 -24.666667 -369 - -44.333333 -24.666667 -548 - -44.166667 -24.666667 -664 - -44.000000 -24.666667 -1031 - -43.833333 -24.666667 -1239 - -43.666667 -24.666667 -1464 - -43.500000 -24.666667 -1573 - -43.333333 -24.666667 -1609 - -43.166667 -24.666667 -1717 - -43.000000 -24.666667 -1836 - -42.833333 -24.666667 -1942 - -42.666667 -24.666667 -2102 - -42.500000 -24.666667 -2030 - -42.333333 -24.666667 -2091 - -42.166667 -24.666667 -2119 - -42.000000 -24.666667 -2232 - -41.833333 -24.666667 -2263 - -41.666667 -24.666667 -2241 - -41.500000 -24.666667 -2505 - -41.333333 -24.666667 -2569 - -41.166667 -24.666667 -2652 - -41.000000 -24.666667 -2697 - -40.833333 -24.666667 -2772 - -40.666667 -24.666667 -2846 - -40.500000 -24.666667 -2958 - -40.333333 -24.666667 -2978 - -40.166667 -24.666667 -3071 - -40.000000 -24.666667 -3156 - -65.000000 -24.833333 804 - -64.833333 -24.833333 1283 - -64.666667 -24.833333 1553 - -64.500000 -24.833333 841 - -64.333333 -24.833333 590 - -64.166667 -24.833333 444 - -64.000000 -24.833333 382 - -63.833333 -24.833333 341 - -63.666667 -24.833333 299 - -63.500000 -24.833333 281 - -63.333333 -24.833333 266 - -63.166667 -24.833333 252 - -63.000000 -24.833333 241 - -62.833333 -24.833333 227 - -62.666667 -24.833333 217 - -62.500000 -24.833333 205 - -62.333333 -24.833333 193 - -62.166667 -24.833333 183 - -62.000000 -24.833333 175 - -61.833333 -24.833333 167 - -61.666667 -24.833333 161 - -61.500000 -24.833333 159 - -61.333333 -24.833333 151 - -61.166667 -24.833333 146 - -61.000000 -24.833333 144 - -60.833333 -24.833333 140 - -60.666667 -24.833333 133 - -60.500000 -24.833333 132 - -60.333333 -24.833333 124 - -60.166667 -24.833333 122 - -60.000000 -24.833333 118 - -59.833333 -24.833333 114 - -59.666667 -24.833333 115 - -59.500000 -24.833333 107 - -59.333333 -24.833333 105 - -59.166667 -24.833333 98 - -59.000000 -24.833333 96 - -58.833333 -24.833333 92 - -58.666667 -24.833333 90 - -58.500000 -24.833333 86 - -58.333333 -24.833333 81 - -58.166667 -24.833333 78 - -58.000000 -24.833333 78 - -57.833333 -24.833333 76 - -57.666667 -24.833333 72 - -57.500000 -24.833333 69 - -57.333333 -24.833333 65 - -57.166667 -24.833333 67 - -57.000000 -24.833333 66 - -56.833333 -24.833333 71 - -56.666667 -24.833333 82 - -56.500000 -24.833333 112 - -56.333333 -24.833333 201 - -56.166667 -24.833333 309 - -56.000000 -24.833333 348 - -55.833333 -24.833333 253 - -55.666667 -24.833333 292 - -55.500000 -24.833333 252 - -55.333333 -24.833333 222 - -55.166667 -24.833333 295 - -55.000000 -24.833333 334 - -54.833333 -24.833333 292 - -54.666667 -24.833333 234 - -54.500000 -24.833333 256 - -54.333333 -24.833333 228 - -54.166667 -24.833333 350 - -54.000000 -24.833333 408 - -53.833333 -24.833333 517 - -53.666667 -24.833333 564 - -53.500000 -24.833333 613 - -53.333333 -24.833333 659 - -53.166667 -24.833333 624 - -53.000000 -24.833333 575 - -52.833333 -24.833333 454 - -52.666667 -24.833333 491 - -52.500000 -24.833333 548 - -52.333333 -24.833333 667 - -52.166667 -24.833333 806 - -52.000000 -24.833333 892 - -51.833333 -24.833333 1083 - -51.666667 -24.833333 938 - -51.500000 -24.833333 927 - -51.333333 -24.833333 677 - -51.166667 -24.833333 548 - -51.000000 -24.833333 882 - -50.833333 -24.833333 1002 - -50.666667 -24.833333 947 - -50.500000 -24.833333 944 - -50.333333 -24.833333 802 - -50.166667 -24.833333 1126 - -50.000000 -24.833333 1021 - -49.833333 -24.833333 1041 - -49.666667 -24.833333 850 - -49.500000 -24.833333 694 - -49.333333 -24.833333 411 - -49.166667 -24.833333 744 - -49.000000 -24.833333 543 - -48.833333 -24.833333 569 - -48.666667 -24.833333 910 - -48.500000 -24.833333 341 - -48.333333 -24.833333 760 - -48.166667 -24.833333 377 - -48.000000 -24.833333 177 - -47.833333 -24.833333 218 - -47.666667 -24.833333 0 - -47.500000 -24.833333 -10 - -47.333333 -24.833333 -21 - -47.166667 -24.833333 -27 - -47.000000 -24.833333 -33 - -46.833333 -24.833333 -39 - -46.666667 -24.833333 -45 - -46.500000 -24.833333 -50 - -46.333333 -24.833333 -78 - -46.166667 -24.833333 -64 - -46.000000 -24.833333 -66 - -45.833333 -24.833333 -62 - -45.666667 -24.833333 -123 - -45.500000 -24.833333 -76 - -45.333333 -24.833333 -100 - -45.166667 -24.833333 -105 - -45.000000 -24.833333 -128 - -44.833333 -24.833333 -146 - -44.666667 -24.833333 -284 - -44.500000 -24.833333 -617 - -44.333333 -24.833333 -861 - -44.166667 -24.833333 -1090 - -44.000000 -24.833333 -1372 - -43.833333 -24.833333 -1779 - -43.666667 -24.833333 -1638 - -43.500000 -24.833333 -1751 - -43.333333 -24.833333 -1863 - -43.166667 -24.833333 -1923 - -43.000000 -24.833333 -2033 - -42.833333 -24.833333 -2016 - -42.666667 -24.833333 -2013 - -42.500000 -24.833333 -2098 - -42.333333 -24.833333 -2256 - -42.166667 -24.833333 -2267 - -42.000000 -24.833333 -2320 - -41.833333 -24.833333 -2364 - -41.666667 -24.833333 -2391 - -41.500000 -24.833333 -2513 - -41.333333 -24.833333 -2620 - -41.166667 -24.833333 -2588 - -41.000000 -24.833333 -2649 - -40.833333 -24.833333 -2878 - -40.666667 -24.833333 -2869 - -40.500000 -24.833333 -2939 - -40.333333 -24.833333 -3004 - -40.166667 -24.833333 -3138 - -40.000000 -24.833333 -3111 - -65.000000 -25.000000 965 - -64.833333 -25.000000 1297 - -64.666667 -25.000000 987 - -64.500000 -25.000000 648 - -64.333333 -25.000000 499 - -64.166667 -25.000000 416 - -64.000000 -25.000000 364 - -63.833333 -25.000000 330 - -63.666667 -25.000000 309 - -63.500000 -25.000000 291 - -63.333333 -25.000000 273 - -63.166667 -25.000000 260 - -63.000000 -25.000000 245 - -62.833333 -25.000000 233 - -62.666667 -25.000000 219 - -62.500000 -25.000000 207 - -62.333333 -25.000000 197 - -62.166667 -25.000000 187 - -62.000000 -25.000000 178 - -61.833333 -25.000000 168 - -61.666667 -25.000000 160 - -61.500000 -25.000000 152 - -61.333333 -25.000000 149 - -61.166667 -25.000000 146 - -61.000000 -25.000000 142 - -60.833333 -25.000000 132 - -60.666667 -25.000000 138 - -60.500000 -25.000000 132 - -60.333333 -25.000000 127 - -60.166667 -25.000000 120 - -60.000000 -25.000000 113 - -59.833333 -25.000000 112 - -59.666667 -25.000000 109 - -59.500000 -25.000000 102 - -59.333333 -25.000000 100 - -59.166667 -25.000000 98 - -59.000000 -25.000000 93 - -58.833333 -25.000000 90 - -58.666667 -25.000000 87 - -58.500000 -25.000000 84 - -58.333333 -25.000000 82 - -58.166667 -25.000000 80 - -58.000000 -25.000000 81 - -57.833333 -25.000000 71 - -57.666667 -25.000000 69 - -57.500000 -25.000000 65 - -57.333333 -25.000000 60 - -57.166667 -25.000000 106 - -57.000000 -25.000000 64 - -56.833333 -25.000000 69 - -56.666667 -25.000000 99 - -56.500000 -25.000000 99 - -56.333333 -25.000000 135 - -56.166667 -25.000000 234 - -56.000000 -25.000000 374 - -55.833333 -25.000000 296 - -55.666667 -25.000000 271 - -55.500000 -25.000000 242 - -55.333333 -25.000000 233 - -55.166667 -25.000000 262 - -55.000000 -25.000000 255 - -54.833333 -25.000000 317 - -54.666667 -25.000000 286 - -54.500000 -25.000000 240 - -54.333333 -25.000000 261 - -54.166667 -25.000000 394 - -54.000000 -25.000000 444 - -53.833333 -25.000000 560 - -53.666667 -25.000000 684 - -53.500000 -25.000000 732 - -53.333333 -25.000000 756 - -53.166667 -25.000000 727 - -53.000000 -25.000000 705 - -52.833333 -25.000000 570 - -52.666667 -25.000000 592 - -52.500000 -25.000000 524 - -52.333333 -25.000000 643 - -52.166667 -25.000000 712 - -52.000000 -25.000000 771 - -51.833333 -25.000000 899 - -51.666667 -25.000000 1056 - -51.500000 -25.000000 957 - -51.333333 -25.000000 1016 - -51.166667 -25.000000 570 - -51.000000 -25.000000 551 - -50.833333 -25.000000 854 - -50.666667 -25.000000 808 - -50.500000 -25.000000 799 - -50.333333 -25.000000 856 - -50.166667 -25.000000 868 - -50.000000 -25.000000 936 - -49.833333 -25.000000 910 - -49.666667 -25.000000 567 - -49.500000 -25.000000 513 - -49.333333 -25.000000 582 - -49.166667 -25.000000 764 - -49.000000 -25.000000 963 - -48.833333 -25.000000 891 - -48.666667 -25.000000 657 - -48.500000 -25.000000 875 - -48.333333 -25.000000 686 - -48.166667 -25.000000 306 - -48.000000 -25.000000 8 - -47.833333 -25.000000 -1 - -47.666667 -25.000000 -11 - -47.500000 -25.000000 -21 - -47.333333 -25.000000 -29 - -47.166667 -25.000000 -36 - -47.000000 -25.000000 -42 - -46.833333 -25.000000 -47 - -46.666667 -25.000000 -53 - -46.500000 -25.000000 -66 - -46.333333 -25.000000 -67 - -46.166667 -25.000000 -74 - -46.000000 -25.000000 -60 - -45.833333 -25.000000 -104 - -45.666667 -25.000000 -103 - -45.500000 -25.000000 -89 - -45.333333 -25.000000 -85 - -45.166667 -25.000000 -118 - -45.000000 -25.000000 -146 - -44.833333 -25.000000 -187 - -44.666667 -25.000000 -671 - -44.500000 -25.000000 -1135 - -44.333333 -25.000000 -1412 - -44.166667 -25.000000 -1616 - -44.000000 -25.000000 -1770 - -43.833333 -25.000000 -1818 - -43.666667 -25.000000 -1957 - -43.500000 -25.000000 -1978 - -43.333333 -25.000000 -2017 - -43.166667 -25.000000 -2096 - -43.000000 -25.000000 -2058 - -42.833333 -25.000000 -2160 - -42.666667 -25.000000 -2259 - -42.500000 -25.000000 -2238 - -42.333333 -25.000000 -2266 - -42.166667 -25.000000 -2246 - -42.000000 -25.000000 -2209 - -41.833333 -25.000000 -2295 - -41.666667 -25.000000 -2547 - -41.500000 -25.000000 -2623 - -41.333333 -25.000000 -2597 - -41.166667 -25.000000 -2613 - -41.000000 -25.000000 -2755 - -40.833333 -25.000000 -2822 - -40.666667 -25.000000 -2994 - -40.500000 -25.000000 -2974 - -40.333333 -25.000000 -3068 - -40.166667 -25.000000 -3034 - -40.000000 -25.000000 -3226 - -65.000000 -25.166667 817 - -64.833333 -25.166667 889 - -64.666667 -25.166667 715 - -64.500000 -25.166667 590 - -64.333333 -25.166667 421 - -64.166667 -25.166667 386 - -64.000000 -25.166667 357 - -63.833333 -25.166667 330 - -63.666667 -25.166667 312 - -63.500000 -25.166667 291 - -63.333333 -25.166667 275 - -63.166667 -25.166667 261 - -63.000000 -25.166667 245 - -62.833333 -25.166667 231 - -62.666667 -25.166667 220 - -62.500000 -25.166667 209 - -62.333333 -25.166667 196 - -62.166667 -25.166667 187 - -62.000000 -25.166667 177 - -61.833333 -25.166667 168 - -61.666667 -25.166667 160 - -61.500000 -25.166667 151 - -61.333333 -25.166667 145 - -61.166667 -25.166667 139 - -61.000000 -25.166667 139 - -60.833333 -25.166667 135 - -60.666667 -25.166667 129 - -60.500000 -25.166667 126 - -60.333333 -25.166667 123 - -60.166667 -25.166667 120 - -60.000000 -25.166667 117 - -59.833333 -25.166667 108 - -59.666667 -25.166667 105 - -59.500000 -25.166667 102 - -59.333333 -25.166667 97 - -59.166667 -25.166667 97 - -59.000000 -25.166667 92 - -58.833333 -25.166667 90 - -58.666667 -25.166667 83 - -58.500000 -25.166667 83 - -58.333333 -25.166667 81 - -58.166667 -25.166667 75 - -58.000000 -25.166667 70 - -57.833333 -25.166667 69 - -57.666667 -25.166667 67 - -57.500000 -25.166667 65 - -57.333333 -25.166667 190 - -57.166667 -25.166667 77 - -57.000000 -25.166667 91 - -56.833333 -25.166667 72 - -56.666667 -25.166667 78 - -56.500000 -25.166667 90 - -56.333333 -25.166667 149 - -56.166667 -25.166667 198 - -56.000000 -25.166667 283 - -55.833333 -25.166667 277 - -55.666667 -25.166667 259 - -55.500000 -25.166667 283 - -55.333333 -25.166667 226 - -55.166667 -25.166667 253 - -55.000000 -25.166667 230 - -54.833333 -25.166667 272 - -54.666667 -25.166667 285 - -54.500000 -25.166667 239 - -54.333333 -25.166667 270 - -54.166667 -25.166667 288 - -54.000000 -25.166667 567 - -53.833333 -25.166667 556 - -53.666667 -25.166667 564 - -53.500000 -25.166667 637 - -53.333333 -25.166667 613 - -53.166667 -25.166667 781 - -53.000000 -25.166667 685 - -52.833333 -25.166667 813 - -52.666667 -25.166667 806 - -52.500000 -25.166667 638 - -52.333333 -25.166667 743 - -52.166667 -25.166667 810 - -52.000000 -25.166667 986 - -51.833333 -25.166667 1027 - -51.666667 -25.166667 1125 - -51.500000 -25.166667 1135 - -51.333333 -25.166667 1156 - -51.166667 -25.166667 821 - -51.000000 -25.166667 773 - -50.833333 -25.166667 794 - -50.666667 -25.166667 840 - -50.500000 -25.166667 866 - -50.333333 -25.166667 861 - -50.166667 -25.166667 801 - -50.000000 -25.166667 1024 - -49.833333 -25.166667 787 - -49.666667 -25.166667 842 - -49.500000 -25.166667 728 - -49.333333 -25.166667 956 - -49.166667 -25.166667 1053 - -49.000000 -25.166667 938 - -48.833333 -25.166667 1008 - -48.666667 -25.166667 639 - -48.500000 -25.166667 288 - -48.333333 -25.166667 413 - -48.166667 -25.166667 691 - -48.000000 -25.166667 119 - -47.833333 -25.166667 -7 - -47.666667 -25.166667 -20 - -47.500000 -25.166667 -28 - -47.333333 -25.166667 -35 - -47.166667 -25.166667 -43 - -47.000000 -25.166667 -52 - -46.833333 -25.166667 -55 - -46.666667 -25.166667 -61 - -46.500000 -25.166667 -73 - -46.333333 -25.166667 -76 - -46.166667 -25.166667 -86 - -46.000000 -25.166667 -100 - -45.833333 -25.166667 -108 - -45.666667 -25.166667 -126 - -45.500000 -25.166667 -96 - -45.333333 -25.166667 -109 - -45.166667 -25.166667 -145 - -45.000000 -25.166667 -147 - -44.833333 -25.166667 -320 - -44.666667 -25.166667 -1226 - -44.500000 -25.166667 -1624 - -44.333333 -25.166667 -1779 - -44.166667 -25.166667 -1895 - -44.000000 -25.166667 -1950 - -43.833333 -25.166667 -2234 - -43.666667 -25.166667 -2217 - -43.500000 -25.166667 -2143 - -43.333333 -25.166667 -2121 - -43.166667 -25.166667 -2210 - -43.000000 -25.166667 -2206 - -42.833333 -25.166667 -2183 - -42.666667 -25.166667 -2200 - -42.500000 -25.166667 -2136 - -42.333333 -25.166667 -2203 - -42.166667 -25.166667 -2149 - -42.000000 -25.166667 -2253 - -41.833333 -25.166667 -2534 - -41.666667 -25.166667 -2575 - -41.500000 -25.166667 -2595 - -41.333333 -25.166667 -2674 - -41.166667 -25.166667 -2966 - -41.000000 -25.166667 -2725 - -40.833333 -25.166667 -2612 - -40.666667 -25.166667 -2856 - -40.500000 -25.166667 -3080 - -40.333333 -25.166667 -2957 - -40.166667 -25.166667 -3002 - -40.000000 -25.166667 -3045 - -65.000000 -25.333333 963 - -64.833333 -25.333333 614 - -64.666667 -25.333333 546 - -64.500000 -25.333333 522 - -64.333333 -25.333333 525 - -64.166667 -25.333333 385 - -64.000000 -25.333333 337 - -63.833333 -25.333333 319 - -63.666667 -25.333333 307 - -63.500000 -25.333333 291 - -63.333333 -25.333333 275 - -63.166667 -25.333333 259 - -63.000000 -25.333333 244 - -62.833333 -25.333333 234 - -62.666667 -25.333333 220 - -62.500000 -25.333333 210 - -62.333333 -25.333333 199 - -62.166667 -25.333333 188 - -62.000000 -25.333333 179 - -61.833333 -25.333333 169 - -61.666667 -25.333333 160 - -61.500000 -25.333333 152 - -61.333333 -25.333333 145 - -61.166667 -25.333333 139 - -61.000000 -25.333333 135 - -60.833333 -25.333333 131 - -60.666667 -25.333333 127 - -60.500000 -25.333333 122 - -60.333333 -25.333333 120 - -60.166667 -25.333333 116 - -60.000000 -25.333333 116 - -59.833333 -25.333333 107 - -59.666667 -25.333333 102 - -59.500000 -25.333333 100 - -59.333333 -25.333333 96 - -59.166667 -25.333333 97 - -59.000000 -25.333333 90 - -58.833333 -25.333333 87 - -58.666667 -25.333333 86 - -58.500000 -25.333333 82 - -58.333333 -25.333333 77 - -58.166667 -25.333333 74 - -58.000000 -25.333333 70 - -57.833333 -25.333333 67 - -57.666667 -25.333333 53 - -57.500000 -25.333333 114 - -57.333333 -25.333333 62 - -57.166667 -25.333333 214 - -57.000000 -25.333333 110 - -56.833333 -25.333333 160 - -56.666667 -25.333333 82 - -56.500000 -25.333333 111 - -56.333333 -25.333333 149 - -56.166667 -25.333333 150 - -56.000000 -25.333333 298 - -55.833333 -25.333333 326 - -55.666667 -25.333333 269 - -55.500000 -25.333333 239 - -55.333333 -25.333333 220 - -55.166667 -25.333333 220 - -55.000000 -25.333333 250 - -54.833333 -25.333333 223 - -54.666667 -25.333333 239 - -54.500000 -25.333333 217 - -54.333333 -25.333333 279 - -54.166667 -25.333333 387 - -54.000000 -25.333333 355 - -53.833333 -25.333333 378 - -53.666667 -25.333333 393 - -53.500000 -25.333333 427 - -53.333333 -25.333333 548 - -53.166667 -25.333333 589 - -53.000000 -25.333333 452 - -52.833333 -25.333333 710 - -52.666667 -25.333333 693 - -52.500000 -25.333333 751 - -52.333333 -25.333333 819 - -52.166667 -25.333333 817 - -52.000000 -25.333333 754 - -51.833333 -25.333333 970 - -51.666667 -25.333333 1005 - -51.500000 -25.333333 1042 - -51.333333 -25.333333 1102 - -51.166667 -25.333333 958 - -51.000000 -25.333333 793 - -50.833333 -25.333333 887 - -50.666667 -25.333333 850 - -50.500000 -25.333333 886 - -50.333333 -25.333333 830 - -50.166667 -25.333333 924 - -50.000000 -25.333333 830 - -49.833333 -25.333333 996 - -49.666667 -25.333333 775 - -49.500000 -25.333333 936 - -49.333333 -25.333333 980 - -49.166667 -25.333333 927 - -49.000000 -25.333333 899 - -48.833333 -25.333333 557 - -48.666667 -25.333333 59 - -48.500000 -25.333333 5 - -48.333333 -25.333333 0 - -48.166667 -25.333333 19 - -48.000000 -25.333333 -5 - -47.833333 -25.333333 -21 - -47.666667 -25.333333 -26 - -47.500000 -25.333333 -34 - -47.333333 -25.333333 -42 - -47.166667 -25.333333 -49 - -47.000000 -25.333333 -59 - -46.833333 -25.333333 -64 - -46.666667 -25.333333 -70 - -46.500000 -25.333333 -77 - -46.333333 -25.333333 -89 - -46.166667 -25.333333 -106 - -46.000000 -25.333333 -117 - -45.833333 -25.333333 -124 - -45.666667 -25.333333 -128 - -45.500000 -25.333333 -162 - -45.333333 -25.333333 -94 - -45.166667 -25.333333 -136 - -45.000000 -25.333333 -162 - -44.833333 -25.333333 -1002 - -44.666667 -25.333333 -1556 - -44.500000 -25.333333 -1768 - -44.333333 -25.333333 -1804 - -44.166667 -25.333333 -1980 - -44.000000 -25.333333 -2044 - -43.833333 -25.333333 -2144 - -43.666667 -25.333333 -2132 - -43.500000 -25.333333 -2120 - -43.333333 -25.333333 -2184 - -43.166667 -25.333333 -2210 - -43.000000 -25.333333 -2220 - -42.833333 -25.333333 -2170 - -42.666667 -25.333333 -2095 - -42.500000 -25.333333 -2234 - -42.333333 -25.333333 -2213 - -42.166667 -25.333333 -2254 - -42.000000 -25.333333 -2438 - -41.833333 -25.333333 -2466 - -41.666667 -25.333333 -2590 - -41.500000 -25.333333 -2658 - -41.333333 -25.333333 -2538 - -41.166667 -25.333333 -2722 - -41.000000 -25.333333 -2640 - -40.833333 -25.333333 -2786 - -40.666667 -25.333333 -2902 - -40.500000 -25.333333 -3196 - -40.333333 -25.333333 -3223 - -40.166667 -25.333333 -3137 - -40.000000 -25.333333 -3150 - -65.000000 -25.500000 983 - -64.833333 -25.500000 685 - -64.666667 -25.500000 568 - -64.500000 -25.500000 667 - -64.333333 -25.500000 553 - -64.166667 -25.500000 390 - -64.000000 -25.500000 318 - -63.833333 -25.500000 308 - -63.666667 -25.500000 291 - -63.500000 -25.500000 282 - -63.333333 -25.500000 270 - -63.166667 -25.500000 254 - -63.000000 -25.500000 243 - -62.833333 -25.500000 230 - -62.666667 -25.500000 220 - -62.500000 -25.500000 208 - -62.333333 -25.500000 198 - -62.166667 -25.500000 188 - -62.000000 -25.500000 178 - -61.833333 -25.500000 167 - -61.666667 -25.500000 160 - -61.500000 -25.500000 152 - -61.333333 -25.500000 146 - -61.166667 -25.500000 138 - -61.000000 -25.500000 131 - -60.833333 -25.500000 128 - -60.666667 -25.500000 124 - -60.500000 -25.500000 119 - -60.333333 -25.500000 114 - -60.166667 -25.500000 113 - -60.000000 -25.500000 109 - -59.833333 -25.500000 103 - -59.666667 -25.500000 103 - -59.500000 -25.500000 100 - -59.333333 -25.500000 95 - -59.166667 -25.500000 93 - -59.000000 -25.500000 91 - -58.833333 -25.500000 85 - -58.666667 -25.500000 80 - -58.500000 -25.500000 79 - -58.333333 -25.500000 72 - -58.166667 -25.500000 70 - -58.000000 -25.500000 68 - -57.833333 -25.500000 65 - -57.666667 -25.500000 64 - -57.500000 -25.500000 107 - -57.333333 -25.500000 130 - -57.166667 -25.500000 132 - -57.000000 -25.500000 252 - -56.833333 -25.500000 147 - -56.666667 -25.500000 114 - -56.500000 -25.500000 126 - -56.333333 -25.500000 204 - -56.166667 -25.500000 245 - -56.000000 -25.500000 295 - -55.833333 -25.500000 233 - -55.666667 -25.500000 218 - -55.500000 -25.500000 224 - -55.333333 -25.500000 256 - -55.166667 -25.500000 216 - -55.000000 -25.500000 230 - -54.833333 -25.500000 245 - -54.666667 -25.500000 215 - -54.500000 -25.500000 261 - -54.333333 -25.500000 284 - -54.166667 -25.500000 249 - -54.000000 -25.500000 285 - -53.833333 -25.500000 309 - -53.666667 -25.500000 273 - -53.500000 -25.500000 358 - -53.333333 -25.500000 378 - -53.166667 -25.500000 392 - -53.000000 -25.500000 463 - -52.833333 -25.500000 586 - -52.666667 -25.500000 607 - -52.500000 -25.500000 643 - -52.333333 -25.500000 773 - -52.166667 -25.500000 707 - -52.000000 -25.500000 805 - -51.833333 -25.500000 938 - -51.666667 -25.500000 961 - -51.500000 -25.500000 1073 - -51.333333 -25.500000 1138 - -51.166667 -25.500000 1191 - -51.000000 -25.500000 895 - -50.833333 -25.500000 823 - -50.666667 -25.500000 859 - -50.500000 -25.500000 823 - -50.333333 -25.500000 906 - -50.166667 -25.500000 840 - -50.000000 -25.500000 910 - -49.833333 -25.500000 928 - -49.666667 -25.500000 1085 - -49.500000 -25.500000 898 - -49.333333 -25.500000 892 - -49.166667 -25.500000 882 - -49.000000 -25.500000 953 - -48.833333 -25.500000 18 - -48.666667 -25.500000 4 - -48.500000 -25.500000 0 - -48.333333 -25.500000 11 - -48.166667 -25.500000 -6 - -48.000000 -25.500000 -20 - -47.833333 -25.500000 -26 - -47.666667 -25.500000 -34 - -47.500000 -25.500000 -42 - -47.333333 -25.500000 -49 - -47.166667 -25.500000 -58 - -47.000000 -25.500000 -72 - -46.833333 -25.500000 -77 - -46.666667 -25.500000 -92 - -46.500000 -25.500000 -104 - -46.333333 -25.500000 -122 - -46.166667 -25.500000 -151 - -46.000000 -25.500000 -143 - -45.833333 -25.500000 -147 - -45.666667 -25.500000 -172 - -45.500000 -25.500000 -144 - -45.333333 -25.500000 -158 - -45.166667 -25.500000 -145 - -45.000000 -25.500000 -666 - -44.833333 -25.500000 -1396 - -44.666667 -25.500000 -1757 - -44.500000 -25.500000 -1855 - -44.333333 -25.500000 -2033 - -44.166667 -25.500000 -2108 - -44.000000 -25.500000 -2046 - -43.833333 -25.500000 -2145 - -43.666667 -25.500000 -2139 - -43.500000 -25.500000 -2140 - -43.333333 -25.500000 -2152 - -43.166667 -25.500000 -2176 - -43.000000 -25.500000 -2125 - -42.833333 -25.500000 -2126 - -42.666667 -25.500000 -2182 - -42.500000 -25.500000 -2121 - -42.333333 -25.500000 -2316 - -42.166667 -25.500000 -2427 - -42.000000 -25.500000 -2360 - -41.833333 -25.500000 -2575 - -41.666667 -25.500000 -2591 - -41.500000 -25.500000 -2560 - -41.333333 -25.500000 -2592 - -41.166667 -25.500000 -2554 - -41.000000 -25.500000 -2940 - -40.833333 -25.500000 -2884 - -40.666667 -25.500000 -2949 - -40.500000 -25.500000 -3052 - -40.333333 -25.500000 -3219 - -40.166667 -25.500000 -3158 - -40.000000 -25.500000 -3254 - -65.000000 -25.666667 896 - -64.833333 -25.666667 683 - -64.666667 -25.666667 610 - -64.500000 -25.666667 770 - -64.333333 -25.666667 533 - -64.166667 -25.666667 372 - -64.000000 -25.666667 302 - -63.833333 -25.666667 292 - -63.666667 -25.666667 283 - -63.500000 -25.666667 270 - -63.333333 -25.666667 262 - -63.166667 -25.666667 249 - -63.000000 -25.666667 238 - -62.833333 -25.666667 228 - -62.666667 -25.666667 217 - -62.500000 -25.666667 207 - -62.333333 -25.666667 197 - -62.166667 -25.666667 188 - -62.000000 -25.666667 178 - -61.833333 -25.666667 170 - -61.666667 -25.666667 160 - -61.500000 -25.666667 154 - -61.333333 -25.666667 145 - -61.166667 -25.666667 137 - -61.000000 -25.666667 130 - -60.833333 -25.666667 125 - -60.666667 -25.666667 119 - -60.500000 -25.666667 116 - -60.333333 -25.666667 114 - -60.166667 -25.666667 110 - -60.000000 -25.666667 106 - -59.833333 -25.666667 103 - -59.666667 -25.666667 98 - -59.500000 -25.666667 101 - -59.333333 -25.666667 90 - -59.166667 -25.666667 92 - -59.000000 -25.666667 84 - -58.833333 -25.666667 86 - -58.666667 -25.666667 77 - -58.500000 -25.666667 78 - -58.333333 -25.666667 73 - -58.166667 -25.666667 69 - -58.000000 -25.666667 65 - -57.833333 -25.666667 63 - -57.666667 -25.666667 64 - -57.500000 -25.666667 73 - -57.333333 -25.666667 72 - -57.166667 -25.666667 92 - -57.000000 -25.666667 147 - -56.833333 -25.666667 141 - -56.666667 -25.666667 110 - -56.500000 -25.666667 121 - -56.333333 -25.666667 159 - -56.166667 -25.666667 169 - -56.000000 -25.666667 204 - -55.833333 -25.666667 292 - -55.666667 -25.666667 230 - -55.500000 -25.666667 267 - -55.333333 -25.666667 245 - -55.166667 -25.666667 237 - -55.000000 -25.666667 252 - -54.833333 -25.666667 245 - -54.666667 -25.666667 167 - -54.500000 -25.666667 243 - -54.333333 -25.666667 241 - -54.166667 -25.666667 248 - -54.000000 -25.666667 303 - -53.833333 -25.666667 295 - -53.666667 -25.666667 379 - -53.500000 -25.666667 385 - -53.333333 -25.666667 428 - -53.166667 -25.666667 475 - -53.000000 -25.666667 416 - -52.833333 -25.666667 574 - -52.666667 -25.666667 473 - -52.500000 -25.666667 510 - -52.333333 -25.666667 566 - -52.166667 -25.666667 754 - -52.000000 -25.666667 840 - -51.833333 -25.666667 909 - -51.666667 -25.666667 1028 - -51.500000 -25.666667 1125 - -51.333333 -25.666667 1257 - -51.166667 -25.666667 1034 - -51.000000 -25.666667 1174 - -50.833333 -25.666667 893 - -50.666667 -25.666667 812 - -50.500000 -25.666667 913 - -50.333333 -25.666667 837 - -50.166667 -25.666667 814 - -50.000000 -25.666667 875 - -49.833333 -25.666667 882 - -49.666667 -25.666667 907 - -49.500000 -25.666667 918 - -49.333333 -25.666667 903 - -49.166667 -25.666667 899 - -49.000000 -25.666667 915 - -48.833333 -25.666667 297 - -48.666667 -25.666667 396 - -48.500000 -25.666667 15 - -48.333333 -25.666667 -3 - -48.166667 -25.666667 -19 - -48.000000 -25.666667 -25 - -47.833333 -25.666667 -33 - -47.666667 -25.666667 -41 - -47.500000 -25.666667 -48 - -47.333333 -25.666667 -57 - -47.166667 -25.666667 -64 - -47.000000 -25.666667 -79 - -46.833333 -25.666667 -95 - -46.666667 -25.666667 -111 - -46.500000 -25.666667 -126 - -46.333333 -25.666667 -131 - -46.166667 -25.666667 -156 - -46.000000 -25.666667 -149 - -45.833333 -25.666667 -166 - -45.666667 -25.666667 -159 - -45.500000 -25.666667 -141 - -45.333333 -25.666667 -162 - -45.166667 -25.666667 -393 - -45.000000 -25.666667 -1226 - -44.833333 -25.666667 -1652 - -44.666667 -25.666667 -1944 - -44.500000 -25.666667 -1980 - -44.333333 -25.666667 -2038 - -44.166667 -25.666667 -2049 - -44.000000 -25.666667 -2112 - -43.833333 -25.666667 -2135 - -43.666667 -25.666667 -2119 - -43.500000 -25.666667 -2120 - -43.333333 -25.666667 -2126 - -43.166667 -25.666667 -2157 - -43.000000 -25.666667 -2162 - -42.833333 -25.666667 -2159 - -42.666667 -25.666667 -2231 - -42.500000 -25.666667 -2249 - -42.333333 -25.666667 -2344 - -42.166667 -25.666667 -2330 - -42.000000 -25.666667 -2527 - -41.833333 -25.666667 -2495 - -41.666667 -25.666667 -2485 - -41.500000 -25.666667 -2585 - -41.333333 -25.666667 -2557 - -41.166667 -25.666667 -2598 - -41.000000 -25.666667 -2927 - -40.833333 -25.666667 -2888 - -40.666667 -25.666667 -3002 - -40.500000 -25.666667 -3099 - -40.333333 -25.666667 -3126 - -40.166667 -25.666667 -3087 - -40.000000 -25.666667 -3293 - -65.000000 -25.833333 825 - -64.833333 -25.833333 697 - -64.666667 -25.833333 579 - -64.500000 -25.833333 539 - -64.333333 -25.833333 455 - -64.166667 -25.833333 347 - -64.000000 -25.833333 298 - -63.833333 -25.833333 275 - -63.666667 -25.833333 267 - -63.500000 -25.833333 260 - -63.333333 -25.833333 252 - -63.166667 -25.833333 243 - -63.000000 -25.833333 235 - -62.833333 -25.833333 223 - -62.666667 -25.833333 215 - -62.500000 -25.833333 205 - -62.333333 -25.833333 195 - -62.166667 -25.833333 185 - -62.000000 -25.833333 176 - -61.833333 -25.833333 168 - -61.666667 -25.833333 160 - -61.500000 -25.833333 153 - -61.333333 -25.833333 145 - -61.166667 -25.833333 138 - -61.000000 -25.833333 130 - -60.833333 -25.833333 120 - -60.666667 -25.833333 117 - -60.500000 -25.833333 114 - -60.333333 -25.833333 107 - -60.166667 -25.833333 108 - -60.000000 -25.833333 106 - -59.833333 -25.833333 104 - -59.666667 -25.833333 98 - -59.500000 -25.833333 91 - -59.333333 -25.833333 89 - -59.166667 -25.833333 86 - -59.000000 -25.833333 80 - -58.833333 -25.833333 81 - -58.666667 -25.833333 75 - -58.500000 -25.833333 72 - -58.333333 -25.833333 70 - -58.166667 -25.833333 69 - -58.000000 -25.833333 65 - -57.833333 -25.833333 53 - -57.666667 -25.833333 64 - -57.500000 -25.833333 62 - -57.333333 -25.833333 82 - -57.166667 -25.833333 116 - -57.000000 -25.833333 122 - -56.833333 -25.833333 173 - -56.666667 -25.833333 120 - -56.500000 -25.833333 123 - -56.333333 -25.833333 164 - -56.166667 -25.833333 257 - -56.000000 -25.833333 243 - -55.833333 -25.833333 260 - -55.666667 -25.833333 263 - -55.500000 -25.833333 253 - -55.333333 -25.833333 300 - -55.166667 -25.833333 290 - -55.000000 -25.833333 290 - -54.833333 -25.833333 263 - -54.666667 -25.833333 241 - -54.500000 -25.833333 222 - -54.333333 -25.833333 293 - -54.166667 -25.833333 305 - -54.000000 -25.833333 382 - -53.833333 -25.833333 337 - -53.666667 -25.833333 426 - -53.500000 -25.833333 485 - -53.333333 -25.833333 564 - -53.166667 -25.833333 527 - -53.000000 -25.833333 473 - -52.833333 -25.833333 532 - -52.666667 -25.833333 686 - -52.500000 -25.833333 677 - -52.333333 -25.833333 738 - -52.166667 -25.833333 618 - -52.000000 -25.833333 947 - -51.833333 -25.833333 1086 - -51.666667 -25.833333 1026 - -51.500000 -25.833333 1130 - -51.333333 -25.833333 895 - -51.166667 -25.833333 1082 - -51.000000 -25.833333 1164 - -50.833333 -25.833333 877 - -50.666667 -25.833333 848 - -50.500000 -25.833333 789 - -50.333333 -25.833333 783 - -50.166667 -25.833333 850 - -50.000000 -25.833333 844 - -49.833333 -25.833333 920 - -49.666667 -25.833333 827 - -49.500000 -25.833333 885 - -49.333333 -25.833333 921 - -49.166667 -25.833333 901 - -49.000000 -25.833333 782 - -48.833333 -25.833333 719 - -48.666667 -25.833333 4 - -48.500000 -25.833333 -1 - -48.333333 -25.833333 -12 - -48.166667 -25.833333 -22 - -48.000000 -25.833333 -31 - -47.833333 -25.833333 -40 - -47.666667 -25.833333 -52 - -47.500000 -25.833333 -60 - -47.333333 -25.833333 -71 - -47.166667 -25.833333 -77 - -47.000000 -25.833333 -91 - -46.833333 -25.833333 -111 - -46.666667 -25.833333 -124 - -46.500000 -25.833333 -143 - -46.333333 -25.833333 -150 - -46.166667 -25.833333 -153 - -46.000000 -25.833333 -178 - -45.833333 -25.833333 -275 - -45.666667 -25.833333 -222 - -45.500000 -25.833333 -585 - -45.333333 -25.833333 -552 - -45.166667 -25.833333 -979 - -45.000000 -25.833333 -1504 - -44.833333 -25.833333 -1784 - -44.666667 -25.833333 -2023 - -44.500000 -25.833333 -2117 - -44.333333 -25.833333 -2088 - -44.166667 -25.833333 -2106 - -44.000000 -25.833333 -2133 - -43.833333 -25.833333 -2186 - -43.666667 -25.833333 -2154 - -43.500000 -25.833333 -2167 - -43.333333 -25.833333 -2167 - -43.166667 -25.833333 -2193 - -43.000000 -25.833333 -2206 - -42.833333 -25.833333 -2234 - -42.666667 -25.833333 -2338 - -42.500000 -25.833333 -2313 - -42.333333 -25.833333 -2336 - -42.166667 -25.833333 -2392 - -42.000000 -25.833333 -2467 - -41.833333 -25.833333 -2509 - -41.666667 -25.833333 -2520 - -41.500000 -25.833333 -2777 - -41.333333 -25.833333 -2892 - -41.166667 -25.833333 -2816 - -41.000000 -25.833333 -2864 - -40.833333 -25.833333 -2983 - -40.666667 -25.833333 -2970 - -40.500000 -25.833333 -2963 - -40.333333 -25.833333 -3257 - -40.166667 -25.833333 -3314 - -40.000000 -25.833333 -3600 - -65.000000 -26.000000 1139 - -64.833333 -26.000000 1376 - -64.666667 -26.000000 629 - -64.500000 -26.000000 482 - -64.333333 -26.000000 415 - -64.166667 -26.000000 343 - -64.000000 -26.000000 301 - -63.833333 -26.000000 264 - -63.666667 -26.000000 254 - -63.500000 -26.000000 248 - -63.333333 -26.000000 243 - -63.166667 -26.000000 236 - -63.000000 -26.000000 227 - -62.833333 -26.000000 218 - -62.666667 -26.000000 207 - -62.500000 -26.000000 198 - -62.333333 -26.000000 190 - -62.166667 -26.000000 180 - -62.000000 -26.000000 174 - -61.833333 -26.000000 164 - -61.666667 -26.000000 158 - -61.500000 -26.000000 150 - -61.333333 -26.000000 143 - -61.166667 -26.000000 134 - -61.000000 -26.000000 128 - -60.833333 -26.000000 122 - -60.666667 -26.000000 115 - -60.500000 -26.000000 109 - -60.333333 -26.000000 107 - -60.166667 -26.000000 100 - -60.000000 -26.000000 97 - -59.833333 -26.000000 93 - -59.666667 -26.000000 93 - -59.500000 -26.000000 89 - -59.333333 -26.000000 89 - -59.166667 -26.000000 82 - -59.000000 -26.000000 79 - -58.833333 -26.000000 74 - -58.666667 -26.000000 75 - -58.500000 -26.000000 73 - -58.333333 -26.000000 68 - -58.166667 -26.000000 65 - -58.000000 -26.000000 60 - -57.833333 -26.000000 57 - -57.666667 -26.000000 60 - -57.500000 -26.000000 62 - -57.333333 -26.000000 89 - -57.166667 -26.000000 139 - -57.000000 -26.000000 120 - -56.833333 -26.000000 362 - -56.666667 -26.000000 248 - -56.500000 -26.000000 115 - -56.333333 -26.000000 127 - -56.166667 -26.000000 179 - -56.000000 -26.000000 208 - -55.833333 -26.000000 241 - -55.666667 -26.000000 356 - -55.500000 -26.000000 347 - -55.333333 -26.000000 266 - -55.166667 -26.000000 229 - -55.000000 -26.000000 190 - -54.833333 -26.000000 184 - -54.666667 -26.000000 183 - -54.500000 -26.000000 230 - -54.333333 -26.000000 291 - -54.166667 -26.000000 322 - -54.000000 -26.000000 339 - -53.833333 -26.000000 478 - -53.666667 -26.000000 536 - -53.500000 -26.000000 506 - -53.333333 -26.000000 680 - -53.166667 -26.000000 687 - -53.000000 -26.000000 525 - -52.833333 -26.000000 606 - -52.666667 -26.000000 554 - -52.500000 -26.000000 705 - -52.333333 -26.000000 977 - -52.166667 -26.000000 777 - -52.000000 -26.000000 794 - -51.833333 -26.000000 775 - -51.666667 -26.000000 761 - -51.500000 -26.000000 908 - -51.333333 -26.000000 887 - -51.166667 -26.000000 975 - -51.000000 -26.000000 1025 - -50.833333 -26.000000 811 - -50.666667 -26.000000 785 - -50.500000 -26.000000 776 - -50.333333 -26.000000 812 - -50.166667 -26.000000 808 - -50.000000 -26.000000 789 - -49.833333 -26.000000 867 - -49.666667 -26.000000 814 - -49.500000 -26.000000 910 - -49.333333 -26.000000 895 - -49.166667 -26.000000 831 - -49.000000 -26.000000 1147 - -48.833333 -26.000000 20 - -48.666667 -26.000000 19 - -48.500000 -26.000000 -8 - -48.333333 -26.000000 -23 - -48.166667 -26.000000 -29 - -48.000000 -26.000000 -39 - -47.833333 -26.000000 -46 - -47.666667 -26.000000 -57 - -47.500000 -26.000000 -69 - -47.333333 -26.000000 -80 - -47.166667 -26.000000 -99 - -47.000000 -26.000000 -110 - -46.833333 -26.000000 -123 - -46.666667 -26.000000 -140 - -46.500000 -26.000000 -224 - -46.333333 -26.000000 -168 - -46.166667 -26.000000 -243 - -46.000000 -26.000000 -301 - -45.833333 -26.000000 -419 - -45.666667 -26.000000 -454 - -45.500000 -26.000000 -813 - -45.333333 -26.000000 -1368 - -45.166667 -26.000000 -1527 - -45.000000 -26.000000 -1805 - -44.833333 -26.000000 -2034 - -44.666667 -26.000000 -2124 - -44.500000 -26.000000 -2147 - -44.333333 -26.000000 -2112 - -44.166667 -26.000000 -2172 - -44.000000 -26.000000 -2219 - -43.833333 -26.000000 -2222 - -43.666667 -26.000000 -2206 - -43.500000 -26.000000 -2180 - -43.333333 -26.000000 -2184 - -43.166667 -26.000000 -2234 - -43.000000 -26.000000 -2291 - -42.833333 -26.000000 -2274 - -42.666667 -26.000000 -2313 - -42.500000 -26.000000 -2445 - -42.333333 -26.000000 -2350 - -42.166667 -26.000000 -2518 - -42.000000 -26.000000 -2492 - -41.833333 -26.000000 -2602 - -41.666667 -26.000000 -2600 - -41.500000 -26.000000 -2602 - -41.333333 -26.000000 -2874 - -41.166667 -26.000000 -2723 - -41.000000 -26.000000 -2913 - -40.833333 -26.000000 -2986 - -40.666667 -26.000000 -3083 - -40.500000 -26.000000 -3073 - -40.333333 -26.000000 -3425 - -40.166667 -26.000000 -3819 - -40.000000 -26.000000 -4129 - -65.000000 -26.166667 1144 - -64.833333 -26.166667 1099 - -64.666667 -26.166667 564 - -64.500000 -26.166667 438 - -64.333333 -26.166667 344 - -64.166667 -26.166667 309 - -64.000000 -26.166667 278 - -63.833333 -26.166667 249 - -63.666667 -26.166667 242 - -63.500000 -26.166667 235 - -63.333333 -26.166667 231 - -63.166667 -26.166667 225 - -63.000000 -26.166667 218 - -62.833333 -26.166667 210 - -62.666667 -26.166667 205 - -62.500000 -26.166667 192 - -62.333333 -26.166667 185 - -62.166667 -26.166667 177 - -62.000000 -26.166667 169 - -61.833333 -26.166667 162 - -61.666667 -26.166667 154 - -61.500000 -26.166667 147 - -61.333333 -26.166667 137 - -61.166667 -26.166667 133 - -61.000000 -26.166667 126 - -60.833333 -26.166667 119 - -60.666667 -26.166667 111 - -60.500000 -26.166667 104 - -60.333333 -26.166667 100 - -60.166667 -26.166667 99 - -60.000000 -26.166667 96 - -59.833333 -26.166667 90 - -59.666667 -26.166667 90 - -59.500000 -26.166667 87 - -59.333333 -26.166667 84 - -59.166667 -26.166667 85 - -59.000000 -26.166667 78 - -58.833333 -26.166667 76 - -58.666667 -26.166667 72 - -58.500000 -26.166667 69 - -58.333333 -26.166667 65 - -58.166667 -26.166667 60 - -58.000000 -26.166667 59 - -57.833333 -26.166667 61 - -57.666667 -26.166667 61 - -57.500000 -26.166667 59 - -57.333333 -26.166667 71 - -57.166667 -26.166667 144 - -57.000000 -26.166667 103 - -56.833333 -26.166667 103 - -56.666667 -26.166667 94 - -56.500000 -26.166667 105 - -56.333333 -26.166667 127 - -56.166667 -26.166667 136 - -56.000000 -26.166667 142 - -55.833333 -26.166667 166 - -55.666667 -26.166667 184 - -55.500000 -26.166667 186 - -55.333333 -26.166667 318 - -55.166667 -26.166667 319 - -55.000000 -26.166667 315 - -54.833333 -26.166667 268 - -54.666667 -26.166667 134 - -54.500000 -26.166667 203 - -54.333333 -26.166667 265 - -54.166667 -26.166667 403 - -54.000000 -26.166667 517 - -53.833333 -26.166667 509 - -53.666667 -26.166667 702 - -53.500000 -26.166667 596 - -53.333333 -26.166667 717 - -53.166667 -26.166667 688 - -53.000000 -26.166667 649 - -52.833333 -26.166667 649 - -52.666667 -26.166667 789 - -52.500000 -26.166667 624 - -52.333333 -26.166667 932 - -52.166667 -26.166667 1006 - -52.000000 -26.166667 1093 - -51.833333 -26.166667 850 - -51.666667 -26.166667 1110 - -51.500000 -26.166667 923 - -51.333333 -26.166667 881 - -51.166667 -26.166667 811 - -51.000000 -26.166667 839 - -50.833333 -26.166667 790 - -50.666667 -26.166667 768 - -50.500000 -26.166667 802 - -50.333333 -26.166667 773 - -50.166667 -26.166667 793 - -50.000000 -26.166667 862 - -49.833333 -26.166667 825 - -49.666667 -26.166667 825 - -49.500000 -26.166667 842 - -49.333333 -26.166667 846 - -49.166667 -26.166667 895 - -49.000000 -26.166667 280 - -48.833333 -26.166667 6 - -48.666667 -26.166667 92 - -48.500000 -26.166667 -1 - -48.333333 -26.166667 -22 - -48.166667 -26.166667 -35 - -48.000000 -26.166667 -48 - -47.833333 -26.166667 -57 - -47.666667 -26.166667 -74 - -47.500000 -26.166667 -71 - -47.333333 -26.166667 -92 - -47.166667 -26.166667 -109 - -47.000000 -26.166667 -121 - -46.833333 -26.166667 -146 - -46.666667 -26.166667 -126 - -46.500000 -26.166667 -172 - -46.333333 -26.166667 -246 - -46.166667 -26.166667 -388 - -46.000000 -26.166667 -455 - -45.833333 -26.166667 -506 - -45.666667 -26.166667 -659 - -45.500000 -26.166667 -1022 - -45.333333 -26.166667 -1712 - -45.166667 -26.166667 -1941 - -45.000000 -26.166667 -2031 - -44.833333 -26.166667 -2158 - -44.666667 -26.166667 -2220 - -44.500000 -26.166667 -2254 - -44.333333 -26.166667 -2302 - -44.166667 -26.166667 -2336 - -44.000000 -26.166667 -2300 - -43.833333 -26.166667 -2269 - -43.666667 -26.166667 -2247 - -43.500000 -26.166667 -2243 - -43.333333 -26.166667 -2254 - -43.166667 -26.166667 -2281 - -43.000000 -26.166667 -2339 - -42.833333 -26.166667 -2394 - -42.666667 -26.166667 -2471 - -42.500000 -26.166667 -2536 - -42.333333 -26.166667 -2487 - -42.166667 -26.166667 -2596 - -42.000000 -26.166667 -2599 - -41.833333 -26.166667 -2522 - -41.666667 -26.166667 -2519 - -41.500000 -26.166667 -2648 - -41.333333 -26.166667 -2649 - -41.166667 -26.166667 -2657 - -41.000000 -26.166667 -2757 - -40.833333 -26.166667 -2957 - -40.666667 -26.166667 -2942 - -40.500000 -26.166667 -3189 - -40.333333 -26.166667 -3450 - -40.166667 -26.166667 -3290 - -40.000000 -26.166667 -1716 - -65.000000 -26.333333 1494 - -64.833333 -26.333333 1113 - -64.666667 -26.333333 533 - -64.500000 -26.333333 410 - -64.333333 -26.333333 326 - -64.166667 -26.333333 282 - -64.000000 -26.333333 261 - -63.833333 -26.333333 236 - -63.666667 -26.333333 225 - -63.500000 -26.333333 222 - -63.333333 -26.333333 219 - -63.166667 -26.333333 215 - -63.000000 -26.333333 209 - -62.833333 -26.333333 203 - -62.666667 -26.333333 196 - -62.500000 -26.333333 190 - -62.333333 -26.333333 178 - -62.166667 -26.333333 172 - -62.000000 -26.333333 164 - -61.833333 -26.333333 156 - -61.666667 -26.333333 148 - -61.500000 -26.333333 142 - -61.333333 -26.333333 136 - -61.166667 -26.333333 129 - -61.000000 -26.333333 122 - -60.833333 -26.333333 116 - -60.666667 -26.333333 109 - -60.500000 -26.333333 104 - -60.333333 -26.333333 97 - -60.166667 -26.333333 93 - -60.000000 -26.333333 94 - -59.833333 -26.333333 95 - -59.666667 -26.333333 86 - -59.500000 -26.333333 83 - -59.333333 -26.333333 81 - -59.166667 -26.333333 77 - -59.000000 -26.333333 75 - -58.833333 -26.333333 70 - -58.666667 -26.333333 68 - -58.500000 -26.333333 66 - -58.333333 -26.333333 64 - -58.166667 -26.333333 57 - -58.000000 -26.333333 60 - -57.833333 -26.333333 59 - -57.666667 -26.333333 60 - -57.500000 -26.333333 62 - -57.333333 -26.333333 101 - -57.166667 -26.333333 164 - -57.000000 -26.333333 83 - -56.833333 -26.333333 89 - -56.666667 -26.333333 88 - -56.500000 -26.333333 115 - -56.333333 -26.333333 119 - -56.166667 -26.333333 129 - -56.000000 -26.333333 144 - -55.833333 -26.333333 146 - -55.666667 -26.333333 251 - -55.500000 -26.333333 443 - -55.333333 -26.333333 299 - -55.166667 -26.333333 314 - -55.000000 -26.333333 341 - -54.833333 -26.333333 289 - -54.666667 -26.333333 129 - -54.500000 -26.333333 233 - -54.333333 -26.333333 255 - -54.166667 -26.333333 551 - -54.000000 -26.333333 508 - -53.833333 -26.333333 615 - -53.666667 -26.333333 675 - -53.500000 -26.333333 767 - -53.333333 -26.333333 740 - -53.166667 -26.333333 872 - -53.000000 -26.333333 813 - -52.833333 -26.333333 826 - -52.666667 -26.333333 825 - -52.500000 -26.333333 875 - -52.333333 -26.333333 867 - -52.166667 -26.333333 931 - -52.000000 -26.333333 1080 - -51.833333 -26.333333 1226 - -51.666667 -26.333333 1132 - -51.500000 -26.333333 1102 - -51.333333 -26.333333 1038 - -51.166667 -26.333333 1018 - -51.000000 -26.333333 877 - -50.833333 -26.333333 786 - -50.666667 -26.333333 825 - -50.500000 -26.333333 804 - -50.333333 -26.333333 785 - -50.166667 -26.333333 829 - -50.000000 -26.333333 859 - -49.833333 -26.333333 920 - -49.666667 -26.333333 866 - -49.500000 -26.333333 905 - -49.333333 -26.333333 617 - -49.166667 -26.333333 1022 - -49.000000 -26.333333 225 - -48.833333 -26.333333 16 - -48.666667 -26.333333 20 - -48.500000 -26.333333 -9 - -48.333333 -26.333333 -28 - -48.166667 -26.333333 -41 - -48.000000 -26.333333 -53 - -47.833333 -26.333333 -60 - -47.666667 -26.333333 -71 - -47.500000 -26.333333 -87 - -47.333333 -26.333333 -98 - -47.166667 -26.333333 -119 - -47.000000 -26.333333 -153 - -46.833333 -26.333333 -139 - -46.666667 -26.333333 -157 - -46.500000 -26.333333 -266 - -46.333333 -26.333333 -327 - -46.166667 -26.333333 -460 - -46.000000 -26.333333 -532 - -45.833333 -26.333333 -620 - -45.666667 -26.333333 -888 - -45.500000 -26.333333 -1460 - -45.333333 -26.333333 -2022 - -45.166667 -26.333333 -2006 - -45.000000 -26.333333 -2206 - -44.833333 -26.333333 -2273 - -44.666667 -26.333333 -2343 - -44.500000 -26.333333 -2353 - -44.333333 -26.333333 -2362 - -44.166667 -26.333333 -2400 - -44.000000 -26.333333 -2396 - -43.833333 -26.333333 -2358 - -43.666667 -26.333333 -2309 - -43.500000 -26.333333 -2290 - -43.333333 -26.333333 -2284 - -43.166667 -26.333333 -2348 - -43.000000 -26.333333 -2367 - -42.833333 -26.333333 -2454 - -42.666667 -26.333333 -2451 - -42.500000 -26.333333 -2437 - -42.333333 -26.333333 -2475 - -42.166667 -26.333333 -2470 - -42.000000 -26.333333 -2459 - -41.833333 -26.333333 -2540 - -41.666667 -26.333333 -2480 - -41.500000 -26.333333 -2596 - -41.333333 -26.333333 -2554 - -41.166667 -26.333333 -2640 - -41.000000 -26.333333 -2787 - -40.833333 -26.333333 -2847 - -40.666667 -26.333333 -2977 - -40.500000 -26.333333 -3282 - -40.333333 -26.333333 -3517 - -40.166667 -26.333333 -3576 - -40.000000 -26.333333 -2110 - -65.000000 -26.500000 969 - -64.833333 -26.500000 665 - -64.666667 -26.500000 452 - -64.500000 -26.500000 365 - -64.333333 -26.500000 296 - -64.166667 -26.500000 257 - -64.000000 -26.500000 245 - -63.833333 -26.500000 225 - -63.666667 -26.500000 213 - -63.500000 -26.500000 211 - -63.333333 -26.500000 209 - -63.166667 -26.500000 204 - -63.000000 -26.500000 199 - -62.833333 -26.500000 196 - -62.666667 -26.500000 192 - -62.500000 -26.500000 185 - -62.333333 -26.500000 175 - -62.166667 -26.500000 170 - -62.000000 -26.500000 162 - -61.833333 -26.500000 190 - -61.666667 -26.500000 160 - -61.500000 -26.500000 137 - -61.333333 -26.500000 131 - -61.166667 -26.500000 124 - -61.000000 -26.500000 121 - -60.833333 -26.500000 110 - -60.666667 -26.500000 106 - -60.500000 -26.500000 103 - -60.333333 -26.500000 97 - -60.166667 -26.500000 92 - -60.000000 -26.500000 90 - -59.833333 -26.500000 87 - -59.666667 -26.500000 83 - -59.500000 -26.500000 79 - -59.333333 -26.500000 79 - -59.166667 -26.500000 75 - -59.000000 -26.500000 71 - -58.833333 -26.500000 69 - -58.666667 -26.500000 67 - -58.500000 -26.500000 63 - -58.333333 -26.500000 59 - -58.166667 -26.500000 61 - -58.000000 -26.500000 55 - -57.833333 -26.500000 60 - -57.666667 -26.500000 61 - -57.500000 -26.500000 62 - -57.333333 -26.500000 65 - -57.166667 -26.500000 69 - -57.000000 -26.500000 95 - -56.833333 -26.500000 79 - -56.666667 -26.500000 84 - -56.500000 -26.500000 89 - -56.333333 -26.500000 86 - -56.166667 -26.500000 153 - -56.000000 -26.500000 112 - -55.833333 -26.500000 135 - -55.666667 -26.500000 288 - -55.500000 -26.500000 378 - -55.333333 -26.500000 284 - -55.166667 -26.500000 276 - -55.000000 -26.500000 285 - -54.833333 -26.500000 221 - -54.666667 -26.500000 182 - -54.500000 -26.500000 191 - -54.333333 -26.500000 251 - -54.166667 -26.500000 522 - -54.000000 -26.500000 557 - -53.833333 -26.500000 549 - -53.666667 -26.500000 495 - -53.500000 -26.500000 695 - -53.333333 -26.500000 612 - -53.166667 -26.500000 712 - -53.000000 -26.500000 627 - -52.833333 -26.500000 774 - -52.666667 -26.500000 737 - -52.500000 -26.500000 787 - -52.333333 -26.500000 855 - -52.166667 -26.500000 921 - -52.000000 -26.500000 1104 - -51.833333 -26.500000 1177 - -51.666667 -26.500000 1213 - -51.500000 -26.500000 1111 - -51.333333 -26.500000 1054 - -51.166667 -26.500000 1064 - -51.000000 -26.500000 1082 - -50.833333 -26.500000 930 - -50.666667 -26.500000 897 - -50.500000 -26.500000 996 - -50.333333 -26.500000 831 - -50.166667 -26.500000 556 - -50.000000 -26.500000 584 - -49.833333 -26.500000 922 - -49.666667 -26.500000 971 - -49.500000 -26.500000 928 - -49.333333 -26.500000 598 - -49.166667 -26.500000 112 - -49.000000 -26.500000 96 - -48.833333 -26.500000 14 - -48.666667 -26.500000 15 - -48.500000 -26.500000 -21 - -48.333333 -26.500000 -35 - -48.166667 -26.500000 -45 - -48.000000 -26.500000 -51 - -47.833333 -26.500000 -57 - -47.666667 -26.500000 -73 - -47.500000 -26.500000 -90 - -47.333333 -26.500000 -109 - -47.166667 -26.500000 -120 - -47.000000 -26.500000 -145 - -46.833333 -26.500000 -152 - -46.666667 -26.500000 -215 - -46.500000 -26.500000 -349 - -46.333333 -26.500000 -411 - -46.166667 -26.500000 -522 - -46.000000 -26.500000 -610 - -45.833333 -26.500000 -859 - -45.666667 -26.500000 -1375 - -45.500000 -26.500000 -1845 - -45.333333 -26.500000 -2102 - -45.166667 -26.500000 -2148 - -45.000000 -26.500000 -2381 - -44.833333 -26.500000 -2382 - -44.666667 -26.500000 -2241 - -44.500000 -26.500000 -2477 - -44.333333 -26.500000 -2527 - -44.166667 -26.500000 -2521 - -44.000000 -26.500000 -2547 - -43.833333 -26.500000 -2466 - -43.666667 -26.500000 -2377 - -43.500000 -26.500000 -2422 - -43.333333 -26.500000 -2338 - -43.166667 -26.500000 -2366 - -43.000000 -26.500000 -2402 - -42.833333 -26.500000 -2391 - -42.666667 -26.500000 -2392 - -42.500000 -26.500000 -2415 - -42.333333 -26.500000 -2387 - -42.166667 -26.500000 -2367 - -42.000000 -26.500000 -2475 - -41.833333 -26.500000 -2497 - -41.666667 -26.500000 -2406 - -41.500000 -26.500000 -2457 - -41.333333 -26.500000 -2561 - -41.166667 -26.500000 -2622 - -41.000000 -26.500000 -2571 - -40.833333 -26.500000 -2682 - -40.666667 -26.500000 -2834 - -40.500000 -26.500000 -3297 - -40.333333 -26.500000 -3572 - -40.166667 -26.500000 -3651 - -40.000000 -26.500000 -3651 - -65.000000 -26.666667 808 - -64.833333 -26.666667 461 - -64.666667 -26.666667 389 - -64.500000 -26.666667 318 - -64.333333 -26.666667 258 - -64.166667 -26.666667 231 - -64.000000 -26.666667 224 - -63.833333 -26.666667 214 - -63.666667 -26.666667 204 - -63.500000 -26.666667 201 - -63.333333 -26.666667 197 - -63.166667 -26.666667 194 - -63.000000 -26.666667 193 - -62.833333 -26.666667 187 - -62.666667 -26.666667 187 - -62.500000 -26.666667 181 - -62.333333 -26.666667 173 - -62.166667 -26.666667 166 - -62.000000 -26.666667 160 - -61.833333 -26.666667 196 - -61.666667 -26.666667 153 - -61.500000 -26.666667 139 - -61.333333 -26.666667 126 - -61.166667 -26.666667 118 - -61.000000 -26.666667 114 - -60.833333 -26.666667 108 - -60.666667 -26.666667 102 - -60.500000 -26.666667 100 - -60.333333 -26.666667 94 - -60.166667 -26.666667 89 - -60.000000 -26.666667 85 - -59.833333 -26.666667 85 - -59.666667 -26.666667 82 - -59.500000 -26.666667 80 - -59.333333 -26.666667 78 - -59.166667 -26.666667 75 - -59.000000 -26.666667 68 - -58.833333 -26.666667 69 - -58.666667 -26.666667 63 - -58.500000 -26.666667 58 - -58.333333 -26.666667 58 - -58.166667 -26.666667 59 - -58.000000 -26.666667 59 - -57.833333 -26.666667 63 - -57.666667 -26.666667 65 - -57.500000 -26.666667 67 - -57.333333 -26.666667 70 - -57.166667 -26.666667 115 - -57.000000 -26.666667 102 - -56.833333 -26.666667 77 - -56.666667 -26.666667 77 - -56.500000 -26.666667 84 - -56.333333 -26.666667 89 - -56.166667 -26.666667 101 - -56.000000 -26.666667 117 - -55.833333 -26.666667 206 - -55.666667 -26.666667 302 - -55.500000 -26.666667 297 - -55.333333 -26.666667 179 - -55.166667 -26.666667 261 - -55.000000 -26.666667 147 - -54.833333 -26.666667 148 - -54.666667 -26.666667 213 - -54.500000 -26.666667 521 - -54.333333 -26.666667 351 - -54.166667 -26.666667 541 - -54.000000 -26.666667 540 - -53.833333 -26.666667 546 - -53.666667 -26.666667 457 - -53.500000 -26.666667 592 - -53.333333 -26.666667 467 - -53.166667 -26.666667 584 - -53.000000 -26.666667 576 - -52.833333 -26.666667 618 - -52.666667 -26.666667 628 - -52.500000 -26.666667 639 - -52.333333 -26.666667 841 - -52.166667 -26.666667 992 - -52.000000 -26.666667 936 - -51.833333 -26.666667 1125 - -51.666667 -26.666667 1201 - -51.500000 -26.666667 1223 - -51.333333 -26.666667 1150 - -51.166667 -26.666667 1228 - -51.000000 -26.666667 1154 - -50.833333 -26.666667 1120 - -50.666667 -26.666667 1003 - -50.500000 -26.666667 1070 - -50.333333 -26.666667 830 - -50.166667 -26.666667 610 - -50.000000 -26.666667 721 - -49.833333 -26.666667 508 - -49.666667 -26.666667 994 - -49.500000 -26.666667 834 - -49.333333 -26.666667 393 - -49.166667 -26.666667 215 - -49.000000 -26.666667 190 - -48.833333 -26.666667 166 - -48.666667 -26.666667 -1 - -48.500000 -26.666667 -22 - -48.333333 -26.666667 -40 - -48.166667 -26.666667 -47 - -48.000000 -26.666667 -45 - -47.833333 -26.666667 -63 - -47.666667 -26.666667 -89 - -47.500000 -26.666667 -104 - -47.333333 -26.666667 -115 - -47.166667 -26.666667 -117 - -47.000000 -26.666667 -147 - -46.833333 -26.666667 -164 - -46.666667 -26.666667 -225 - -46.500000 -26.666667 -366 - -46.333333 -26.666667 -481 - -46.166667 -26.666667 -570 - -46.000000 -26.666667 -727 - -45.833333 -26.666667 -1204 - -45.666667 -26.666667 -1671 - -45.500000 -26.666667 -2087 - -45.333333 -26.666667 -2188 - -45.166667 -26.666667 -2263 - -45.000000 -26.666667 -2438 - -44.833333 -26.666667 -2557 - -44.666667 -26.666667 -2579 - -44.500000 -26.666667 -2530 - -44.333333 -26.666667 -2596 - -44.166667 -26.666667 -2587 - -44.000000 -26.666667 -2604 - -43.833333 -26.666667 -2547 - -43.666667 -26.666667 -2477 - -43.500000 -26.666667 -2442 - -43.333333 -26.666667 -2448 - -43.166667 -26.666667 -2408 - -43.000000 -26.666667 -2373 - -42.833333 -26.666667 -2373 - -42.666667 -26.666667 -2402 - -42.500000 -26.666667 -2349 - -42.333333 -26.666667 -2373 - -42.166667 -26.666667 -2380 - -42.000000 -26.666667 -2381 - -41.833333 -26.666667 -2399 - -41.666667 -26.666667 -2579 - -41.500000 -26.666667 -2438 - -41.333333 -26.666667 -2576 - -41.166667 -26.666667 -2557 - -41.000000 -26.666667 -2577 - -40.833333 -26.666667 -2839 - -40.666667 -26.666667 -3093 - -40.500000 -26.666667 -3352 - -40.333333 -26.666667 -3646 - -40.166667 -26.666667 -3268 - -40.000000 -26.666667 -2654 - -65.000000 -26.833333 447 - -64.833333 -26.833333 380 - -64.666667 -26.833333 324 - -64.500000 -26.833333 274 - -64.333333 -26.833333 231 - -64.166667 -26.833333 206 - -64.000000 -26.833333 205 - -63.833333 -26.833333 193 - -63.666667 -26.833333 192 - -63.500000 -26.833333 191 - -63.333333 -26.833333 189 - -63.166667 -26.833333 186 - -63.000000 -26.833333 183 - -62.833333 -26.833333 180 - -62.666667 -26.833333 174 - -62.500000 -26.833333 174 - -62.333333 -26.833333 168 - -62.166667 -26.833333 164 - -62.000000 -26.833333 156 - -61.833333 -26.833333 173 - -61.666667 -26.833333 145 - -61.500000 -26.833333 115 - -61.333333 -26.833333 117 - -61.166667 -26.833333 113 - -61.000000 -26.833333 109 - -60.833333 -26.833333 104 - -60.666667 -26.833333 101 - -60.500000 -26.833333 96 - -60.333333 -26.833333 90 - -60.166667 -26.833333 85 - -60.000000 -26.833333 81 - -59.833333 -26.833333 79 - -59.666667 -26.833333 75 - -59.500000 -26.833333 76 - -59.333333 -26.833333 74 - -59.166667 -26.833333 72 - -59.000000 -26.833333 64 - -58.833333 -26.833333 62 - -58.666667 -26.833333 58 - -58.500000 -26.833333 58 - -58.333333 -26.833333 51 - -58.166667 -26.833333 59 - -58.000000 -26.833333 61 - -57.833333 -26.833333 64 - -57.666667 -26.833333 66 - -57.500000 -26.833333 69 - -57.333333 -26.833333 74 - -57.166667 -26.833333 109 - -57.000000 -26.833333 165 - -56.833333 -26.833333 143 - -56.666667 -26.833333 86 - -56.500000 -26.833333 88 - -56.333333 -26.833333 91 - -56.166667 -26.833333 145 - -56.000000 -26.833333 175 - -55.833333 -26.833333 255 - -55.666667 -26.833333 243 - -55.500000 -26.833333 201 - -55.333333 -26.833333 257 - -55.166667 -26.833333 178 - -55.000000 -26.833333 221 - -54.833333 -26.833333 245 - -54.666667 -26.833333 215 - -54.500000 -26.833333 364 - -54.333333 -26.833333 489 - -54.166667 -26.833333 491 - -54.000000 -26.833333 388 - -53.833333 -26.833333 435 - -53.666667 -26.833333 354 - -53.500000 -26.833333 561 - -53.333333 -26.833333 411 - -53.166667 -26.833333 578 - -53.000000 -26.833333 497 - -52.833333 -26.833333 430 - -52.666667 -26.833333 513 - -52.500000 -26.833333 646 - -52.333333 -26.833333 841 - -52.166667 -26.833333 818 - -52.000000 -26.833333 1050 - -51.833333 -26.833333 1041 - -51.666667 -26.833333 1143 - -51.500000 -26.833333 1270 - -51.333333 -26.833333 1067 - -51.166667 -26.833333 1042 - -51.000000 -26.833333 918 - -50.833333 -26.833333 1137 - -50.666667 -26.833333 1181 - -50.500000 -26.833333 1266 - -50.333333 -26.833333 1249 - -50.166667 -26.833333 721 - -50.000000 -26.833333 663 - -49.833333 -26.833333 679 - -49.666667 -26.833333 671 - -49.500000 -26.833333 614 - -49.333333 -26.833333 119 - -49.166667 -26.833333 59 - -49.000000 -26.833333 218 - -48.833333 -26.833333 66 - -48.666667 -26.833333 93 - -48.500000 -26.833333 -22 - -48.333333 -26.833333 -44 - -48.166667 -26.833333 -47 - -48.000000 -26.833333 -55 - -47.833333 -26.833333 -60 - -47.666667 -26.833333 -94 - -47.500000 -26.833333 -110 - -47.333333 -26.833333 -115 - -47.166667 -26.833333 -147 - -47.000000 -26.833333 -182 - -46.833333 -26.833333 -191 - -46.666667 -26.833333 -225 - -46.500000 -26.833333 -341 - -46.333333 -26.833333 -482 - -46.166667 -26.833333 -720 - -46.000000 -26.833333 -1064 - -45.833333 -26.833333 -1456 - -45.666667 -26.833333 -2009 - -45.500000 -26.833333 -2113 - -45.333333 -26.833333 -2209 - -45.166667 -26.833333 -2400 - -45.000000 -26.833333 -2262 - -44.833333 -26.833333 -2142 - -44.666667 -26.833333 -2663 - -44.500000 -26.833333 -2627 - -44.333333 -26.833333 -2628 - -44.166667 -26.833333 -2587 - -44.000000 -26.833333 -2599 - -43.833333 -26.833333 -2596 - -43.666667 -26.833333 -2519 - -43.500000 -26.833333 -2470 - -43.333333 -26.833333 -2466 - -43.166667 -26.833333 -2483 - -43.000000 -26.833333 -2356 - -42.833333 -26.833333 -2296 - -42.666667 -26.833333 -2336 - -42.500000 -26.833333 -2379 - -42.333333 -26.833333 -2470 - -42.166667 -26.833333 -2488 - -42.000000 -26.833333 -2451 - -41.833333 -26.833333 -2466 - -41.666667 -26.833333 -2540 - -41.500000 -26.833333 -2621 - -41.333333 -26.833333 -2648 - -41.166667 -26.833333 -2833 - -41.000000 -26.833333 -2908 - -40.833333 -26.833333 -3067 - -40.666667 -26.833333 -3283 - -40.500000 -26.833333 -3459 - -40.333333 -26.833333 -3641 - -40.166667 -26.833333 -3870 - -40.000000 -26.833333 -3454 - -65.000000 -27.000000 375 - -64.833333 -27.000000 433 - -64.666667 -27.000000 320 - -64.500000 -27.000000 255 - -64.333333 -27.000000 244 - -64.166667 -27.000000 191 - -64.000000 -27.000000 186 - -63.833333 -27.000000 180 - -63.666667 -27.000000 179 - -63.500000 -27.000000 180 - -63.333333 -27.000000 177 - -63.166667 -27.000000 177 - -63.000000 -27.000000 173 - -62.833333 -27.000000 170 - -62.666667 -27.000000 167 - -62.500000 -27.000000 163 - -62.333333 -27.000000 164 - -62.166667 -27.000000 165 - -62.000000 -27.000000 154 - -61.833333 -27.000000 194 - -61.666667 -27.000000 140 - -61.500000 -27.000000 107 - -61.333333 -27.000000 110 - -61.166667 -27.000000 106 - -61.000000 -27.000000 104 - -60.833333 -27.000000 100 - -60.666667 -27.000000 97 - -60.500000 -27.000000 91 - -60.333333 -27.000000 87 - -60.166667 -27.000000 82 - -60.000000 -27.000000 81 - -59.833333 -27.000000 75 - -59.666667 -27.000000 72 - -59.500000 -27.000000 72 - -59.333333 -27.000000 69 - -59.166667 -27.000000 66 - -59.000000 -27.000000 69 - -58.833333 -27.000000 61 - -58.666667 -27.000000 58 - -58.500000 -27.000000 54 - -58.333333 -27.000000 59 - -58.166667 -27.000000 60 - -58.000000 -27.000000 62 - -57.833333 -27.000000 66 - -57.666667 -27.000000 68 - -57.500000 -27.000000 70 - -57.333333 -27.000000 71 - -57.166667 -27.000000 71 - -57.000000 -27.000000 101 - -56.833333 -27.000000 155 - -56.666667 -27.000000 114 - -56.500000 -27.000000 86 - -56.333333 -27.000000 88 - -56.166667 -27.000000 181 - -56.000000 -27.000000 130 - -55.833333 -27.000000 256 - -55.666667 -27.000000 170 - -55.500000 -27.000000 204 - -55.333333 -27.000000 196 - -55.166667 -27.000000 174 - -55.000000 -27.000000 208 - -54.833333 -27.000000 488 - -54.666667 -27.000000 476 - -54.500000 -27.000000 527 - -54.333333 -27.000000 340 - -54.166667 -27.000000 487 - -54.000000 -27.000000 281 - -53.833333 -27.000000 253 - -53.666667 -27.000000 356 - -53.500000 -27.000000 470 - -53.333333 -27.000000 298 - -53.166667 -27.000000 438 - -53.000000 -27.000000 362 - -52.833333 -27.000000 498 - -52.666667 -27.000000 702 - -52.500000 -27.000000 762 - -52.333333 -27.000000 726 - -52.166667 -27.000000 885 - -52.000000 -27.000000 950 - -51.833333 -27.000000 943 - -51.666667 -27.000000 949 - -51.500000 -27.000000 857 - -51.333333 -27.000000 756 - -51.166667 -27.000000 749 - -51.000000 -27.000000 959 - -50.833333 -27.000000 964 - -50.666667 -27.000000 935 - -50.500000 -27.000000 1059 - -50.333333 -27.000000 1137 - -50.166667 -27.000000 563 - -50.000000 -27.000000 625 - -49.833333 -27.000000 577 - -49.666667 -27.000000 360 - -49.500000 -27.000000 353 - -49.333333 -27.000000 226 - -49.166667 -27.000000 483 - -49.000000 -27.000000 342 - -48.833333 -27.000000 17 - -48.666667 -27.000000 35 - -48.500000 -27.000000 -24 - -48.333333 -27.000000 -42 - -48.166667 -27.000000 -54 - -48.000000 -27.000000 -67 - -47.833333 -27.000000 -98 - -47.666667 -27.000000 -105 - -47.500000 -27.000000 -152 - -47.333333 -27.000000 -115 - -47.166667 -27.000000 -146 - -47.000000 -27.000000 -186 - -46.833333 -27.000000 -207 - -46.666667 -27.000000 -301 - -46.500000 -27.000000 -402 - -46.333333 -27.000000 -627 - -46.166667 -27.000000 -1187 - -46.000000 -27.000000 -1426 - -45.833333 -27.000000 -1789 - -45.666667 -27.000000 -2077 - -45.500000 -27.000000 -2228 - -45.333333 -27.000000 -2290 - -45.166667 -27.000000 -2434 - -45.000000 -27.000000 -2454 - -44.833333 -27.000000 -2457 - -44.666667 -27.000000 -2667 - -44.500000 -27.000000 -2753 - -44.333333 -27.000000 -2687 - -44.166667 -27.000000 -2696 - -44.000000 -27.000000 -2647 - -43.833333 -27.000000 -2676 - -43.666667 -27.000000 -2624 - -43.500000 -27.000000 -2566 - -43.333333 -27.000000 -2533 - -43.166667 -27.000000 -2443 - -43.000000 -27.000000 -2489 - -42.833333 -27.000000 -2442 - -42.666667 -27.000000 -2394 - -42.500000 -27.000000 -2459 - -42.333333 -27.000000 -2430 - -42.166667 -27.000000 -2521 - -42.000000 -27.000000 -2674 - -41.833333 -27.000000 -2673 - -41.666667 -27.000000 -2766 - -41.500000 -27.000000 -2858 - -41.333333 -27.000000 -2897 - -41.166667 -27.000000 -3061 - -41.000000 -27.000000 -3096 - -40.833333 -27.000000 -3347 - -40.666667 -27.000000 -3240 - -40.500000 -27.000000 -3443 - -40.333333 -27.000000 -3673 - -40.166667 -27.000000 -3747 - -40.000000 -27.000000 -3934 - -65.000000 -27.166667 334 - -64.833333 -27.166667 406 - -64.666667 -27.166667 293 - -64.500000 -27.166667 263 - -64.333333 -27.166667 245 - -64.166667 -27.166667 183 - -64.000000 -27.166667 168 - -63.833333 -27.166667 170 - -63.666667 -27.166667 170 - -63.500000 -27.166667 170 - -63.333333 -27.166667 169 - -63.166667 -27.166667 168 - -63.000000 -27.166667 164 - -62.833333 -27.166667 161 - -62.666667 -27.166667 162 - -62.500000 -27.166667 160 - -62.333333 -27.166667 156 - -62.166667 -27.166667 167 - -62.000000 -27.166667 155 - -61.833333 -27.166667 188 - -61.666667 -27.166667 143 - -61.500000 -27.166667 100 - -61.333333 -27.166667 104 - -61.166667 -27.166667 101 - -61.000000 -27.166667 98 - -60.833333 -27.166667 92 - -60.666667 -27.166667 91 - -60.500000 -27.166667 86 - -60.333333 -27.166667 82 - -60.166667 -27.166667 80 - -60.000000 -27.166667 75 - -59.833333 -27.166667 72 - -59.666667 -27.166667 73 - -59.500000 -27.166667 67 - -59.333333 -27.166667 64 - -59.166667 -27.166667 59 - -59.000000 -27.166667 61 - -58.833333 -27.166667 60 - -58.666667 -27.166667 52 - -58.500000 -27.166667 54 - -58.333333 -27.166667 59 - -58.166667 -27.166667 60 - -58.000000 -27.166667 61 - -57.833333 -27.166667 64 - -57.666667 -27.166667 65 - -57.500000 -27.166667 68 - -57.333333 -27.166667 69 - -57.166667 -27.166667 71 - -57.000000 -27.166667 77 - -56.833333 -27.166667 80 - -56.666667 -27.166667 82 - -56.500000 -27.166667 119 - -56.333333 -27.166667 96 - -56.166667 -27.166667 87 - -56.000000 -27.166667 156 - -55.833333 -27.166667 196 - -55.666667 -27.166667 130 - -55.500000 -27.166667 142 - -55.333333 -27.166667 151 - -55.166667 -27.166667 341 - -55.000000 -27.166667 375 - -54.833333 -27.166667 331 - -54.666667 -27.166667 464 - -54.500000 -27.166667 365 - -54.333333 -27.166667 369 - -54.166667 -27.166667 319 - -54.000000 -27.166667 273 - -53.833333 -27.166667 190 - -53.666667 -27.166667 202 - -53.500000 -27.166667 208 - -53.333333 -27.166667 289 - -53.166667 -27.166667 240 - -53.000000 -27.166667 361 - -52.833333 -27.166667 395 - -52.666667 -27.166667 644 - -52.500000 -27.166667 436 - -52.333333 -27.166667 608 - -52.166667 -27.166667 505 - -52.000000 -27.166667 706 - -51.833333 -27.166667 746 - -51.666667 -27.166667 807 - -51.500000 -27.166667 582 - -51.333333 -27.166667 844 - -51.166667 -27.166667 828 - -51.000000 -27.166667 1018 - -50.833333 -27.166667 916 - -50.666667 -27.166667 884 - -50.500000 -27.166667 998 - -50.333333 -27.166667 1117 - -50.166667 -27.166667 727 - -50.000000 -27.166667 539 - -49.833333 -27.166667 370 - -49.666667 -27.166667 657 - -49.500000 -27.166667 476 - -49.333333 -27.166667 417 - -49.166667 -27.166667 620 - -49.000000 -27.166667 136 - -48.833333 -27.166667 153 - -48.666667 -27.166667 258 - -48.500000 -27.166667 45 - -48.333333 -27.166667 -24 - -48.166667 -27.166667 -63 - -48.000000 -27.166667 -70 - -47.833333 -27.166667 -75 - -47.666667 -27.166667 -117 - -47.500000 -27.166667 -132 - -47.333333 -27.166667 -150 - -47.166667 -27.166667 -181 - -47.000000 -27.166667 -340 - -46.833333 -27.166667 -470 - -46.666667 -27.166667 -636 - -46.500000 -27.166667 -958 - -46.333333 -27.166667 -1399 - -46.166667 -27.166667 -1604 - -46.000000 -27.166667 -1833 - -45.833333 -27.166667 -1993 - -45.666667 -27.166667 -2151 - -45.500000 -27.166667 -2245 - -45.333333 -27.166667 -2564 - -45.166667 -27.166667 -2646 - -45.000000 -27.166667 -2639 - -44.833333 -27.166667 -2576 - -44.666667 -27.166667 -2777 - -44.500000 -27.166667 -2681 - -44.333333 -27.166667 -2689 - -44.166667 -27.166667 -2845 - -44.000000 -27.166667 -2862 - -43.833333 -27.166667 -2711 - -43.666667 -27.166667 -2644 - -43.500000 -27.166667 -2622 - -43.333333 -27.166667 -2530 - -43.166667 -27.166667 -2439 - -43.000000 -27.166667 -2372 - -42.833333 -27.166667 -2399 - -42.666667 -27.166667 -2462 - -42.500000 -27.166667 -2431 - -42.333333 -27.166667 -2553 - -42.166667 -27.166667 -2704 - -42.000000 -27.166667 -2849 - -41.833333 -27.166667 -2909 - -41.666667 -27.166667 -2985 - -41.500000 -27.166667 -3046 - -41.333333 -27.166667 -3118 - -41.166667 -27.166667 -3189 - -41.000000 -27.166667 -3274 - -40.833333 -27.166667 -3313 - -40.666667 -27.166667 -3369 - -40.500000 -27.166667 -3478 - -40.333333 -27.166667 -3629 - -40.166667 -27.166667 -3599 - -40.000000 -27.166667 -3796 - -65.000000 -27.333333 301 - -64.833333 -27.333333 319 - -64.666667 -27.333333 328 - -64.500000 -27.333333 242 - -64.333333 -27.333333 237 - -64.166667 -27.333333 168 - -64.000000 -27.333333 159 - -63.833333 -27.333333 159 - -63.666667 -27.333333 160 - -63.500000 -27.333333 160 - -63.333333 -27.333333 159 - -63.166667 -27.333333 158 - -63.000000 -27.333333 158 - -62.833333 -27.333333 159 - -62.666667 -27.333333 157 - -62.500000 -27.333333 156 - -62.333333 -27.333333 155 - -62.166667 -27.333333 152 - -62.000000 -27.333333 153 - -61.833333 -27.333333 133 - -61.666667 -27.333333 127 - -61.500000 -27.333333 111 - -61.333333 -27.333333 95 - -61.166667 -27.333333 94 - -61.000000 -27.333333 93 - -60.833333 -27.333333 89 - -60.666667 -27.333333 85 - -60.500000 -27.333333 81 - -60.333333 -27.333333 78 - -60.166667 -27.333333 77 - -60.000000 -27.333333 73 - -59.833333 -27.333333 69 - -59.666667 -27.333333 71 - -59.500000 -27.333333 68 - -59.333333 -27.333333 63 - -59.166667 -27.333333 60 - -59.000000 -27.333333 55 - -58.833333 -27.333333 52 - -58.666667 -27.333333 51 - -58.500000 -27.333333 61 - -58.333333 -27.333333 65 - -58.166667 -27.333333 67 - -58.000000 -27.333333 66 - -57.833333 -27.333333 55 - -57.666667 -27.333333 56 - -57.500000 -27.333333 55 - -57.333333 -27.333333 64 - -57.166667 -27.333333 72 - -57.000000 -27.333333 71 - -56.833333 -27.333333 76 - -56.666667 -27.333333 77 - -56.500000 -27.333333 75 - -56.333333 -27.333333 82 - -56.166667 -27.333333 75 - -56.000000 -27.333333 75 - -55.833333 -27.333333 103 - -55.666667 -27.333333 165 - -55.500000 -27.333333 131 - -55.333333 -27.333333 194 - -55.166667 -27.333333 327 - -55.000000 -27.333333 293 - -54.833333 -27.333333 232 - -54.666667 -27.333333 258 - -54.500000 -27.333333 379 - -54.333333 -27.333333 266 - -54.166667 -27.333333 276 - -54.000000 -27.333333 280 - -53.833333 -27.333333 388 - -53.666667 -27.333333 344 - -53.500000 -27.333333 456 - -53.333333 -27.333333 332 - -53.166667 -27.333333 439 - -53.000000 -27.333333 537 - -52.833333 -27.333333 549 - -52.666667 -27.333333 508 - -52.500000 -27.333333 555 - -52.333333 -27.333333 475 - -52.166667 -27.333333 475 - -52.000000 -27.333333 431 - -51.833333 -27.333333 623 - -51.666667 -27.333333 525 - -51.500000 -27.333333 635 - -51.333333 -27.333333 780 - -51.166667 -27.333333 962 - -51.000000 -27.333333 980 - -50.833333 -27.333333 923 - -50.666667 -27.333333 902 - -50.500000 -27.333333 1038 - -50.333333 -27.333333 1129 - -50.166667 -27.333333 861 - -50.000000 -27.333333 645 - -49.833333 -27.333333 395 - -49.666667 -27.333333 472 - -49.500000 -27.333333 670 - -49.333333 -27.333333 403 - -49.166667 -27.333333 323 - -49.000000 -27.333333 291 - -48.833333 -27.333333 152 - -48.666667 -27.333333 204 - -48.500000 -27.333333 -1 - -48.333333 -27.333333 -24 - -48.166667 -27.333333 -53 - -48.000000 -27.333333 -85 - -47.833333 -27.333333 -106 - -47.666667 -27.333333 -118 - -47.500000 -27.333333 -138 - -47.333333 -27.333333 -163 - -47.166667 -27.333333 -262 - -47.000000 -27.333333 -633 - -46.833333 -27.333333 -794 - -46.666667 -27.333333 -1045 - -46.500000 -27.333333 -1398 - -46.333333 -27.333333 -1732 - -46.166667 -27.333333 -1861 - -46.000000 -27.333333 -2027 - -45.833333 -27.333333 -2234 - -45.666667 -27.333333 -2238 - -45.500000 -27.333333 -2403 - -45.333333 -27.333333 -2564 - -45.166667 -27.333333 -2579 - -45.000000 -27.333333 -2607 - -44.833333 -27.333333 -2604 - -44.666667 -27.333333 -2332 - -44.500000 -27.333333 -2926 - -44.333333 -27.333333 -2714 - -44.166667 -27.333333 -2770 - -44.000000 -27.333333 -2645 - -43.833333 -27.333333 -2816 - -43.666667 -27.333333 -2741 - -43.500000 -27.333333 -2735 - -43.333333 -27.333333 -2709 - -43.166667 -27.333333 -2613 - -43.000000 -27.333333 -2443 - -42.833333 -27.333333 -2426 - -42.666667 -27.333333 -2486 - -42.500000 -27.333333 -2600 - -42.333333 -27.333333 -2781 - -42.166667 -27.333333 -2864 - -42.000000 -27.333333 -2937 - -41.833333 -27.333333 -3034 - -41.666667 -27.333333 -3062 - -41.500000 -27.333333 -3133 - -41.333333 -27.333333 -3202 - -41.166667 -27.333333 -3208 - -41.000000 -27.333333 -3302 - -40.833333 -27.333333 -3417 - -40.666667 -27.333333 -3471 - -40.500000 -27.333333 -3482 - -40.333333 -27.333333 -3572 - -40.166667 -27.333333 -3871 - -40.000000 -27.333333 -3730 - -65.000000 -27.500000 274 - -64.833333 -27.500000 268 - -64.666667 -27.500000 265 - -64.500000 -27.500000 236 - -64.333333 -27.500000 232 - -64.166667 -27.500000 176 - -64.000000 -27.500000 161 - -63.833333 -27.500000 154 - -63.666667 -27.500000 151 - -63.500000 -27.500000 149 - -63.333333 -27.500000 150 - -63.166667 -27.500000 150 - -63.000000 -27.500000 152 - -62.833333 -27.500000 151 - -62.666667 -27.500000 148 - -62.500000 -27.500000 153 - -62.333333 -27.500000 144 - -62.166667 -27.500000 147 - -62.000000 -27.500000 168 - -61.833333 -27.500000 127 - -61.666667 -27.500000 101 - -61.500000 -27.500000 115 - -61.333333 -27.500000 87 - -61.166667 -27.500000 87 - -61.000000 -27.500000 87 - -60.833333 -27.500000 82 - -60.666667 -27.500000 78 - -60.500000 -27.500000 76 - -60.333333 -27.500000 75 - -60.166667 -27.500000 71 - -60.000000 -27.500000 73 - -59.833333 -27.500000 72 - -59.666667 -27.500000 67 - -59.500000 -27.500000 66 - -59.333333 -27.500000 63 - -59.166667 -27.500000 55 - -59.000000 -27.500000 51 - -58.833333 -27.500000 61 - -58.666667 -27.500000 62 - -58.500000 -27.500000 62 - -58.333333 -27.500000 63 - -58.166667 -27.500000 66 - -58.000000 -27.500000 66 - -57.833333 -27.500000 67 - -57.666667 -27.500000 69 - -57.500000 -27.500000 70 - -57.333333 -27.500000 72 - -57.166667 -27.500000 60 - -57.000000 -27.500000 60 - -56.833333 -27.500000 62 - -56.666667 -27.500000 81 - -56.500000 -27.500000 75 - -56.333333 -27.500000 75 - -56.166667 -27.500000 104 - -56.000000 -27.500000 148 - -55.833333 -27.500000 88 - -55.666667 -27.500000 130 - -55.500000 -27.500000 261 - -55.333333 -27.500000 231 - -55.166667 -27.500000 322 - -55.000000 -27.500000 286 - -54.833333 -27.500000 265 - -54.666667 -27.500000 135 - -54.500000 -27.500000 171 - -54.333333 -27.500000 200 - -54.166667 -27.500000 263 - -54.000000 -27.500000 310 - -53.833333 -27.500000 325 - -53.666667 -27.500000 451 - -53.500000 -27.500000 467 - -53.333333 -27.500000 408 - -53.166667 -27.500000 322 - -53.000000 -27.500000 536 - -52.833333 -27.500000 574 - -52.666667 -27.500000 592 - -52.500000 -27.500000 649 - -52.333333 -27.500000 706 - -52.166667 -27.500000 620 - -52.000000 -27.500000 546 - -51.833333 -27.500000 481 - -51.666667 -27.500000 554 - -51.500000 -27.500000 698 - -51.333333 -27.500000 825 - -51.166667 -27.500000 866 - -51.000000 -27.500000 864 - -50.833333 -27.500000 783 - -50.666667 -27.500000 867 - -50.500000 -27.500000 888 - -50.333333 -27.500000 898 - -50.166667 -27.500000 851 - -50.000000 -27.500000 855 - -49.833333 -27.500000 722 - -49.666667 -27.500000 511 - -49.500000 -27.500000 639 - -49.333333 -27.500000 740 - -49.166667 -27.500000 776 - -49.000000 -27.500000 302 - -48.833333 -27.500000 219 - -48.666667 -27.500000 79 - -48.500000 -27.500000 85 - -48.333333 -27.500000 -22 - -48.166667 -27.500000 -60 - -48.000000 -27.500000 -71 - -47.833333 -27.500000 -113 - -47.666667 -27.500000 -126 - -47.500000 -27.500000 -151 - -47.333333 -27.500000 -207 - -47.166667 -27.500000 -449 - -47.000000 -27.500000 -673 - -46.833333 -27.500000 -1031 - -46.666667 -27.500000 -1230 - -46.500000 -27.500000 -1558 - -46.333333 -27.500000 -1853 - -46.166667 -27.500000 -2074 - -46.000000 -27.500000 -2195 - -45.833333 -27.500000 -2273 - -45.666667 -27.500000 -2399 - -45.500000 -27.500000 -2395 - -45.333333 -27.500000 -2620 - -45.166667 -27.500000 -2601 - -45.000000 -27.500000 -2638 - -44.833333 -27.500000 -2677 - -44.666667 -27.500000 -2745 - -44.500000 -27.500000 -2880 - -44.333333 -27.500000 -2770 - -44.166667 -27.500000 -2780 - -44.000000 -27.500000 -2906 - -43.833333 -27.500000 -2883 - -43.666667 -27.500000 -2856 - -43.500000 -27.500000 -2844 - -43.333333 -27.500000 -2821 - -43.166667 -27.500000 -2666 - -43.000000 -27.500000 -2621 - -42.833333 -27.500000 -2622 - -42.666667 -27.500000 -2662 - -42.500000 -27.500000 -2790 - -42.333333 -27.500000 -2901 - -42.166667 -27.500000 -2948 - -42.000000 -27.500000 -3068 - -41.833333 -27.500000 -3055 - -41.666667 -27.500000 -3183 - -41.500000 -27.500000 -3118 - -41.333333 -27.500000 -3166 - -41.166667 -27.500000 -3221 - -41.000000 -27.500000 -3280 - -40.833333 -27.500000 -3174 - -40.666667 -27.500000 -3213 - -40.500000 -27.500000 -3206 - -40.333333 -27.500000 -3278 - -40.166667 -27.500000 -3464 - -40.000000 -27.500000 -3556 - -65.000000 -27.666667 291 - -64.833333 -27.666667 378 - -64.666667 -27.666667 335 - -64.500000 -27.666667 274 - -64.333333 -27.666667 213 - -64.166667 -27.666667 184 - -64.000000 -27.666667 167 - -63.833333 -27.666667 158 - -63.666667 -27.666667 148 - -63.500000 -27.666667 143 - -63.333333 -27.666667 146 - -63.166667 -27.666667 143 - -63.000000 -27.666667 143 - -62.833333 -27.666667 143 - -62.666667 -27.666667 144 - -62.500000 -27.666667 138 - -62.333333 -27.666667 138 - -62.166667 -27.666667 165 - -62.000000 -27.666667 130 - -61.833333 -27.666667 117 - -61.666667 -27.666667 78 - -61.500000 -27.666667 79 - -61.333333 -27.666667 81 - -61.166667 -27.666667 80 - -61.000000 -27.666667 79 - -60.833333 -27.666667 76 - -60.666667 -27.666667 74 - -60.500000 -27.666667 73 - -60.333333 -27.666667 69 - -60.166667 -27.666667 68 - -60.000000 -27.666667 66 - -59.833333 -27.666667 65 - -59.666667 -27.666667 62 - -59.500000 -27.666667 63 - -59.333333 -27.666667 61 - -59.166667 -27.666667 50 - -59.000000 -27.666667 48 - -58.833333 -27.666667 46 - -58.666667 -27.666667 63 - -58.500000 -27.666667 64 - -58.333333 -27.666667 64 - -58.166667 -27.666667 66 - -58.000000 -27.666667 66 - -57.833333 -27.666667 69 - -57.666667 -27.666667 70 - -57.500000 -27.666667 71 - -57.333333 -27.666667 70 - -57.166667 -27.666667 72 - -57.000000 -27.666667 72 - -56.833333 -27.666667 73 - -56.666667 -27.666667 72 - -56.500000 -27.666667 80 - -56.333333 -27.666667 91 - -56.166667 -27.666667 104 - -56.000000 -27.666667 135 - -55.833333 -27.666667 133 - -55.666667 -27.666667 125 - -55.500000 -27.666667 280 - -55.333333 -27.666667 215 - -55.166667 -27.666667 192 - -55.000000 -27.666667 286 - -54.833333 -27.666667 173 - -54.666667 -27.666667 148 - -54.500000 -27.666667 178 - -54.333333 -27.666667 260 - -54.166667 -27.666667 190 - -54.000000 -27.666667 319 - -53.833333 -27.666667 443 - -53.666667 -27.666667 475 - -53.500000 -27.666667 546 - -53.333333 -27.666667 543 - -53.166667 -27.666667 377 - -53.000000 -27.666667 410 - -52.833333 -27.666667 644 - -52.666667 -27.666667 571 - -52.500000 -27.666667 570 - -52.333333 -27.666667 722 - -52.166667 -27.666667 593 - -52.000000 -27.666667 597 - -51.833333 -27.666667 511 - -51.666667 -27.666667 707 - -51.500000 -27.666667 682 - -51.333333 -27.666667 620 - -51.166667 -27.666667 824 - -51.000000 -27.666667 709 - -50.833333 -27.666667 861 - -50.666667 -27.666667 805 - -50.500000 -27.666667 973 - -50.333333 -27.666667 875 - -50.166667 -27.666667 893 - -50.000000 -27.666667 847 - -49.833333 -27.666667 876 - -49.666667 -27.666667 925 - -49.500000 -27.666667 598 - -49.333333 -27.666667 804 - -49.166667 -27.666667 1019 - -49.000000 -27.666667 813 - -48.833333 -27.666667 333 - -48.666667 -27.666667 4 - -48.500000 -27.666667 42 - -48.333333 -27.666667 -36 - -48.166667 -27.666667 -76 - -48.000000 -27.666667 -92 - -47.833333 -27.666667 -71 - -47.666667 -27.666667 -139 - -47.500000 -27.666667 -155 - -47.333333 -27.666667 -210 - -47.166667 -27.666667 -471 - -47.000000 -27.666667 -630 - -46.833333 -27.666667 -942 - -46.666667 -27.666667 -1275 - -46.500000 -27.666667 -1616 - -46.333333 -27.666667 -1947 - -46.166667 -27.666667 -2194 - -46.000000 -27.666667 -2273 - -45.833333 -27.666667 -2363 - -45.666667 -27.666667 -2460 - -45.500000 -27.666667 -2556 - -45.333333 -27.666667 -2658 - -45.166667 -27.666667 -2760 - -45.000000 -27.666667 -2909 - -44.833333 -27.666667 -3016 - -44.666667 -27.666667 -3079 - -44.500000 -27.666667 -3145 - -44.333333 -27.666667 -2902 - -44.166667 -27.666667 -2861 - -44.000000 -27.666667 -2980 - -43.833333 -27.666667 -3009 - -43.666667 -27.666667 -3249 - -43.500000 -27.666667 -2882 - -43.333333 -27.666667 -2969 - -43.166667 -27.666667 -2796 - -43.000000 -27.666667 -2667 - -42.833333 -27.666667 -2664 - -42.666667 -27.666667 -2775 - -42.500000 -27.666667 -2846 - -42.333333 -27.666667 -2812 - -42.166667 -27.666667 -2974 - -42.000000 -27.666667 -3045 - -41.833333 -27.666667 -2985 - -41.666667 -27.666667 -3122 - -41.500000 -27.666667 -3176 - -41.333333 -27.666667 -3083 - -41.166667 -27.666667 -3091 - -41.000000 -27.666667 -3038 - -40.833333 -27.666667 -3085 - -40.666667 -27.666667 -3032 - -40.500000 -27.666667 -3014 - -40.333333 -27.666667 -2925 - -40.166667 -27.666667 -3502 - -40.000000 -27.666667 -3002 - -65.000000 -27.833333 374 - -64.833333 -27.833333 495 - -64.666667 -27.833333 395 - -64.500000 -27.833333 312 - -64.333333 -27.833333 214 - -64.166667 -27.833333 179 - -64.000000 -27.833333 164 - -63.833333 -27.833333 156 - -63.666667 -27.833333 146 - -63.500000 -27.833333 138 - -63.333333 -27.833333 139 - -63.166667 -27.833333 133 - -63.000000 -27.833333 133 - -62.833333 -27.833333 136 - -62.666667 -27.833333 134 - -62.500000 -27.833333 131 - -62.333333 -27.833333 148 - -62.166667 -27.833333 132 - -62.000000 -27.833333 106 - -61.833333 -27.833333 120 - -61.666667 -27.833333 95 - -61.500000 -27.833333 72 - -61.333333 -27.833333 74 - -61.166667 -27.833333 74 - -61.000000 -27.833333 74 - -60.833333 -27.833333 73 - -60.666667 -27.833333 71 - -60.500000 -27.833333 70 - -60.333333 -27.833333 67 - -60.166667 -27.833333 65 - -60.000000 -27.833333 65 - -59.833333 -27.833333 62 - -59.666667 -27.833333 61 - -59.500000 -27.833333 61 - -59.333333 -27.833333 57 - -59.166667 -27.833333 49 - -59.000000 -27.833333 46 - -58.833333 -27.833333 46 - -58.666667 -27.833333 63 - -58.500000 -27.833333 64 - -58.333333 -27.833333 66 - -58.166667 -27.833333 66 - -58.000000 -27.833333 69 - -57.833333 -27.833333 72 - -57.666667 -27.833333 71 - -57.500000 -27.833333 68 - -57.333333 -27.833333 75 - -57.166667 -27.833333 68 - -57.000000 -27.833333 70 - -56.833333 -27.833333 72 - -56.666667 -27.833333 72 - -56.500000 -27.833333 75 - -56.333333 -27.833333 90 - -56.166667 -27.833333 89 - -56.000000 -27.833333 128 - -55.833333 -27.833333 150 - -55.666667 -27.833333 153 - -55.500000 -27.833333 266 - -55.333333 -27.833333 132 - -55.166667 -27.833333 148 - -55.000000 -27.833333 131 - -54.833333 -27.833333 141 - -54.666667 -27.833333 287 - -54.500000 -27.833333 289 - -54.333333 -27.833333 261 - -54.166667 -27.833333 321 - -54.000000 -27.833333 367 - -53.833333 -27.833333 452 - -53.666667 -27.833333 516 - -53.500000 -27.833333 514 - -53.333333 -27.833333 596 - -53.166667 -27.833333 448 - -53.000000 -27.833333 377 - -52.833333 -27.833333 578 - -52.666667 -27.833333 599 - -52.500000 -27.833333 695 - -52.333333 -27.833333 717 - -52.166667 -27.833333 693 - -52.000000 -27.833333 484 - -51.833333 -27.833333 701 - -51.666667 -27.833333 701 - -51.500000 -27.833333 775 - -51.333333 -27.833333 799 - -51.166667 -27.833333 847 - -51.000000 -27.833333 851 - -50.833333 -27.833333 1001 - -50.666667 -27.833333 922 - -50.500000 -27.833333 920 - -50.333333 -27.833333 922 - -50.166667 -27.833333 1110 - -50.000000 -27.833333 1286 - -49.833333 -27.833333 1081 - -49.666667 -27.833333 943 - -49.500000 -27.833333 993 - -49.333333 -27.833333 1453 - -49.166667 -27.833333 868 - -49.000000 -27.833333 781 - -48.833333 -27.833333 788 - -48.666667 -27.833333 225 - -48.500000 -27.833333 0 - -48.333333 -27.833333 -61 - -48.166667 -27.833333 -73 - -48.000000 -27.833333 -78 - -47.833333 -27.833333 -108 - -47.666667 -27.833333 -154 - -47.500000 -27.833333 -231 - -47.333333 -27.833333 -237 - -47.166667 -27.833333 -353 - -47.000000 -27.833333 -528 - -46.833333 -27.833333 -774 - -46.666667 -27.833333 -1228 - -46.500000 -27.833333 -1623 - -46.333333 -27.833333 -2057 - -46.166667 -27.833333 -2302 - -46.000000 -27.833333 -2397 - -45.833333 -27.833333 -2490 - -45.666667 -27.833333 -2672 - -45.500000 -27.833333 -2853 - -45.333333 -27.833333 -3009 - -45.166667 -27.833333 -2997 - -45.000000 -27.833333 -3124 - -44.833333 -27.833333 -3413 - -44.666667 -27.833333 -3413 - -44.500000 -27.833333 -3452 - -44.333333 -27.833333 -3367 - -44.166667 -27.833333 -3276 - -44.000000 -27.833333 -3338 - -43.833333 -27.833333 -3250 - -43.666667 -27.833333 -3249 - -43.500000 -27.833333 -3381 - -43.333333 -27.833333 -3072 - -43.166667 -27.833333 -2876 - -43.000000 -27.833333 -2741 - -42.833333 -27.833333 -2745 - -42.666667 -27.833333 -2855 - -42.500000 -27.833333 -2913 - -42.333333 -27.833333 -2919 - -42.166667 -27.833333 -3012 - -42.000000 -27.833333 -2947 - -41.833333 -27.833333 -3198 - -41.666667 -27.833333 -3167 - -41.500000 -27.833333 -3291 - -41.333333 -27.833333 -3119 - -41.166667 -27.833333 -2977 - -41.000000 -27.833333 -2985 - -40.833333 -27.833333 -3173 - -40.666667 -27.833333 -3202 - -40.500000 -27.833333 -2856 - -40.333333 -27.833333 -2703 - -40.166667 -27.833333 -2686 - -40.000000 -27.833333 -3155 - -65.000000 -28.000000 433 - -64.833333 -28.000000 645 - -64.666667 -28.000000 423 - -64.500000 -28.000000 292 - -64.333333 -28.000000 219 - -64.166667 -28.000000 164 - -64.000000 -28.000000 155 - -63.833333 -28.000000 145 - -63.666667 -28.000000 141 - -63.500000 -28.000000 136 - -63.333333 -28.000000 132 - -63.166667 -28.000000 127 - -63.000000 -28.000000 128 - -62.833333 -28.000000 128 - -62.666667 -28.000000 127 - -62.500000 -28.000000 126 - -62.333333 -28.000000 123 - -62.166667 -28.000000 84 - -62.000000 -28.000000 83 - -61.833333 -28.000000 80 - -61.666667 -28.000000 74 - -61.500000 -28.000000 70 - -61.333333 -28.000000 69 - -61.166667 -28.000000 71 - -61.000000 -28.000000 68 - -60.833333 -28.000000 67 - -60.666667 -28.000000 67 - -60.500000 -28.000000 67 - -60.333333 -28.000000 64 - -60.166667 -28.000000 63 - -60.000000 -28.000000 61 - -59.833333 -28.000000 62 - -59.666667 -28.000000 57 - -59.500000 -28.000000 58 - -59.333333 -28.000000 54 - -59.166667 -28.000000 45 - -59.000000 -28.000000 43 - -58.833333 -28.000000 41 - -58.666667 -28.000000 64 - -58.500000 -28.000000 66 - -58.333333 -28.000000 68 - -58.166667 -28.000000 73 - -58.000000 -28.000000 72 - -57.833333 -28.000000 65 - -57.666667 -28.000000 69 - -57.500000 -28.000000 74 - -57.333333 -28.000000 66 - -57.166667 -28.000000 66 - -57.000000 -28.000000 69 - -56.833333 -28.000000 69 - -56.666667 -28.000000 70 - -56.500000 -28.000000 82 - -56.333333 -28.000000 82 - -56.166667 -28.000000 104 - -56.000000 -28.000000 133 - -55.833333 -28.000000 153 - -55.666667 -28.000000 82 - -55.500000 -28.000000 148 - -55.333333 -28.000000 116 - -55.166667 -28.000000 196 - -55.000000 -28.000000 207 - -54.833333 -28.000000 205 - -54.666667 -28.000000 265 - -54.500000 -28.000000 348 - -54.333333 -28.000000 372 - -54.166667 -28.000000 336 - -54.000000 -28.000000 397 - -53.833333 -28.000000 454 - -53.666667 -28.000000 529 - -53.500000 -28.000000 557 - -53.333333 -28.000000 566 - -53.166667 -28.000000 568 - -53.000000 -28.000000 472 - -52.833333 -28.000000 615 - -52.666667 -28.000000 668 - -52.500000 -28.000000 630 - -52.333333 -28.000000 688 - -52.166667 -28.000000 626 - -52.000000 -28.000000 685 - -51.833333 -28.000000 667 - -51.666667 -28.000000 606 - -51.500000 -28.000000 806 - -51.333333 -28.000000 800 - -51.166667 -28.000000 899 - -51.000000 -28.000000 756 - -50.833333 -28.000000 913 - -50.666667 -28.000000 868 - -50.500000 -28.000000 962 - -50.333333 -28.000000 1105 - -50.166667 -28.000000 1171 - -50.000000 -28.000000 1146 - -49.833333 -28.000000 1406 - -49.666667 -28.000000 1196 - -49.500000 -28.000000 1133 - -49.333333 -28.000000 1347 - -49.166667 -28.000000 336 - -49.000000 -28.000000 583 - -48.833333 -28.000000 643 - -48.666667 -28.000000 278 - -48.500000 -28.000000 -38 - -48.333333 -28.000000 -68 - -48.166667 -28.000000 -79 - -48.000000 -28.000000 -67 - -47.833333 -28.000000 -133 - -47.666667 -28.000000 -182 - -47.500000 -28.000000 -177 - -47.333333 -28.000000 -218 - -47.166667 -28.000000 -269 - -47.000000 -28.000000 -456 - -46.833333 -28.000000 -580 - -46.666667 -28.000000 -1213 - -46.500000 -28.000000 -1728 - -46.333333 -28.000000 -2209 - -46.166667 -28.000000 -2377 - -46.000000 -28.000000 -2510 - -45.833333 -28.000000 -2644 - -45.666667 -28.000000 -2748 - -45.500000 -28.000000 -2833 - -45.333333 -28.000000 -3039 - -45.166667 -28.000000 -3102 - -45.000000 -28.000000 -3392 - -44.833333 -28.000000 -3397 - -44.666667 -28.000000 -3373 - -44.500000 -28.000000 -3441 - -44.333333 -28.000000 -3366 - -44.166667 -28.000000 -3319 - -44.000000 -28.000000 -3396 - -43.833333 -28.000000 -3487 - -43.666667 -28.000000 -3442 - -43.500000 -28.000000 -3353 - -43.333333 -28.000000 -3555 - -43.166667 -28.000000 -3047 - -43.000000 -28.000000 -2750 - -42.833333 -28.000000 -2982 - -42.666667 -28.000000 -2975 - -42.500000 -28.000000 -2954 - -42.333333 -28.000000 -3074 - -42.166667 -28.000000 -2984 - -42.000000 -28.000000 -3131 - -41.833333 -28.000000 -3027 - -41.666667 -28.000000 -2915 - -41.500000 -28.000000 -3130 - -41.333333 -28.000000 -3215 - -41.166667 -28.000000 -3131 - -41.000000 -28.000000 -3124 - -40.833333 -28.000000 -2985 - -40.666667 -28.000000 -2796 - -40.500000 -28.000000 -2548 - -40.333333 -28.000000 -2613 - -40.166667 -28.000000 -2640 - -40.000000 -28.000000 -3693 - -65.000000 -28.166667 470 - -64.833333 -28.166667 648 - -64.666667 -28.166667 338 - -64.500000 -28.166667 247 - -64.333333 -28.166667 185 - -64.166667 -28.166667 151 - -64.000000 -28.166667 147 - -63.833333 -28.166667 140 - -63.666667 -28.166667 134 - -63.500000 -28.166667 129 - -63.333333 -28.166667 126 - -63.166667 -28.166667 123 - -63.000000 -28.166667 120 - -62.833333 -28.166667 118 - -62.666667 -28.166667 121 - -62.500000 -28.166667 129 - -62.333333 -28.166667 87 - -62.166667 -28.166667 84 - -62.000000 -28.166667 82 - -61.833333 -28.166667 78 - -61.666667 -28.166667 73 - -61.500000 -28.166667 70 - -61.333333 -28.166667 67 - -61.166667 -28.166667 66 - -61.000000 -28.166667 66 - -60.833333 -28.166667 65 - -60.666667 -28.166667 63 - -60.500000 -28.166667 63 - -60.333333 -28.166667 60 - -60.166667 -28.166667 60 - -60.000000 -28.166667 60 - -59.833333 -28.166667 57 - -59.666667 -28.166667 58 - -59.500000 -28.166667 57 - -59.333333 -28.166667 55 - -59.166667 -28.166667 41 - -59.000000 -28.166667 43 - -58.833333 -28.166667 54 - -58.666667 -28.166667 65 - -58.500000 -28.166667 70 - -58.333333 -28.166667 67 - -58.166667 -28.166667 68 - -58.000000 -28.166667 73 - -57.833333 -28.166667 74 - -57.666667 -28.166667 71 - -57.500000 -28.166667 63 - -57.333333 -28.166667 64 - -57.166667 -28.166667 65 - -57.000000 -28.166667 66 - -56.833333 -28.166667 65 - -56.666667 -28.166667 77 - -56.500000 -28.166667 68 - -56.333333 -28.166667 80 - -56.166667 -28.166667 87 - -56.000000 -28.166667 114 - -55.833333 -28.166667 121 - -55.666667 -28.166667 97 - -55.500000 -28.166667 83 - -55.333333 -28.166667 113 - -55.166667 -28.166667 183 - -55.000000 -28.166667 135 - -54.833333 -28.166667 161 - -54.666667 -28.166667 240 - -54.500000 -28.166667 247 - -54.333333 -28.166667 315 - -54.166667 -28.166667 371 - -54.000000 -28.166667 355 - -53.833333 -28.166667 335 - -53.666667 -28.166667 456 - -53.500000 -28.166667 470 - -53.333333 -28.166667 543 - -53.166667 -28.166667 565 - -53.000000 -28.166667 523 - -52.833333 -28.166667 594 - -52.666667 -28.166667 575 - -52.500000 -28.166667 645 - -52.333333 -28.166667 678 - -52.166667 -28.166667 649 - -52.000000 -28.166667 738 - -51.833333 -28.166667 746 - -51.666667 -28.166667 724 - -51.500000 -28.166667 704 - -51.333333 -28.166667 869 - -51.166667 -28.166667 938 - -51.000000 -28.166667 921 - -50.833333 -28.166667 869 - -50.666667 -28.166667 985 - -50.500000 -28.166667 987 - -50.333333 -28.166667 1086 - -50.166667 -28.166667 992 - -50.000000 -28.166667 1153 - -49.833333 -28.166667 1296 - -49.666667 -28.166667 1457 - -49.500000 -28.166667 1101 - -49.333333 -28.166667 352 - -49.166667 -28.166667 154 - -49.000000 -28.166667 92 - -48.833333 -28.166667 211 - -48.666667 -28.166667 7 - -48.500000 -28.166667 -50 - -48.333333 -28.166667 -67 - -48.166667 -28.166667 -94 - -48.000000 -28.166667 -113 - -47.833333 -28.166667 -143 - -47.666667 -28.166667 -185 - -47.500000 -28.166667 -149 - -47.333333 -28.166667 -193 - -47.166667 -28.166667 -325 - -47.000000 -28.166667 -494 - -46.833333 -28.166667 -724 - -46.666667 -28.166667 -1316 - -46.500000 -28.166667 -1906 - -46.333333 -28.166667 -2383 - -46.166667 -28.166667 -2441 - -46.000000 -28.166667 -2578 - -45.833333 -28.166667 -2714 - -45.666667 -28.166667 -2799 - -45.500000 -28.166667 -2870 - -45.333333 -28.166667 -3041 - -45.166667 -28.166667 -3311 - -45.000000 -28.166667 -3452 - -44.833333 -28.166667 -3400 - -44.666667 -28.166667 -3425 - -44.500000 -28.166667 -3500 - -44.333333 -28.166667 -3523 - -44.166667 -28.166667 -3419 - -44.000000 -28.166667 -3516 - -43.833333 -28.166667 -3562 - -43.666667 -28.166667 -3629 - -43.500000 -28.166667 -3503 - -43.333333 -28.166667 -3608 - -43.166667 -28.166667 -3269 - -43.000000 -28.166667 -2957 - -42.833333 -28.166667 -2827 - -42.666667 -28.166667 -2852 - -42.500000 -28.166667 -2875 - -42.333333 -28.166667 -3021 - -42.166667 -28.166667 -3177 - -42.000000 -28.166667 -3088 - -41.833333 -28.166667 -3080 - -41.666667 -28.166667 -3049 - -41.500000 -28.166667 -3073 - -41.333333 -28.166667 -3069 - -41.166667 -28.166667 -3188 - -41.000000 -28.166667 -3185 - -40.833333 -28.166667 -2765 - -40.666667 -28.166667 -2730 - -40.500000 -28.166667 -2609 - -40.333333 -28.166667 -2465 - -40.166667 -28.166667 -2760 - -40.000000 -28.166667 -3922 - -65.000000 -28.333333 407 - -64.833333 -28.333333 581 - -64.666667 -28.333333 286 - -64.500000 -28.333333 207 - -64.333333 -28.333333 156 - -64.166667 -28.333333 137 - -64.000000 -28.333333 137 - -63.833333 -28.333333 131 - -63.666667 -28.333333 127 - -63.500000 -28.333333 124 - -63.333333 -28.333333 120 - -63.166667 -28.333333 117 - -63.000000 -28.333333 114 - -62.833333 -28.333333 115 - -62.666667 -28.333333 114 - -62.500000 -28.333333 111 - -62.333333 -28.333333 123 - -62.166667 -28.333333 90 - -62.000000 -28.333333 86 - -61.833333 -28.333333 82 - -61.666667 -28.333333 76 - -61.500000 -28.333333 74 - -61.333333 -28.333333 69 - -61.166667 -28.333333 67 - -61.000000 -28.333333 65 - -60.833333 -28.333333 63 - -60.666667 -28.333333 62 - -60.500000 -28.333333 61 - -60.333333 -28.333333 59 - -60.166667 -28.333333 60 - -60.000000 -28.333333 62 - -59.833333 -28.333333 61 - -59.666667 -28.333333 61 - -59.500000 -28.333333 54 - -59.333333 -28.333333 52 - -59.166667 -28.333333 41 - -59.000000 -28.333333 41 - -58.833333 -28.333333 67 - -58.666667 -28.333333 68 - -58.500000 -28.333333 62 - -58.333333 -28.333333 72 - -58.166667 -28.333333 64 - -58.000000 -28.333333 72 - -57.833333 -28.333333 64 - -57.666667 -28.333333 61 - -57.500000 -28.333333 61 - -57.333333 -28.333333 61 - -57.166667 -28.333333 64 - -57.000000 -28.333333 66 - -56.833333 -28.333333 68 - -56.666667 -28.333333 74 - -56.500000 -28.333333 63 - -56.333333 -28.333333 79 - -56.166667 -28.333333 80 - -56.000000 -28.333333 103 - -55.833333 -28.333333 79 - -55.666667 -28.333333 71 - -55.500000 -28.333333 74 - -55.333333 -28.333333 141 - -55.166667 -28.333333 129 - -55.000000 -28.333333 163 - -54.833333 -28.333333 293 - -54.666667 -28.333333 190 - -54.500000 -28.333333 187 - -54.333333 -28.333333 216 - -54.166667 -28.333333 223 - -54.000000 -28.333333 253 - -53.833333 -28.333333 346 - -53.666667 -28.333333 354 - -53.500000 -28.333333 472 - -53.333333 -28.333333 498 - -53.166667 -28.333333 470 - -53.000000 -28.333333 537 - -52.833333 -28.333333 527 - -52.666667 -28.333333 570 - -52.500000 -28.333333 551 - -52.333333 -28.333333 686 - -52.166667 -28.333333 675 - -52.000000 -28.333333 780 - -51.833333 -28.333333 796 - -51.666667 -28.333333 771 - -51.500000 -28.333333 749 - -51.333333 -28.333333 757 - -51.166667 -28.333333 868 - -51.000000 -28.333333 928 - -50.833333 -28.333333 947 - -50.666667 -28.333333 782 - -50.500000 -28.333333 945 - -50.333333 -28.333333 981 - -50.166667 -28.333333 1142 - -50.000000 -28.333333 1265 - -49.833333 -28.333333 1360 - -49.666667 -28.333333 1218 - -49.500000 -28.333333 542 - -49.333333 -28.333333 211 - -49.166667 -28.333333 56 - -49.000000 -28.333333 210 - -48.833333 -28.333333 3 - -48.666667 -28.333333 -14 - -48.500000 -28.333333 -57 - -48.333333 -28.333333 -79 - -48.166667 -28.333333 -99 - -48.000000 -28.333333 -125 - -47.833333 -28.333333 -175 - -47.666667 -28.333333 -146 - -47.500000 -28.333333 -162 - -47.333333 -28.333333 -202 - -47.166667 -28.333333 -373 - -47.000000 -28.333333 -446 - -46.833333 -28.333333 -707 - -46.666667 -28.333333 -1357 - -46.500000 -28.333333 -2004 - -46.333333 -28.333333 -2317 - -46.166667 -28.333333 -2485 - -46.000000 -28.333333 -2647 - -45.833333 -28.333333 -2740 - -45.666667 -28.333333 -2842 - -45.500000 -28.333333 -2966 - -45.333333 -28.333333 -3156 - -45.166667 -28.333333 -3390 - -45.000000 -28.333333 -3381 - -44.833333 -28.333333 -3461 - -44.666667 -28.333333 -3541 - -44.500000 -28.333333 -3598 - -44.333333 -28.333333 -3596 - -44.166667 -28.333333 -3614 - -44.000000 -28.333333 -3643 - -43.833333 -28.333333 -3648 - -43.666667 -28.333333 -3692 - -43.500000 -28.333333 -3588 - -43.333333 -28.333333 -3611 - -43.166667 -28.333333 -3603 - -43.000000 -28.333333 -3234 - -42.833333 -28.333333 -3086 - -42.666667 -28.333333 -2965 - -42.500000 -28.333333 -3006 - -42.333333 -28.333333 -2932 - -42.166667 -28.333333 -3038 - -42.000000 -28.333333 -3142 - -41.833333 -28.333333 -3156 - -41.666667 -28.333333 -3107 - -41.500000 -28.333333 -3144 - -41.333333 -28.333333 -3127 - -41.166667 -28.333333 -3217 - -41.000000 -28.333333 -2632 - -40.833333 -28.333333 -3179 - -40.666667 -28.333333 -3762 - -40.500000 -28.333333 -4236 - -40.333333 -28.333333 -4462 - -40.166667 -28.333333 -4526 - -40.000000 -28.333333 -4470 - -65.000000 -28.500000 354 - -64.833333 -28.500000 400 - -64.666667 -28.500000 277 - -64.500000 -28.500000 182 - -64.333333 -28.500000 130 - -64.166667 -28.500000 127 - -64.000000 -28.500000 130 - -63.833333 -28.500000 122 - -63.666667 -28.500000 120 - -63.500000 -28.500000 118 - -63.333333 -28.500000 114 - -63.166667 -28.500000 112 - -63.000000 -28.500000 111 - -62.833333 -28.500000 109 - -62.666667 -28.500000 108 - -62.500000 -28.500000 104 - -62.333333 -28.500000 104 - -62.166667 -28.500000 95 - -62.000000 -28.500000 89 - -61.833333 -28.500000 84 - -61.666667 -28.500000 78 - -61.500000 -28.500000 73 - -61.333333 -28.500000 69 - -61.166667 -28.500000 66 - -61.000000 -28.500000 64 - -60.833333 -28.500000 61 - -60.666667 -28.500000 59 - -60.500000 -28.500000 60 - -60.333333 -28.500000 59 - -60.166667 -28.500000 61 - -60.000000 -28.500000 61 - -59.833333 -28.500000 62 - -59.666667 -28.500000 58 - -59.500000 -28.500000 51 - -59.333333 -28.500000 50 - -59.166667 -28.500000 40 - -59.000000 -28.500000 70 - -58.833333 -28.500000 65 - -58.666667 -28.500000 59 - -58.500000 -28.500000 72 - -58.333333 -28.500000 63 - -58.166667 -28.500000 61 - -58.000000 -28.500000 63 - -57.833333 -28.500000 58 - -57.666667 -28.500000 57 - -57.500000 -28.500000 59 - -57.333333 -28.500000 61 - -57.166667 -28.500000 63 - -57.000000 -28.500000 70 - -56.833333 -28.500000 72 - -56.666667 -28.500000 71 - -56.500000 -28.500000 91 - -56.333333 -28.500000 74 - -56.166667 -28.500000 71 - -56.000000 -28.500000 58 - -55.833333 -28.500000 99 - -55.666667 -28.500000 77 - -55.500000 -28.500000 99 - -55.333333 -28.500000 129 - -55.166667 -28.500000 182 - -55.000000 -28.500000 186 - -54.833333 -28.500000 244 - -54.666667 -28.500000 236 - -54.500000 -28.500000 296 - -54.333333 -28.500000 317 - -54.166667 -28.500000 336 - -54.000000 -28.500000 334 - -53.833333 -28.500000 384 - -53.666667 -28.500000 379 - -53.500000 -28.500000 458 - -53.333333 -28.500000 452 - -53.166667 -28.500000 379 - -53.000000 -28.500000 477 - -52.833333 -28.500000 490 - -52.666667 -28.500000 468 - -52.500000 -28.500000 493 - -52.333333 -28.500000 540 - -52.166667 -28.500000 587 - -52.000000 -28.500000 766 - -51.833333 -28.500000 688 - -51.666667 -28.500000 803 - -51.500000 -28.500000 699 - -51.333333 -28.500000 717 - -51.166667 -28.500000 814 - -51.000000 -28.500000 874 - -50.833333 -28.500000 950 - -50.666667 -28.500000 950 - -50.500000 -28.500000 989 - -50.333333 -28.500000 1033 - -50.166667 -28.500000 992 - -50.000000 -28.500000 1031 - -49.833333 -28.500000 1060 - -49.666667 -28.500000 1295 - -49.500000 -28.500000 284 - -49.333333 -28.500000 152 - -49.166667 -28.500000 366 - -49.000000 -28.500000 3 - -48.833333 -28.500000 -3 - -48.666667 -28.500000 -44 - -48.500000 -28.500000 -67 - -48.333333 -28.500000 -88 - -48.166667 -28.500000 -103 - -48.000000 -28.500000 -149 - -47.833333 -28.500000 -141 - -47.666667 -28.500000 -152 - -47.500000 -28.500000 -151 - -47.333333 -28.500000 -234 - -47.166667 -28.500000 -348 - -47.000000 -28.500000 -430 - -46.833333 -28.500000 -833 - -46.666667 -28.500000 -1629 - -46.500000 -28.500000 -2132 - -46.333333 -28.500000 -2338 - -46.166667 -28.500000 -2528 - -46.000000 -28.500000 -2661 - -45.833333 -28.500000 -2783 - -45.666667 -28.500000 -2874 - -45.500000 -28.500000 -2978 - -45.333333 -28.500000 -3275 - -45.166667 -28.500000 -3334 - -45.000000 -28.500000 -3437 - -44.833333 -28.500000 -3509 - -44.666667 -28.500000 -3620 - -44.500000 -28.500000 -3649 - -44.333333 -28.500000 -3674 - -44.166667 -28.500000 -3713 - -44.000000 -28.500000 -3711 - -43.833333 -28.500000 -3712 - -43.666667 -28.500000 -3703 - -43.500000 -28.500000 -3653 - -43.333333 -28.500000 -3726 - -43.166667 -28.500000 -3770 - -43.000000 -28.500000 -3731 - -42.833333 -28.500000 -3438 - -42.666667 -28.500000 -3481 - -42.500000 -28.500000 -3313 - -42.333333 -28.500000 -3077 - -42.166667 -28.500000 -3103 - -42.000000 -28.500000 -3209 - -41.833333 -28.500000 -3733 - -41.666667 -28.500000 -4016 - -41.500000 -28.500000 -4295 - -41.333333 -28.500000 -4424 - -41.166667 -28.500000 -4229 - -41.000000 -28.500000 -4112 - -40.833333 -28.500000 -4074 - -40.666667 -28.500000 -3989 - -40.500000 -28.500000 -4021 - -40.333333 -28.500000 -4026 - -40.166667 -28.500000 -4091 - -40.000000 -28.500000 -3992 - -65.000000 -28.666667 306 - -64.833333 -28.666667 332 - -64.666667 -28.666667 245 - -64.500000 -28.666667 162 - -64.333333 -28.666667 119 - -64.166667 -28.666667 118 - -64.000000 -28.666667 119 - -63.833333 -28.666667 123 - -63.666667 -28.666667 115 - -63.500000 -28.666667 113 - -63.333333 -28.666667 108 - -63.166667 -28.666667 107 - -63.000000 -28.666667 106 - -62.833333 -28.666667 103 - -62.666667 -28.666667 102 - -62.500000 -28.666667 99 - -62.333333 -28.666667 95 - -62.166667 -28.666667 93 - -62.000000 -28.666667 86 - -61.833333 -28.666667 85 - -61.666667 -28.666667 79 - -61.500000 -28.666667 73 - -61.333333 -28.666667 71 - -61.166667 -28.666667 66 - -61.000000 -28.666667 63 - -60.833333 -28.666667 61 - -60.666667 -28.666667 60 - -60.500000 -28.666667 58 - -60.333333 -28.666667 58 - -60.166667 -28.666667 57 - -60.000000 -28.666667 61 - -59.833333 -28.666667 57 - -59.666667 -28.666667 58 - -59.500000 -28.666667 52 - -59.333333 -28.666667 39 - -59.166667 -28.666667 38 - -59.000000 -28.666667 63 - -58.833333 -28.666667 63 - -58.666667 -28.666667 68 - -58.500000 -28.666667 59 - -58.333333 -28.666667 59 - -58.166667 -28.666667 52 - -58.000000 -28.666667 53 - -57.833333 -28.666667 54 - -57.666667 -28.666667 59 - -57.500000 -28.666667 72 - -57.333333 -28.666667 71 - -57.166667 -28.666667 67 - -57.000000 -28.666667 70 - -56.833333 -28.666667 70 - -56.666667 -28.666667 56 - -56.500000 -28.666667 69 - -56.333333 -28.666667 73 - -56.166667 -28.666667 80 - -56.000000 -28.666667 84 - -55.833333 -28.666667 77 - -55.666667 -28.666667 72 - -55.500000 -28.666667 82 - -55.333333 -28.666667 99 - -55.166667 -28.666667 150 - -55.000000 -28.666667 222 - -54.833333 -28.666667 190 - -54.666667 -28.666667 192 - -54.500000 -28.666667 229 - -54.333333 -28.666667 278 - -54.166667 -28.666667 323 - -54.000000 -28.666667 346 - -53.833333 -28.666667 388 - -53.666667 -28.666667 404 - -53.500000 -28.666667 398 - -53.333333 -28.666667 440 - -53.166667 -28.666667 352 - -53.000000 -28.666667 408 - -52.833333 -28.666667 416 - -52.666667 -28.666667 457 - -52.500000 -28.666667 610 - -52.333333 -28.666667 680 - -52.166667 -28.666667 438 - -52.000000 -28.666667 595 - -51.833333 -28.666667 488 - -51.666667 -28.666667 726 - -51.500000 -28.666667 671 - -51.333333 -28.666667 711 - -51.166667 -28.666667 800 - -51.000000 -28.666667 682 - -50.833333 -28.666667 858 - -50.666667 -28.666667 968 - -50.500000 -28.666667 1001 - -50.333333 -28.666667 1060 - -50.166667 -28.666667 1113 - -50.000000 -28.666667 1201 - -49.833333 -28.666667 1193 - -49.666667 -28.666667 351 - -49.500000 -28.666667 60 - -49.333333 -28.666667 64 - -49.166667 -28.666667 13 - -49.000000 -28.666667 26 - -48.833333 -28.666667 -40 - -48.666667 -28.666667 -61 - -48.500000 -28.666667 -79 - -48.333333 -28.666667 -101 - -48.166667 -28.666667 -123 - -48.000000 -28.666667 -126 - -47.833333 -28.666667 -127 - -47.666667 -28.666667 -189 - -47.500000 -28.666667 -279 - -47.333333 -28.666667 -534 - -47.166667 -28.666667 -619 - -47.000000 -28.666667 -827 - -46.833333 -28.666667 -1161 - -46.666667 -28.666667 -1743 - -46.500000 -28.666667 -2026 - -46.333333 -28.666667 -2431 - -46.166667 -28.666667 -2523 - -46.000000 -28.666667 -2671 - -45.833333 -28.666667 -2818 - -45.666667 -28.666667 -2853 - -45.500000 -28.666667 -3036 - -45.333333 -28.666667 -3427 - -45.166667 -28.666667 -3406 - -45.000000 -28.666667 -3543 - -44.833333 -28.666667 -3596 - -44.666667 -28.666667 -3678 - -44.500000 -28.666667 -3674 - -44.333333 -28.666667 -3675 - -44.166667 -28.666667 -3746 - -44.000000 -28.666667 -3748 - -43.833333 -28.666667 -3800 - -43.666667 -28.666667 -3788 - -43.500000 -28.666667 -3960 - -43.333333 -28.666667 -3960 - -43.166667 -28.666667 -4012 - -43.000000 -28.666667 -4071 - -42.833333 -28.666667 -4079 - -42.666667 -28.666667 -3701 - -42.500000 -28.666667 -3463 - -42.333333 -28.666667 -3318 - -42.166667 -28.666667 -3518 - -42.000000 -28.666667 -3856 - -41.833333 -28.666667 -3959 - -41.666667 -28.666667 -3807 - -41.500000 -28.666667 -3731 - -41.333333 -28.666667 -3919 - -41.166667 -28.666667 -3861 - -41.000000 -28.666667 -3884 - -40.833333 -28.666667 -3843 - -40.666667 -28.666667 -3872 - -40.500000 -28.666667 -3850 - -40.333333 -28.666667 -3914 - -40.166667 -28.666667 -3902 - -40.000000 -28.666667 -4108 - -65.000000 -28.833333 277 - -64.833333 -28.833333 301 - -64.666667 -28.833333 203 - -64.500000 -28.833333 128 - -64.333333 -28.833333 113 - -64.166667 -28.833333 114 - -64.000000 -28.833333 112 - -63.833333 -28.833333 113 - -63.666667 -28.833333 113 - -63.500000 -28.833333 111 - -63.333333 -28.833333 104 - -63.166667 -28.833333 102 - -63.000000 -28.833333 103 - -62.833333 -28.833333 97 - -62.666667 -28.833333 94 - -62.500000 -28.833333 97 - -62.333333 -28.833333 92 - -62.166667 -28.833333 89 - -62.000000 -28.833333 86 - -61.833333 -28.833333 81 - -61.666667 -28.833333 76 - -61.500000 -28.833333 73 - -61.333333 -28.833333 68 - -61.166667 -28.833333 65 - -61.000000 -28.833333 64 - -60.833333 -28.833333 61 - -60.666667 -28.833333 59 - -60.500000 -28.833333 58 - -60.333333 -28.833333 56 - -60.166667 -28.833333 61 - -60.000000 -28.833333 66 - -59.833333 -28.833333 60 - -59.666667 -28.833333 55 - -59.500000 -28.833333 46 - -59.333333 -28.833333 36 - -59.166667 -28.833333 38 - -59.000000 -28.833333 51 - -58.833333 -28.833333 67 - -58.666667 -28.833333 62 - -58.500000 -28.833333 62 - -58.333333 -28.833333 49 - -58.166667 -28.833333 67 - -58.000000 -28.833333 71 - -57.833333 -28.833333 74 - -57.666667 -28.833333 72 - -57.500000 -28.833333 72 - -57.333333 -28.833333 69 - -57.166667 -28.833333 67 - -57.000000 -28.833333 70 - -56.833333 -28.833333 68 - -56.666667 -28.833333 55 - -56.500000 -28.833333 69 - -56.333333 -28.833333 73 - -56.166667 -28.833333 73 - -56.000000 -28.833333 95 - -55.833333 -28.833333 86 - -55.666667 -28.833333 111 - -55.500000 -28.833333 124 - -55.333333 -28.833333 147 - -55.166667 -28.833333 162 - -55.000000 -28.833333 197 - -54.833333 -28.833333 189 - -54.666667 -28.833333 252 - -54.500000 -28.833333 300 - -54.333333 -28.833333 285 - -54.166667 -28.833333 396 - -54.000000 -28.833333 383 - -53.833333 -28.833333 398 - -53.666667 -28.833333 386 - -53.500000 -28.833333 413 - -53.333333 -28.833333 380 - -53.166667 -28.833333 359 - -53.000000 -28.833333 471 - -52.833333 -28.833333 398 - -52.666667 -28.833333 568 - -52.500000 -28.833333 677 - -52.333333 -28.833333 644 - -52.166667 -28.833333 590 - -52.000000 -28.833333 432 - -51.833333 -28.833333 412 - -51.666667 -28.833333 567 - -51.500000 -28.833333 534 - -51.333333 -28.833333 764 - -51.166667 -28.833333 550 - -51.000000 -28.833333 541 - -50.833333 -28.833333 578 - -50.666667 -28.833333 790 - -50.500000 -28.833333 854 - -50.333333 -28.833333 896 - -50.166667 -28.833333 903 - -50.000000 -28.833333 1065 - -49.833333 -28.833333 112 - -49.666667 -28.833333 45 - -49.500000 -28.833333 11 - -49.333333 -28.833333 7 - -49.166667 -28.833333 -27 - -49.000000 -28.833333 -43 - -48.833333 -28.833333 -58 - -48.666667 -28.833333 -70 - -48.500000 -28.833333 -91 - -48.333333 -28.833333 -108 - -48.166667 -28.833333 -129 - -48.000000 -28.833333 -136 - -47.833333 -28.833333 -208 - -47.666667 -28.833333 -411 - -47.500000 -28.833333 -758 - -47.333333 -28.833333 -995 - -47.166667 -28.833333 -1090 - -47.000000 -28.833333 -1242 - -46.833333 -28.833333 -1487 - -46.666667 -28.833333 -1780 - -46.500000 -28.833333 -2164 - -46.333333 -28.833333 -2375 - -46.166667 -28.833333 -2524 - -46.000000 -28.833333 -2654 - -45.833333 -28.833333 -2800 - -45.666667 -28.833333 -2857 - -45.500000 -28.833333 -3064 - -45.333333 -28.833333 -3421 - -45.166667 -28.833333 -3479 - -45.000000 -28.833333 -3577 - -44.833333 -28.833333 -3616 - -44.666667 -28.833333 -3662 - -44.500000 -28.833333 -3706 - -44.333333 -28.833333 -3703 - -44.166667 -28.833333 -3760 - -44.000000 -28.833333 -3754 - -43.833333 -28.833333 -3830 - -43.666667 -28.833333 -3862 - -43.500000 -28.833333 -3943 - -43.333333 -28.833333 -3971 - -43.166667 -28.833333 -3957 - -43.000000 -28.833333 -4016 - -42.833333 -28.833333 -4000 - -42.666667 -28.833333 -3869 - -42.500000 -28.833333 -3739 - -42.333333 -28.833333 -3800 - -42.166667 -28.833333 -3958 - -42.000000 -28.833333 -4070 - -41.833333 -28.833333 -3997 - -41.666667 -28.833333 -3684 - -41.500000 -28.833333 -3639 - -41.333333 -28.833333 -3777 - -41.166667 -28.833333 -3797 - -41.000000 -28.833333 -3786 - -40.833333 -28.833333 -3797 - -40.666667 -28.833333 -3785 - -40.500000 -28.833333 -3808 - -40.333333 -28.833333 -3784 - -40.166667 -28.833333 -3873 - -40.000000 -28.833333 -3954 - -65.000000 -29.000000 284 - -64.833333 -29.000000 235 - -64.666667 -29.000000 168 - -64.500000 -29.000000 116 - -64.333333 -29.000000 114 - -64.166667 -29.000000 110 - -64.000000 -29.000000 136 - -63.833333 -29.000000 158 - -63.666667 -29.000000 147 - -63.500000 -29.000000 107 - -63.333333 -29.000000 102 - -63.166667 -29.000000 97 - -63.000000 -29.000000 97 - -62.833333 -29.000000 95 - -62.666667 -29.000000 91 - -62.500000 -29.000000 89 - -62.333333 -29.000000 87 - -62.166667 -29.000000 85 - -62.000000 -29.000000 82 - -61.833333 -29.000000 79 - -61.666667 -29.000000 77 - -61.500000 -29.000000 72 - -61.333333 -29.000000 68 - -61.166667 -29.000000 66 - -61.000000 -29.000000 63 - -60.833333 -29.000000 61 - -60.666667 -29.000000 58 - -60.500000 -29.000000 54 - -60.333333 -29.000000 61 - -60.166667 -29.000000 60 - -60.000000 -29.000000 59 - -59.833333 -29.000000 56 - -59.666667 -29.000000 53 - -59.500000 -29.000000 37 - -59.333333 -29.000000 35 - -59.166667 -29.000000 55 - -59.000000 -29.000000 60 - -58.833333 -29.000000 59 - -58.666667 -29.000000 59 - -58.500000 -29.000000 49 - -58.333333 -29.000000 62 - -58.166667 -29.000000 71 - -58.000000 -29.000000 94 - -57.833333 -29.000000 75 - -57.666667 -29.000000 66 - -57.500000 -29.000000 66 - -57.333333 -29.000000 65 - -57.166667 -29.000000 74 - -57.000000 -29.000000 69 - -56.833333 -29.000000 65 - -56.666667 -29.000000 64 - -56.500000 -29.000000 63 - -56.333333 -29.000000 66 - -56.166667 -29.000000 61 - -56.000000 -29.000000 75 - -55.833333 -29.000000 91 - -55.666667 -29.000000 121 - -55.500000 -29.000000 178 - -55.333333 -29.000000 235 - -55.166667 -29.000000 260 - -55.000000 -29.000000 296 - -54.833333 -29.000000 279 - -54.666667 -29.000000 354 - -54.500000 -29.000000 316 - -54.333333 -29.000000 375 - -54.166667 -29.000000 434 - -54.000000 -29.000000 487 - -53.833333 -29.000000 400 - -53.666667 -29.000000 392 - -53.500000 -29.000000 373 - -53.333333 -29.000000 365 - -53.166667 -29.000000 340 - -53.000000 -29.000000 425 - -52.833333 -29.000000 596 - -52.666667 -29.000000 669 - -52.500000 -29.000000 486 - -52.333333 -29.000000 676 - -52.166667 -29.000000 512 - -52.000000 -29.000000 440 - -51.833333 -29.000000 576 - -51.666667 -29.000000 387 - -51.500000 -29.000000 514 - -51.333333 -29.000000 579 - -51.166667 -29.000000 689 - -51.000000 -29.000000 810 - -50.833333 -29.000000 864 - -50.666667 -29.000000 915 - -50.500000 -29.000000 934 - -50.333333 -29.000000 864 - -50.166667 -29.000000 1029 - -50.000000 -29.000000 1043 - -49.833333 -29.000000 96 - -49.666667 -29.000000 20 - -49.500000 -29.000000 6 - -49.333333 -29.000000 -32 - -49.166667 -29.000000 -44 - -49.000000 -29.000000 -50 - -48.833333 -29.000000 -63 - -48.666667 -29.000000 -86 - -48.500000 -29.000000 -102 - -48.333333 -29.000000 -120 - -48.166667 -29.000000 -127 - -48.000000 -29.000000 -163 - -47.833333 -29.000000 -420 - -47.666667 -29.000000 -758 - -47.500000 -29.000000 -971 - -47.333333 -29.000000 -1200 - -47.166667 -29.000000 -1438 - -47.000000 -29.000000 -1540 - -46.833333 -29.000000 -1770 - -46.666667 -29.000000 -1978 - -46.500000 -29.000000 -2276 - -46.333333 -29.000000 -2420 - -46.166667 -29.000000 -2534 - -46.000000 -29.000000 -2644 - -45.833333 -29.000000 -2749 - -45.666667 -29.000000 -2866 - -45.500000 -29.000000 -3201 - -45.333333 -29.000000 -3388 - -45.166667 -29.000000 -3524 - -45.000000 -29.000000 -3656 - -44.833333 -29.000000 -3654 - -44.666667 -29.000000 -3680 - -44.500000 -29.000000 -3652 - -44.333333 -29.000000 -3696 - -44.166667 -29.000000 -3771 - -44.000000 -29.000000 -3852 - -43.833333 -29.000000 -3848 - -43.666667 -29.000000 -3901 - -43.500000 -29.000000 -3935 - -43.333333 -29.000000 -4012 - -43.166667 -29.000000 -3992 - -43.000000 -29.000000 -4014 - -42.833333 -29.000000 -4023 - -42.666667 -29.000000 -4009 - -42.500000 -29.000000 -3983 - -42.333333 -29.000000 -3969 - -42.166667 -29.000000 -3982 - -42.000000 -29.000000 -4013 - -41.833333 -29.000000 -4085 - -41.666667 -29.000000 -3802 - -41.500000 -29.000000 -3769 - -41.333333 -29.000000 -3758 - -41.166667 -29.000000 -3748 - -41.000000 -29.000000 -3787 - -40.833333 -29.000000 -3782 - -40.666667 -29.000000 -3714 - -40.500000 -29.000000 -3733 - -40.333333 -29.000000 -3777 - -40.166667 -29.000000 -3871 - -40.000000 -29.000000 -3897 - -65.000000 -29.166667 285 - -64.833333 -29.166667 216 - -64.666667 -29.166667 136 - -64.500000 -29.166667 118 - -64.333333 -29.166667 114 - -64.166667 -29.166667 114 - -64.000000 -29.166667 253 - -63.833333 -29.166667 259 - -63.666667 -29.166667 253 - -63.500000 -29.166667 194 - -63.333333 -29.166667 96 - -63.166667 -29.166667 92 - -63.000000 -29.166667 93 - -62.833333 -29.166667 92 - -62.666667 -29.166667 90 - -62.500000 -29.166667 87 - -62.333333 -29.166667 82 - -62.166667 -29.166667 80 - -62.000000 -29.166667 79 - -61.833333 -29.166667 78 - -61.666667 -29.166667 75 - -61.500000 -29.166667 72 - -61.333333 -29.166667 68 - -61.166667 -29.166667 65 - -61.000000 -29.166667 63 - -60.833333 -29.166667 60 - -60.666667 -29.166667 56 - -60.500000 -29.166667 57 - -60.333333 -29.166667 59 - -60.166667 -29.166667 63 - -60.000000 -29.166667 60 - -59.833333 -29.166667 54 - -59.666667 -29.166667 49 - -59.500000 -29.166667 35 - -59.333333 -29.166667 36 - -59.166667 -29.166667 63 - -59.000000 -29.166667 57 - -58.833333 -29.166667 49 - -58.666667 -29.166667 47 - -58.500000 -29.166667 52 - -58.333333 -29.166667 74 - -58.166667 -29.166667 88 - -58.000000 -29.166667 96 - -57.833333 -29.166667 78 - -57.666667 -29.166667 66 - -57.500000 -29.166667 58 - -57.333333 -29.166667 69 - -57.166667 -29.166667 71 - -57.000000 -29.166667 64 - -56.833333 -29.166667 59 - -56.666667 -29.166667 66 - -56.500000 -29.166667 61 - -56.333333 -29.166667 65 - -56.166667 -29.166667 76 - -56.000000 -29.166667 83 - -55.833333 -29.166667 115 - -55.666667 -29.166667 156 - -55.500000 -29.166667 97 - -55.333333 -29.166667 191 - -55.166667 -29.166667 181 - -55.000000 -29.166667 258 - -54.833333 -29.166667 343 - -54.666667 -29.166667 338 - -54.500000 -29.166667 358 - -54.333333 -29.166667 293 - -54.166667 -29.166667 436 - -54.000000 -29.166667 445 - -53.833333 -29.166667 447 - -53.666667 -29.166667 460 - -53.500000 -29.166667 408 - -53.333333 -29.166667 318 - -53.166667 -29.166667 364 - -53.000000 -29.166667 312 - -52.833333 -29.166667 579 - -52.666667 -29.166667 464 - -52.500000 -29.166667 435 - -52.333333 -29.166667 448 - -52.166667 -29.166667 235 - -52.000000 -29.166667 253 - -51.833333 -29.166667 146 - -51.666667 -29.166667 385 - -51.500000 -29.166667 624 - -51.333333 -29.166667 632 - -51.166667 -29.166667 784 - -51.000000 -29.166667 693 - -50.833333 -29.166667 815 - -50.666667 -29.166667 902 - -50.500000 -29.166667 973 - -50.333333 -29.166667 895 - -50.166667 -29.166667 970 - -50.000000 -29.166667 373 - -49.833333 -29.166667 9 - -49.666667 -29.166667 0 - -49.500000 -29.166667 -20 - -49.333333 -29.166667 -38 - -49.166667 -29.166667 -47 - -49.000000 -29.166667 -57 - -48.833333 -29.166667 -73 - -48.666667 -29.166667 -98 - -48.500000 -29.166667 -117 - -48.333333 -29.166667 -129 - -48.166667 -29.166667 -138 - -48.000000 -29.166667 -255 - -47.833333 -29.166667 -485 - -47.666667 -29.166667 -892 - -47.500000 -29.166667 -1123 - -47.333333 -29.166667 -1392 - -47.166667 -29.166667 -1640 - -47.000000 -29.166667 -1733 - -46.833333 -29.166667 -1894 - -46.666667 -29.166667 -2150 - -46.500000 -29.166667 -2228 - -46.333333 -29.166667 -2404 - -46.166667 -29.166667 -2487 - -46.000000 -29.166667 -2638 - -45.833333 -29.166667 -2740 - -45.666667 -29.166667 -2963 - -45.500000 -29.166667 -3323 - -45.333333 -29.166667 -3465 - -45.166667 -29.166667 -3563 - -45.000000 -29.166667 -3646 - -44.833333 -29.166667 -3631 - -44.666667 -29.166667 -3664 - -44.500000 -29.166667 -3690 - -44.333333 -29.166667 -3732 - -44.166667 -29.166667 -3768 - -44.000000 -29.166667 -3820 - -43.833333 -29.166667 -3867 - -43.666667 -29.166667 -3900 - -43.500000 -29.166667 -3974 - -43.333333 -29.166667 -4057 - -43.166667 -29.166667 -4019 - -43.000000 -29.166667 -4019 - -42.833333 -29.166667 -4013 - -42.666667 -29.166667 -4019 - -42.500000 -29.166667 -4019 - -42.333333 -29.166667 -4010 - -42.166667 -29.166667 -3925 - -42.000000 -29.166667 -3888 - -41.833333 -29.166667 -4085 - -41.666667 -29.166667 -3806 - -41.500000 -29.166667 -3795 - -41.333333 -29.166667 -3754 - -41.166667 -29.166667 -3812 - -41.000000 -29.166667 -3788 - -40.833333 -29.166667 -3712 - -40.666667 -29.166667 -3754 - -40.500000 -29.166667 -3744 - -40.333333 -29.166667 -3934 - -40.166667 -29.166667 -3826 - -40.000000 -29.166667 -3901 - -65.000000 -29.333333 206 - -64.833333 -29.333333 233 - -64.666667 -29.333333 134 - -64.500000 -29.333333 119 - -64.333333 -29.333333 115 - -64.166667 -29.333333 172 - -64.000000 -29.333333 349 - -63.833333 -29.333333 399 - -63.666667 -29.333333 434 - -63.500000 -29.333333 257 - -63.333333 -29.333333 93 - -63.166667 -29.333333 90 - -63.000000 -29.333333 88 - -62.833333 -29.333333 88 - -62.666667 -29.333333 84 - -62.500000 -29.333333 83 - -62.333333 -29.333333 83 - -62.166667 -29.333333 81 - -62.000000 -29.333333 76 - -61.833333 -29.333333 74 - -61.666667 -29.333333 73 - -61.500000 -29.333333 71 - -61.333333 -29.333333 67 - -61.166667 -29.333333 65 - -61.000000 -29.333333 61 - -60.833333 -29.333333 58 - -60.666667 -29.333333 55 - -60.500000 -29.333333 54 - -60.333333 -29.333333 60 - -60.166667 -29.333333 58 - -60.000000 -29.333333 58 - -59.833333 -29.333333 50 - -59.666667 -29.333333 36 - -59.500000 -29.333333 33 - -59.333333 -29.333333 37 - -59.166667 -29.333333 59 - -59.000000 -29.333333 49 - -58.833333 -29.333333 43 - -58.666667 -29.333333 46 - -58.500000 -29.333333 73 - -58.333333 -29.333333 92 - -58.166667 -29.333333 114 - -58.000000 -29.333333 115 - -57.833333 -29.333333 90 - -57.666667 -29.333333 85 - -57.500000 -29.333333 65 - -57.333333 -29.333333 69 - -57.166667 -29.333333 70 - -57.000000 -29.333333 70 - -56.833333 -29.333333 61 - -56.666667 -29.333333 50 - -56.500000 -29.333333 59 - -56.333333 -29.333333 64 - -56.166667 -29.333333 58 - -56.000000 -29.333333 62 - -55.833333 -29.333333 82 - -55.666667 -29.333333 105 - -55.500000 -29.333333 159 - -55.333333 -29.333333 180 - -55.166667 -29.333333 229 - -55.000000 -29.333333 412 - -54.833333 -29.333333 272 - -54.666667 -29.333333 263 - -54.500000 -29.333333 192 - -54.333333 -29.333333 374 - -54.166667 -29.333333 316 - -54.000000 -29.333333 336 - -53.833333 -29.333333 419 - -53.666667 -29.333333 451 - -53.500000 -29.333333 385 - -53.333333 -29.333333 430 - -53.166667 -29.333333 168 - -53.000000 -29.333333 371 - -52.833333 -29.333333 506 - -52.666667 -29.333333 555 - -52.500000 -29.333333 618 - -52.333333 -29.333333 571 - -52.166667 -29.333333 165 - -52.000000 -29.333333 337 - -51.833333 -29.333333 374 - -51.666667 -29.333333 519 - -51.500000 -29.333333 683 - -51.333333 -29.333333 554 - -51.166667 -29.333333 116 - -51.000000 -29.333333 455 - -50.833333 -29.333333 799 - -50.666667 -29.333333 840 - -50.500000 -29.333333 892 - -50.333333 -29.333333 920 - -50.166667 -29.333333 921 - -50.000000 -29.333333 508 - -49.833333 -29.333333 12 - -49.666667 -29.333333 -22 - -49.500000 -29.333333 -27 - -49.333333 -29.333333 -44 - -49.166667 -29.333333 -51 - -49.000000 -29.333333 -68 - -48.833333 -29.333333 -94 - -48.666667 -29.333333 -114 - -48.500000 -29.333333 -129 - -48.333333 -29.333333 -131 - -48.166667 -29.333333 -185 - -48.000000 -29.333333 -330 - -47.833333 -29.333333 -523 - -47.666667 -29.333333 -928 - -47.500000 -29.333333 -1207 - -47.333333 -29.333333 -1472 - -47.166667 -29.333333 -1833 - -47.000000 -29.333333 -1870 - -46.833333 -29.333333 -1991 - -46.666667 -29.333333 -2156 - -46.500000 -29.333333 -2340 - -46.333333 -29.333333 -2365 - -46.166667 -29.333333 -2476 - -46.000000 -29.333333 -2556 - -45.833333 -29.333333 -2769 - -45.666667 -29.333333 -3079 - -45.500000 -29.333333 -3410 - -45.333333 -29.333333 -3516 - -45.166667 -29.333333 -3586 - -45.000000 -29.333333 -3618 - -44.833333 -29.333333 -3648 - -44.666667 -29.333333 -3679 - -44.500000 -29.333333 -3720 - -44.333333 -29.333333 -3679 - -44.166667 -29.333333 -3741 - -44.000000 -29.333333 -3836 - -43.833333 -29.333333 -3847 - -43.666667 -29.333333 -3905 - -43.500000 -29.333333 -3945 - -43.333333 -29.333333 -3999 - -43.166667 -29.333333 -4022 - -43.000000 -29.333333 -4032 - -42.833333 -29.333333 -4044 - -42.666667 -29.333333 -3998 - -42.500000 -29.333333 -3965 - -42.333333 -29.333333 -4008 - -42.166667 -29.333333 -3971 - -42.000000 -29.333333 -3893 - -41.833333 -29.333333 -4137 - -41.666667 -29.333333 -3812 - -41.500000 -29.333333 -3801 - -41.333333 -29.333333 -3700 - -41.166667 -29.333333 -3775 - -41.000000 -29.333333 -3710 - -40.833333 -29.333333 -3825 - -40.666667 -29.333333 -3735 - -40.500000 -29.333333 -3766 - -40.333333 -29.333333 -3887 - -40.166667 -29.333333 -4170 - -40.000000 -29.333333 -3981 - -65.000000 -29.500000 187 - -64.833333 -29.500000 180 - -64.666667 -29.500000 153 - -64.500000 -29.500000 119 - -64.333333 -29.500000 123 - -64.166667 -29.500000 271 - -64.000000 -29.500000 443 - -63.833333 -29.500000 533 - -63.666667 -29.500000 504 - -63.500000 -29.500000 284 - -63.333333 -29.500000 130 - -63.166667 -29.500000 87 - -63.000000 -29.500000 84 - -62.833333 -29.500000 81 - -62.666667 -29.500000 83 - -62.500000 -29.500000 81 - -62.333333 -29.500000 79 - -62.166667 -29.500000 78 - -62.000000 -29.500000 75 - -61.833333 -29.500000 82 - -61.666667 -29.500000 69 - -61.500000 -29.500000 68 - -61.333333 -29.500000 65 - -61.166667 -29.500000 62 - -61.000000 -29.500000 59 - -60.833333 -29.500000 57 - -60.666667 -29.500000 53 - -60.500000 -29.500000 56 - -60.333333 -29.500000 61 - -60.166667 -29.500000 59 - -60.000000 -29.500000 57 - -59.833333 -29.500000 43 - -59.666667 -29.500000 30 - -59.500000 -29.500000 30 - -59.333333 -29.500000 36 - -59.166667 -29.500000 43 - -59.000000 -29.500000 44 - -58.833333 -29.500000 43 - -58.666667 -29.500000 67 - -58.500000 -29.500000 77 - -58.333333 -29.500000 83 - -58.166667 -29.500000 109 - -58.000000 -29.500000 70 - -57.833333 -29.500000 71 - -57.666667 -29.500000 73 - -57.500000 -29.500000 53 - -57.333333 -29.500000 65 - -57.166667 -29.500000 72 - -57.000000 -29.500000 68 - -56.833333 -29.500000 47 - -56.666667 -29.500000 81 - -56.500000 -29.500000 62 - -56.333333 -29.500000 67 - -56.166667 -29.500000 89 - -56.000000 -29.500000 91 - -55.833333 -29.500000 119 - -55.666667 -29.500000 67 - -55.500000 -29.500000 156 - -55.333333 -29.500000 128 - -55.166667 -29.500000 104 - -55.000000 -29.500000 261 - -54.833333 -29.500000 131 - -54.666667 -29.500000 118 - -54.500000 -29.500000 292 - -54.333333 -29.500000 208 - -54.166667 -29.500000 263 - -54.000000 -29.500000 339 - -53.833333 -29.500000 479 - -53.666667 -29.500000 491 - -53.500000 -29.500000 288 - -53.333333 -29.500000 236 - -53.166667 -29.500000 251 - -53.000000 -29.500000 569 - -52.833333 -29.500000 440 - -52.666667 -29.500000 524 - -52.500000 -29.500000 270 - -52.333333 -29.500000 260 - -52.166667 -29.500000 144 - -52.000000 -29.500000 61 - -51.833333 -29.500000 84 - -51.666667 -29.500000 458 - -51.500000 -29.500000 373 - -51.333333 -29.500000 33 - -51.166667 -29.500000 157 - -51.000000 -29.500000 466 - -50.833333 -29.500000 361 - -50.666667 -29.500000 292 - -50.500000 -29.500000 667 - -50.333333 -29.500000 855 - -50.166667 -29.500000 437 - -50.000000 -29.500000 252 - -49.833333 -29.500000 -8 - -49.666667 -29.500000 -33 - -49.500000 -29.500000 -41 - -49.333333 -29.500000 -51 - -49.166667 -29.500000 -53 - -49.000000 -29.500000 -86 - -48.833333 -29.500000 -96 - -48.666667 -29.500000 -124 - -48.500000 -29.500000 -125 - -48.333333 -29.500000 -151 - -48.166667 -29.500000 -205 - -48.000000 -29.500000 -359 - -47.833333 -29.500000 -556 - -47.666667 -29.500000 -948 - -47.500000 -29.500000 -1230 - -47.333333 -29.500000 -1539 - -47.166667 -29.500000 -1840 - -47.000000 -29.500000 -1956 - -46.833333 -29.500000 -2085 - -46.666667 -29.500000 -2198 - -46.500000 -29.500000 -2361 - -46.333333 -29.500000 -2432 - -46.166667 -29.500000 -2402 - -46.000000 -29.500000 -2650 - -45.833333 -29.500000 -2795 - -45.666667 -29.500000 -3280 - -45.500000 -29.500000 -3470 - -45.333333 -29.500000 -3526 - -45.166667 -29.500000 -3566 - -45.000000 -29.500000 -3604 - -44.833333 -29.500000 -3650 - -44.666667 -29.500000 -3644 - -44.500000 -29.500000 -3629 - -44.333333 -29.500000 -3644 - -44.166667 -29.500000 -3731 - -44.000000 -29.500000 -3791 - -43.833333 -29.500000 -3822 - -43.666667 -29.500000 -3869 - -43.500000 -29.500000 -3949 - -43.333333 -29.500000 -4004 - -43.166667 -29.500000 -4123 - -43.000000 -29.500000 -4002 - -42.833333 -29.500000 -4026 - -42.666667 -29.500000 -4027 - -42.500000 -29.500000 -4012 - -42.333333 -29.500000 -4019 - -42.166667 -29.500000 -3962 - -42.000000 -29.500000 -3957 - -41.833333 -29.500000 -4001 - -41.666667 -29.500000 -3775 - -41.500000 -29.500000 -3737 - -41.333333 -29.500000 -3777 - -41.166667 -29.500000 -3949 - -41.000000 -29.500000 -3977 - -40.833333 -29.500000 -4040 - -40.666667 -29.500000 -3800 - -40.500000 -29.500000 -4014 - -40.333333 -29.500000 -4121 - -40.166667 -29.500000 -3714 - -40.000000 -29.500000 -3696 - -65.000000 -29.666667 181 - -64.833333 -29.666667 180 - -64.666667 -29.666667 194 - -64.500000 -29.666667 126 - -64.333333 -29.666667 179 - -64.166667 -29.666667 404 - -64.000000 -29.666667 618 - -63.833333 -29.666667 632 - -63.666667 -29.666667 514 - -63.500000 -29.666667 253 - -63.333333 -29.666667 100 - -63.166667 -29.666667 83 - -63.000000 -29.666667 81 - -62.833333 -29.666667 80 - -62.666667 -29.666667 79 - -62.500000 -29.666667 77 - -62.333333 -29.666667 75 - -62.166667 -29.666667 78 - -62.000000 -29.666667 84 - -61.833333 -29.666667 84 - -61.666667 -29.666667 70 - -61.500000 -29.666667 64 - -61.333333 -29.666667 63 - -61.166667 -29.666667 60 - -61.000000 -29.666667 58 - -60.833333 -29.666667 55 - -60.666667 -29.666667 55 - -60.500000 -29.666667 60 - -60.333333 -29.666667 59 - -60.166667 -29.666667 63 - -60.000000 -29.666667 42 - -59.833333 -29.666667 34 - -59.666667 -29.666667 31 - -59.500000 -29.666667 29 - -59.333333 -29.666667 39 - -59.166667 -29.666667 41 - -59.000000 -29.666667 44 - -58.833333 -29.666667 42 - -58.666667 -29.666667 60 - -58.500000 -29.666667 79 - -58.333333 -29.666667 86 - -58.166667 -29.666667 95 - -58.000000 -29.666667 81 - -57.833333 -29.666667 56 - -57.666667 -29.666667 67 - -57.500000 -29.666667 68 - -57.333333 -29.666667 76 - -57.166667 -29.666667 66 - -57.000000 -29.666667 48 - -56.833333 -29.666667 62 - -56.666667 -29.666667 81 - -56.500000 -29.666667 104 - -56.333333 -29.666667 71 - -56.166667 -29.666667 88 - -56.000000 -29.666667 120 - -55.833333 -29.666667 84 - -55.666667 -29.666667 124 - -55.500000 -29.666667 120 - -55.333333 -29.666667 119 - -55.166667 -29.666667 136 - -55.000000 -29.666667 93 - -54.833333 -29.666667 87 - -54.666667 -29.666667 112 - -54.500000 -29.666667 94 - -54.333333 -29.666667 127 - -54.166667 -29.666667 135 - -54.000000 -29.666667 149 - -53.833333 -29.666667 134 - -53.666667 -29.666667 83 - -53.500000 -29.666667 275 - -53.333333 -29.666667 38 - -53.166667 -29.666667 122 - -53.000000 -29.666667 328 - -52.833333 -29.666667 93 - -52.666667 -29.666667 73 - -52.500000 -29.666667 112 - -52.333333 -29.666667 56 - -52.166667 -29.666667 47 - -52.000000 -29.666667 16 - -51.833333 -29.666667 81 - -51.666667 -29.666667 74 - -51.500000 -29.666667 131 - -51.333333 -29.666667 69 - -51.166667 -29.666667 92 - -51.000000 -29.666667 30 - -50.833333 -29.666667 37 - -50.666667 -29.666667 34 - -50.500000 -29.666667 343 - -50.333333 -29.666667 809 - -50.166667 -29.666667 127 - -50.000000 -29.666667 7 - -49.833333 -29.666667 -34 - -49.666667 -29.666667 -42 - -49.500000 -29.666667 -48 - -49.333333 -29.666667 -59 - -49.166667 -29.666667 -83 - -49.000000 -29.666667 -104 - -48.833333 -29.666667 -121 - -48.666667 -29.666667 -119 - -48.500000 -29.666667 -145 - -48.333333 -29.666667 -169 - -48.166667 -29.666667 -247 - -48.000000 -29.666667 -359 - -47.833333 -29.666667 -493 - -47.666667 -29.666667 -938 - -47.500000 -29.666667 -1223 - -47.333333 -29.666667 -1563 - -47.166667 -29.666667 -1832 - -47.000000 -29.666667 -2053 - -46.833333 -29.666667 -2212 - -46.666667 -29.666667 -2273 - -46.500000 -29.666667 -2298 - -46.333333 -29.666667 -2411 - -46.166667 -29.666667 -2568 - -46.000000 -29.666667 -2626 - -45.833333 -29.666667 -3050 - -45.666667 -29.666667 -3258 - -45.500000 -29.666667 -3409 - -45.333333 -29.666667 -3541 - -45.166667 -29.666667 -3500 - -45.000000 -29.666667 -3583 - -44.833333 -29.666667 -3604 - -44.666667 -29.666667 -3626 - -44.500000 -29.666667 -3594 - -44.333333 -29.666667 -3623 - -44.166667 -29.666667 -3680 - -44.000000 -29.666667 -3755 - -43.833333 -29.666667 -3796 - -43.666667 -29.666667 -3872 - -43.500000 -29.666667 -3914 - -43.333333 -29.666667 -4021 - -43.166667 -29.666667 -4139 - -43.000000 -29.666667 -4017 - -42.833333 -29.666667 -4013 - -42.666667 -29.666667 -4017 - -42.500000 -29.666667 -4018 - -42.333333 -29.666667 -4005 - -42.166667 -29.666667 -3950 - -42.000000 -29.666667 -3901 - -41.833333 -29.666667 -3961 - -41.666667 -29.666667 -3738 - -41.500000 -29.666667 -3728 - -41.333333 -29.666667 -3803 - -41.166667 -29.666667 -3718 - -41.000000 -29.666667 -3669 - -40.833333 -29.666667 -3629 - -40.666667 -29.666667 -3743 - -40.500000 -29.666667 -4180 - -40.333333 -29.666667 -3725 - -40.166667 -29.666667 -3514 - -40.000000 -29.666667 -3502 - -65.000000 -29.833333 182 - -64.833333 -29.833333 178 - -64.666667 -29.833333 191 - -64.500000 -29.833333 233 - -64.333333 -29.833333 276 - -64.166667 -29.833333 726 - -64.000000 -29.833333 708 - -63.833333 -29.833333 614 - -63.666667 -29.833333 387 - -63.500000 -29.833333 196 - -63.333333 -29.833333 95 - -63.166667 -29.833333 79 - -63.000000 -29.833333 79 - -62.833333 -29.833333 78 - -62.666667 -29.833333 77 - -62.500000 -29.833333 74 - -62.333333 -29.833333 74 - -62.166667 -29.833333 94 - -62.000000 -29.833333 90 - -61.833333 -29.833333 82 - -61.666667 -29.833333 78 - -61.500000 -29.833333 68 - -61.333333 -29.833333 67 - -61.166667 -29.833333 63 - -61.000000 -29.833333 55 - -60.833333 -29.833333 56 - -60.666667 -29.833333 53 - -60.500000 -29.833333 55 - -60.333333 -29.833333 58 - -60.166667 -29.833333 58 - -60.000000 -29.833333 35 - -59.833333 -29.833333 34 - -59.666667 -29.833333 29 - -59.500000 -29.833333 28 - -59.333333 -29.833333 39 - -59.166667 -29.833333 42 - -59.000000 -29.833333 40 - -58.833333 -29.833333 50 - -58.666667 -29.833333 60 - -58.500000 -29.833333 74 - -58.333333 -29.833333 86 - -58.166667 -29.833333 92 - -58.000000 -29.833333 66 - -57.833333 -29.833333 67 - -57.666667 -29.833333 48 - -57.500000 -29.833333 62 - -57.333333 -29.833333 50 - -57.166667 -29.833333 52 - -57.000000 -29.833333 91 - -56.833333 -29.833333 155 - -56.666667 -29.833333 104 - -56.500000 -29.833333 119 - -56.333333 -29.833333 93 - -56.166667 -29.833333 129 - -56.000000 -29.833333 118 - -55.833333 -29.833333 106 - -55.666667 -29.833333 106 - -55.500000 -29.833333 104 - -55.333333 -29.833333 148 - -55.166667 -29.833333 97 - -55.000000 -29.833333 108 - -54.833333 -29.833333 85 - -54.666667 -29.833333 88 - -54.500000 -29.833333 131 - -54.333333 -29.833333 132 - -54.166667 -29.833333 88 - -54.000000 -29.833333 105 - -53.833333 -29.833333 80 - -53.666667 -29.833333 53 - -53.500000 -29.833333 89 - -53.333333 -29.833333 53 - -53.166667 -29.833333 62 - -53.000000 -29.833333 63 - -52.833333 -29.833333 80 - -52.666667 -29.833333 44 - -52.500000 -29.833333 39 - -52.333333 -29.833333 65 - -52.166667 -29.833333 53 - -52.000000 -29.833333 71 - -51.833333 -29.833333 11 - -51.666667 -29.833333 39 - -51.500000 -29.833333 70 - -51.333333 -29.833333 6 - -51.166667 -29.833333 18 - -51.000000 -29.833333 87 - -50.833333 -29.833333 81 - -50.666667 -29.833333 48 - -50.500000 -29.833333 62 - -50.333333 -29.833333 268 - -50.166667 -29.833333 2 - -50.000000 -29.833333 -28 - -49.833333 -29.833333 -40 - -49.666667 -29.833333 -47 - -49.500000 -29.833333 -59 - -49.333333 -29.833333 -79 - -49.166667 -29.833333 -88 - -49.000000 -29.833333 -118 - -48.833333 -29.833333 -110 - -48.666667 -29.833333 -139 - -48.500000 -29.833333 -104 - -48.333333 -29.833333 -206 - -48.166667 -29.833333 -358 - -48.000000 -29.833333 -368 - -47.833333 -29.833333 -451 - -47.666667 -29.833333 -830 - -47.500000 -29.833333 -1250 - -47.333333 -29.833333 -1517 - -47.166667 -29.833333 -1809 - -47.000000 -29.833333 -2044 - -46.833333 -29.833333 -2248 - -46.666667 -29.833333 -2367 - -46.500000 -29.833333 -2394 - -46.333333 -29.833333 -2498 - -46.166667 -29.833333 -2317 - -46.000000 -29.833333 -2772 - -45.833333 -29.833333 -3172 - -45.666667 -29.833333 -3352 - -45.500000 -29.833333 -3393 - -45.333333 -29.833333 -3532 - -45.166667 -29.833333 -3550 - -45.000000 -29.833333 -3538 - -44.833333 -29.833333 -3559 - -44.666667 -29.833333 -3566 - -44.500000 -29.833333 -3560 - -44.333333 -29.833333 -3582 - -44.166667 -29.833333 -3614 - -44.000000 -29.833333 -3684 - -43.833333 -29.833333 -3759 - -43.666667 -29.833333 -3899 - -43.500000 -29.833333 -3906 - -43.333333 -29.833333 -3950 - -43.166667 -29.833333 -3933 - -43.000000 -29.833333 -4010 - -42.833333 -29.833333 -4032 - -42.666667 -29.833333 -3987 - -42.500000 -29.833333 -3947 - -42.333333 -29.833333 -3922 - -42.166667 -29.833333 -3905 - -42.000000 -29.833333 -3871 - -41.833333 -29.833333 -3855 - -41.666667 -29.833333 -3745 - -41.500000 -29.833333 -3653 - -41.333333 -29.833333 -3884 - -41.166667 -29.833333 -3562 - -41.000000 -29.833333 -3450 - -40.833333 -29.833333 -3318 - -40.666667 -29.833333 -3478 - -40.500000 -29.833333 -4139 - -40.333333 -29.833333 -4028 - -40.166667 -29.833333 -3428 - -40.000000 -29.833333 -3141 - -65.000000 -30.000000 179 - -64.833333 -30.000000 179 - -64.666667 -30.000000 178 - -64.500000 -30.000000 304 - -64.333333 -30.000000 492 - -64.166667 -30.000000 891 - -64.000000 -30.000000 737 - -63.833333 -30.000000 534 - -63.666667 -30.000000 278 - -63.500000 -30.000000 183 - -63.333333 -30.000000 94 - -63.166667 -30.000000 77 - -63.000000 -30.000000 76 - -62.833333 -30.000000 75 - -62.666667 -30.000000 74 - -62.500000 -30.000000 74 - -62.333333 -30.000000 73 - -62.166667 -30.000000 92 - -62.000000 -30.000000 89 - -61.833333 -30.000000 90 - -61.666667 -30.000000 86 - -61.500000 -30.000000 78 - -61.333333 -30.000000 64 - -61.166667 -30.000000 67 - -61.000000 -30.000000 55 - -60.833333 -30.000000 62 - -60.666667 -30.000000 51 - -60.500000 -30.000000 56 - -60.333333 -30.000000 63 - -60.166667 -30.000000 46 - -60.000000 -30.000000 33 - -59.833333 -30.000000 30 - -59.666667 -30.000000 28 - -59.500000 -30.000000 41 - -59.333333 -30.000000 39 - -59.166667 -30.000000 36 - -59.000000 -30.000000 42 - -58.833333 -30.000000 67 - -58.666667 -30.000000 71 - -58.500000 -30.000000 74 - -58.333333 -30.000000 78 - -58.166667 -30.000000 69 - -58.000000 -30.000000 92 - -57.833333 -30.000000 77 - -57.666667 -30.000000 44 - -57.500000 -30.000000 60 - -57.333333 -30.000000 44 - -57.166667 -30.000000 80 - -57.000000 -30.000000 78 - -56.833333 -30.000000 72 - -56.666667 -30.000000 137 - -56.500000 -30.000000 149 - -56.333333 -30.000000 183 - -56.166667 -30.000000 174 - -56.000000 -30.000000 163 - -55.833333 -30.000000 96 - -55.666667 -30.000000 127 - -55.500000 -30.000000 140 - -55.333333 -30.000000 155 - -55.166667 -30.000000 162 - -55.000000 -30.000000 120 - -54.833333 -30.000000 126 - -54.666667 -30.000000 124 - -54.500000 -30.000000 168 - -54.333333 -30.000000 149 - -54.166667 -30.000000 131 - -54.000000 -30.000000 70 - -53.833333 -30.000000 54 - -53.666667 -30.000000 81 - -53.500000 -30.000000 106 - -53.333333 -30.000000 37 - -53.166667 -30.000000 34 - -53.000000 -30.000000 30 - -52.833333 -30.000000 59 - -52.666667 -30.000000 18 - -52.500000 -30.000000 94 - -52.333333 -30.000000 49 - -52.166667 -30.000000 37 - -52.000000 -30.000000 41 - -51.833333 -30.000000 42 - -51.666667 -30.000000 23 - -51.500000 -30.000000 21 - -51.333333 -30.000000 6 - -51.166667 -30.000000 11 - -51.000000 -30.000000 34 - -50.833333 -30.000000 5 - -50.666667 -30.000000 56 - -50.500000 -30.000000 8 - -50.333333 -30.000000 15 - -50.166667 -30.000000 2 - -50.000000 -30.000000 -31 - -49.833333 -30.000000 -43 - -49.666667 -30.000000 -51 - -49.500000 -30.000000 -61 - -49.333333 -30.000000 -91 - -49.166667 -30.000000 -111 - -49.000000 -30.000000 -116 - -48.833333 -30.000000 -136 - -48.666667 -30.000000 -146 - -48.500000 -30.000000 -176 - -48.333333 -30.000000 -197 - -48.166667 -30.000000 -305 - -48.000000 -30.000000 -340 - -47.833333 -30.000000 -517 - -47.666667 -30.000000 -839 - -47.500000 -30.000000 -1362 - -47.333333 -30.000000 -1557 - -47.166667 -30.000000 -1787 - -47.000000 -30.000000 -2081 - -46.833333 -30.000000 -2289 - -46.666667 -30.000000 -2425 - -46.500000 -30.000000 -2472 - -46.333333 -30.000000 -2490 - -46.166667 -30.000000 -2597 - -46.000000 -30.000000 -2920 - -45.833333 -30.000000 -3194 - -45.666667 -30.000000 -3453 - -45.500000 -30.000000 -3521 - -45.333333 -30.000000 -3595 - -45.166667 -30.000000 -3501 - -45.000000 -30.000000 -3509 - -44.833333 -30.000000 -3526 - -44.666667 -30.000000 -3547 - -44.500000 -30.000000 -3534 - -44.333333 -30.000000 -3543 - -44.166667 -30.000000 -3585 - -44.000000 -30.000000 -3632 - -43.833333 -30.000000 -3683 - -43.666667 -30.000000 -3828 - -43.500000 -30.000000 -3944 - -43.333333 -30.000000 -3860 - -43.166667 -30.000000 -3885 - -43.000000 -30.000000 -3993 - -42.833333 -30.000000 -3902 - -42.666667 -30.000000 -3889 - -42.500000 -30.000000 -3929 - -42.333333 -30.000000 -3876 - -42.166667 -30.000000 -3875 - -42.000000 -30.000000 -3893 - -41.833333 -30.000000 -3851 - -41.666667 -30.000000 -3755 - -41.500000 -30.000000 -3642 - -41.333333 -30.000000 -3705 - -41.166667 -30.000000 -3658 - -41.000000 -30.000000 -3218 - -40.833333 -30.000000 -3322 - -40.666667 -30.000000 -2966 - -40.500000 -30.000000 -3783 - -40.333333 -30.000000 -4147 - -40.166667 -30.000000 -3529 - -40.000000 -30.000000 -3195 - -65.000000 -30.166667 179 - -64.833333 -30.166667 189 - -64.666667 -30.166667 227 - -64.500000 -30.166667 379 - -64.333333 -30.166667 650 - -64.166667 -30.166667 880 - -64.000000 -30.166667 696 - -63.833333 -30.166667 405 - -63.666667 -30.166667 263 - -63.500000 -30.166667 153 - -63.333333 -30.166667 76 - -63.166667 -30.166667 75 - -63.000000 -30.166667 75 - -62.833333 -30.166667 73 - -62.666667 -30.166667 72 - -62.500000 -30.166667 71 - -62.333333 -30.166667 69 - -62.166667 -30.166667 80 - -62.000000 -30.166667 89 - -61.833333 -30.166667 92 - -61.666667 -30.166667 89 - -61.500000 -30.166667 85 - -61.333333 -30.166667 75 - -61.166667 -30.166667 70 - -61.000000 -30.166667 47 - -60.833333 -30.166667 59 - -60.666667 -30.166667 48 - -60.500000 -30.166667 56 - -60.333333 -30.166667 56 - -60.166667 -30.166667 28 - -60.000000 -30.166667 27 - -59.833333 -30.166667 24 - -59.666667 -30.166667 27 - -59.500000 -30.166667 36 - -59.333333 -30.166667 36 - -59.166667 -30.166667 35 - -59.000000 -30.166667 52 - -58.833333 -30.166667 66 - -58.666667 -30.166667 56 - -58.500000 -30.166667 68 - -58.333333 -30.166667 78 - -58.166667 -30.166667 77 - -58.000000 -30.166667 66 - -57.833333 -30.166667 68 - -57.666667 -30.166667 51 - -57.500000 -30.166667 48 - -57.333333 -30.166667 64 - -57.166667 -30.166667 56 - -57.000000 -30.166667 68 - -56.833333 -30.166667 90 - -56.666667 -30.166667 106 - -56.500000 -30.166667 120 - -56.333333 -30.166667 163 - -56.166667 -30.166667 166 - -56.000000 -30.166667 210 - -55.833333 -30.166667 155 - -55.666667 -30.166667 102 - -55.500000 -30.166667 154 - -55.333333 -30.166667 130 - -55.166667 -30.166667 133 - -55.000000 -30.166667 118 - -54.833333 -30.166667 124 - -54.666667 -30.166667 126 - -54.500000 -30.166667 146 - -54.333333 -30.166667 110 - -54.166667 -30.166667 84 - -54.000000 -30.166667 69 - -53.833333 -30.166667 139 - -53.666667 -30.166667 110 - -53.500000 -30.166667 96 - -53.333333 -30.166667 49 - -53.166667 -30.166667 62 - -53.000000 -30.166667 44 - -52.833333 -30.166667 48 - -52.666667 -30.166667 44 - -52.500000 -30.166667 24 - -52.333333 -30.166667 66 - -52.166667 -30.166667 58 - -52.000000 -30.166667 108 - -51.833333 -30.166667 66 - -51.666667 -30.166667 125 - -51.500000 -30.166667 86 - -51.333333 -30.166667 8 - -51.166667 -30.166667 12 - -51.000000 -30.166667 117 - -50.833333 -30.166667 38 - -50.666667 -30.166667 2 - -50.500000 -30.166667 9 - -50.333333 -30.166667 15 - -50.166667 -30.166667 -15 - -50.000000 -30.166667 -36 - -49.833333 -30.166667 -45 - -49.666667 -30.166667 -57 - -49.500000 -30.166667 -84 - -49.333333 -30.166667 -107 - -49.166667 -30.166667 -123 - -49.000000 -30.166667 -171 - -48.833333 -30.166667 -166 - -48.666667 -30.166667 -243 - -48.500000 -30.166667 -272 - -48.333333 -30.166667 -228 - -48.166667 -30.166667 -313 - -48.000000 -30.166667 -396 - -47.833333 -30.166667 -539 - -47.666667 -30.166667 -905 - -47.500000 -30.166667 -1292 - -47.333333 -30.166667 -1553 - -47.166667 -30.166667 -2033 - -47.000000 -30.166667 -2275 - -46.833333 -30.166667 -2383 - -46.666667 -30.166667 -2373 - -46.500000 -30.166667 -2457 - -46.333333 -30.166667 -2540 - -46.166667 -30.166667 -2721 - -46.000000 -30.166667 -3050 - -45.833333 -30.166667 -3224 - -45.666667 -30.166667 -3308 - -45.500000 -30.166667 -3542 - -45.333333 -30.166667 -3507 - -45.166667 -30.166667 -3490 - -45.000000 -30.166667 -3462 - -44.833333 -30.166667 -3502 - -44.666667 -30.166667 -3515 - -44.500000 -30.166667 -3510 - -44.333333 -30.166667 -3506 - -44.166667 -30.166667 -3532 - -44.000000 -30.166667 -3585 - -43.833333 -30.166667 -3598 - -43.666667 -30.166667 -3751 - -43.500000 -30.166667 -3972 - -43.333333 -30.166667 -3841 - -43.166667 -30.166667 -3844 - -43.000000 -30.166667 -3874 - -42.833333 -30.166667 -3876 - -42.666667 -30.166667 -3893 - -42.500000 -30.166667 -3893 - -42.333333 -30.166667 -3877 - -42.166667 -30.166667 -3864 - -42.000000 -30.166667 -3846 - -41.833333 -30.166667 -3797 - -41.666667 -30.166667 -3769 - -41.500000 -30.166667 -3837 - -41.333333 -30.166667 -3749 - -41.166667 -30.166667 -3884 - -41.000000 -30.166667 -3443 - -40.833333 -30.166667 -3159 - -40.666667 -30.166667 -3477 - -40.500000 -30.166667 -4214 - -40.333333 -30.166667 -3730 - -40.166667 -30.166667 -3110 - -40.000000 -30.166667 -3429 - -65.000000 -30.333333 246 - -64.833333 -30.333333 269 - -64.666667 -30.333333 347 - -64.500000 -30.333333 493 - -64.333333 -30.333333 671 - -64.166667 -30.333333 844 - -64.000000 -30.333333 546 - -63.833333 -30.333333 380 - -63.666667 -30.333333 239 - -63.500000 -30.333333 136 - -63.333333 -30.333333 69 - -63.166667 -30.333333 71 - -63.000000 -30.333333 72 - -62.833333 -30.333333 70 - -62.666667 -30.333333 69 - -62.500000 -30.333333 69 - -62.333333 -30.333333 69 - -62.166667 -30.333333 79 - -62.000000 -30.333333 93 - -61.833333 -30.333333 91 - -61.666667 -30.333333 91 - -61.500000 -30.333333 85 - -61.333333 -30.333333 78 - -61.166667 -30.333333 69 - -61.000000 -30.333333 65 - -60.833333 -30.333333 58 - -60.666667 -30.333333 52 - -60.500000 -30.333333 51 - -60.333333 -30.333333 58 - -60.166667 -30.333333 29 - -60.000000 -30.333333 26 - -59.833333 -30.333333 22 - -59.666667 -30.333333 23 - -59.500000 -30.333333 29 - -59.333333 -30.333333 33 - -59.166667 -30.333333 41 - -59.000000 -30.333333 63 - -58.833333 -30.333333 64 - -58.666667 -30.333333 66 - -58.500000 -30.333333 70 - -58.333333 -30.333333 77 - -58.166667 -30.333333 67 - -58.000000 -30.333333 55 - -57.833333 -30.333333 62 - -57.666667 -30.333333 52 - -57.500000 -30.333333 72 - -57.333333 -30.333333 49 - -57.166667 -30.333333 61 - -57.000000 -30.333333 72 - -56.833333 -30.333333 117 - -56.666667 -30.333333 122 - -56.500000 -30.333333 114 - -56.333333 -30.333333 177 - -56.166667 -30.333333 226 - -56.000000 -30.333333 218 - -55.833333 -30.333333 209 - -55.666667 -30.333333 130 - -55.500000 -30.333333 183 - -55.333333 -30.333333 155 - -55.166667 -30.333333 154 - -55.000000 -30.333333 134 - -54.833333 -30.333333 99 - -54.666667 -30.333333 139 - -54.500000 -30.333333 122 - -54.333333 -30.333333 113 - -54.166667 -30.333333 150 - -54.000000 -30.333333 139 - -53.833333 -30.333333 202 - -53.666667 -30.333333 214 - -53.500000 -30.333333 121 - -53.333333 -30.333333 142 - -53.166667 -30.333333 51 - -53.000000 -30.333333 91 - -52.833333 -30.333333 74 - -52.666667 -30.333333 136 - -52.500000 -30.333333 100 - -52.333333 -30.333333 91 - -52.166667 -30.333333 208 - -52.000000 -30.333333 206 - -51.833333 -30.333333 250 - -51.666667 -30.333333 258 - -51.500000 -30.333333 111 - -51.333333 -30.333333 11 - -51.166667 -30.333333 -1 - -51.000000 -30.333333 70 - -50.833333 -30.333333 -1 - -50.666667 -30.333333 -1 - -50.500000 -30.333333 5 - -50.333333 -30.333333 7 - -50.166667 -30.333333 -20 - -50.000000 -30.333333 -39 - -49.833333 -30.333333 -59 - -49.666667 -30.333333 -76 - -49.500000 -30.333333 -102 - -49.333333 -30.333333 -122 - -49.166667 -30.333333 -117 - -49.000000 -30.333333 -144 - -48.833333 -30.333333 -164 - -48.666667 -30.333333 -198 - -48.500000 -30.333333 -244 - -48.333333 -30.333333 -272 - -48.166667 -30.333333 -352 - -48.000000 -30.333333 -443 - -47.833333 -30.333333 -655 - -47.666667 -30.333333 -1046 - -47.500000 -30.333333 -1405 - -47.333333 -30.333333 -1723 - -47.166667 -30.333333 -2103 - -47.000000 -30.333333 -2124 - -46.833333 -30.333333 -2276 - -46.666667 -30.333333 -2518 - -46.500000 -30.333333 -2591 - -46.333333 -30.333333 -2678 - -46.166667 -30.333333 -2911 - -46.000000 -30.333333 -3142 - -45.833333 -30.333333 -3282 - -45.666667 -30.333333 -3341 - -45.500000 -30.333333 -3522 - -45.333333 -30.333333 -3486 - -45.166667 -30.333333 -3430 - -45.000000 -30.333333 -3434 - -44.833333 -30.333333 -3438 - -44.666667 -30.333333 -3466 - -44.500000 -30.333333 -3466 - -44.333333 -30.333333 -3446 - -44.166667 -30.333333 -3468 - -44.000000 -30.333333 -3493 - -43.833333 -30.333333 -3532 - -43.666667 -30.333333 -3663 - -43.500000 -30.333333 -3846 - -43.333333 -30.333333 -3805 - -43.166667 -30.333333 -3900 - -43.000000 -30.333333 -3859 - -42.833333 -30.333333 -3877 - -42.666667 -30.333333 -3862 - -42.500000 -30.333333 -3951 - -42.333333 -30.333333 -3873 - -42.166667 -30.333333 -3836 - -42.000000 -30.333333 -3827 - -41.833333 -30.333333 -3816 - -41.666667 -30.333333 -3784 - -41.500000 -30.333333 -3801 - -41.333333 -30.333333 -3636 - -41.166667 -30.333333 -3824 - -41.000000 -30.333333 -3729 - -40.833333 -30.333333 -3865 - -40.666667 -30.333333 -4338 - -40.500000 -30.333333 -3741 - -40.333333 -30.333333 -3461 - -40.166667 -30.333333 -3231 - -40.000000 -30.333333 -3004 - -65.000000 -30.500000 322 - -64.833333 -30.500000 376 - -64.666667 -30.500000 536 - -64.500000 -30.500000 746 - -64.333333 -30.500000 845 - -64.166667 -30.500000 730 - -64.000000 -30.500000 488 - -63.833333 -30.500000 348 - -63.666667 -30.500000 224 - -63.500000 -30.500000 130 - -63.333333 -30.500000 74 - -63.166667 -30.500000 69 - -63.000000 -30.500000 69 - -62.833333 -30.500000 69 - -62.666667 -30.500000 69 - -62.500000 -30.500000 69 - -62.333333 -30.500000 69 - -62.166667 -30.500000 95 - -62.000000 -30.500000 94 - -61.833333 -30.500000 95 - -61.666667 -30.500000 94 - -61.500000 -30.500000 88 - -61.333333 -30.500000 76 - -61.166667 -30.500000 59 - -61.000000 -30.500000 52 - -60.833333 -30.500000 62 - -60.666667 -30.500000 42 - -60.500000 -30.500000 52 - -60.333333 -30.500000 27 - -60.166667 -30.500000 25 - -60.000000 -30.500000 26 - -59.833333 -30.500000 22 - -59.666667 -30.500000 23 - -59.500000 -30.500000 32 - -59.333333 -30.500000 54 - -59.166667 -30.500000 68 - -59.000000 -30.500000 63 - -58.833333 -30.500000 56 - -58.666667 -30.500000 62 - -58.500000 -30.500000 69 - -58.333333 -30.500000 70 - -58.166667 -30.500000 59 - -58.000000 -30.500000 63 - -57.833333 -30.500000 40 - -57.666667 -30.500000 72 - -57.500000 -30.500000 86 - -57.333333 -30.500000 86 - -57.166667 -30.500000 89 - -57.000000 -30.500000 103 - -56.833333 -30.500000 148 - -56.666667 -30.500000 134 - -56.500000 -30.500000 189 - -56.333333 -30.500000 105 - -56.166667 -30.500000 168 - -56.000000 -30.500000 179 - -55.833333 -30.500000 238 - -55.666667 -30.500000 234 - -55.500000 -30.500000 188 - -55.333333 -30.500000 180 - -55.166667 -30.500000 133 - -55.000000 -30.500000 108 - -54.833333 -30.500000 169 - -54.666667 -30.500000 113 - -54.500000 -30.500000 152 - -54.333333 -30.500000 136 - -54.166667 -30.500000 267 - -54.000000 -30.500000 336 - -53.833333 -30.500000 425 - -53.666667 -30.500000 300 - -53.500000 -30.500000 364 - -53.333333 -30.500000 158 - -53.166667 -30.500000 96 - -53.000000 -30.500000 322 - -52.833333 -30.500000 154 - -52.666667 -30.500000 289 - -52.500000 -30.500000 353 - -52.333333 -30.500000 347 - -52.166667 -30.500000 367 - -52.000000 -30.500000 505 - -51.833333 -30.500000 357 - -51.666667 -30.500000 131 - -51.500000 -30.500000 106 - -51.333333 -30.500000 53 - -51.166667 -30.500000 -1 - -51.000000 -30.500000 -4 - -50.833333 -30.500000 -2 - -50.666667 -30.500000 1 - -50.500000 -30.500000 9 - -50.333333 -30.500000 0 - -50.166667 -30.500000 -25 - -50.000000 -30.500000 -50 - -49.833333 -30.500000 -71 - -49.666667 -30.500000 -98 - -49.500000 -30.500000 -129 - -49.333333 -30.500000 -123 - -49.166667 -30.500000 -129 - -49.000000 -30.500000 -144 - -48.833333 -30.500000 -103 - -48.666667 -30.500000 -206 - -48.500000 -30.500000 -407 - -48.333333 -30.500000 -418 - -48.166667 -30.500000 -485 - -48.000000 -30.500000 -581 - -47.833333 -30.500000 -815 - -47.666667 -30.500000 -1149 - -47.500000 -30.500000 -1714 - -47.333333 -30.500000 -2021 - -47.166667 -30.500000 -2219 - -47.000000 -30.500000 -2396 - -46.833333 -30.500000 -2741 - -46.666667 -30.500000 -3081 - -46.500000 -30.500000 -3172 - -46.333333 -30.500000 -3080 - -46.166667 -30.500000 -3210 - -46.000000 -30.500000 -3207 - -45.833333 -30.500000 -3246 - -45.666667 -30.500000 -3369 - -45.500000 -30.500000 -3492 - -45.333333 -30.500000 -3457 - -45.166667 -30.500000 -3497 - -45.000000 -30.500000 -3416 - -44.833333 -30.500000 -3401 - -44.666667 -30.500000 -3440 - -44.500000 -30.500000 -3456 - -44.333333 -30.500000 -3444 - -44.166667 -30.500000 -3440 - -44.000000 -30.500000 -3489 - -43.833333 -30.500000 -3470 - -43.666667 -30.500000 -3523 - -43.500000 -30.500000 -3810 - -43.333333 -30.500000 -3846 - -43.166667 -30.500000 -3888 - -43.000000 -30.500000 -3889 - -42.833333 -30.500000 -3833 - -42.666667 -30.500000 -3829 - -42.500000 -30.500000 -3874 - -42.333333 -30.500000 -3869 - -42.166667 -30.500000 -3831 - -42.000000 -30.500000 -3842 - -41.833333 -30.500000 -3735 - -41.666667 -30.500000 -3758 - -41.500000 -30.500000 -3673 - -41.333333 -30.500000 -3684 - -41.166667 -30.500000 -3906 - -41.000000 -30.500000 -3711 - -40.833333 -30.500000 -3785 - -40.666667 -30.500000 -3913 - -40.500000 -30.500000 -3858 - -40.333333 -30.500000 -3889 - -40.166667 -30.500000 -3960 - -40.000000 -30.500000 -3979 - -65.000000 -30.666667 413 - -64.833333 -30.666667 451 - -64.666667 -30.666667 621 - -64.500000 -30.666667 952 - -64.333333 -30.666667 1027 - -64.166667 -30.666667 657 - -64.000000 -30.666667 469 - -63.833333 -30.666667 329 - -63.666667 -30.666667 214 - -63.500000 -30.666667 119 - -63.333333 -30.666667 86 - -63.166667 -30.666667 77 - -63.000000 -30.666667 69 - -62.833333 -30.666667 69 - -62.666667 -30.666667 69 - -62.500000 -30.666667 69 - -62.333333 -30.666667 69 - -62.166667 -30.666667 97 - -62.000000 -30.666667 97 - -61.833333 -30.666667 97 - -61.666667 -30.666667 94 - -61.500000 -30.666667 87 - -61.333333 -30.666667 76 - -61.166667 -30.666667 66 - -61.000000 -30.666667 46 - -60.833333 -30.666667 55 - -60.666667 -30.666667 51 - -60.500000 -30.666667 57 - -60.333333 -30.666667 23 - -60.166667 -30.666667 23 - -60.000000 -30.666667 24 - -59.833333 -30.666667 21 - -59.666667 -30.666667 22 - -59.500000 -30.666667 53 - -59.333333 -30.666667 59 - -59.166667 -30.666667 64 - -59.000000 -30.666667 54 - -58.833333 -30.666667 55 - -58.666667 -30.666667 74 - -58.500000 -30.666667 73 - -58.333333 -30.666667 73 - -58.166667 -30.666667 67 - -58.000000 -30.666667 44 - -57.833333 -30.666667 32 - -57.666667 -30.666667 73 - -57.500000 -30.666667 90 - -57.333333 -30.666667 136 - -57.166667 -30.666667 116 - -57.000000 -30.666667 112 - -56.833333 -30.666667 139 - -56.666667 -30.666667 214 - -56.500000 -30.666667 290 - -56.333333 -30.666667 145 - -56.166667 -30.666667 132 - -56.000000 -30.666667 212 - -55.833333 -30.666667 281 - -55.666667 -30.666667 201 - -55.500000 -30.666667 248 - -55.333333 -30.666667 173 - -55.166667 -30.666667 119 - -55.000000 -30.666667 164 - -54.833333 -30.666667 145 - -54.666667 -30.666667 115 - -54.500000 -30.666667 144 - -54.333333 -30.666667 201 - -54.166667 -30.666667 241 - -54.000000 -30.666667 301 - -53.833333 -30.666667 248 - -53.666667 -30.666667 274 - -53.500000 -30.666667 281 - -53.333333 -30.666667 119 - -53.166667 -30.666667 141 - -53.000000 -30.666667 265 - -52.833333 -30.666667 372 - -52.666667 -30.666667 315 - -52.500000 -30.666667 394 - -52.333333 -30.666667 202 - -52.166667 -30.666667 274 - -52.000000 -30.666667 271 - -51.833333 -30.666667 187 - -51.666667 -30.666667 90 - -51.500000 -30.666667 27 - -51.333333 -30.666667 -1 - -51.166667 -30.666667 -6 - -51.000000 -30.666667 -6 - -50.833333 -30.666667 -5 - -50.666667 -30.666667 5 - -50.500000 -30.666667 14 - -50.333333 -30.666667 -21 - -50.166667 -30.666667 -45 - -50.000000 -30.666667 -71 - -49.833333 -30.666667 -105 - -49.666667 -30.666667 -105 - -49.500000 -30.666667 -130 - -49.333333 -30.666667 -149 - -49.166667 -30.666667 -167 - -49.000000 -30.666667 -89 - -48.833333 -30.666667 -331 - -48.666667 -30.666667 -981 - -48.500000 -30.666667 -1106 - -48.333333 -30.666667 -1222 - -48.166667 -30.666667 -1466 - -48.000000 -30.666667 -1730 - -47.833333 -30.666667 -2170 - -47.666667 -30.666667 -2446 - -47.500000 -30.666667 -2460 - -47.333333 -30.666667 -2664 - -47.166667 -30.666667 -2818 - -47.000000 -30.666667 -3092 - -46.833333 -30.666667 -3099 - -46.666667 -30.666667 -3064 - -46.500000 -30.666667 -3207 - -46.333333 -30.666667 -3242 - -46.166667 -30.666667 -3264 - -46.000000 -30.666667 -3267 - -45.833333 -30.666667 -3313 - -45.666667 -30.666667 -3440 - -45.500000 -30.666667 -3471 - -45.333333 -30.666667 -3499 - -45.166667 -30.666667 -3384 - -45.000000 -30.666667 -3422 - -44.833333 -30.666667 -3416 - -44.666667 -30.666667 -3429 - -44.500000 -30.666667 -3381 - -44.333333 -30.666667 -3407 - -44.166667 -30.666667 -3378 - -44.000000 -30.666667 -3463 - -43.833333 -30.666667 -3438 - -43.666667 -30.666667 -3465 - -43.500000 -30.666667 -3544 - -43.333333 -30.666667 -3842 - -43.166667 -30.666667 -3961 - -43.000000 -30.666667 -3919 - -42.833333 -30.666667 -3915 - -42.666667 -30.666667 -3760 - -42.500000 -30.666667 -3832 - -42.333333 -30.666667 -3844 - -42.166667 -30.666667 -3818 - -42.000000 -30.666667 -3815 - -41.833333 -30.666667 -3818 - -41.666667 -30.666667 -3735 - -41.500000 -30.666667 -3664 - -41.333333 -30.666667 -3606 - -41.166667 -30.666667 -3790 - -41.000000 -30.666667 -3681 - -40.833333 -30.666667 -3733 - -40.666667 -30.666667 -3601 - -40.500000 -30.666667 -3749 - -40.333333 -30.666667 -4111 - -40.166667 -30.666667 -4006 - -40.000000 -30.666667 -3875 - -65.000000 -30.833333 545 - -64.833333 -30.833333 684 - -64.666667 -30.833333 594 - -64.500000 -30.833333 1163 - -64.333333 -30.833333 1078 - -64.166667 -30.833333 697 - -64.000000 -30.833333 467 - -63.833333 -30.833333 305 - -63.666667 -30.833333 198 - -63.500000 -30.833333 127 - -63.333333 -30.833333 103 - -63.166667 -30.833333 97 - -63.000000 -30.833333 88 - -62.833333 -30.833333 69 - -62.666667 -30.833333 69 - -62.500000 -30.833333 69 - -62.333333 -30.833333 69 - -62.166667 -30.833333 102 - -62.000000 -30.833333 99 - -61.833333 -30.833333 99 - -61.666667 -30.833333 98 - -61.500000 -30.833333 93 - -61.333333 -30.833333 79 - -61.166667 -30.833333 61 - -61.000000 -30.833333 54 - -60.833333 -30.833333 37 - -60.666667 -30.833333 55 - -60.500000 -30.833333 32 - -60.333333 -30.833333 21 - -60.166667 -30.833333 21 - -60.000000 -30.833333 23 - -59.833333 -30.833333 15 - -59.666667 -30.833333 57 - -59.500000 -30.833333 48 - -59.333333 -30.833333 43 - -59.166667 -30.833333 58 - -59.000000 -30.833333 51 - -58.833333 -30.833333 71 - -58.666667 -30.833333 75 - -58.500000 -30.833333 63 - -58.333333 -30.833333 64 - -58.166667 -30.833333 62 - -58.000000 -30.833333 62 - -57.833333 -30.833333 39 - -57.666667 -30.833333 66 - -57.500000 -30.833333 84 - -57.333333 -30.833333 114 - -57.166667 -30.833333 126 - -57.000000 -30.833333 148 - -56.833333 -30.833333 157 - -56.666667 -30.833333 168 - -56.500000 -30.833333 211 - -56.333333 -30.833333 193 - -56.166667 -30.833333 234 - -56.000000 -30.833333 205 - -55.833333 -30.833333 252 - -55.666667 -30.833333 320 - -55.500000 -30.833333 218 - -55.333333 -30.833333 160 - -55.166667 -30.833333 154 - -55.000000 -30.833333 149 - -54.833333 -30.833333 160 - -54.666667 -30.833333 127 - -54.500000 -30.833333 280 - -54.333333 -30.833333 269 - -54.166667 -30.833333 318 - -54.000000 -30.833333 356 - -53.833333 -30.833333 240 - -53.666667 -30.833333 154 - -53.500000 -30.833333 235 - -53.333333 -30.833333 240 - -53.166667 -30.833333 327 - -53.000000 -30.833333 255 - -52.833333 -30.833333 251 - -52.666667 -30.833333 290 - -52.500000 -30.833333 90 - -52.333333 -30.833333 166 - -52.166667 -30.833333 122 - -52.000000 -30.833333 155 - -51.833333 -30.833333 43 - -51.666667 -30.833333 20 - -51.500000 -30.833333 9 - -51.333333 -30.833333 -5 - -51.166667 -30.833333 -6 - -51.000000 -30.833333 -6 - -50.833333 -30.833333 -1 - -50.666667 -30.833333 17 - -50.500000 -30.833333 -18 - -50.333333 -30.833333 -43 - -50.166667 -30.833333 -73 - -50.000000 -30.833333 -100 - -49.833333 -30.833333 -115 - -49.666667 -30.833333 -112 - -49.500000 -30.833333 -89 - -49.333333 -30.833333 -170 - -49.166667 -30.833333 -211 - -49.000000 -30.833333 -862 - -48.833333 -30.833333 -1384 - -48.666667 -30.833333 -1476 - -48.500000 -30.833333 -1725 - -48.333333 -30.833333 -2029 - -48.166667 -30.833333 -2309 - -48.000000 -30.833333 -2526 - -47.833333 -30.833333 -2607 - -47.666667 -30.833333 -2771 - -47.500000 -30.833333 -2880 - -47.333333 -30.833333 -2947 - -47.166667 -30.833333 -3105 - -47.000000 -30.833333 -3181 - -46.833333 -30.833333 -3103 - -46.666667 -30.833333 -3225 - -46.500000 -30.833333 -3294 - -46.333333 -30.833333 -3344 - -46.166667 -30.833333 -3258 - -46.000000 -30.833333 -3330 - -45.833333 -30.833333 -3396 - -45.666667 -30.833333 -3475 - -45.500000 -30.833333 -3489 - -45.333333 -30.833333 -3533 - -45.166667 -30.833333 -3472 - -45.000000 -30.833333 -3451 - -44.833333 -30.833333 -3429 - -44.666667 -30.833333 -3374 - -44.500000 -30.833333 -3422 - -44.333333 -30.833333 -3450 - -44.166667 -30.833333 -3374 - -44.000000 -30.833333 -3463 - -43.833333 -30.833333 -3398 - -43.666667 -30.833333 -3406 - -43.500000 -30.833333 -3573 - -43.333333 -30.833333 -3812 - -43.166667 -30.833333 -3937 - -43.000000 -30.833333 -3943 - -42.833333 -30.833333 -3812 - -42.666667 -30.833333 -3815 - -42.500000 -30.833333 -3839 - -42.333333 -30.833333 -3792 - -42.166667 -30.833333 -3804 - -42.000000 -30.833333 -3803 - -41.833333 -30.833333 -3783 - -41.666667 -30.833333 -3724 - -41.500000 -30.833333 -3611 - -41.333333 -30.833333 -3590 - -41.166667 -30.833333 -3806 - -41.000000 -30.833333 -3219 - -40.833333 -30.833333 -3591 - -40.666667 -30.833333 -3838 - -40.500000 -30.833333 -4088 - -40.333333 -30.833333 -4089 - -40.166667 -30.833333 -3784 - -40.000000 -30.833333 -3854 - -65.000000 -31.000000 721 - -64.833333 -31.000000 1019 - -64.666667 -31.000000 925 - -64.500000 -31.000000 1123 - -64.333333 -31.000000 1007 - -64.166667 -31.000000 571 - -64.000000 -31.000000 444 - -63.833333 -31.000000 319 - -63.666667 -31.000000 218 - -63.500000 -31.000000 160 - -63.333333 -31.000000 133 - -63.166667 -31.000000 120 - -63.000000 -31.000000 99 - -62.833333 -31.000000 90 - -62.666667 -31.000000 84 - -62.500000 -31.000000 80 - -62.333333 -31.000000 105 - -62.166667 -31.000000 103 - -62.000000 -31.000000 103 - -61.833333 -31.000000 102 - -61.666667 -31.000000 98 - -61.500000 -31.000000 94 - -61.333333 -31.000000 77 - -61.166667 -31.000000 61 - -61.000000 -31.000000 51 - -60.833333 -31.000000 29 - -60.666667 -31.000000 50 - -60.500000 -31.000000 26 - -60.333333 -31.000000 18 - -60.166667 -31.000000 19 - -60.000000 -31.000000 15 - -59.833333 -31.000000 57 - -59.666667 -31.000000 28 - -59.500000 -31.000000 57 - -59.333333 -31.000000 55 - -59.166667 -31.000000 64 - -59.000000 -31.000000 70 - -58.833333 -31.000000 64 - -58.666667 -31.000000 66 - -58.500000 -31.000000 57 - -58.333333 -31.000000 61 - -58.166667 -31.000000 57 - -58.000000 -31.000000 53 - -57.833333 -31.000000 42 - -57.666667 -31.000000 67 - -57.500000 -31.000000 47 - -57.333333 -31.000000 94 - -57.166667 -31.000000 73 - -57.000000 -31.000000 140 - -56.833333 -31.000000 140 - -56.666667 -31.000000 184 - -56.500000 -31.000000 184 - -56.333333 -31.000000 220 - -56.166667 -31.000000 292 - -56.000000 -31.000000 262 - -55.833333 -31.000000 331 - -55.666667 -31.000000 214 - -55.500000 -31.000000 212 - -55.333333 -31.000000 155 - -55.166667 -31.000000 133 - -55.000000 -31.000000 145 - -54.833333 -31.000000 155 - -54.666667 -31.000000 133 - -54.500000 -31.000000 222 - -54.333333 -31.000000 306 - -54.166667 -31.000000 361 - -54.000000 -31.000000 317 - -53.833333 -31.000000 323 - -53.666667 -31.000000 285 - -53.500000 -31.000000 214 - -53.333333 -31.000000 133 - -53.166667 -31.000000 159 - -53.000000 -31.000000 235 - -52.833333 -31.000000 226 - -52.666667 -31.000000 70 - -52.500000 -31.000000 85 - -52.333333 -31.000000 61 - -52.166667 -31.000000 31 - -52.000000 -31.000000 22 - -51.833333 -31.000000 18 - -51.666667 -31.000000 12 - -51.500000 -31.000000 3 - -51.333333 -31.000000 -6 - -51.166667 -31.000000 -5 - -51.000000 -31.000000 -1 - -50.833333 -31.000000 12 - -50.666667 -31.000000 -6 - -50.500000 -31.000000 -40 - -50.333333 -31.000000 -73 - -50.166667 -31.000000 -97 - -50.000000 -31.000000 -110 - -49.833333 -31.000000 -130 - -49.666667 -31.000000 -171 - -49.500000 -31.000000 -157 - -49.333333 -31.000000 -340 - -49.166667 -31.000000 -1096 - -49.000000 -31.000000 -1567 - -48.833333 -31.000000 -1759 - -48.666667 -31.000000 -2002 - -48.500000 -31.000000 -2264 - -48.333333 -31.000000 -2518 - -48.166667 -31.000000 -2606 - -48.000000 -31.000000 -2768 - -47.833333 -31.000000 -2662 - -47.666667 -31.000000 -2817 - -47.500000 -31.000000 -2941 - -47.333333 -31.000000 -3094 - -47.166667 -31.000000 -3239 - -47.000000 -31.000000 -3312 - -46.833333 -31.000000 -3204 - -46.666667 -31.000000 -3363 - -46.500000 -31.000000 -3384 - -46.333333 -31.000000 -3388 - -46.166667 -31.000000 -3299 - -46.000000 -31.000000 -3375 - -45.833333 -31.000000 -3468 - -45.666667 -31.000000 -3465 - -45.500000 -31.000000 -3512 - -45.333333 -31.000000 -3544 - -45.166667 -31.000000 -3512 - -45.000000 -31.000000 -3497 - -44.833333 -31.000000 -3504 - -44.666667 -31.000000 -3432 - -44.500000 -31.000000 -3453 - -44.333333 -31.000000 -3451 - -44.166667 -31.000000 -3394 - -44.000000 -31.000000 -3352 - -43.833333 -31.000000 -3461 - -43.666667 -31.000000 -3384 - -43.500000 -31.000000 -3592 - -43.333333 -31.000000 -3838 - -43.166667 -31.000000 -3956 - -43.000000 -31.000000 -3848 - -42.833333 -31.000000 -3902 - -42.666667 -31.000000 -3786 - -42.500000 -31.000000 -3771 - -42.333333 -31.000000 -3726 - -42.166667 -31.000000 -3762 - -42.000000 -31.000000 -3765 - -41.833333 -31.000000 -3732 - -41.666667 -31.000000 -3794 - -41.500000 -31.000000 -3697 - -41.333333 -31.000000 -3707 - -41.166667 -31.000000 -3902 - -41.000000 -31.000000 -3651 - -40.833333 -31.000000 -3748 - -40.666667 -31.000000 -3991 - -40.500000 -31.000000 -3858 - -40.333333 -31.000000 -3782 - -40.166667 -31.000000 -3702 - -40.000000 -31.000000 -3744 - -65.000000 -31.166667 980 - -64.833333 -31.166667 1592 - -64.666667 -31.166667 1327 - -64.500000 -31.166667 839 - -64.333333 -31.166667 783 - -64.166667 -31.166667 533 - -64.000000 -31.166667 398 - -63.833333 -31.166667 305 - -63.666667 -31.166667 234 - -63.500000 -31.166667 184 - -63.333333 -31.166667 162 - -63.166667 -31.166667 138 - -63.000000 -31.166667 123 - -62.833333 -31.166667 106 - -62.666667 -31.166667 96 - -62.500000 -31.166667 89 - -62.333333 -31.166667 109 - -62.166667 -31.166667 109 - -62.000000 -31.166667 106 - -61.833333 -31.166667 100 - -61.666667 -31.166667 103 - -61.500000 -31.166667 97 - -61.333333 -31.166667 69 - -61.166667 -31.166667 57 - -61.000000 -31.166667 49 - -60.833333 -31.166667 26 - -60.666667 -31.166667 25 - -60.500000 -31.166667 19 - -60.333333 -31.166667 17 - -60.166667 -31.166667 20 - -60.000000 -31.166667 16 - -59.833333 -31.166667 61 - -59.666667 -31.166667 58 - -59.500000 -31.166667 57 - -59.333333 -31.166667 66 - -59.166667 -31.166667 72 - -59.000000 -31.166667 60 - -58.833333 -31.166667 50 - -58.666667 -31.166667 59 - -58.500000 -31.166667 60 - -58.333333 -31.166667 64 - -58.166667 -31.166667 53 - -58.000000 -31.166667 34 - -57.833333 -31.166667 50 - -57.666667 -31.166667 69 - -57.500000 -31.166667 79 - -57.333333 -31.166667 65 - -57.166667 -31.166667 70 - -57.000000 -31.166667 97 - -56.833333 -31.166667 90 - -56.666667 -31.166667 109 - -56.500000 -31.166667 200 - -56.333333 -31.166667 224 - -56.166667 -31.166667 252 - -56.000000 -31.166667 295 - -55.833333 -31.166667 219 - -55.666667 -31.166667 198 - -55.500000 -31.166667 170 - -55.333333 -31.166667 182 - -55.166667 -31.166667 144 - -55.000000 -31.166667 168 - -54.833333 -31.166667 166 - -54.666667 -31.166667 148 - -54.500000 -31.166667 200 - -54.333333 -31.166667 283 - -54.166667 -31.166667 353 - -54.000000 -31.166667 350 - -53.833333 -31.166667 307 - -53.666667 -31.166667 331 - -53.500000 -31.166667 215 - -53.333333 -31.166667 203 - -53.166667 -31.166667 217 - -53.000000 -31.166667 159 - -52.833333 -31.166667 316 - -52.666667 -31.166667 297 - -52.500000 -31.166667 281 - -52.333333 -31.166667 227 - -52.166667 -31.166667 94 - -52.000000 -31.166667 49 - -51.833333 -31.166667 12 - -51.666667 -31.166667 4 - -51.500000 -31.166667 -5 - -51.333333 -31.166667 -6 - -51.166667 -31.166667 4 - -51.000000 -31.166667 2 - -50.833333 -31.166667 9 - -50.666667 -31.166667 -30 - -50.500000 -31.166667 -64 - -50.333333 -31.166667 -97 - -50.166667 -31.166667 -113 - -50.000000 -31.166667 -133 - -49.833333 -31.166667 -146 - -49.666667 -31.166667 -134 - -49.500000 -31.166667 -199 - -49.333333 -31.166667 -1252 - -49.166667 -31.166667 -1609 - -49.000000 -31.166667 -1905 - -48.833333 -31.166667 -2143 - -48.666667 -31.166667 -2335 - -48.500000 -31.166667 -2582 - -48.333333 -31.166667 -2667 - -48.166667 -31.166667 -2811 - -48.000000 -31.166667 -2722 - -47.833333 -31.166667 -2815 - -47.666667 -31.166667 -2966 - -47.500000 -31.166667 -3086 - -47.333333 -31.166667 -3122 - -47.166667 -31.166667 -3160 - -47.000000 -31.166667 -3239 - -46.833333 -31.166667 -3428 - -46.666667 -31.166667 -3436 - -46.500000 -31.166667 -3388 - -46.333333 -31.166667 -3301 - -46.166667 -31.166667 -3365 - -46.000000 -31.166667 -3413 - -45.833333 -31.166667 -3485 - -45.666667 -31.166667 -3546 - -45.500000 -31.166667 -3531 - -45.333333 -31.166667 -3548 - -45.166667 -31.166667 -3538 - -45.000000 -31.166667 -3527 - -44.833333 -31.166667 -3568 - -44.666667 -31.166667 -3519 - -44.500000 -31.166667 -3553 - -44.333333 -31.166667 -3575 - -44.166667 -31.166667 -3512 - -44.000000 -31.166667 -3446 - -43.833333 -31.166667 -3385 - -43.666667 -31.166667 -3414 - -43.500000 -31.166667 -3704 - -43.333333 -31.166667 -3931 - -43.166667 -31.166667 -3970 - -43.000000 -31.166667 -3873 - -42.833333 -31.166667 -3854 - -42.666667 -31.166667 -3891 - -42.500000 -31.166667 -3816 - -42.333333 -31.166667 -3677 - -42.166667 -31.166667 -3751 - -42.000000 -31.166667 -3816 - -41.833333 -31.166667 -3750 - -41.666667 -31.166667 -3701 - -41.500000 -31.166667 -3827 - -41.333333 -31.166667 -3845 - -41.166667 -31.166667 -4058 - -41.000000 -31.166667 -3994 - -40.833333 -31.166667 -3861 - -40.666667 -31.166667 -3790 - -40.500000 -31.166667 -3761 - -40.333333 -31.166667 -3762 - -40.166667 -31.166667 -3748 - -40.000000 -31.166667 -3697 - -65.000000 -31.333333 1161 - -64.833333 -31.333333 1740 - -64.666667 -31.333333 1299 - -64.500000 -31.333333 691 - -64.333333 -31.333333 496 - -64.166667 -31.333333 443 - -64.000000 -31.333333 371 - -63.833333 -31.333333 312 - -63.666667 -31.333333 258 - -63.500000 -31.333333 218 - -63.333333 -31.333333 187 - -63.166667 -31.333333 161 - -63.000000 -31.333333 138 - -62.833333 -31.333333 123 - -62.666667 -31.333333 107 - -62.500000 -31.333333 98 - -62.333333 -31.333333 111 - -62.166667 -31.333333 116 - -62.000000 -31.333333 106 - -61.833333 -31.333333 106 - -61.666667 -31.333333 100 - -61.500000 -31.333333 91 - -61.333333 -31.333333 63 - -61.166667 -31.333333 48 - -61.000000 -31.333333 32 - -60.833333 -31.333333 34 - -60.666667 -31.333333 21 - -60.500000 -31.333333 15 - -60.333333 -31.333333 16 - -60.166667 -31.333333 17 - -60.000000 -31.333333 76 - -59.833333 -31.333333 68 - -59.666667 -31.333333 61 - -59.500000 -31.333333 71 - -59.333333 -31.333333 67 - -59.166667 -31.333333 65 - -59.000000 -31.333333 50 - -58.833333 -31.333333 66 - -58.666667 -31.333333 65 - -58.500000 -31.333333 61 - -58.333333 -31.333333 45 - -58.166667 -31.333333 46 - -58.000000 -31.333333 21 - -57.833333 -31.333333 53 - -57.666667 -31.333333 62 - -57.500000 -31.333333 93 - -57.333333 -31.333333 104 - -57.166667 -31.333333 82 - -57.000000 -31.333333 87 - -56.833333 -31.333333 103 - -56.666667 -31.333333 221 - -56.500000 -31.333333 176 - -56.333333 -31.333333 189 - -56.166667 -31.333333 378 - -56.000000 -31.333333 255 - -55.833333 -31.333333 159 - -55.666667 -31.333333 169 - -55.500000 -31.333333 159 - -55.333333 -31.333333 188 - -55.166667 -31.333333 172 - -55.000000 -31.333333 198 - -54.833333 -31.333333 165 - -54.666667 -31.333333 185 - -54.500000 -31.333333 167 - -54.333333 -31.333333 158 - -54.166667 -31.333333 248 - -54.000000 -31.333333 225 - -53.833333 -31.333333 339 - -53.666667 -31.333333 350 - -53.500000 -31.333333 362 - -53.333333 -31.333333 283 - -53.166667 -31.333333 325 - -53.000000 -31.333333 396 - -52.833333 -31.333333 399 - -52.666667 -31.333333 405 - -52.500000 -31.333333 184 - -52.333333 -31.333333 110 - -52.166667 -31.333333 105 - -52.000000 -31.333333 17 - -51.833333 -31.333333 -2 - -51.666667 -31.333333 -6 - -51.500000 -31.333333 -6 - -51.333333 -31.333333 -5 - -51.166667 -31.333333 4 - -51.000000 -31.333333 -1 - -50.833333 -31.333333 -26 - -50.666667 -31.333333 -62 - -50.500000 -31.333333 -99 - -50.333333 -31.333333 -98 - -50.166667 -31.333333 -109 - -50.000000 -31.333333 -148 - -49.833333 -31.333333 -120 - -49.666667 -31.333333 -452 - -49.500000 -31.333333 -1250 - -49.333333 -31.333333 -1662 - -49.166667 -31.333333 -1850 - -49.000000 -31.333333 -2170 - -48.833333 -31.333333 -2359 - -48.666667 -31.333333 -2526 - -48.500000 -31.333333 -2717 - -48.333333 -31.333333 -2850 - -48.166667 -31.333333 -2828 - -48.000000 -31.333333 -2814 - -47.833333 -31.333333 -2911 - -47.666667 -31.333333 -3157 - -47.500000 -31.333333 -3236 - -47.333333 -31.333333 -3240 - -47.166667 -31.333333 -3244 - -47.000000 -31.333333 -3378 - -46.833333 -31.333333 -3367 - -46.666667 -31.333333 -3370 - -46.500000 -31.333333 -3304 - -46.333333 -31.333333 -3388 - -46.166667 -31.333333 -3416 - -46.000000 -31.333333 -3459 - -45.833333 -31.333333 -3494 - -45.666667 -31.333333 -3566 - -45.500000 -31.333333 -3572 - -45.333333 -31.333333 -3560 - -45.166667 -31.333333 -3548 - -45.000000 -31.333333 -3550 - -44.833333 -31.333333 -3569 - -44.666667 -31.333333 -3590 - -44.500000 -31.333333 -3599 - -44.333333 -31.333333 -3612 - -44.166667 -31.333333 -3572 - -44.000000 -31.333333 -3515 - -43.833333 -31.333333 -3499 - -43.666667 -31.333333 -3420 - -43.500000 -31.333333 -3592 - -43.333333 -31.333333 -3810 - -43.166667 -31.333333 -3694 - -43.000000 -31.333333 -3839 - -42.833333 -31.333333 -3791 - -42.666667 -31.333333 -3759 - -42.500000 -31.333333 -3894 - -42.333333 -31.333333 -3740 - -42.166667 -31.333333 -3707 - -42.000000 -31.333333 -3685 - -41.833333 -31.333333 -3763 - -41.666667 -31.333333 -3639 - -41.500000 -31.333333 -3845 - -41.333333 -31.333333 -3847 - -41.166667 -31.333333 -3957 - -41.000000 -31.333333 -3700 - -40.833333 -31.333333 -3868 - -40.666667 -31.333333 -3727 - -40.500000 -31.333333 -3699 - -40.333333 -31.333333 -3675 - -40.166667 -31.333333 -3654 - -40.000000 -31.333333 -3675 - -65.000000 -31.500000 1384 - -64.833333 -31.500000 2294 - -64.666667 -31.500000 1174 - -64.500000 -31.500000 875 - -64.333333 -31.500000 557 - -64.166667 -31.500000 439 - -64.000000 -31.500000 369 - -63.833333 -31.500000 320 - -63.666667 -31.500000 274 - -63.500000 -31.500000 237 - -63.333333 -31.500000 202 - -63.166667 -31.500000 171 - -63.000000 -31.500000 150 - -62.833333 -31.500000 129 - -62.666667 -31.500000 117 - -62.500000 -31.500000 107 - -62.333333 -31.500000 110 - -62.166667 -31.500000 108 - -62.000000 -31.500000 114 - -61.833333 -31.500000 106 - -61.666667 -31.500000 89 - -61.500000 -31.500000 76 - -61.333333 -31.500000 64 - -61.166667 -31.500000 51 - -61.000000 -31.500000 41 - -60.833333 -31.500000 27 - -60.666667 -31.500000 17 - -60.500000 -31.500000 15 - -60.333333 -31.500000 15 - -60.166667 -31.500000 68 - -60.000000 -31.500000 76 - -59.833333 -31.500000 85 - -59.666667 -31.500000 67 - -59.500000 -31.500000 68 - -59.333333 -31.500000 56 - -59.166667 -31.500000 62 - -59.000000 -31.500000 52 - -58.833333 -31.500000 69 - -58.666667 -31.500000 69 - -58.500000 -31.500000 67 - -58.333333 -31.500000 47 - -58.166667 -31.500000 38 - -58.000000 -31.500000 17 - -57.833333 -31.500000 45 - -57.666667 -31.500000 57 - -57.500000 -31.500000 81 - -57.333333 -31.500000 117 - -57.166667 -31.500000 123 - -57.000000 -31.500000 122 - -56.833333 -31.500000 133 - -56.666667 -31.500000 208 - -56.500000 -31.500000 164 - -56.333333 -31.500000 267 - -56.166667 -31.500000 203 - -56.000000 -31.500000 165 - -55.833333 -31.500000 165 - -55.666667 -31.500000 153 - -55.500000 -31.500000 165 - -55.333333 -31.500000 149 - -55.166667 -31.500000 173 - -55.000000 -31.500000 203 - -54.833333 -31.500000 198 - -54.666667 -31.500000 172 - -54.500000 -31.500000 150 - -54.333333 -31.500000 162 - -54.166667 -31.500000 151 - -54.000000 -31.500000 182 - -53.833333 -31.500000 168 - -53.666667 -31.500000 213 - -53.500000 -31.500000 332 - -53.333333 -31.500000 387 - -53.166667 -31.500000 314 - -53.000000 -31.500000 248 - -52.833333 -31.500000 287 - -52.666667 -31.500000 257 - -52.500000 -31.500000 152 - -52.333333 -31.500000 77 - -52.166667 -31.500000 13 - -52.000000 -31.500000 -1 - -51.833333 -31.500000 -5 - -51.666667 -31.500000 -6 - -51.500000 -31.500000 -3 - -51.333333 -31.500000 -1 - -51.166667 -31.500000 -2 - -51.000000 -31.500000 -21 - -50.833333 -31.500000 -49 - -50.666667 -31.500000 -69 - -50.500000 -31.500000 -93 - -50.333333 -31.500000 -116 - -50.166667 -31.500000 -67 - -50.000000 -31.500000 -157 - -49.833333 -31.500000 -261 - -49.666667 -31.500000 -1035 - -49.500000 -31.500000 -1685 - -49.333333 -31.500000 -2001 - -49.166667 -31.500000 -2210 - -49.000000 -31.500000 -2315 - -48.833333 -31.500000 -2415 - -48.666667 -31.500000 -2658 - -48.500000 -31.500000 -2800 - -48.333333 -31.500000 -2833 - -48.166667 -31.500000 -2914 - -48.000000 -31.500000 -2989 - -47.833333 -31.500000 -3020 - -47.666667 -31.500000 -3167 - -47.500000 -31.500000 -3355 - -47.333333 -31.500000 -3224 - -47.166667 -31.500000 -3299 - -47.000000 -31.500000 -3336 - -46.833333 -31.500000 -3385 - -46.666667 -31.500000 -3398 - -46.500000 -31.500000 -3393 - -46.333333 -31.500000 -3479 - -46.166667 -31.500000 -3528 - -46.000000 -31.500000 -3528 - -45.833333 -31.500000 -3568 - -45.666667 -31.500000 -3600 - -45.500000 -31.500000 -3610 - -45.333333 -31.500000 -3595 - -45.166667 -31.500000 -3589 - -45.000000 -31.500000 -3587 - -44.833333 -31.500000 -3592 - -44.666667 -31.500000 -3590 - -44.500000 -31.500000 -3652 - -44.333333 -31.500000 -3588 - -44.166667 -31.500000 -3643 - -44.000000 -31.500000 -3683 - -43.833333 -31.500000 -3679 - -43.666667 -31.500000 -3634 - -43.500000 -31.500000 -3763 - -43.333333 -31.500000 -3772 - -43.166667 -31.500000 -3797 - -43.000000 -31.500000 -3871 - -42.833333 -31.500000 -3805 - -42.666667 -31.500000 -3762 - -42.500000 -31.500000 -3712 - -42.333333 -31.500000 -3892 - -42.166667 -31.500000 -3669 - -42.000000 -31.500000 -3716 - -41.833333 -31.500000 -3613 - -41.666667 -31.500000 -3680 - -41.500000 -31.500000 -3699 - -41.333333 -31.500000 -4031 - -41.166667 -31.500000 -3834 - -41.000000 -31.500000 -3713 - -40.833333 -31.500000 -3674 - -40.666667 -31.500000 -3719 - -40.500000 -31.500000 -3680 - -40.333333 -31.500000 -3807 - -40.166667 -31.500000 -3683 - -40.000000 -31.500000 -3686 - -65.000000 -31.666667 1017 - -64.833333 -31.666667 2069 - -64.666667 -31.666667 1349 - -64.500000 -31.666667 848 - -64.333333 -31.666667 523 - -64.166667 -31.666667 401 - -64.000000 -31.666667 363 - -63.833333 -31.666667 322 - -63.666667 -31.666667 284 - -63.500000 -31.666667 247 - -63.333333 -31.666667 215 - -63.166667 -31.666667 184 - -63.000000 -31.666667 158 - -62.833333 -31.666667 141 - -62.666667 -31.666667 124 - -62.500000 -31.666667 114 - -62.333333 -31.666667 106 - -62.166667 -31.666667 108 - -62.000000 -31.666667 105 - -61.833333 -31.666667 115 - -61.666667 -31.666667 90 - -61.500000 -31.666667 62 - -61.333333 -31.666667 55 - -61.166667 -31.666667 43 - -61.000000 -31.666667 35 - -60.833333 -31.666667 20 - -60.666667 -31.666667 11 - -60.500000 -31.666667 12 - -60.333333 -31.666667 49 - -60.166667 -31.666667 91 - -60.000000 -31.666667 64 - -59.833333 -31.666667 85 - -59.666667 -31.666667 77 - -59.500000 -31.666667 52 - -59.333333 -31.666667 48 - -59.166667 -31.666667 42 - -59.000000 -31.666667 61 - -58.833333 -31.666667 50 - -58.666667 -31.666667 62 - -58.500000 -31.666667 66 - -58.333333 -31.666667 41 - -58.166667 -31.666667 30 - -58.000000 -31.666667 8 - -57.833333 -31.666667 60 - -57.666667 -31.666667 64 - -57.500000 -31.666667 67 - -57.333333 -31.666667 88 - -57.166667 -31.666667 134 - -57.000000 -31.666667 220 - -56.833333 -31.666667 245 - -56.666667 -31.666667 164 - -56.500000 -31.666667 209 - -56.333333 -31.666667 249 - -56.166667 -31.666667 167 - -56.000000 -31.666667 162 - -55.833333 -31.666667 141 - -55.666667 -31.666667 131 - -55.500000 -31.666667 112 - -55.333333 -31.666667 249 - -55.166667 -31.666667 249 - -55.000000 -31.666667 215 - -54.833333 -31.666667 174 - -54.666667 -31.666667 155 - -54.500000 -31.666667 136 - -54.333333 -31.666667 138 - -54.166667 -31.666667 169 - -54.000000 -31.666667 138 - -53.833333 -31.666667 160 - -53.666667 -31.666667 169 - -53.500000 -31.666667 339 - -53.333333 -31.666667 331 - -53.166667 -31.666667 242 - -53.000000 -31.666667 213 - -52.833333 -31.666667 168 - -52.666667 -31.666667 82 - -52.500000 -31.666667 69 - -52.333333 -31.666667 23 - -52.166667 -31.666667 7 - -52.000000 -31.666667 -3 - -51.833333 -31.666667 -6 - -51.666667 -31.666667 -4 - -51.500000 -31.666667 5 - -51.333333 -31.666667 -3 - -51.166667 -31.666667 -18 - -51.000000 -31.666667 -39 - -50.833333 -31.666667 -59 - -50.666667 -31.666667 -81 - -50.500000 -31.666667 -91 - -50.333333 -31.666667 -129 - -50.166667 -31.666667 -139 - -50.000000 -31.666667 -135 - -49.833333 -31.666667 -755 - -49.666667 -31.666667 -1425 - -49.500000 -31.666667 -1844 - -49.333333 -31.666667 -2065 - -49.166667 -31.666667 -2157 - -49.000000 -31.666667 -2437 - -48.833333 -31.666667 -2649 - -48.666667 -31.666667 -2670 - -48.500000 -31.666667 -2752 - -48.333333 -31.666667 -2886 - -48.166667 -31.666667 -3035 - -48.000000 -31.666667 -3060 - -47.833333 -31.666667 -3125 - -47.666667 -31.666667 -3233 - -47.500000 -31.666667 -3208 - -47.333333 -31.666667 -3276 - -47.166667 -31.666667 -3293 - -47.000000 -31.666667 -3358 - -46.833333 -31.666667 -3405 - -46.666667 -31.666667 -3420 - -46.500000 -31.666667 -3478 - -46.333333 -31.666667 -3524 - -46.166667 -31.666667 -3610 - -46.000000 -31.666667 -3605 - -45.833333 -31.666667 -3645 - -45.666667 -31.666667 -3657 - -45.500000 -31.666667 -3646 - -45.333333 -31.666667 -3623 - -45.166667 -31.666667 -3617 - -45.000000 -31.666667 -3608 - -44.833333 -31.666667 -3621 - -44.666667 -31.666667 -3636 - -44.500000 -31.666667 -3663 - -44.333333 -31.666667 -3646 - -44.166667 -31.666667 -3658 - -44.000000 -31.666667 -3625 - -43.833333 -31.666667 -3722 - -43.666667 -31.666667 -3671 - -43.500000 -31.666667 -3776 - -43.333333 -31.666667 -3709 - -43.166667 -31.666667 -3585 - -43.000000 -31.666667 -3735 - -42.833333 -31.666667 -3287 - -42.666667 -31.666667 -3826 - -42.500000 -31.666667 -3642 - -42.333333 -31.666667 -3774 - -42.166667 -31.666667 -3773 - -42.000000 -31.666667 -3719 - -41.833333 -31.666667 -3660 - -41.666667 -31.666667 -3686 - -41.500000 -31.666667 -3678 - -41.333333 -31.666667 -3834 - -41.166667 -31.666667 -3660 - -41.000000 -31.666667 -3809 - -40.833333 -31.666667 -3695 - -40.666667 -31.666667 -3808 - -40.500000 -31.666667 -3711 - -40.333333 -31.666667 -3798 - -40.166667 -31.666667 -3701 - -40.000000 -31.666667 -3692 - -65.000000 -31.833333 863 - -64.833333 -31.833333 2152 - -64.666667 -31.833333 1039 - -64.500000 -31.833333 786 - -64.333333 -31.833333 467 - -64.166667 -31.833333 418 - -64.000000 -31.833333 366 - -63.833333 -31.833333 314 - -63.666667 -31.833333 275 - -63.500000 -31.833333 243 - -63.333333 -31.833333 212 - -63.166667 -31.833333 188 - -63.000000 -31.833333 162 - -62.833333 -31.833333 145 - -62.666667 -31.833333 129 - -62.500000 -31.833333 118 - -62.333333 -31.833333 106 - -62.166667 -31.833333 105 - -62.000000 -31.833333 104 - -61.833333 -31.833333 104 - -61.666667 -31.833333 84 - -61.500000 -31.833333 53 - -61.333333 -31.833333 53 - -61.166667 -31.833333 44 - -61.000000 -31.833333 34 - -60.833333 -31.833333 12 - -60.666667 -31.833333 12 - -60.500000 -31.833333 85 - -60.333333 -31.833333 59 - -60.166667 -31.833333 59 - -60.000000 -31.833333 85 - -59.833333 -31.833333 87 - -59.666667 -31.833333 69 - -59.500000 -31.833333 63 - -59.333333 -31.833333 68 - -59.166667 -31.833333 41 - -59.000000 -31.833333 47 - -58.833333 -31.833333 64 - -58.666667 -31.833333 70 - -58.500000 -31.833333 52 - -58.333333 -31.833333 31 - -58.166667 -31.833333 11 - -58.000000 -31.833333 34 - -57.833333 -31.833333 45 - -57.666667 -31.833333 70 - -57.500000 -31.833333 101 - -57.333333 -31.833333 127 - -57.166667 -31.833333 145 - -57.000000 -31.833333 163 - -56.833333 -31.833333 215 - -56.666667 -31.833333 235 - -56.500000 -31.833333 235 - -56.333333 -31.833333 229 - -56.166667 -31.833333 195 - -56.000000 -31.833333 154 - -55.833333 -31.833333 125 - -55.666667 -31.833333 133 - -55.500000 -31.833333 106 - -55.333333 -31.833333 133 - -55.166667 -31.833333 118 - -55.000000 -31.833333 151 - -54.833333 -31.833333 137 - -54.666667 -31.833333 149 - -54.500000 -31.833333 121 - -54.333333 -31.833333 144 - -54.166667 -31.833333 160 - -54.000000 -31.833333 155 - -53.833333 -31.833333 121 - -53.666667 -31.833333 248 - -53.500000 -31.833333 226 - -53.333333 -31.833333 153 - -53.166667 -31.833333 223 - -53.000000 -31.833333 63 - -52.833333 -31.833333 62 - -52.666667 -31.833333 56 - -52.500000 -31.833333 11 - -52.333333 -31.833333 1 - -52.166667 -31.833333 -1 - -52.000000 -31.833333 11 - -51.833333 -31.833333 -1 - -51.666667 -31.833333 -1 - -51.500000 -31.833333 -6 - -51.333333 -31.833333 -15 - -51.166667 -31.833333 -26 - -51.000000 -31.833333 -52 - -50.833333 -31.833333 -66 - -50.666667 -31.833333 -81 - -50.500000 -31.833333 -98 - -50.333333 -31.833333 -119 - -50.166667 -31.833333 -87 - -50.000000 -31.833333 -208 - -49.833333 -31.833333 -1310 - -49.666667 -31.833333 -1636 - -49.500000 -31.833333 -1952 - -49.333333 -31.833333 -2044 - -49.166667 -31.833333 -2275 - -49.000000 -31.833333 -2403 - -48.833333 -31.833333 -2672 - -48.666667 -31.833333 -2716 - -48.500000 -31.833333 -2835 - -48.333333 -31.833333 -2909 - -48.166667 -31.833333 -3026 - -48.000000 -31.833333 -3069 - -47.833333 -31.833333 -3141 - -47.666667 -31.833333 -3176 - -47.500000 -31.833333 -3246 - -47.333333 -31.833333 -3295 - -47.166667 -31.833333 -3366 - -47.000000 -31.833333 -3414 - -46.833333 -31.833333 -3474 - -46.666667 -31.833333 -3500 - -46.500000 -31.833333 -3567 - -46.333333 -31.833333 -3615 - -46.166667 -31.833333 -3658 - -46.000000 -31.833333 -3704 - -45.833333 -31.833333 -3732 - -45.666667 -31.833333 -3743 - -45.500000 -31.833333 -3745 - -45.333333 -31.833333 -3727 - -45.166667 -31.833333 -3692 - -45.000000 -31.833333 -3676 - -44.833333 -31.833333 -3675 - -44.666667 -31.833333 -3688 - -44.500000 -31.833333 -3651 - -44.333333 -31.833333 -3647 - -44.166667 -31.833333 -3696 - -44.000000 -31.833333 -3735 - -43.833333 -31.833333 -3773 - -43.666667 -31.833333 -3668 - -43.500000 -31.833333 -3792 - -43.333333 -31.833333 -3801 - -43.166667 -31.833333 -3750 - -43.000000 -31.833333 -3977 - -42.833333 -31.833333 -3806 - -42.666667 -31.833333 -3734 - -42.500000 -31.833333 -3667 - -42.333333 -31.833333 -3672 - -42.166667 -31.833333 -3957 - -42.000000 -31.833333 -3880 - -41.833333 -31.833333 -3809 - -41.666667 -31.833333 -3798 - -41.500000 -31.833333 -3828 - -41.333333 -31.833333 -3875 - -41.166667 -31.833333 -3907 - -41.000000 -31.833333 -3985 - -40.833333 -31.833333 -3895 - -40.666667 -31.833333 -3979 - -40.500000 -31.833333 -3958 - -40.333333 -31.833333 -4096 - -40.166667 -31.833333 -3756 - -40.000000 -31.833333 -3848 - -65.000000 -32.000000 1072 - -64.833333 -32.000000 1448 - -64.666667 -32.000000 978 - -64.500000 -32.000000 1120 - -64.333333 -32.000000 553 - -64.166667 -32.000000 453 - -64.000000 -32.000000 371 - -63.833333 -32.000000 317 - -63.666667 -32.000000 283 - -63.500000 -32.000000 247 - -63.333333 -32.000000 218 - -63.166667 -32.000000 193 - -63.000000 -32.000000 167 - -62.833333 -32.000000 145 - -62.666667 -32.000000 129 - -62.500000 -32.000000 116 - -62.333333 -32.000000 106 - -62.166667 -32.000000 99 - -62.000000 -32.000000 112 - -61.833333 -32.000000 109 - -61.666667 -32.000000 76 - -61.500000 -32.000000 51 - -61.333333 -32.000000 56 - -61.166667 -32.000000 43 - -61.000000 -32.000000 27 - -60.833333 -32.000000 9 - -60.666667 -32.000000 11 - -60.500000 -32.000000 58 - -60.333333 -32.000000 95 - -60.166667 -32.000000 102 - -60.000000 -32.000000 96 - -59.833333 -32.000000 73 - -59.666667 -32.000000 77 - -59.500000 -32.000000 64 - -59.333333 -32.000000 56 - -59.166667 -32.000000 45 - -59.000000 -32.000000 53 - -58.833333 -32.000000 62 - -58.666667 -32.000000 57 - -58.500000 -32.000000 55 - -58.333333 -32.000000 36 - -58.166667 -32.000000 8 - -58.000000 -32.000000 34 - -57.833333 -32.000000 68 - -57.666667 -32.000000 83 - -57.500000 -32.000000 72 - -57.333333 -32.000000 80 - -57.166667 -32.000000 80 - -57.000000 -32.000000 135 - -56.833333 -32.000000 166 - -56.666667 -32.000000 136 - -56.500000 -32.000000 202 - -56.333333 -32.000000 211 - -56.166667 -32.000000 256 - -56.000000 -32.000000 153 - -55.833333 -32.000000 142 - -55.666667 -32.000000 111 - -55.500000 -32.000000 101 - -55.333333 -32.000000 103 - -55.166667 -32.000000 141 - -55.000000 -32.000000 145 - -54.833333 -32.000000 138 - -54.666667 -32.000000 127 - -54.500000 -32.000000 116 - -54.333333 -32.000000 122 - -54.166667 -32.000000 132 - -54.000000 -32.000000 104 - -53.833333 -32.000000 94 - -53.666667 -32.000000 119 - -53.500000 -32.000000 312 - -53.333333 -32.000000 217 - -53.166667 -32.000000 180 - -53.000000 -32.000000 131 - -52.833333 -32.000000 81 - -52.666667 -32.000000 16 - -52.500000 -32.000000 2 - -52.333333 -32.000000 8 - -52.166667 -32.000000 8 - -52.000000 -32.000000 9 - -51.833333 -32.000000 -6 - -51.666667 -32.000000 -11 - -51.500000 -32.000000 -16 - -51.333333 -32.000000 -22 - -51.166667 -32.000000 -51 - -51.000000 -32.000000 -62 - -50.833333 -32.000000 -71 - -50.666667 -32.000000 -89 - -50.500000 -32.000000 -100 - -50.333333 -32.000000 -115 - -50.166667 -32.000000 -158 - -50.000000 -32.000000 -822 - -49.833333 -32.000000 -1434 - -49.666667 -32.000000 -1823 - -49.500000 -32.000000 -2060 - -49.333333 -32.000000 -2233 - -49.166667 -32.000000 -2387 - -49.000000 -32.000000 -2553 - -48.833333 -32.000000 -2671 - -48.666667 -32.000000 -2804 - -48.500000 -32.000000 -2908 - -48.333333 -32.000000 -2988 - -48.166667 -32.000000 -3034 - -48.000000 -32.000000 -3110 - -47.833333 -32.000000 -3167 - -47.666667 -32.000000 -3228 - -47.500000 -32.000000 -3301 - -47.333333 -32.000000 -3350 - -47.166667 -32.000000 -3426 - -47.000000 -32.000000 -3484 - -46.833333 -32.000000 -3542 - -46.666667 -32.000000 -3603 - -46.500000 -32.000000 -3649 - -46.333333 -32.000000 -3698 - -46.166667 -32.000000 -3739 - -46.000000 -32.000000 -3779 - -45.833333 -32.000000 -3823 - -45.666667 -32.000000 -3858 - -45.500000 -32.000000 -3878 - -45.333333 -32.000000 -3878 - -45.166667 -32.000000 -3870 - -45.000000 -32.000000 -3833 - -44.833333 -32.000000 -3822 - -44.666667 -32.000000 -3799 - -44.500000 -32.000000 -3752 - -44.333333 -32.000000 -3717 - -44.166667 -32.000000 -3717 - -44.000000 -32.000000 -3697 - -43.833333 -32.000000 -3722 - -43.666667 -32.000000 -3847 - -43.500000 -32.000000 -3847 - -43.333333 -32.000000 -3746 - -43.166667 -32.000000 -3858 - -43.000000 -32.000000 -3856 - -42.833333 -32.000000 -3804 - -42.666667 -32.000000 -3839 - -42.500000 -32.000000 -3769 - -42.333333 -32.000000 -3781 - -42.166667 -32.000000 -3839 - -42.000000 -32.000000 -3880 - -41.833333 -32.000000 -3746 - -41.666667 -32.000000 -3664 - -41.500000 -32.000000 -3717 - -41.333333 -32.000000 -3869 - -41.166667 -32.000000 -3974 - -41.000000 -32.000000 -4029 - -40.833333 -32.000000 -4082 - -40.666667 -32.000000 -4039 - -40.500000 -32.000000 -4345 - -40.333333 -32.000000 -4280 - -40.166667 -32.000000 -3959 - -40.000000 -32.000000 -3996 - -65.000000 -32.166667 1090 - -64.833333 -32.166667 1326 - -64.666667 -32.166667 880 - -64.500000 -32.166667 544 - -64.333333 -32.166667 487 - -64.166667 -32.166667 392 - -64.000000 -32.166667 354 - -63.833333 -32.166667 324 - -63.666667 -32.166667 284 - -63.500000 -32.166667 252 - -63.333333 -32.166667 221 - -63.166667 -32.166667 193 - -63.000000 -32.166667 167 - -62.833333 -32.166667 147 - -62.666667 -32.166667 132 - -62.500000 -32.166667 116 - -62.333333 -32.166667 104 - -62.166667 -32.166667 96 - -62.000000 -32.166667 119 - -61.833333 -32.166667 110 - -61.666667 -32.166667 79 - -61.500000 -32.166667 52 - -61.333333 -32.166667 38 - -61.166667 -32.166667 42 - -61.000000 -32.166667 29 - -60.833333 -32.166667 9 - -60.666667 -32.166667 11 - -60.500000 -32.166667 98 - -60.333333 -32.166667 85 - -60.166667 -32.166667 103 - -60.000000 -32.166667 62 - -59.833333 -32.166667 70 - -59.666667 -32.166667 59 - -59.500000 -32.166667 67 - -59.333333 -32.166667 68 - -59.166667 -32.166667 55 - -59.000000 -32.166667 38 - -58.833333 -32.166667 64 - -58.666667 -32.166667 42 - -58.500000 -32.166667 45 - -58.333333 -32.166667 28 - -58.166667 -32.166667 6 - -58.000000 -32.166667 33 - -57.833333 -32.166667 39 - -57.666667 -32.166667 31 - -57.500000 -32.166667 37 - -57.333333 -32.166667 47 - -57.166667 -32.166667 50 - -57.000000 -32.166667 87 - -56.833333 -32.166667 97 - -56.666667 -32.166667 156 - -56.500000 -32.166667 141 - -56.333333 -32.166667 162 - -56.166667 -32.166667 134 - -56.000000 -32.166667 114 - -55.833333 -32.166667 114 - -55.666667 -32.166667 114 - -55.500000 -32.166667 94 - -55.333333 -32.166667 117 - -55.166667 -32.166667 106 - -55.000000 -32.166667 113 - -54.833333 -32.166667 117 - -54.666667 -32.166667 132 - -54.500000 -32.166667 144 - -54.333333 -32.166667 155 - -54.166667 -32.166667 172 - -54.000000 -32.166667 119 - -53.833333 -32.166667 185 - -53.666667 -32.166667 154 - -53.500000 -32.166667 114 - -53.333333 -32.166667 160 - -53.166667 -32.166667 71 - -53.000000 -32.166667 37 - -52.833333 -32.166667 5 - -52.666667 -32.166667 -1 - -52.500000 -32.166667 1 - -52.333333 -32.166667 10 - -52.166667 -32.166667 6 - -52.000000 -32.166667 -9 - -51.833333 -32.166667 -20 - -51.666667 -32.166667 -19 - -51.500000 -32.166667 -19 - -51.333333 -32.166667 -45 - -51.166667 -32.166667 -59 - -51.000000 -32.166667 -67 - -50.833333 -32.166667 -79 - -50.666667 -32.166667 -85 - -50.500000 -32.166667 -92 - -50.333333 -32.166667 -92 - -50.166667 -32.166667 -280 - -50.000000 -32.166667 -648 - -49.833333 -32.166667 -1532 - -49.666667 -32.166667 -1882 - -49.500000 -32.166667 -2066 - -49.333333 -32.166667 -2284 - -49.166667 -32.166667 -2396 - -49.000000 -32.166667 -2646 - -48.833333 -32.166667 -2752 - -48.666667 -32.166667 -2798 - -48.500000 -32.166667 -2915 - -48.333333 -32.166667 -2996 - -48.166667 -32.166667 -3073 - -48.000000 -32.166667 -3147 - -47.833333 -32.166667 -3245 - -47.666667 -32.166667 -3325 - -47.500000 -32.166667 -3391 - -47.333333 -32.166667 -3462 - -47.166667 -32.166667 -3526 - -47.000000 -32.166667 -3599 - -46.833333 -32.166667 -3658 - -46.666667 -32.166667 -3706 - -46.500000 -32.166667 -3762 - -46.333333 -32.166667 -3809 - -46.166667 -32.166667 -3855 - -46.000000 -32.166667 -3897 - -45.833333 -32.166667 -3916 - -45.666667 -32.166667 -3943 - -45.500000 -32.166667 -3954 - -45.333333 -32.166667 -3996 - -45.166667 -32.166667 -4014 - -45.000000 -32.166667 -4005 - -44.833333 -32.166667 -3963 - -44.666667 -32.166667 -3939 - -44.500000 -32.166667 -3890 - -44.333333 -32.166667 -3875 - -44.166667 -32.166667 -3805 - -44.000000 -32.166667 -3804 - -43.833333 -32.166667 -3746 - -43.666667 -32.166667 -3757 - -43.500000 -32.166667 -3830 - -43.333333 -32.166667 -3845 - -43.166667 -32.166667 -3854 - -43.000000 -32.166667 -3970 - -42.833333 -32.166667 -3949 - -42.666667 -32.166667 -3934 - -42.500000 -32.166667 -3774 - -42.333333 -32.166667 -3755 - -42.166667 -32.166667 -3821 - -42.000000 -32.166667 -3819 - -41.833333 -32.166667 -3759 - -41.666667 -32.166667 -3842 - -41.500000 -32.166667 -3918 - -41.333333 -32.166667 -4107 - -41.166667 -32.166667 -4339 - -41.000000 -32.166667 -4267 - -40.833333 -32.166667 -4327 - -40.666667 -32.166667 -4161 - -40.500000 -32.166667 -4192 - -40.333333 -32.166667 -4250 - -40.166667 -32.166667 -4219 - -40.000000 -32.166667 -4231 - -65.000000 -32.333333 928 - -64.833333 -32.333333 1451 - -64.666667 -32.333333 904 - -64.500000 -32.333333 601 - -64.333333 -32.333333 616 - -64.166667 -32.333333 460 - -64.000000 -32.333333 359 - -63.833333 -32.333333 313 - -63.666667 -32.333333 282 - -63.500000 -32.333333 250 - -63.333333 -32.333333 220 - -63.166667 -32.333333 192 - -63.000000 -32.333333 164 - -62.833333 -32.333333 145 - -62.666667 -32.333333 130 - -62.500000 -32.333333 119 - -62.333333 -32.333333 111 - -62.166667 -32.333333 98 - -62.000000 -32.333333 96 - -61.833333 -32.333333 111 - -61.666667 -32.333333 106 - -61.500000 -32.333333 71 - -61.333333 -32.333333 54 - -61.166667 -32.333333 28 - -61.000000 -32.333333 29 - -60.833333 -32.333333 5 - -60.666667 -32.333333 11 - -60.500000 -32.333333 10 - -60.333333 -32.333333 82 - -60.166667 -32.333333 97 - -60.000000 -32.333333 92 - -59.833333 -32.333333 65 - -59.666667 -32.333333 53 - -59.500000 -32.333333 73 - -59.333333 -32.333333 67 - -59.166667 -32.333333 49 - -59.000000 -32.333333 54 - -58.833333 -32.333333 50 - -58.666667 -32.333333 47 - -58.500000 -32.333333 35 - -58.333333 -32.333333 26 - -58.166667 -32.333333 17 - -58.000000 -32.333333 52 - -57.833333 -32.333333 63 - -57.666667 -32.333333 80 - -57.500000 -32.333333 85 - -57.333333 -32.333333 76 - -57.166667 -32.333333 85 - -57.000000 -32.333333 146 - -56.833333 -32.333333 131 - -56.666667 -32.333333 135 - -56.500000 -32.333333 118 - -56.333333 -32.333333 159 - -56.166667 -32.333333 176 - -56.000000 -32.333333 112 - -55.833333 -32.333333 94 - -55.666667 -32.333333 104 - -55.500000 -32.333333 95 - -55.333333 -32.333333 107 - -55.166667 -32.333333 127 - -55.000000 -32.333333 122 - -54.833333 -32.333333 101 - -54.666667 -32.333333 128 - -54.500000 -32.333333 145 - -54.333333 -32.333333 147 - -54.166667 -32.333333 108 - -54.000000 -32.333333 102 - -53.833333 -32.333333 110 - -53.666667 -32.333333 46 - -53.500000 -32.333333 45 - -53.333333 -32.333333 81 - -53.166667 -32.333333 55 - -53.000000 -32.333333 13 - -52.833333 -32.333333 6 - -52.666667 -32.333333 4 - -52.500000 -32.333333 6 - -52.333333 -32.333333 6 - -52.166667 -32.333333 -7 - -52.000000 -32.333333 -21 - -51.833333 -32.333333 -22 - -51.666667 -32.333333 -24 - -51.500000 -32.333333 -36 - -51.333333 -32.333333 -56 - -51.166667 -32.333333 -60 - -51.000000 -32.333333 -78 - -50.833333 -32.333333 -72 - -50.666667 -32.333333 -79 - -50.500000 -32.333333 -98 - -50.333333 -32.333333 -145 - -50.166667 -32.333333 -721 - -50.000000 -32.333333 -1177 - -49.833333 -32.333333 -1606 - -49.666667 -32.333333 -1831 - -49.500000 -32.333333 -2022 - -49.333333 -32.333333 -2251 - -49.166667 -32.333333 -2316 - -49.000000 -32.333333 -2506 - -48.833333 -32.333333 -2782 - -48.666667 -32.333333 -2845 - -48.500000 -32.333333 -2931 - -48.333333 -32.333333 -3026 - -48.166667 -32.333333 -3113 - -48.000000 -32.333333 -3257 - -47.833333 -32.333333 -3304 - -47.666667 -32.333333 -3395 - -47.500000 -32.333333 -3475 - -47.333333 -32.333333 -3554 - -47.166667 -32.333333 -3626 - -47.000000 -32.333333 -3695 - -46.833333 -32.333333 -3757 - -46.666667 -32.333333 -3800 - -46.500000 -32.333333 -3862 - -46.333333 -32.333333 -3894 - -46.166667 -32.333333 -3929 - -46.000000 -32.333333 -3967 - -45.833333 -32.333333 -3978 - -45.666667 -32.333333 -3997 - -45.500000 -32.333333 -4016 - -45.333333 -32.333333 -4049 - -45.166667 -32.333333 -4071 - -45.000000 -32.333333 -4072 - -44.833333 -32.333333 -4065 - -44.666667 -32.333333 -4061 - -44.500000 -32.333333 -4079 - -44.333333 -32.333333 -4073 - -44.166667 -32.333333 -4026 - -44.000000 -32.333333 -3938 - -43.833333 -32.333333 -3847 - -43.666667 -32.333333 -3906 - -43.500000 -32.333333 -3893 - -43.333333 -32.333333 -3922 - -43.166667 -32.333333 -3916 - -43.000000 -32.333333 -3906 - -42.833333 -32.333333 -4036 - -42.666667 -32.333333 -3992 - -42.500000 -32.333333 -3937 - -42.333333 -32.333333 -3987 - -42.166667 -32.333333 -3951 - -42.000000 -32.333333 -3875 - -41.833333 -32.333333 -4006 - -41.666667 -32.333333 -4178 - -41.500000 -32.333333 -4228 - -41.333333 -32.333333 -4324 - -41.166667 -32.333333 -4362 - -41.000000 -32.333333 -4469 - -40.833333 -32.333333 -4481 - -40.666667 -32.333333 -4414 - -40.500000 -32.333333 -3788 - -40.333333 -32.333333 -4526 - -40.166667 -32.333333 -4317 - -40.000000 -32.333333 -4381 - -65.000000 -32.500000 917 - -64.833333 -32.500000 1575 - -64.666667 -32.500000 902 - -64.500000 -32.500000 688 - -64.333333 -32.500000 672 - -64.166667 -32.500000 488 - -64.000000 -32.500000 382 - -63.833333 -32.500000 288 - -63.666667 -32.500000 256 - -63.500000 -32.500000 233 - -63.333333 -32.500000 207 - -63.166667 -32.500000 186 - -63.000000 -32.500000 163 - -62.833333 -32.500000 144 - -62.666667 -32.500000 128 - -62.500000 -32.500000 118 - -62.333333 -32.500000 115 - -62.166667 -32.500000 113 - -62.000000 -32.500000 88 - -61.833333 -32.500000 119 - -61.666667 -32.500000 109 - -61.500000 -32.500000 94 - -61.333333 -32.500000 65 - -61.166667 -32.500000 37 - -61.000000 -32.500000 38 - -60.833333 -32.500000 23 - -60.666667 -32.500000 8 - -60.500000 -32.500000 7 - -60.333333 -32.500000 12 - -60.166667 -32.500000 47 - -60.000000 -32.500000 89 - -59.833333 -32.500000 57 - -59.666667 -32.500000 57 - -59.500000 -32.500000 52 - -59.333333 -32.500000 55 - -59.166667 -32.500000 49 - -59.000000 -32.500000 51 - -58.833333 -32.500000 53 - -58.666667 -32.500000 27 - -58.500000 -32.500000 27 - -58.333333 -32.500000 18 - -58.166667 -32.500000 16 - -58.000000 -32.500000 38 - -57.833333 -32.500000 66 - -57.666667 -32.500000 79 - -57.500000 -32.500000 79 - -57.333333 -32.500000 94 - -57.166667 -32.500000 88 - -57.000000 -32.500000 137 - -56.833333 -32.500000 144 - -56.666667 -32.500000 132 - -56.500000 -32.500000 104 - -56.333333 -32.500000 125 - -56.166667 -32.500000 159 - -56.000000 -32.500000 133 - -55.833333 -32.500000 95 - -55.666667 -32.500000 77 - -55.500000 -32.500000 80 - -55.333333 -32.500000 90 - -55.166667 -32.500000 105 - -55.000000 -32.500000 112 - -54.833333 -32.500000 127 - -54.666667 -32.500000 144 - -54.500000 -32.500000 147 - -54.333333 -32.500000 108 - -54.166667 -32.500000 103 - -54.000000 -32.500000 114 - -53.833333 -32.500000 144 - -53.666667 -32.500000 59 - -53.500000 -32.500000 16 - -53.333333 -32.500000 53 - -53.166667 -32.500000 16 - -53.000000 -32.500000 4 - -52.833333 -32.500000 -18 - -52.666667 -32.500000 -9 - -52.500000 -32.500000 5 - -52.333333 -32.500000 -2 - -52.166667 -32.500000 -12 - -52.000000 -32.500000 -22 - -51.833333 -32.500000 -28 - -51.666667 -32.500000 -35 - -51.500000 -32.500000 -48 - -51.333333 -32.500000 -53 - -51.166667 -32.500000 -63 - -51.000000 -32.500000 -65 - -50.833333 -32.500000 -68 - -50.666667 -32.500000 -81 - -50.500000 -32.500000 -96 - -50.333333 -32.500000 -232 - -50.166667 -32.500000 -916 - -50.000000 -32.500000 -1219 - -49.833333 -32.500000 -1485 - -49.666667 -32.500000 -1736 - -49.500000 -32.500000 -1861 - -49.333333 -32.500000 -2048 - -49.166667 -32.500000 -2292 - -49.000000 -32.500000 -2461 - -48.833333 -32.500000 -2899 - -48.666667 -32.500000 -2889 - -48.500000 -32.500000 -2942 - -48.333333 -32.500000 -3083 - -48.166667 -32.500000 -3213 - -48.000000 -32.500000 -3284 - -47.833333 -32.500000 -3388 - -47.666667 -32.500000 -3453 - -47.500000 -32.500000 -3541 - -47.333333 -32.500000 -3626 - -47.166667 -32.500000 -3692 - -47.000000 -32.500000 -3762 - -46.833333 -32.500000 -3811 - -46.666667 -32.500000 -3848 - -46.500000 -32.500000 -3885 - -46.333333 -32.500000 -3925 - -46.166667 -32.500000 -3945 - -46.000000 -32.500000 -3980 - -45.833333 -32.500000 -4011 - -45.666667 -32.500000 -4031 - -45.500000 -32.500000 -4083 - -45.333333 -32.500000 -4103 - -45.166667 -32.500000 -4102 - -45.000000 -32.500000 -4127 - -44.833333 -32.500000 -4164 - -44.666667 -32.500000 -4117 - -44.500000 -32.500000 -4240 - -44.333333 -32.500000 -4096 - -44.166667 -32.500000 -4144 - -44.000000 -32.500000 -4141 - -43.833333 -32.500000 -4093 - -43.666667 -32.500000 -4061 - -43.500000 -32.500000 -4101 - -43.333333 -32.500000 -4002 - -43.166667 -32.500000 -4164 - -43.000000 -32.500000 -4125 - -42.833333 -32.500000 -4182 - -42.666667 -32.500000 -4116 - -42.500000 -32.500000 -4146 - -42.333333 -32.500000 -4124 - -42.166667 -32.500000 -4096 - -42.000000 -32.500000 -4087 - -41.833333 -32.500000 -4167 - -41.666667 -32.500000 -4277 - -41.500000 -32.500000 -4401 - -41.333333 -32.500000 -4400 - -41.166667 -32.500000 -4420 - -41.000000 -32.500000 -4472 - -40.833333 -32.500000 -4411 - -40.666667 -32.500000 -4514 - -40.500000 -32.500000 -4105 - -40.333333 -32.500000 -4196 - -40.166667 -32.500000 -4402 - -40.000000 -32.500000 -4337 - -65.000000 -32.666667 1001 - -64.833333 -32.666667 1203 - -64.666667 -32.666667 820 - -64.500000 -32.666667 684 - -64.333333 -32.666667 579 - -64.166667 -32.666667 458 - -64.000000 -32.666667 364 - -63.833333 -32.666667 295 - -63.666667 -32.666667 244 - -63.500000 -32.666667 211 - -63.333333 -32.666667 190 - -63.166667 -32.666667 172 - -63.000000 -32.666667 157 - -62.833333 -32.666667 140 - -62.666667 -32.666667 126 - -62.500000 -32.666667 116 - -62.333333 -32.666667 115 - -62.166667 -32.666667 111 - -62.000000 -32.666667 89 - -61.833333 -32.666667 91 - -61.666667 -32.666667 113 - -61.500000 -32.666667 94 - -61.333333 -32.666667 73 - -61.166667 -32.666667 53 - -61.000000 -32.666667 38 - -60.833333 -32.666667 31 - -60.666667 -32.666667 9 - -60.500000 -32.666667 7 - -60.333333 -32.666667 5 - -60.166667 -32.666667 5 - -60.000000 -32.666667 70 - -59.833333 -32.666667 42 - -59.666667 -32.666667 74 - -59.500000 -32.666667 49 - -59.333333 -32.666667 58 - -59.166667 -32.666667 34 - -59.000000 -32.666667 32 - -58.833333 -32.666667 57 - -58.666667 -32.666667 39 - -58.500000 -32.666667 20 - -58.333333 -32.666667 37 - -58.166667 -32.666667 3 - -58.000000 -32.666667 36 - -57.833333 -32.666667 43 - -57.666667 -32.666667 68 - -57.500000 -32.666667 85 - -57.333333 -32.666667 84 - -57.166667 -32.666667 57 - -57.000000 -32.666667 105 - -56.833333 -32.666667 118 - -56.666667 -32.666667 85 - -56.500000 -32.666667 117 - -56.333333 -32.666667 78 - -56.166667 -32.666667 90 - -56.000000 -32.666667 73 - -55.833333 -32.666667 76 - -55.666667 -32.666667 102 - -55.500000 -32.666667 129 - -55.333333 -32.666667 105 - -55.166667 -32.666667 155 - -55.000000 -32.666667 156 - -54.833333 -32.666667 157 - -54.666667 -32.666667 263 - -54.500000 -32.666667 226 - -54.333333 -32.666667 229 - -54.166667 -32.666667 144 - -54.000000 -32.666667 55 - -53.833333 -32.666667 46 - -53.666667 -32.666667 50 - -53.500000 -32.666667 16 - -53.333333 -32.666667 13 - -53.166667 -32.666667 -12 - -53.000000 -32.666667 -12 - -52.833333 -32.666667 -6 - -52.666667 -32.666667 -7 - -52.500000 -32.666667 5 - -52.333333 -32.666667 -5 - -52.166667 -32.666667 -14 - -52.000000 -32.666667 -22 - -51.833333 -32.666667 -33 - -51.666667 -32.666667 -42 - -51.500000 -32.666667 -49 - -51.333333 -32.666667 -58 - -51.166667 -32.666667 -60 - -51.000000 -32.666667 -63 - -50.833333 -32.666667 -103 - -50.666667 -32.666667 -186 - -50.500000 -32.666667 -129 - -50.333333 -32.666667 -464 - -50.166667 -32.666667 -926 - -50.000000 -32.666667 -1148 - -49.833333 -32.666667 -1342 - -49.666667 -32.666667 -1599 - -49.500000 -32.666667 -1782 - -49.333333 -32.666667 -1960 - -49.166667 -32.666667 -2186 - -49.000000 -32.666667 -2638 - -48.833333 -32.666667 -2864 - -48.666667 -32.666667 -2869 - -48.500000 -32.666667 -3090 - -48.333333 -32.666667 -3129 - -48.166667 -32.666667 -3219 - -48.000000 -32.666667 -3358 - -47.833333 -32.666667 -3411 - -47.666667 -32.666667 -3490 - -47.500000 -32.666667 -3573 - -47.333333 -32.666667 -3656 - -47.166667 -32.666667 -3720 - -47.000000 -32.666667 -3773 - -46.833333 -32.666667 -3802 - -46.666667 -32.666667 -3841 - -46.500000 -32.666667 -3889 - -46.333333 -32.666667 -3942 - -46.166667 -32.666667 -3968 - -46.000000 -32.666667 -4002 - -45.833333 -32.666667 -4031 - -45.666667 -32.666667 -4079 - -45.500000 -32.666667 -4093 - -45.333333 -32.666667 -4101 - -45.166667 -32.666667 -4124 - -45.000000 -32.666667 -4140 - -44.833333 -32.666667 -4179 - -44.666667 -32.666667 -4171 - -44.500000 -32.666667 -4233 - -44.333333 -32.666667 -4179 - -44.166667 -32.666667 -4235 - -44.000000 -32.666667 -4228 - -43.833333 -32.666667 -4220 - -43.666667 -32.666667 -4224 - -43.500000 -32.666667 -4175 - -43.333333 -32.666667 -4240 - -43.166667 -32.666667 -4252 - -43.000000 -32.666667 -4293 - -42.833333 -32.666667 -4313 - -42.666667 -32.666667 -4261 - -42.500000 -32.666667 -4247 - -42.333333 -32.666667 -4294 - -42.166667 -32.666667 -4293 - -42.000000 -32.666667 -4315 - -41.833333 -32.666667 -4341 - -41.666667 -32.666667 -4384 - -41.500000 -32.666667 -4417 - -41.333333 -32.666667 -4492 - -41.166667 -32.666667 -4467 - -41.000000 -32.666667 -4509 - -40.833333 -32.666667 -4462 - -40.666667 -32.666667 -4567 - -40.500000 -32.666667 -4535 - -40.333333 -32.666667 -4396 - -40.166667 -32.666667 -4484 - -40.000000 -32.666667 -4591 - -65.000000 -32.833333 1002 - -64.833333 -32.833333 896 - -64.666667 -32.833333 691 - -64.500000 -32.833333 649 - -64.333333 -32.833333 533 - -64.166667 -32.833333 429 - -64.000000 -32.833333 343 - -63.833333 -32.833333 282 - -63.666667 -32.833333 231 - -63.500000 -32.833333 191 - -63.333333 -32.833333 180 - -63.166667 -32.833333 162 - -63.000000 -32.833333 146 - -62.833333 -32.833333 133 - -62.666667 -32.833333 121 - -62.500000 -32.833333 115 - -62.333333 -32.833333 109 - -62.166667 -32.833333 108 - -62.000000 -32.833333 102 - -61.833333 -32.833333 86 - -61.666667 -32.833333 116 - -61.500000 -32.833333 100 - -61.333333 -32.833333 76 - -61.166667 -32.833333 48 - -61.000000 -32.833333 43 - -60.833333 -32.833333 29 - -60.666667 -32.833333 8 - -60.500000 -32.833333 6 - -60.333333 -32.833333 6 - -60.166667 -32.833333 4 - -60.000000 -32.833333 5 - -59.833333 -32.833333 11 - -59.666667 -32.833333 57 - -59.500000 -32.833333 29 - -59.333333 -32.833333 61 - -59.166667 -32.833333 19 - -59.000000 -32.833333 43 - -58.833333 -32.833333 46 - -58.666667 -32.833333 43 - -58.500000 -32.833333 9 - -58.333333 -32.833333 40 - -58.166667 -32.833333 1 - -58.000000 -32.833333 27 - -57.833333 -32.833333 66 - -57.666667 -32.833333 53 - -57.500000 -32.833333 37 - -57.333333 -32.833333 41 - -57.166667 -32.833333 104 - -57.000000 -32.833333 120 - -56.833333 -32.833333 74 - -56.666667 -32.833333 59 - -56.500000 -32.833333 70 - -56.333333 -32.833333 78 - -56.166667 -32.833333 82 - -56.000000 -32.833333 113 - -55.833333 -32.833333 112 - -55.666667 -32.833333 120 - -55.500000 -32.833333 103 - -55.333333 -32.833333 130 - -55.166667 -32.833333 156 - -55.000000 -32.833333 169 - -54.833333 -32.833333 286 - -54.666667 -32.833333 293 - -54.500000 -32.833333 309 - -54.333333 -32.833333 141 - -54.166667 -32.833333 89 - -54.000000 -32.833333 39 - -53.833333 -32.833333 28 - -53.666667 -32.833333 17 - -53.500000 -32.833333 8 - -53.333333 -32.833333 4 - -53.166667 -32.833333 -3 - -53.000000 -32.833333 2 - -52.833333 -32.833333 -10 - -52.666667 -32.833333 7 - -52.500000 -32.833333 7 - -52.333333 -32.833333 -9 - -52.166667 -32.833333 -19 - -52.000000 -32.833333 -26 - -51.833333 -32.833333 -39 - -51.666667 -32.833333 -48 - -51.500000 -32.833333 -57 - -51.333333 -32.833333 -77 - -51.166667 -32.833333 -64 - -51.000000 -32.833333 -68 - -50.833333 -32.833333 -71 - -50.666667 -32.833333 -228 - -50.500000 -32.833333 -134 - -50.333333 -32.833333 -610 - -50.166667 -32.833333 -884 - -50.000000 -32.833333 -1074 - -49.833333 -32.833333 -1216 - -49.666667 -32.833333 -1448 - -49.500000 -32.833333 -1682 - -49.333333 -32.833333 -1856 - -49.166667 -32.833333 -2260 - -49.000000 -32.833333 -2807 - -48.833333 -32.833333 -2856 - -48.666667 -32.833333 -2978 - -48.500000 -32.833333 -3074 - -48.333333 -32.833333 -3169 - -48.166667 -32.833333 -3267 - -48.000000 -32.833333 -3368 - -47.833333 -32.833333 -3433 - -47.666667 -32.833333 -3514 - -47.500000 -32.833333 -3579 - -47.333333 -32.833333 -3651 - -47.166667 -32.833333 -3703 - -47.000000 -32.833333 -3749 - -46.833333 -32.833333 -3792 - -46.666667 -32.833333 -3830 - -46.500000 -32.833333 -3889 - -46.333333 -32.833333 -3942 - -46.166667 -32.833333 -3971 - -46.000000 -32.833333 -4012 - -45.833333 -32.833333 -4042 - -45.666667 -32.833333 -4078 - -45.500000 -32.833333 -4113 - -45.333333 -32.833333 -4132 - -45.166667 -32.833333 -4134 - -45.000000 -32.833333 -4161 - -44.833333 -32.833333 -4194 - -44.666667 -32.833333 -4207 - -44.500000 -32.833333 -4238 - -44.333333 -32.833333 -4215 - -44.166667 -32.833333 -4273 - -44.000000 -32.833333 -4251 - -43.833333 -32.833333 -4196 - -43.666667 -32.833333 -4317 - -43.500000 -32.833333 -4273 - -43.333333 -32.833333 -4335 - -43.166667 -32.833333 -4325 - -43.000000 -32.833333 -4336 - -42.833333 -32.833333 -4352 - -42.666667 -32.833333 -4352 - -42.500000 -32.833333 -4370 - -42.333333 -32.833333 -4359 - -42.166667 -32.833333 -4401 - -42.000000 -32.833333 -4451 - -41.833333 -32.833333 -4455 - -41.666667 -32.833333 -4498 - -41.500000 -32.833333 -4516 - -41.333333 -32.833333 -4511 - -41.166667 -32.833333 -4384 - -41.000000 -32.833333 -4552 - -40.833333 -32.833333 -4607 - -40.666667 -32.833333 -4642 - -40.500000 -32.833333 -4774 - -40.333333 -32.833333 -4722 - -40.166667 -32.833333 -4812 - -40.000000 -32.833333 -4718 - -65.000000 -33.000000 1374 - -64.833333 -33.000000 800 - -64.666667 -33.000000 606 - -64.500000 -33.000000 548 - -64.333333 -33.000000 486 - -64.166667 -33.000000 404 - -64.000000 -33.000000 318 - -63.833333 -33.000000 275 - -63.666667 -33.000000 229 - -63.500000 -33.000000 195 - -63.333333 -33.000000 164 - -63.166667 -33.000000 153 - -63.000000 -33.000000 137 - -62.833333 -33.000000 125 - -62.666667 -33.000000 116 - -62.500000 -33.000000 116 - -62.333333 -33.000000 112 - -62.166667 -33.000000 106 - -62.000000 -33.000000 102 - -61.833333 -33.000000 81 - -61.666667 -33.000000 125 - -61.500000 -33.000000 76 - -61.333333 -33.000000 50 - -61.166667 -33.000000 73 - -61.000000 -33.000000 66 - -60.833333 -33.000000 34 - -60.666667 -33.000000 38 - -60.500000 -33.000000 8 - -60.333333 -33.000000 6 - -60.166667 -33.000000 5 - -60.000000 -33.000000 5 - -59.833333 -33.000000 5 - -59.666667 -33.000000 6 - -59.500000 -33.000000 16 - -59.333333 -33.000000 44 - -59.166667 -33.000000 16 - -59.000000 -33.000000 62 - -58.833333 -33.000000 34 - -58.666667 -33.000000 14 - -58.500000 -33.000000 4 - -58.333333 -33.000000 23 - -58.166667 -33.000000 1 - -58.000000 -33.000000 37 - -57.833333 -33.000000 17 - -57.666667 -33.000000 46 - -57.500000 -33.000000 40 - -57.333333 -33.000000 53 - -57.166667 -33.000000 52 - -57.000000 -33.000000 55 - -56.833333 -33.000000 55 - -56.666667 -33.000000 99 - -56.500000 -33.000000 110 - -56.333333 -33.000000 85 - -56.166667 -33.000000 100 - -56.000000 -33.000000 112 - -55.833333 -33.000000 139 - -55.666667 -33.000000 121 - -55.500000 -33.000000 168 - -55.333333 -33.000000 156 - -55.166667 -33.000000 201 - -55.000000 -33.000000 266 - -54.833333 -33.000000 132 - -54.666667 -33.000000 133 - -54.500000 -33.000000 98 - -54.333333 -33.000000 109 - -54.166667 -33.000000 79 - -54.000000 -33.000000 36 - -53.833333 -33.000000 17 - -53.666667 -33.000000 12 - -53.500000 -33.000000 -19 - -53.333333 -33.000000 -19 - -53.166667 -33.000000 5 - -53.000000 -33.000000 2 - -52.833333 -33.000000 8 - -52.666667 -33.000000 -9 - -52.500000 -33.000000 -3 - -52.333333 -33.000000 -13 - -52.166667 -33.000000 -21 - -52.000000 -33.000000 -33 - -51.833333 -33.000000 -47 - -51.666667 -33.000000 -57 - -51.500000 -33.000000 -62 - -51.333333 -33.000000 -65 - -51.166667 -33.000000 -55 - -51.000000 -33.000000 -74 - -50.833333 -33.000000 -86 - -50.666667 -33.000000 -133 - -50.500000 -33.000000 -148 - -50.333333 -33.000000 -538 - -50.166667 -33.000000 -842 - -50.000000 -33.000000 -1007 - -49.833333 -33.000000 -1187 - -49.666667 -33.000000 -1368 - -49.500000 -33.000000 -1583 - -49.333333 -33.000000 -1881 - -49.166667 -33.000000 -2485 - -49.000000 -33.000000 -2890 - -48.833333 -33.000000 -2951 - -48.666667 -33.000000 -3122 - -48.500000 -33.000000 -3141 - -48.333333 -33.000000 -3209 - -48.166667 -33.000000 -3320 - -48.000000 -33.000000 -3404 - -47.833333 -33.000000 -3439 - -47.666667 -33.000000 -3514 - -47.500000 -33.000000 -3585 - -47.333333 -33.000000 -3642 - -47.166667 -33.000000 -3686 - -47.000000 -33.000000 -3744 - -46.833333 -33.000000 -3790 - -46.666667 -33.000000 -3832 - -46.500000 -33.000000 -3879 - -46.333333 -33.000000 -3906 - -46.166667 -33.000000 -3957 - -46.000000 -33.000000 -4005 - -45.833333 -33.000000 -4028 - -45.666667 -33.000000 -4068 - -45.500000 -33.000000 -4100 - -45.333333 -33.000000 -4154 - -45.166667 -33.000000 -4146 - -45.000000 -33.000000 -4265 - -44.833333 -33.000000 -4156 - -44.666667 -33.000000 -4172 - -44.500000 -33.000000 -4246 - -44.333333 -33.000000 -4267 - -44.166667 -33.000000 -4283 - -44.000000 -33.000000 -4297 - -43.833333 -33.000000 -4316 - -43.666667 -33.000000 -4320 - -43.500000 -33.000000 -4333 - -43.333333 -33.000000 -4388 - -43.166667 -33.000000 -4378 - -43.000000 -33.000000 -4390 - -42.833333 -33.000000 -4404 - -42.666667 -33.000000 -4416 - -42.500000 -33.000000 -4430 - -42.333333 -33.000000 -4457 - -42.166667 -33.000000 -4469 - -42.000000 -33.000000 -4482 - -41.833333 -33.000000 -4514 - -41.666667 -33.000000 -4525 - -41.500000 -33.000000 -4532 - -41.333333 -33.000000 -4496 - -41.166667 -33.000000 -4481 - -41.000000 -33.000000 -4471 - -40.833333 -33.000000 -4724 - -40.666667 -33.000000 -4742 - -40.500000 -33.000000 -4741 - -40.333333 -33.000000 -4766 - -40.166667 -33.000000 -4723 - -40.000000 -33.000000 -4723 - -65.000000 -33.166667 856 - -64.833333 -33.166667 712 - -64.666667 -33.166667 601 - -64.500000 -33.166667 478 - -64.333333 -33.166667 421 - -64.166667 -33.166667 360 - -64.000000 -33.166667 307 - -63.833333 -33.166667 258 - -63.666667 -33.166667 218 - -63.500000 -33.166667 183 - -63.333333 -33.166667 158 - -63.166667 -33.166667 137 - -63.000000 -33.166667 130 - -62.833333 -33.166667 123 - -62.666667 -33.166667 110 - -62.500000 -33.166667 119 - -62.333333 -33.166667 112 - -62.166667 -33.166667 113 - -62.000000 -33.166667 101 - -61.833333 -33.166667 97 - -61.666667 -33.166667 90 - -61.500000 -33.166667 93 - -61.333333 -33.166667 91 - -61.166667 -33.166667 84 - -61.000000 -33.166667 54 - -60.833333 -33.166667 62 - -60.666667 -33.166667 37 - -60.500000 -33.166667 27 - -60.333333 -33.166667 5 - -60.166667 -33.166667 5 - -60.000000 -33.166667 4 - -59.833333 -33.166667 1 - -59.666667 -33.166667 3 - -59.500000 -33.166667 5 - -59.333333 -33.166667 8 - -59.166667 -33.166667 7 - -59.000000 -33.166667 16 - -58.833333 -33.166667 39 - -58.666667 -33.166667 30 - -58.500000 -33.166667 15 - -58.333333 -33.166667 26 - -58.166667 -33.166667 30 - -58.000000 -33.166667 32 - -57.833333 -33.166667 56 - -57.666667 -33.166667 63 - -57.500000 -33.166667 49 - -57.333333 -33.166667 58 - -57.166667 -33.166667 47 - -57.000000 -33.166667 41 - -56.833333 -33.166667 74 - -56.666667 -33.166667 86 - -56.500000 -33.166667 107 - -56.333333 -33.166667 98 - -56.166667 -33.166667 97 - -56.000000 -33.166667 125 - -55.833333 -33.166667 143 - -55.666667 -33.166667 156 - -55.500000 -33.166667 172 - -55.333333 -33.166667 172 - -55.166667 -33.166667 216 - -55.000000 -33.166667 169 - -54.833333 -33.166667 80 - -54.666667 -33.166667 62 - -54.500000 -33.166667 66 - -54.333333 -33.166667 82 - -54.166667 -33.166667 61 - -54.000000 -33.166667 19 - -53.833333 -33.166667 10 - -53.666667 -33.166667 2 - -53.500000 -33.166667 -42 - -53.333333 -33.166667 4 - -53.166667 -33.166667 7 - -53.000000 -33.166667 15 - -52.833333 -33.166667 -8 - -52.666667 -33.166667 -1 - -52.500000 -33.166667 -9 - -52.333333 -33.166667 -17 - -52.166667 -33.166667 -27 - -52.000000 -33.166667 -44 - -51.833333 -33.166667 -58 - -51.666667 -33.166667 -58 - -51.500000 -33.166667 -60 - -51.333333 -33.166667 -63 - -51.166667 -33.166667 -69 - -51.000000 -33.166667 -85 - -50.833333 -33.166667 -111 - -50.666667 -33.166667 -128 - -50.500000 -33.166667 -300 - -50.333333 -33.166667 -580 - -50.166667 -33.166667 -824 - -50.000000 -33.166667 -915 - -49.833333 -33.166667 -1100 - -49.666667 -33.166667 -1353 - -49.500000 -33.166667 -1588 - -49.333333 -33.166667 -2169 - -49.166667 -33.166667 -2716 - -49.000000 -33.166667 -2937 - -48.833333 -33.166667 -3012 - -48.666667 -33.166667 -3070 - -48.500000 -33.166667 -3185 - -48.333333 -33.166667 -3253 - -48.166667 -33.166667 -3282 - -48.000000 -33.166667 -3394 - -47.833333 -33.166667 -3448 - -47.666667 -33.166667 -3505 - -47.500000 -33.166667 -3577 - -47.333333 -33.166667 -3642 - -47.166667 -33.166667 -3663 - -47.000000 -33.166667 -3726 - -46.833333 -33.166667 -3795 - -46.666667 -33.166667 -3837 - -46.500000 -33.166667 -3868 - -46.333333 -33.166667 -3904 - -46.166667 -33.166667 -3946 - -46.000000 -33.166667 -3978 - -45.833333 -33.166667 -3999 - -45.666667 -33.166667 -4024 - -45.500000 -33.166667 -4044 - -45.333333 -33.166667 -4120 - -45.166667 -33.166667 -4146 - -45.000000 -33.166667 -4183 - -44.833333 -33.166667 -4264 - -44.666667 -33.166667 -4187 - -44.500000 -33.166667 -4236 - -44.333333 -33.166667 -4229 - -44.166667 -33.166667 -4260 - -44.000000 -33.166667 -4265 - -43.833333 -33.166667 -4275 - -43.666667 -33.166667 -4396 - -43.500000 -33.166667 -4349 - -43.333333 -33.166667 -4385 - -43.166667 -33.166667 -4424 - -43.000000 -33.166667 -4404 - -42.833333 -33.166667 -4432 - -42.666667 -33.166667 -4455 - -42.500000 -33.166667 -4469 - -42.333333 -33.166667 -4501 - -42.166667 -33.166667 -4519 - -42.000000 -33.166667 -4527 - -41.833333 -33.166667 -4558 - -41.666667 -33.166667 -4569 - -41.500000 -33.166667 -4584 - -41.333333 -33.166667 -4590 - -41.166667 -33.166667 -4575 - -41.000000 -33.166667 -4602 - -40.833333 -33.166667 -4669 - -40.666667 -33.166667 -4749 - -40.500000 -33.166667 -4630 - -40.333333 -33.166667 -4731 - -40.166667 -33.166667 -4618 - -40.000000 -33.166667 -4546 - -65.000000 -33.333333 677 - -64.833333 -33.333333 629 - -64.666667 -33.333333 519 - -64.500000 -33.333333 439 - -64.333333 -33.333333 357 - -64.166667 -33.333333 325 - -64.000000 -33.333333 281 - -63.833333 -33.333333 241 - -63.666667 -33.333333 205 - -63.500000 -33.333333 179 - -63.333333 -33.333333 153 - -63.166667 -33.333333 133 - -63.000000 -33.333333 117 - -62.833333 -33.333333 112 - -62.666667 -33.333333 113 - -62.500000 -33.333333 118 - -62.333333 -33.333333 114 - -62.166667 -33.333333 118 - -62.000000 -33.333333 110 - -61.833333 -33.333333 105 - -61.666667 -33.333333 104 - -61.500000 -33.333333 91 - -61.333333 -33.333333 81 - -61.166667 -33.333333 91 - -61.000000 -33.333333 79 - -60.833333 -33.333333 60 - -60.666667 -33.333333 42 - -60.500000 -33.333333 38 - -60.333333 -33.333333 29 - -60.166667 -33.333333 4 - -60.000000 -33.333333 4 - -59.833333 -33.333333 3 - -59.666667 -33.333333 3 - -59.500000 -33.333333 4 - -59.333333 -33.333333 4 - -59.166667 -33.333333 5 - -59.000000 -33.333333 5 - -58.833333 -33.333333 4 - -58.666667 -33.333333 30 - -58.500000 -33.333333 11 - -58.333333 -33.333333 25 - -58.166667 -33.333333 32 - -58.000000 -33.333333 33 - -57.833333 -33.333333 37 - -57.666667 -33.333333 63 - -57.500000 -33.333333 97 - -57.333333 -33.333333 62 - -57.166667 -33.333333 92 - -57.000000 -33.333333 82 - -56.833333 -33.333333 70 - -56.666667 -33.333333 78 - -56.500000 -33.333333 91 - -56.333333 -33.333333 86 - -56.166667 -33.333333 113 - -56.000000 -33.333333 129 - -55.833333 -33.333333 121 - -55.666667 -33.333333 128 - -55.500000 -33.333333 144 - -55.333333 -33.333333 192 - -55.166667 -33.333333 262 - -55.000000 -33.333333 159 - -54.833333 -33.333333 86 - -54.666667 -33.333333 79 - -54.500000 -33.333333 79 - -54.333333 -33.333333 25 - -54.166667 -33.333333 21 - -54.000000 -33.333333 15 - -53.833333 -33.333333 11 - -53.666667 -33.333333 4 - -53.500000 -33.333333 -80 - -53.333333 -33.333333 8 - -53.166667 -33.333333 18 - -53.000000 -33.333333 -3 - -52.833333 -33.333333 -1 - -52.666667 -33.333333 -11 - -52.500000 -33.333333 -17 - -52.333333 -33.333333 -21 - -52.166667 -33.333333 -41 - -52.000000 -33.333333 -56 - -51.833333 -33.333333 -64 - -51.666667 -33.333333 -54 - -51.500000 -33.333333 -73 - -51.333333 -33.333333 -75 - -51.166667 -33.333333 -87 - -51.000000 -33.333333 -111 - -50.833333 -33.333333 -149 - -50.666667 -33.333333 -232 - -50.500000 -33.333333 -463 - -50.333333 -33.333333 -657 - -50.166667 -33.333333 -919 - -50.000000 -33.333333 -1056 - -49.833333 -33.333333 -1305 - -49.666667 -33.333333 -1398 - -49.500000 -33.333333 -1956 - -49.333333 -33.333333 -2429 - -49.166667 -33.333333 -2924 - -49.000000 -33.333333 -2916 - -48.833333 -33.333333 -3075 - -48.666667 -33.333333 -3110 - -48.500000 -33.333333 -3182 - -48.333333 -33.333333 -3248 - -48.166667 -33.333333 -3287 - -48.000000 -33.333333 -3375 - -47.833333 -33.333333 -3430 - -47.666667 -33.333333 -3515 - -47.500000 -33.333333 -3594 - -47.333333 -33.333333 -3661 - -47.166667 -33.333333 -3645 - -47.000000 -33.333333 -3697 - -46.833333 -33.333333 -3795 - -46.666667 -33.333333 -3839 - -46.500000 -33.333333 -3883 - -46.333333 -33.333333 -3906 - -46.166667 -33.333333 -3943 - -46.000000 -33.333333 -3959 - -45.833333 -33.333333 -3975 - -45.666667 -33.333333 -3977 - -45.500000 -33.333333 -4022 - -45.333333 -33.333333 -4030 - -45.166667 -33.333333 -4050 - -45.000000 -33.333333 -4101 - -44.833333 -33.333333 -4192 - -44.666667 -33.333333 -4166 - -44.500000 -33.333333 -4172 - -44.333333 -33.333333 -4205 - -44.166667 -33.333333 -4224 - -44.000000 -33.333333 -4284 - -43.833333 -33.333333 -4258 - -43.666667 -33.333333 -4304 - -43.500000 -33.333333 -4339 - -43.333333 -33.333333 -4388 - -43.166667 -33.333333 -4408 - -43.000000 -33.333333 -4443 - -42.833333 -33.333333 -4462 - -42.666667 -33.333333 -4478 - -42.500000 -33.333333 -4484 - -42.333333 -33.333333 -4515 - -42.166667 -33.333333 -4549 - -42.000000 -33.333333 -4559 - -41.833333 -33.333333 -4588 - -41.666667 -33.333333 -4569 - -41.500000 -33.333333 -4608 - -41.333333 -33.333333 -4626 - -41.166667 -33.333333 -4691 - -41.000000 -33.333333 -4570 - -40.833333 -33.333333 -4663 - -40.666667 -33.333333 -4699 - -40.500000 -33.333333 -4735 - -40.333333 -33.333333 -4734 - -40.166667 -33.333333 -4706 - -40.000000 -33.333333 -4727 - -65.000000 -33.500000 553 - -64.833333 -33.500000 502 - -64.666667 -33.500000 433 - -64.500000 -33.500000 365 - -64.333333 -33.500000 306 - -64.166667 -33.500000 287 - -64.000000 -33.500000 288 - -63.833333 -33.500000 211 - -63.666667 -33.500000 183 - -63.500000 -33.500000 165 - -63.333333 -33.500000 143 - -63.166667 -33.500000 124 - -63.000000 -33.500000 122 - -62.833333 -33.500000 120 - -62.666667 -33.500000 122 - -62.500000 -33.500000 127 - -62.333333 -33.500000 119 - -62.166667 -33.500000 117 - -62.000000 -33.500000 109 - -61.833333 -33.500000 110 - -61.666667 -33.500000 108 - -61.500000 -33.500000 106 - -61.333333 -33.500000 97 - -61.166667 -33.500000 92 - -61.000000 -33.500000 88 - -60.833333 -33.500000 74 - -60.666667 -33.500000 66 - -60.500000 -33.500000 55 - -60.333333 -33.500000 53 - -60.166667 -33.500000 25 - -60.000000 -33.500000 13 - -59.833333 -33.500000 3 - -59.666667 -33.500000 3 - -59.500000 -33.500000 2 - -59.333333 -33.500000 2 - -59.166667 -33.500000 2 - -59.000000 -33.500000 2 - -58.833333 -33.500000 5 - -58.666667 -33.500000 2 - -58.500000 -33.500000 -1 - -58.333333 -33.500000 11 - -58.166667 -33.500000 19 - -58.000000 -33.500000 69 - -57.833333 -33.500000 92 - -57.666667 -33.500000 90 - -57.500000 -33.500000 112 - -57.333333 -33.500000 88 - -57.166667 -33.500000 96 - -57.000000 -33.500000 116 - -56.833333 -33.500000 101 - -56.666667 -33.500000 94 - -56.500000 -33.500000 88 - -56.333333 -33.500000 112 - -56.166667 -33.500000 102 - -56.000000 -33.500000 96 - -55.833333 -33.500000 117 - -55.666667 -33.500000 149 - -55.500000 -33.500000 182 - -55.333333 -33.500000 192 - -55.166667 -33.500000 267 - -55.000000 -33.500000 181 - -54.833333 -33.500000 177 - -54.666667 -33.500000 70 - -54.500000 -33.500000 52 - -54.333333 -33.500000 27 - -54.166667 -33.500000 19 - -54.000000 -33.500000 16 - -53.833333 -33.500000 12 - -53.666667 -33.500000 6 - -53.500000 -33.500000 -100 - -53.333333 -33.500000 23 - -53.166667 -33.500000 13 - -53.000000 -33.500000 -3 - -52.833333 -33.500000 -19 - -52.666667 -33.500000 -20 - -52.500000 -33.500000 -20 - -52.333333 -33.500000 -21 - -52.166667 -33.500000 -55 - -52.000000 -33.500000 -64 - -51.833333 -33.500000 -52 - -51.666667 -33.500000 -70 - -51.500000 -33.500000 -91 - -51.333333 -33.500000 -105 - -51.166667 -33.500000 -124 - -51.000000 -33.500000 -166 - -50.833333 -33.500000 -227 - -50.666667 -33.500000 -524 - -50.500000 -33.500000 -768 - -50.333333 -33.500000 -977 - -50.166667 -33.500000 -1149 - -50.000000 -33.500000 -1368 - -49.833333 -33.500000 -1554 - -49.666667 -33.500000 -2076 - -49.500000 -33.500000 -2333 - -49.333333 -33.500000 -2746 - -49.166667 -33.500000 -2970 - -49.000000 -33.500000 -2968 - -48.833333 -33.500000 -3046 - -48.666667 -33.500000 -3127 - -48.500000 -33.500000 -3204 - -48.333333 -33.500000 -3264 - -48.166667 -33.500000 -3323 - -48.000000 -33.500000 -3378 - -47.833333 -33.500000 -3427 - -47.666667 -33.500000 -3559 - -47.500000 -33.500000 -3652 - -47.333333 -33.500000 -3721 - -47.166667 -33.500000 -3705 - -47.000000 -33.500000 -3753 - -46.833333 -33.500000 -3840 - -46.666667 -33.500000 -3881 - -46.500000 -33.500000 -3912 - -46.333333 -33.500000 -3916 - -46.166667 -33.500000 -3941 - -46.000000 -33.500000 -3966 - -45.833333 -33.500000 -3984 - -45.666667 -33.500000 -4036 - -45.500000 -33.500000 -4058 - -45.333333 -33.500000 -4086 - -45.166667 -33.500000 -4131 - -45.000000 -33.500000 -4124 - -44.833333 -33.500000 -4151 - -44.666667 -33.500000 -4176 - -44.500000 -33.500000 -4212 - -44.333333 -33.500000 -4192 - -44.166667 -33.500000 -4158 - -44.000000 -33.500000 -4172 - -43.833333 -33.500000 -4195 - -43.666667 -33.500000 -4206 - -43.500000 -33.500000 -4295 - -43.333333 -33.500000 -4334 - -43.166667 -33.500000 -4358 - -43.000000 -33.500000 -4434 - -42.833333 -33.500000 -4471 - -42.666667 -33.500000 -4516 - -42.500000 -33.500000 -4532 - -42.333333 -33.500000 -4512 - -42.166667 -33.500000 -4543 - -42.000000 -33.500000 -4559 - -41.833333 -33.500000 -4560 - -41.666667 -33.500000 -4576 - -41.500000 -33.500000 -4557 - -41.333333 -33.500000 -4572 - -41.166667 -33.500000 -4582 - -41.000000 -33.500000 -4502 - -40.833333 -33.500000 -4618 - -40.666667 -33.500000 -4683 - -40.500000 -33.500000 -4573 - -40.333333 -33.500000 -4688 - -40.166667 -33.500000 -4579 - -40.000000 -33.500000 -4582 - -65.000000 -33.666667 446 - -64.833333 -33.666667 419 - -64.666667 -33.666667 369 - -64.500000 -33.666667 312 - -64.333333 -33.666667 263 - -64.166667 -33.666667 245 - -64.000000 -33.666667 249 - -63.833333 -33.666667 188 - -63.666667 -33.666667 161 - -63.500000 -33.666667 143 - -63.333333 -33.666667 131 - -63.166667 -33.666667 125 - -63.000000 -33.666667 126 - -62.833333 -33.666667 124 - -62.666667 -33.666667 128 - -62.500000 -33.666667 120 - -62.333333 -33.666667 119 - -62.166667 -33.666667 117 - -62.000000 -33.666667 114 - -61.833333 -33.666667 110 - -61.666667 -33.666667 105 - -61.500000 -33.666667 89 - -61.333333 -33.666667 99 - -61.166667 -33.666667 94 - -61.000000 -33.666667 86 - -60.833333 -33.666667 83 - -60.666667 -33.666667 68 - -60.500000 -33.666667 52 - -60.333333 -33.666667 46 - -60.166667 -33.666667 58 - -60.000000 -33.666667 38 - -59.833333 -33.666667 27 - -59.666667 -33.666667 9 - -59.500000 -33.666667 3 - -59.333333 -33.666667 2 - -59.166667 -33.666667 3 - -59.000000 -33.666667 1 - -58.833333 -33.666667 2 - -58.666667 -33.666667 1 - -58.500000 -33.666667 -1 - -58.333333 -33.666667 12 - -58.166667 -33.666667 42 - -58.000000 -33.666667 38 - -57.833333 -33.666667 88 - -57.666667 -33.666667 96 - -57.500000 -33.666667 123 - -57.333333 -33.666667 114 - -57.166667 -33.666667 98 - -57.000000 -33.666667 127 - -56.833333 -33.666667 141 - -56.666667 -33.666667 134 - -56.500000 -33.666667 106 - -56.333333 -33.666667 132 - -56.166667 -33.666667 114 - -56.000000 -33.666667 155 - -55.833333 -33.666667 132 - -55.666667 -33.666667 158 - -55.500000 -33.666667 168 - -55.333333 -33.666667 196 - -55.166667 -33.666667 140 - -55.000000 -33.666667 107 - -54.833333 -33.666667 153 - -54.666667 -33.666667 66 - -54.500000 -33.666667 36 - -54.333333 -33.666667 33 - -54.166667 -33.666667 21 - -54.000000 -33.666667 16 - -53.833333 -33.666667 11 - -53.666667 -33.666667 7 - -53.500000 -33.666667 8 - -53.333333 -33.666667 14 - -53.166667 -33.666667 -13 - -53.000000 -33.666667 -20 - -52.833333 -33.666667 -21 - -52.666667 -33.666667 -20 - -52.500000 -33.666667 -20 - -52.333333 -33.666667 -44 - -52.166667 -33.666667 -70 - -52.000000 -33.666667 -49 - -51.833333 -33.666667 -58 - -51.666667 -33.666667 -76 - -51.500000 -33.666667 -118 - -51.333333 -33.666667 -189 - -51.166667 -33.666667 -287 - -51.000000 -33.666667 -583 - -50.833333 -33.666667 -728 - -50.666667 -33.666667 -927 - -50.500000 -33.666667 -1097 - -50.333333 -33.666667 -1307 - -50.166667 -33.666667 -1613 - -50.000000 -33.666667 -1896 - -49.833333 -33.666667 -2321 - -49.666667 -33.666667 -2690 - -49.500000 -33.666667 -2744 - -49.333333 -33.666667 -2981 - -49.166667 -33.666667 -2924 - -49.000000 -33.666667 -3020 - -48.833333 -33.666667 -3092 - -48.666667 -33.666667 -3157 - -48.500000 -33.666667 -3246 - -48.333333 -33.666667 -3347 - -48.166667 -33.666667 -3423 - -48.000000 -33.666667 -3527 - -47.833333 -33.666667 -3641 - -47.666667 -33.666667 -3701 - -47.500000 -33.666667 -3796 - -47.333333 -33.666667 -3852 - -47.166667 -33.666667 -3882 - -47.000000 -33.666667 -3920 - -46.833333 -33.666667 -3950 - -46.666667 -33.666667 -3996 - -46.500000 -33.666667 -4028 - -46.333333 -33.666667 -4074 - -46.166667 -33.666667 -4101 - -46.000000 -33.666667 -4104 - -45.833333 -33.666667 -4094 - -45.666667 -33.666667 -4108 - -45.500000 -33.666667 -4110 - -45.333333 -33.666667 -4163 - -45.166667 -33.666667 -4179 - -45.000000 -33.666667 -4188 - -44.833333 -33.666667 -4194 - -44.666667 -33.666667 -4206 - -44.500000 -33.666667 -4232 - -44.333333 -33.666667 -4288 - -44.166667 -33.666667 -4273 - -44.000000 -33.666667 -4248 - -43.833333 -33.666667 -4279 - -43.666667 -33.666667 -4305 - -43.500000 -33.666667 -4292 - -43.333333 -33.666667 -4332 - -43.166667 -33.666667 -4342 - -43.000000 -33.666667 -4370 - -42.833333 -33.666667 -4418 - -42.666667 -33.666667 -4442 - -42.500000 -33.666667 -4411 - -42.333333 -33.666667 -4452 - -42.166667 -33.666667 -4489 - -42.000000 -33.666667 -4510 - -41.833333 -33.666667 -4548 - -41.666667 -33.666667 -4563 - -41.500000 -33.666667 -4612 - -41.333333 -33.666667 -4644 - -41.166667 -33.666667 -4616 - -41.000000 -33.666667 -4537 - -40.833333 -33.666667 -4570 - -40.666667 -33.666667 -4598 - -40.500000 -33.666667 -4430 - -40.333333 -33.666667 -4566 - -40.166667 -33.666667 -4704 - -40.000000 -33.666667 -4506 - -65.000000 -33.833333 389 - -64.833333 -33.833333 352 - -64.666667 -33.833333 317 - -64.500000 -33.833333 279 - -64.333333 -33.833333 234 - -64.166667 -33.833333 217 - -64.000000 -33.833333 212 - -63.833333 -33.833333 178 - -63.666667 -33.833333 153 - -63.500000 -33.833333 135 - -63.333333 -33.833333 128 - -63.166667 -33.833333 129 - -63.000000 -33.833333 127 - -62.833333 -33.833333 126 - -62.666667 -33.833333 124 - -62.500000 -33.833333 124 - -62.333333 -33.833333 122 - -62.166667 -33.833333 113 - -62.000000 -33.833333 110 - -61.833333 -33.833333 109 - -61.666667 -33.833333 111 - -61.500000 -33.833333 106 - -61.333333 -33.833333 97 - -61.166667 -33.833333 83 - -61.000000 -33.833333 87 - -60.833333 -33.833333 76 - -60.666667 -33.833333 76 - -60.500000 -33.833333 80 - -60.333333 -33.833333 61 - -60.166667 -33.833333 58 - -60.000000 -33.833333 44 - -59.833333 -33.833333 34 - -59.666667 -33.833333 10 - -59.500000 -33.833333 27 - -59.333333 -33.833333 2 - -59.166667 -33.833333 2 - -59.000000 -33.833333 3 - -58.833333 -33.833333 3 - -58.666667 -33.833333 2 - -58.500000 -33.833333 6 - -58.333333 -33.833333 31 - -58.166667 -33.833333 53 - -58.000000 -33.833333 82 - -57.833333 -33.833333 75 - -57.666667 -33.833333 88 - -57.500000 -33.833333 131 - -57.333333 -33.833333 160 - -57.166667 -33.833333 128 - -57.000000 -33.833333 157 - -56.833333 -33.833333 111 - -56.666667 -33.833333 131 - -56.500000 -33.833333 140 - -56.333333 -33.833333 148 - -56.166667 -33.833333 94 - -56.000000 -33.833333 116 - -55.833333 -33.833333 154 - -55.666667 -33.833333 182 - -55.500000 -33.833333 215 - -55.333333 -33.833333 227 - -55.166667 -33.833333 212 - -55.000000 -33.833333 85 - -54.833333 -33.833333 65 - -54.666667 -33.833333 52 - -54.500000 -33.833333 49 - -54.333333 -33.833333 51 - -54.166667 -33.833333 27 - -54.000000 -33.833333 29 - -53.833333 -33.833333 15 - -53.666667 -33.833333 6 - -53.500000 -33.833333 16 - -53.333333 -33.833333 -13 - -53.166667 -33.833333 -20 - -53.000000 -33.833333 -20 - -52.833333 -33.833333 -25 - -52.666667 -33.833333 -28 - -52.500000 -33.833333 -35 - -52.333333 -33.833333 -77 - -52.166667 -33.833333 -45 - -52.000000 -33.833333 -51 - -51.833333 -33.833333 -69 - -51.666667 -33.833333 -100 - -51.500000 -33.833333 -171 - -51.333333 -33.833333 -692 - -51.166667 -33.833333 -860 - -51.000000 -33.833333 -1236 - -50.833333 -33.833333 -1380 - -50.666667 -33.833333 -1399 - -50.500000 -33.833333 -1521 - -50.333333 -33.833333 -1760 - -50.166667 -33.833333 -2170 - -50.000000 -33.833333 -2353 - -49.833333 -33.833333 -2588 - -49.666667 -33.833333 -2752 - -49.500000 -33.833333 -2800 - -49.333333 -33.833333 -2923 - -49.166667 -33.833333 -2993 - -49.000000 -33.833333 -3138 - -48.833333 -33.833333 -3110 - -48.666667 -33.833333 -3271 - -48.500000 -33.833333 -3386 - -48.333333 -33.833333 -3501 - -48.166667 -33.833333 -3597 - -48.000000 -33.833333 -3736 - -47.833333 -33.833333 -3851 - -47.666667 -33.833333 -3956 - -47.500000 -33.833333 -4029 - -47.333333 -33.833333 -4097 - -47.166667 -33.833333 -4136 - -47.000000 -33.833333 -4192 - -46.833333 -33.833333 -4197 - -46.666667 -33.833333 -4181 - -46.500000 -33.833333 -4192 - -46.333333 -33.833333 -4212 - -46.166667 -33.833333 -4235 - -46.000000 -33.833333 -4298 - -45.833333 -33.833333 -4290 - -45.666667 -33.833333 -4297 - -45.500000 -33.833333 -4295 - -45.333333 -33.833333 -4301 - -45.166667 -33.833333 -4356 - -45.000000 -33.833333 -4282 - -44.833333 -33.833333 -4316 - -44.666667 -33.833333 -4331 - -44.500000 -33.833333 -4317 - -44.333333 -33.833333 -4317 - -44.166667 -33.833333 -4342 - -44.000000 -33.833333 -4419 - -43.833333 -33.833333 -4342 - -43.666667 -33.833333 -4460 - -43.500000 -33.833333 -4365 - -43.333333 -33.833333 -4413 - -43.166667 -33.833333 -4381 - -43.000000 -33.833333 -4444 - -42.833333 -33.833333 -4430 - -42.666667 -33.833333 -4474 - -42.500000 -33.833333 -4480 - -42.333333 -33.833333 -4518 - -42.166667 -33.833333 -4508 - -42.000000 -33.833333 -4543 - -41.833333 -33.833333 -4551 - -41.666667 -33.833333 -4599 - -41.500000 -33.833333 -4581 - -41.333333 -33.833333 -4615 - -41.166667 -33.833333 -4600 - -41.000000 -33.833333 -4611 - -40.833333 -33.833333 -4599 - -40.666667 -33.833333 -4463 - -40.500000 -33.833333 -4717 - -40.333333 -33.833333 -4741 - -40.166667 -33.833333 -4775 - -40.000000 -33.833333 -4562 - -65.000000 -34.000000 352 - -64.833333 -34.000000 322 - -64.666667 -34.000000 286 - -64.500000 -34.000000 254 - -64.333333 -34.000000 220 - -64.166667 -34.000000 199 - -64.000000 -34.000000 186 - -63.833333 -34.000000 164 - -63.666667 -34.000000 150 - -63.500000 -34.000000 138 - -63.333333 -34.000000 130 - -63.166667 -34.000000 133 - -63.000000 -34.000000 131 - -62.833333 -34.000000 129 - -62.666667 -34.000000 119 - -62.500000 -34.000000 122 - -62.333333 -34.000000 124 - -62.166667 -34.000000 117 - -62.000000 -34.000000 116 - -61.833333 -34.000000 106 - -61.666667 -34.000000 97 - -61.500000 -34.000000 102 - -61.333333 -34.000000 101 - -61.166667 -34.000000 98 - -61.000000 -34.000000 70 - -60.833333 -34.000000 81 - -60.666667 -34.000000 78 - -60.500000 -34.000000 61 - -60.333333 -34.000000 46 - -60.166667 -34.000000 53 - -60.000000 -34.000000 56 - -59.833333 -34.000000 30 - -59.666667 -34.000000 32 - -59.500000 -34.000000 30 - -59.333333 -34.000000 5 - -59.166667 -34.000000 25 - -59.000000 -34.000000 2 - -58.833333 -34.000000 3 - -58.666667 -34.000000 3 - -58.500000 -34.000000 4 - -58.333333 -34.000000 -1 - -58.166667 -34.000000 29 - -58.000000 -34.000000 58 - -57.833333 -34.000000 87 - -57.666667 -34.000000 106 - -57.500000 -34.000000 99 - -57.333333 -34.000000 124 - -57.166667 -34.000000 115 - -57.000000 -34.000000 123 - -56.833333 -34.000000 69 - -56.666667 -34.000000 98 - -56.500000 -34.000000 122 - -56.333333 -34.000000 88 - -56.166667 -34.000000 71 - -56.000000 -34.000000 96 - -55.833333 -34.000000 129 - -55.666667 -34.000000 153 - -55.500000 -34.000000 156 - -55.333333 -34.000000 219 - -55.166667 -34.000000 197 - -55.000000 -34.000000 227 - -54.833333 -34.000000 190 - -54.666667 -34.000000 164 - -54.500000 -34.000000 67 - -54.333333 -34.000000 93 - -54.166667 -34.000000 46 - -54.000000 -34.000000 117 - -53.833333 -34.000000 28 - -53.666667 -34.000000 4 - -53.500000 -34.000000 -4 - -53.333333 -34.000000 -20 - -53.166667 -34.000000 -21 - -53.000000 -34.000000 -19 - -52.833333 -34.000000 -34 - -52.666667 -34.000000 -47 - -52.500000 -34.000000 -57 - -52.333333 -34.000000 -49 - -52.166667 -34.000000 -69 - -52.000000 -34.000000 -44 - -51.833333 -34.000000 -57 - -51.666667 -34.000000 -177 - -51.500000 -34.000000 -669 - -51.333333 -34.000000 -888 - -51.166667 -34.000000 -1396 - -51.000000 -34.000000 -1788 - -50.833333 -34.000000 -1991 - -50.666667 -34.000000 -1901 - -50.500000 -34.000000 -1976 - -50.333333 -34.000000 -2144 - -50.166667 -34.000000 -2457 - -50.000000 -34.000000 -2671 - -49.833333 -34.000000 -2845 - -49.666667 -34.000000 -2852 - -49.500000 -34.000000 -2795 - -49.333333 -34.000000 -2980 - -49.166667 -34.000000 -3101 - -49.000000 -34.000000 -3181 - -48.833333 -34.000000 -3333 - -48.666667 -34.000000 -3353 - -48.500000 -34.000000 -3456 - -48.333333 -34.000000 -3580 - -48.166667 -34.000000 -3700 - -48.000000 -34.000000 -3783 - -47.833333 -34.000000 -3915 - -47.666667 -34.000000 -4017 - -47.500000 -34.000000 -4138 - -47.333333 -34.000000 -4208 - -47.166667 -34.000000 -4310 - -47.000000 -34.000000 -4340 - -46.833333 -34.000000 -4385 - -46.666667 -34.000000 -4425 - -46.500000 -34.000000 -4450 - -46.333333 -34.000000 -4476 - -46.166667 -34.000000 -4501 - -46.000000 -34.000000 -4506 - -45.833333 -34.000000 -4501 - -45.666667 -34.000000 -4488 - -45.500000 -34.000000 -4514 - -45.333333 -34.000000 -4520 - -45.166667 -34.000000 -4496 - -45.000000 -34.000000 -4482 - -44.833333 -34.000000 -4429 - -44.666667 -34.000000 -4459 - -44.500000 -34.000000 -4457 - -44.333333 -34.000000 -4480 - -44.166667 -34.000000 -4513 - -44.000000 -34.000000 -4486 - -43.833333 -34.000000 -4508 - -43.666667 -34.000000 -4436 - -43.500000 -34.000000 -4494 - -43.333333 -34.000000 -4445 - -43.166667 -34.000000 -4448 - -43.000000 -34.000000 -4496 - -42.833333 -34.000000 -4495 - -42.666667 -34.000000 -4510 - -42.500000 -34.000000 -4532 - -42.333333 -34.000000 -4560 - -42.166667 -34.000000 -4579 - -42.000000 -34.000000 -4572 - -41.833333 -34.000000 -4576 - -41.666667 -34.000000 -4621 - -41.500000 -34.000000 -4613 - -41.333333 -34.000000 -4617 - -41.166667 -34.000000 -4625 - -41.000000 -34.000000 -4640 - -40.833333 -34.000000 -4566 - -40.666667 -34.000000 -4529 - -40.500000 -34.000000 -4599 - -40.333333 -34.000000 -4765 - -40.166667 -34.000000 -4748 - -40.000000 -34.000000 -4748 - -65.000000 -34.166667 329 - -64.833333 -34.166667 298 - -64.666667 -34.166667 270 - -64.500000 -34.166667 244 - -64.333333 -34.166667 221 - -64.166667 -34.166667 194 - -64.000000 -34.166667 176 - -63.833333 -34.166667 158 - -63.666667 -34.166667 148 - -63.500000 -34.166667 142 - -63.333333 -34.166667 136 - -63.166667 -34.166667 132 - -63.000000 -34.166667 128 - -62.833333 -34.166667 128 - -62.666667 -34.166667 122 - -62.500000 -34.166667 118 - -62.333333 -34.166667 115 - -62.166667 -34.166667 113 - -62.000000 -34.166667 105 - -61.833333 -34.166667 101 - -61.666667 -34.166667 92 - -61.500000 -34.166667 86 - -61.333333 -34.166667 91 - -61.166667 -34.166667 98 - -61.000000 -34.166667 80 - -60.833333 -34.166667 65 - -60.666667 -34.166667 76 - -60.500000 -34.166667 57 - -60.333333 -34.166667 72 - -60.166667 -34.166667 56 - -60.000000 -34.166667 43 - -59.833333 -34.166667 43 - -59.666667 -34.166667 45 - -59.500000 -34.166667 45 - -59.333333 -34.166667 16 - -59.166667 -34.166667 30 - -59.000000 -34.166667 4 - -58.833333 -34.166667 6 - -58.666667 -34.166667 4 - -58.500000 -34.166667 6 - -58.333333 -34.166667 -1 - -58.166667 -34.166667 12 - -58.000000 -34.166667 75 - -57.833333 -34.166667 35 - -57.666667 -34.166667 78 - -57.500000 -34.166667 106 - -57.333333 -34.166667 72 - -57.166667 -34.166667 61 - -57.000000 -34.166667 115 - -56.833333 -34.166667 62 - -56.666667 -34.166667 60 - -56.500000 -34.166667 88 - -56.333333 -34.166667 67 - -56.166667 -34.166667 97 - -56.000000 -34.166667 85 - -55.833333 -34.166667 58 - -55.666667 -34.166667 87 - -55.500000 -34.166667 103 - -55.333333 -34.166667 117 - -55.166667 -34.166667 299 - -55.000000 -34.166667 225 - -54.833333 -34.166667 153 - -54.666667 -34.166667 91 - -54.500000 -34.166667 82 - -54.333333 -34.166667 84 - -54.166667 -34.166667 131 - -54.000000 -34.166667 78 - -53.833333 -34.166667 36 - -53.666667 -34.166667 -1 - -53.500000 -34.166667 -18 - -53.333333 -34.166667 -20 - -53.166667 -34.166667 -26 - -53.000000 -34.166667 -46 - -52.833333 -34.166667 -49 - -52.666667 -34.166667 -65 - -52.500000 -34.166667 -40 - -52.333333 -34.166667 -46 - -52.166667 -34.166667 -87 - -52.000000 -34.166667 -92 - -51.833333 -34.166667 -92 - -51.666667 -34.166667 -692 - -51.500000 -34.166667 -776 - -51.333333 -34.166667 -1117 - -51.166667 -34.166667 -1559 - -51.000000 -34.166667 -2027 - -50.833333 -34.166667 -2246 - -50.666667 -34.166667 -2280 - -50.500000 -34.166667 -2465 - -50.333333 -34.166667 -2504 - -50.166667 -34.166667 -2558 - -50.000000 -34.166667 -2770 - -49.833333 -34.166667 -2889 - -49.666667 -34.166667 -2929 - -49.500000 -34.166667 -3141 - -49.333333 -34.166667 -3145 - -49.166667 -34.166667 -3244 - -49.000000 -34.166667 -3371 - -48.833333 -34.166667 -3415 - -48.666667 -34.166667 -3476 - -48.500000 -34.166667 -3613 - -48.333333 -34.166667 -3738 - -48.166667 -34.166667 -3824 - -48.000000 -34.166667 -4003 - -47.833333 -34.166667 -4072 - -47.666667 -34.166667 -4124 - -47.500000 -34.166667 -4222 - -47.333333 -34.166667 -4271 - -47.166667 -34.166667 -4351 - -47.000000 -34.166667 -4431 - -46.833333 -34.166667 -4513 - -46.666667 -34.166667 -4564 - -46.500000 -34.166667 -4614 - -46.333333 -34.166667 -4624 - -46.166667 -34.166667 -4646 - -46.000000 -34.166667 -4655 - -45.833333 -34.166667 -4666 - -45.666667 -34.166667 -4654 - -45.500000 -34.166667 -4655 - -45.333333 -34.166667 -4654 - -45.166667 -34.166667 -4632 - -45.000000 -34.166667 -4643 - -44.833333 -34.166667 -4565 - -44.666667 -34.166667 -4632 - -44.500000 -34.166667 -4676 - -44.333333 -34.166667 -4675 - -44.166667 -34.166667 -4693 - -44.000000 -34.166667 -4595 - -43.833333 -34.166667 -4566 - -43.666667 -34.166667 -4539 - -43.500000 -34.166667 -4533 - -43.333333 -34.166667 -4514 - -43.166667 -34.166667 -4537 - -43.000000 -34.166667 -4577 - -42.833333 -34.166667 -4566 - -42.666667 -34.166667 -4569 - -42.500000 -34.166667 -4570 - -42.333333 -34.166667 -4585 - -42.166667 -34.166667 -4616 - -42.000000 -34.166667 -4620 - -41.833333 -34.166667 -4633 - -41.666667 -34.166667 -4629 - -41.500000 -34.166667 -4656 - -41.333333 -34.166667 -4633 - -41.166667 -34.166667 -4674 - -41.000000 -34.166667 -4582 - -40.833333 -34.166667 -4553 - -40.666667 -34.166667 -4614 - -40.500000 -34.166667 -4707 - -40.333333 -34.166667 -4754 - -40.166667 -34.166667 -4695 - -40.000000 -34.166667 -4873 - -65.000000 -34.333333 309 - -64.833333 -34.333333 281 - -64.666667 -34.333333 257 - -64.500000 -34.333333 235 - -64.333333 -34.333333 214 - -64.166667 -34.333333 190 - -64.000000 -34.333333 172 - -63.833333 -34.333333 157 - -63.666667 -34.333333 147 - -63.500000 -34.333333 142 - -63.333333 -34.333333 138 - -63.166667 -34.333333 132 - -63.000000 -34.333333 127 - -62.833333 -34.333333 121 - -62.666667 -34.333333 112 - -62.500000 -34.333333 108 - -62.333333 -34.333333 103 - -62.166667 -34.333333 103 - -62.000000 -34.333333 104 - -61.833333 -34.333333 97 - -61.666667 -34.333333 95 - -61.500000 -34.333333 93 - -61.333333 -34.333333 84 - -61.166667 -34.333333 85 - -61.000000 -34.333333 72 - -60.833333 -34.333333 65 - -60.666667 -34.333333 70 - -60.500000 -34.333333 62 - -60.333333 -34.333333 59 - -60.166667 -34.333333 67 - -60.000000 -34.333333 54 - -59.833333 -34.333333 50 - -59.666667 -34.333333 50 - -59.500000 -34.333333 48 - -59.333333 -34.333333 39 - -59.166667 -34.333333 19 - -59.000000 -34.333333 27 - -58.833333 -34.333333 17 - -58.666667 -34.333333 3 - -58.500000 -34.333333 3 - -58.333333 -34.333333 -1 - -58.166667 -34.333333 -1 - -58.000000 -34.333333 -1 - -57.833333 -34.333333 37 - -57.666667 -34.333333 53 - -57.500000 -34.333333 47 - -57.333333 -34.333333 15 - -57.166667 -34.333333 49 - -57.000000 -34.333333 67 - -56.833333 -34.333333 64 - -56.666667 -34.333333 31 - -56.500000 -34.333333 49 - -56.333333 -34.333333 19 - -56.166667 -34.333333 35 - -56.000000 -34.333333 34 - -55.833333 -34.333333 60 - -55.666667 -34.333333 85 - -55.500000 -34.333333 90 - -55.333333 -34.333333 156 - -55.166667 -34.333333 180 - -55.000000 -34.333333 285 - -54.833333 -34.333333 137 - -54.666667 -34.333333 355 - -54.500000 -34.333333 116 - -54.333333 -34.333333 101 - -54.166667 -34.333333 57 - -54.000000 -34.333333 3 - -53.833333 -34.333333 3 - -53.666667 -34.333333 -19 - -53.500000 -34.333333 -20 - -53.333333 -34.333333 -25 - -53.166667 -34.333333 -38 - -53.000000 -34.333333 -62 - -52.833333 -34.333333 -45 - -52.666667 -34.333333 -38 - -52.500000 -34.333333 -67 - -52.333333 -34.333333 -81 - -52.166667 -34.333333 -108 - -52.000000 -34.333333 -126 - -51.833333 -34.333333 -308 - -51.666667 -34.333333 -550 - -51.500000 -34.333333 -1066 - -51.333333 -34.333333 -1551 - -51.166667 -34.333333 -1959 - -51.000000 -34.333333 -2290 - -50.833333 -34.333333 -2452 - -50.666667 -34.333333 -2561 - -50.500000 -34.333333 -2666 - -50.333333 -34.333333 -2780 - -50.166667 -34.333333 -2836 - -50.000000 -34.333333 -2941 - -49.833333 -34.333333 -2991 - -49.666667 -34.333333 -3144 - -49.500000 -34.333333 -3381 - -49.333333 -34.333333 -3438 - -49.166667 -34.333333 -3644 - -49.000000 -34.333333 -3625 - -48.833333 -34.333333 -3644 - -48.666667 -34.333333 -3699 - -48.500000 -34.333333 -3855 - -48.333333 -34.333333 -3940 - -48.166667 -34.333333 -4038 - -48.000000 -34.333333 -4232 - -47.833333 -34.333333 -4255 - -47.666667 -34.333333 -4350 - -47.500000 -34.333333 -4389 - -47.333333 -34.333333 -4438 - -47.166667 -34.333333 -4455 - -47.000000 -34.333333 -4490 - -46.833333 -34.333333 -4529 - -46.666667 -34.333333 -4600 - -46.500000 -34.333333 -4637 - -46.333333 -34.333333 -4666 - -46.166667 -34.333333 -4675 - -46.000000 -34.333333 -4702 - -45.833333 -34.333333 -4736 - -45.666667 -34.333333 -4742 - -45.500000 -34.333333 -4759 - -45.333333 -34.333333 -4756 - -45.166667 -34.333333 -4743 - -45.000000 -34.333333 -4754 - -44.833333 -34.333333 -4713 - -44.666667 -34.333333 -4713 - -44.500000 -34.333333 -4757 - -44.333333 -34.333333 -4718 - -44.166667 -34.333333 -4723 - -44.000000 -34.333333 -4682 - -43.833333 -34.333333 -4674 - -43.666667 -34.333333 -4646 - -43.500000 -34.333333 -4632 - -43.333333 -34.333333 -4636 - -43.166667 -34.333333 -4643 - -43.000000 -34.333333 -4620 - -42.833333 -34.333333 -4619 - -42.666667 -34.333333 -4621 - -42.500000 -34.333333 -4620 - -42.333333 -34.333333 -4620 - -42.166667 -34.333333 -4643 - -42.000000 -34.333333 -4650 - -41.833333 -34.333333 -4653 - -41.666667 -34.333333 -4642 - -41.500000 -34.333333 -4648 - -41.333333 -34.333333 -4670 - -41.166667 -34.333333 -4635 - -41.000000 -34.333333 -4655 - -40.833333 -34.333333 -4555 - -40.666667 -34.333333 -4615 - -40.500000 -34.333333 -4786 - -40.333333 -34.333333 -4785 - -40.166667 -34.333333 -4826 - -40.000000 -34.333333 -4669 - -65.000000 -34.500000 287 - -64.833333 -34.500000 262 - -64.666667 -34.500000 238 - -64.500000 -34.500000 217 - -64.333333 -34.500000 191 - -64.166667 -34.500000 178 - -64.000000 -34.500000 162 - -63.833333 -34.500000 149 - -63.666667 -34.500000 145 - -63.500000 -34.500000 141 - -63.333333 -34.500000 137 - -63.166667 -34.500000 132 - -63.000000 -34.500000 126 - -62.833333 -34.500000 122 - -62.666667 -34.500000 119 - -62.500000 -34.500000 111 - -62.333333 -34.500000 112 - -62.166667 -34.500000 108 - -62.000000 -34.500000 106 - -61.833333 -34.500000 102 - -61.666667 -34.500000 91 - -61.500000 -34.500000 87 - -61.333333 -34.500000 83 - -61.166667 -34.500000 75 - -61.000000 -34.500000 85 - -60.833333 -34.500000 78 - -60.666667 -34.500000 71 - -60.500000 -34.500000 72 - -60.333333 -34.500000 68 - -60.166667 -34.500000 64 - -60.000000 -34.500000 50 - -59.833333 -34.500000 55 - -59.666667 -34.500000 53 - -59.500000 -34.500000 50 - -59.333333 -34.500000 42 - -59.166667 -34.500000 27 - -59.000000 -34.500000 13 - -58.833333 -34.500000 27 - -58.666667 -34.500000 20 - -58.500000 -34.500000 23 - -58.333333 -34.500000 -1 - -58.166667 -34.500000 -1 - -58.000000 -34.500000 -1 - -57.833333 -34.500000 -1 - -57.666667 -34.500000 -1 - -57.500000 -34.500000 -1 - -57.333333 -34.500000 -1 - -57.166667 -34.500000 -1 - -57.000000 -34.500000 11 - -56.833333 -34.500000 26 - -56.666667 -34.500000 16 - -56.500000 -34.500000 33 - -56.333333 -34.500000 16 - -56.166667 -34.500000 40 - -56.000000 -34.500000 61 - -55.833333 -34.500000 71 - -55.666667 -34.500000 51 - -55.500000 -34.500000 37 - -55.333333 -34.500000 215 - -55.166667 -34.500000 292 - -55.000000 -34.500000 156 - -54.833333 -34.500000 137 - -54.666667 -34.500000 85 - -54.500000 -34.500000 102 - -54.333333 -34.500000 18 - -54.166667 -34.500000 51 - -54.000000 -34.500000 13 - -53.833333 -34.500000 -23 - -53.666667 -34.500000 -31 - -53.500000 -34.500000 -35 - -53.333333 -34.500000 -42 - -53.166667 -34.500000 -55 - -53.000000 -34.500000 -53 - -52.833333 -34.500000 -84 - -52.666667 -34.500000 -63 - -52.500000 -34.500000 -72 - -52.333333 -34.500000 -83 - -52.166667 -34.500000 -125 - -52.000000 -34.500000 -208 - -51.833333 -34.500000 -448 - -51.666667 -34.500000 -1076 - -51.500000 -34.500000 -1407 - -51.333333 -34.500000 -1776 - -51.166667 -34.500000 -2116 - -51.000000 -34.500000 -2490 - -50.833333 -34.500000 -2822 - -50.666667 -34.500000 -2857 - -50.500000 -34.500000 -2972 - -50.333333 -34.500000 -3009 - -50.166667 -34.500000 -3138 - -50.000000 -34.500000 -3196 - -49.833333 -34.500000 -3309 - -49.666667 -34.500000 -3542 - -49.500000 -34.500000 -3556 - -49.333333 -34.500000 -3592 - -49.166667 -34.500000 -3738 - -49.000000 -34.500000 -3784 - -48.833333 -34.500000 -3923 - -48.666667 -34.500000 -4017 - -48.500000 -34.500000 -4143 - -48.333333 -34.500000 -4189 - -48.166667 -34.500000 -4264 - -48.000000 -34.500000 -4384 - -47.833333 -34.500000 -4462 - -47.666667 -34.500000 -4521 - -47.500000 -34.500000 -4566 - -47.333333 -34.500000 -4588 - -47.166667 -34.500000 -4608 - -47.000000 -34.500000 -4621 - -46.833333 -34.500000 -4633 - -46.666667 -34.500000 -4613 - -46.500000 -34.500000 -4650 - -46.333333 -34.500000 -4695 - -46.166667 -34.500000 -4737 - -46.000000 -34.500000 -4768 - -45.833333 -34.500000 -4764 - -45.666667 -34.500000 -4779 - -45.500000 -34.500000 -4785 - -45.333333 -34.500000 -4801 - -45.166667 -34.500000 -4803 - -45.000000 -34.500000 -4796 - -44.833333 -34.500000 -4783 - -44.666667 -34.500000 -4774 - -44.500000 -34.500000 -4761 - -44.333333 -34.500000 -4771 - -44.166667 -34.500000 -4748 - -44.000000 -34.500000 -4749 - -43.833333 -34.500000 -4748 - -43.666667 -34.500000 -4735 - -43.500000 -34.500000 -4732 - -43.333333 -34.500000 -4705 - -43.166667 -34.500000 -4712 - -43.000000 -34.500000 -4703 - -42.833333 -34.500000 -4670 - -42.666667 -34.500000 -4667 - -42.500000 -34.500000 -4664 - -42.333333 -34.500000 -4665 - -42.166667 -34.500000 -4677 - -42.000000 -34.500000 -4687 - -41.833333 -34.500000 -4682 - -41.666667 -34.500000 -4671 - -41.500000 -34.500000 -4670 - -41.333333 -34.500000 -4683 - -41.166667 -34.500000 -4670 - -41.000000 -34.500000 -4725 - -40.833333 -34.500000 -4672 - -40.666667 -34.500000 -4645 - -40.500000 -34.500000 -4731 - -40.333333 -34.500000 -4863 - -40.166667 -34.500000 -4845 - -40.000000 -34.500000 -4837 - -65.000000 -34.666667 269 - -64.833333 -34.666667 249 - -64.666667 -34.666667 231 - -64.500000 -34.666667 203 - -64.333333 -34.666667 182 - -64.166667 -34.666667 162 - -64.000000 -34.666667 150 - -63.833333 -34.666667 145 - -63.666667 -34.666667 139 - -63.500000 -34.666667 129 - -63.333333 -34.666667 132 - -63.166667 -34.666667 128 - -63.000000 -34.666667 121 - -62.833333 -34.666667 116 - -62.666667 -34.666667 113 - -62.500000 -34.666667 108 - -62.333333 -34.666667 103 - -62.166667 -34.666667 102 - -62.000000 -34.666667 100 - -61.833333 -34.666667 94 - -61.666667 -34.666667 91 - -61.500000 -34.666667 87 - -61.333333 -34.666667 79 - -61.166667 -34.666667 80 - -61.000000 -34.666667 77 - -60.833333 -34.666667 77 - -60.666667 -34.666667 66 - -60.500000 -34.666667 67 - -60.333333 -34.666667 66 - -60.166667 -34.666667 59 - -60.000000 -34.666667 54 - -59.833333 -34.666667 51 - -59.666667 -34.666667 47 - -59.500000 -34.666667 34 - -59.333333 -34.666667 33 - -59.166667 -34.666667 33 - -59.000000 -34.666667 24 - -58.833333 -34.666667 27 - -58.666667 -34.666667 30 - -58.500000 -34.666667 21 - -58.333333 -34.666667 6 - -58.166667 -34.666667 -1 - -58.000000 -34.666667 -1 - -57.833333 -34.666667 -1 - -57.666667 -34.666667 -1 - -57.500000 -34.666667 -1 - -57.333333 -34.666667 -1 - -57.166667 -34.666667 -1 - -57.000000 -34.666667 -1 - -56.833333 -34.666667 3 - -56.666667 -34.666667 19 - -56.500000 -34.666667 -3 - -56.333333 -34.666667 21 - -56.166667 -34.666667 51 - -56.000000 -34.666667 35 - -55.833333 -34.666667 45 - -55.666667 -34.666667 20 - -55.500000 -34.666667 37 - -55.333333 -34.666667 336 - -55.166667 -34.666667 85 - -55.000000 -34.666667 81 - -54.833333 -34.666667 46 - -54.666667 -34.666667 61 - -54.500000 -34.666667 31 - -54.333333 -34.666667 7 - -54.166667 -34.666667 1 - -54.000000 -34.666667 -20 - -53.833333 -34.666667 -38 - -53.666667 -34.666667 -44 - -53.500000 -34.666667 -47 - -53.333333 -34.666667 -65 - -53.166667 -34.666667 -39 - -53.000000 -34.666667 -38 - -52.833333 -34.666667 -76 - -52.666667 -34.666667 -67 - -52.500000 -34.666667 -37 - -52.333333 -34.666667 -94 - -52.166667 -34.666667 -126 - -52.000000 -34.666667 -438 - -51.833333 -34.666667 -1038 - -51.666667 -34.666667 -1396 - -51.500000 -34.666667 -1747 - -51.333333 -34.666667 -1987 - -51.166667 -34.666667 -2170 - -51.000000 -34.666667 -2372 - -50.833333 -34.666667 -2976 - -50.666667 -34.666667 -3064 - -50.500000 -34.666667 -3137 - -50.333333 -34.666667 -3225 - -50.166667 -34.666667 -3295 - -50.000000 -34.666667 -3386 - -49.833333 -34.666667 -3479 - -49.666667 -34.666667 -3462 - -49.500000 -34.666667 -3625 - -49.333333 -34.666667 -3747 - -49.166667 -34.666667 -3880 - -49.000000 -34.666667 -3953 - -48.833333 -34.666667 -4082 - -48.666667 -34.666667 -4225 - -48.500000 -34.666667 -4312 - -48.333333 -34.666667 -4357 - -48.166667 -34.666667 -4508 - -48.000000 -34.666667 -4598 - -47.833333 -34.666667 -4612 - -47.666667 -34.666667 -4631 - -47.500000 -34.666667 -4674 - -47.333333 -34.666667 -4686 - -47.166667 -34.666667 -4730 - -47.000000 -34.666667 -4719 - -46.833333 -34.666667 -4716 - -46.666667 -34.666667 -4704 - -46.500000 -34.666667 -4664 - -46.333333 -34.666667 -4674 - -46.166667 -34.666667 -4727 - -46.000000 -34.666667 -4766 - -45.833333 -34.666667 -4786 - -45.666667 -34.666667 -4792 - -45.500000 -34.666667 -4822 - -45.333333 -34.666667 -4833 - -45.166667 -34.666667 -4806 - -45.000000 -34.666667 -4792 - -44.833333 -34.666667 -4818 - -44.666667 -34.666667 -4819 - -44.500000 -34.666667 -4809 - -44.333333 -34.666667 -4798 - -44.166667 -34.666667 -4791 - -44.000000 -34.666667 -4794 - -43.833333 -34.666667 -4804 - -43.666667 -34.666667 -4796 - -43.500000 -34.666667 -4775 - -43.333333 -34.666667 -4785 - -43.166667 -34.666667 -4749 - -43.000000 -34.666667 -4757 - -42.833333 -34.666667 -4735 - -42.666667 -34.666667 -4723 - -42.500000 -34.666667 -4724 - -42.333333 -34.666667 -4726 - -42.166667 -34.666667 -4700 - -42.000000 -34.666667 -4715 - -41.833333 -34.666667 -4701 - -41.666667 -34.666667 -4701 - -41.500000 -34.666667 -4695 - -41.333333 -34.666667 -4689 - -41.166667 -34.666667 -4713 - -41.000000 -34.666667 -4703 - -40.833333 -34.666667 -4750 - -40.666667 -34.666667 -4662 - -40.500000 -34.666667 -4747 - -40.333333 -34.666667 -4792 - -40.166667 -34.666667 -4902 - -40.000000 -34.666667 -4880 - -65.000000 -34.833333 267 - -64.833333 -34.833333 233 - -64.666667 -34.833333 230 - -64.500000 -34.833333 201 - -64.333333 -34.833333 175 - -64.166667 -34.833333 159 - -64.000000 -34.833333 148 - -63.833333 -34.833333 141 - -63.666667 -34.833333 132 - -63.500000 -34.833333 127 - -63.333333 -34.833333 122 - -63.166667 -34.833333 121 - -63.000000 -34.833333 119 - -62.833333 -34.833333 117 - -62.666667 -34.833333 113 - -62.500000 -34.833333 109 - -62.333333 -34.833333 105 - -62.166667 -34.833333 114 - -62.000000 -34.833333 100 - -61.833333 -34.833333 107 - -61.666667 -34.833333 93 - -61.500000 -34.833333 84 - -61.333333 -34.833333 81 - -61.166667 -34.833333 77 - -61.000000 -34.833333 77 - -60.833333 -34.833333 74 - -60.666667 -34.833333 63 - -60.500000 -34.833333 55 - -60.333333 -34.833333 60 - -60.166667 -34.833333 54 - -60.000000 -34.833333 56 - -59.833333 -34.833333 49 - -59.666667 -34.833333 48 - -59.500000 -34.833333 41 - -59.333333 -34.833333 37 - -59.166667 -34.833333 40 - -59.000000 -34.833333 34 - -58.833333 -34.833333 25 - -58.666667 -34.833333 20 - -58.500000 -34.833333 15 - -58.333333 -34.833333 20 - -58.166667 -34.833333 22 - -58.000000 -34.833333 2 - -57.833333 -34.833333 -1 - -57.666667 -34.833333 -1 - -57.500000 -34.833333 -1 - -57.333333 -34.833333 -1 - -57.166667 -34.833333 -1 - -57.000000 -34.833333 -1 - -56.833333 -34.833333 -1 - -56.666667 -34.833333 -1 - -56.500000 -34.833333 -1 - -56.333333 -34.833333 38 - -56.166667 -34.833333 33 - -56.000000 -34.833333 15 - -55.833333 -34.833333 -2 - -55.666667 -34.833333 -3 - -55.500000 -34.833333 -1 - -55.333333 -34.833333 -1 - -55.166667 -34.833333 13 - -55.000000 -34.833333 28 - -54.833333 -34.833333 32 - -54.666667 -34.833333 4 - -54.500000 -34.833333 -18 - -54.333333 -34.833333 -23 - -54.166667 -34.833333 -22 - -54.000000 -34.833333 -31 - -53.833333 -34.833333 -42 - -53.666667 -34.833333 -61 - -53.500000 -34.833333 -35 - -53.333333 -34.833333 -49 - -53.166667 -34.833333 -49 - -53.000000 -34.833333 -49 - -52.833333 -34.833333 -63 - -52.666667 -34.833333 -82 - -52.500000 -34.833333 -112 - -52.333333 -34.833333 -108 - -52.166667 -34.833333 -204 - -52.000000 -34.833333 -881 - -51.833333 -34.833333 -1303 - -51.666667 -34.833333 -1717 - -51.500000 -34.833333 -1973 - -51.333333 -34.833333 -2251 - -51.166667 -34.833333 -2508 - -51.000000 -34.833333 -2756 - -50.833333 -34.833333 -2699 - -50.666667 -34.833333 -3199 - -50.500000 -34.833333 -3237 - -50.333333 -34.833333 -3515 - -50.166667 -34.833333 -3427 - -50.000000 -34.833333 -3581 - -49.833333 -34.833333 -3746 - -49.666667 -34.833333 -3773 - -49.500000 -34.833333 -3871 - -49.333333 -34.833333 -3957 - -49.166667 -34.833333 -4243 - -49.000000 -34.833333 -4190 - -48.833333 -34.833333 -4311 - -48.666667 -34.833333 -4430 - -48.500000 -34.833333 -4530 - -48.333333 -34.833333 -4537 - -48.166667 -34.833333 -4586 - -48.000000 -34.833333 -4641 - -47.833333 -34.833333 -4675 - -47.666667 -34.833333 -4696 - -47.500000 -34.833333 -4720 - -47.333333 -34.833333 -4750 - -47.166667 -34.833333 -4765 - -47.000000 -34.833333 -4782 - -46.833333 -34.833333 -4772 - -46.666667 -34.833333 -4762 - -46.500000 -34.833333 -4742 - -46.333333 -34.833333 -4714 - -46.166667 -34.833333 -4717 - -46.000000 -34.833333 -4743 - -45.833333 -34.833333 -4795 - -45.666667 -34.833333 -4816 - -45.500000 -34.833333 -4828 - -45.333333 -34.833333 -4836 - -45.166667 -34.833333 -4825 - -45.000000 -34.833333 -4825 - -44.833333 -34.833333 -4836 - -44.666667 -34.833333 -4847 - -44.500000 -34.833333 -4836 - -44.333333 -34.833333 -4843 - -44.166667 -34.833333 -4848 - -44.000000 -34.833333 -4852 - -43.833333 -34.833333 -4842 - -43.666667 -34.833333 -4830 - -43.500000 -34.833333 -4832 - -43.333333 -34.833333 -4804 - -43.166667 -34.833333 -4794 - -43.000000 -34.833333 -4802 - -42.833333 -34.833333 -4779 - -42.666667 -34.833333 -4778 - -42.500000 -34.833333 -4760 - -42.333333 -34.833333 -4760 - -42.166667 -34.833333 -4747 - -42.000000 -34.833333 -4733 - -41.833333 -34.833333 -4740 - -41.666667 -34.833333 -4730 - -41.500000 -34.833333 -4724 - -41.333333 -34.833333 -4708 - -41.166667 -34.833333 -4723 - -41.000000 -34.833333 -4733 - -40.833333 -34.833333 -4732 - -40.666667 -34.833333 -4716 - -40.500000 -34.833333 -4699 - -40.333333 -34.833333 -4763 - -40.166667 -34.833333 -4804 - -40.000000 -34.833333 -4945 - -65.000000 -35.000000 269 - -64.833333 -35.000000 261 - -64.666667 -35.000000 233 - -64.500000 -35.000000 196 - -64.333333 -35.000000 179 - -64.166667 -35.000000 157 - -64.000000 -35.000000 145 - -63.833333 -35.000000 137 - -63.666667 -35.000000 126 - -63.500000 -35.000000 125 - -63.333333 -35.000000 121 - -63.166667 -35.000000 116 - -63.000000 -35.000000 114 - -62.833333 -35.000000 114 - -62.666667 -35.000000 110 - -62.500000 -35.000000 105 - -62.333333 -35.000000 105 - -62.166667 -35.000000 128 - -62.000000 -35.000000 109 - -61.833333 -35.000000 99 - -61.666667 -35.000000 89 - -61.500000 -35.000000 82 - -61.333333 -35.000000 77 - -61.166667 -35.000000 73 - -61.000000 -35.000000 70 - -60.833333 -35.000000 63 - -60.666667 -35.000000 64 - -60.500000 -35.000000 55 - -60.333333 -35.000000 55 - -60.166667 -35.000000 48 - -60.000000 -35.000000 46 - -59.833333 -35.000000 50 - -59.666667 -35.000000 44 - -59.500000 -35.000000 44 - -59.333333 -35.000000 35 - -59.166667 -35.000000 34 - -59.000000 -35.000000 37 - -58.833333 -35.000000 31 - -58.666667 -35.000000 23 - -58.500000 -35.000000 25 - -58.333333 -35.000000 22 - -58.166667 -35.000000 24 - -58.000000 -35.000000 25 - -57.833333 -35.000000 6 - -57.666667 -35.000000 5 - -57.500000 -35.000000 -1 - -57.333333 -35.000000 -1 - -57.166667 -35.000000 -1 - -57.000000 -35.000000 -1 - -56.833333 -35.000000 -1 - -56.666667 -35.000000 -2 - -56.500000 -35.000000 -3 - -56.333333 -35.000000 -3 - -56.166667 -35.000000 -4 - -56.000000 -35.000000 -7 - -55.833333 -35.000000 -10 - -55.666667 -35.000000 -12 - -55.500000 -35.000000 -15 - -55.333333 -35.000000 -19 - -55.166667 -35.000000 -21 - -55.000000 -35.000000 -18 - -54.833333 -35.000000 -21 - -54.666667 -35.000000 -21 - -54.500000 -35.000000 -25 - -54.333333 -35.000000 -25 - -54.166667 -35.000000 -27 - -54.000000 -35.000000 -32 - -53.833333 -35.000000 -41 - -53.666667 -35.000000 -39 - -53.500000 -35.000000 -39 - -53.333333 -35.000000 -41 - -53.166667 -35.000000 -48 - -53.000000 -35.000000 -48 - -52.833333 -35.000000 -68 - -52.666667 -35.000000 -103 - -52.500000 -35.000000 -153 - -52.333333 -35.000000 -170 - -52.166667 -35.000000 -663 - -52.000000 -35.000000 -1148 - -51.833333 -35.000000 -1485 - -51.666667 -35.000000 -1815 - -51.500000 -35.000000 -2103 - -51.333333 -35.000000 -2311 - -51.166667 -35.000000 -2503 - -51.000000 -35.000000 -2714 - -50.833333 -35.000000 -2868 - -50.666667 -35.000000 -2942 - -50.500000 -35.000000 -3442 - -50.333333 -35.000000 -3519 - -50.166667 -35.000000 -3590 - -50.000000 -35.000000 -3661 - -49.833333 -35.000000 -3793 - -49.666667 -35.000000 -3858 - -49.500000 -35.000000 -4042 - -49.333333 -35.000000 -4192 - -49.166667 -35.000000 -4296 - -49.000000 -35.000000 -4316 - -48.833333 -35.000000 -4414 - -48.666667 -35.000000 -4530 - -48.500000 -35.000000 -4574 - -48.333333 -35.000000 -4604 - -48.166667 -35.000000 -4637 - -48.000000 -35.000000 -4697 - -47.833333 -35.000000 -4714 - -47.666667 -35.000000 -4725 - -47.500000 -35.000000 -4765 - -47.333333 -35.000000 -4787 - -47.166667 -35.000000 -4798 - -47.000000 -35.000000 -4815 - -46.833333 -35.000000 -4819 - -46.666667 -35.000000 -4804 - -46.500000 -35.000000 -4800 - -46.333333 -35.000000 -4786 - -46.166667 -35.000000 -4752 - -46.000000 -35.000000 -4755 - -45.833333 -35.000000 -4783 - -45.666667 -35.000000 -4822 - -45.500000 -35.000000 -4839 - -45.333333 -35.000000 -4842 - -45.166667 -35.000000 -4848 - -45.000000 -35.000000 -4854 - -44.833333 -35.000000 -4851 - -44.666667 -35.000000 -4854 - -44.500000 -35.000000 -4850 - -44.333333 -35.000000 -4859 - -44.166667 -35.000000 -4867 - -44.000000 -35.000000 -4867 - -43.833333 -35.000000 -4865 - -43.666667 -35.000000 -4861 - -43.500000 -35.000000 -4845 - -43.333333 -35.000000 -4839 - -43.166667 -35.000000 -4831 - -43.000000 -35.000000 -4819 - -42.833333 -35.000000 -4814 - -42.666667 -35.000000 -4804 - -42.500000 -35.000000 -4795 - -42.333333 -35.000000 -4784 - -42.166667 -35.000000 -4775 - -42.000000 -35.000000 -4777 - -41.833333 -35.000000 -4770 - -41.666667 -35.000000 -4772 - -41.500000 -35.000000 -4767 - -41.333333 -35.000000 -4760 - -41.166667 -35.000000 -4761 - -41.000000 -35.000000 -4771 - -40.833333 -35.000000 -4755 - -40.666667 -35.000000 -4748 - -40.500000 -35.000000 -4574 - -40.333333 -35.000000 -4731 - -40.166667 -35.000000 -4809 - -40.000000 -35.000000 -4859 diff --git a/dep/tesseroids/cookbook/dem_brasil/dem_brasil.bat b/dep/tesseroids/cookbook/dem_brasil/dem_brasil.bat deleted file mode 100755 index eaa4a6a..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/dem_brasil.bat +++ /dev/null @@ -1,22 +0,0 @@ - - -:: First, insert the density information into -:: the DEM file using the Python script. -python dem_density.py dem.xyz > dem-dens.txt - -:: Next, use the modified DEM with tessmodgen -:: to create a tesseroid model -tessmodgen -s0.166667/0.166667 -z0 -v < dem-dens.txt ^ -> dem-tess.txt - -:: Calculate the GGT on a regular grid at 250km -:: use the -l option to log the processes to files -:: (usefull to diagnose when things go wrong) -:: The output is dumped to dem-ggt.txt -tessgrd -r-60/-45/-30/-15 -b50/50 -z250e03 | ^ -tessgxx dem-tess.txt -lgxx.log | ^ -tessgxy dem-tess.txt -lgxy.log | ^ -tessgxz dem-tess.txt -lgxz.log | ^ -tessgyy dem-tess.txt -lgyy.log | ^ -tessgyz dem-tess.txt -lgyz.log | ^ -tessgzz dem-tess.txt -lgzz.log -v > dem-ggt.txt diff --git a/dep/tesseroids/cookbook/dem_brasil/dem_brasil.sh b/dep/tesseroids/cookbook/dem_brasil/dem_brasil.sh deleted file mode 100755 index e3524bf..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/dem_brasil.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -# First, insert the density information into -# the DEM file using the Python script. -python dem_density.py dem.xyz > dem-dens.txt - -# Next, use the modified DEM with tessmodgen -# to create a tesseroid model -tessmodgen -s0.166667/0.166667 -z0 -v < dem-dens.txt \ -> dem-tess.txt - -# Calculate the GGT on a regular grid at 250km -# use the -l option to log the processes to files -# (usefull to diagnose when things go wrong) -# The output is dumped to dem-ggt.txt -tessgrd -r-60/-45/-30/-15 -b50/50 -z250e03 | \ -tessgxx dem-tess.txt -lgxx.log | \ -tessgxy dem-tess.txt -lgxy.log | \ -tessgxz dem-tess.txt -lgxz.log | \ -tessgyy dem-tess.txt -lgyy.log | \ -tessgyz dem-tess.txt -lgyz.log | \ -tessgzz dem-tess.txt -lgzz.log -v > dem-ggt.txt diff --git a/dep/tesseroids/cookbook/dem_brasil/dem_density.py b/dep/tesseroids/cookbook/dem_brasil/dem_density.py deleted file mode 100755 index 784e51e..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/dem_density.py +++ /dev/null @@ -1,13 +0,0 @@ -""" -Assign density values for the DEM points. -""" -import sys -import numpy - -lons, lats, heights = numpy.loadtxt(sys.argv[1], unpack=True) - -for i in xrange(len(heights)): - if heights[i] >=0: - print "%lf %lf %lf %lf" % (lons[i], lats[i], heights[i], 2670.0) - else: - print "%lf %lf %lf %lf" % (lons[i], lats[i], heights[i], 1670.0) diff --git a/dep/tesseroids/cookbook/dem_brasil/plot.py b/dep/tesseroids/cookbook/dem_brasil/plot.py deleted file mode 100755 index 6f5b988..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/plot.py +++ /dev/null @@ -1,117 +0,0 @@ -# Make some nice plots of the DEM, the densities used and the calculated GGT -import numpy -from matplotlib import pyplot as plt -from mpl_toolkits.basemap import Basemap - -# Plot the DEM and density maps -################################################################################ -lons, lats, heights, dens = numpy.loadtxt('dem-dens.txt', unpack=True) -nlons = 151 # Number of points in the longitude direction -nlats = len(lats)/nlons - -# Convert the lists to 2D grids -glons = numpy.reshape(lons, (nlats, nlons)) -glats = numpy.reshape(lats, (nlats, nlons)) -gheights = numpy.reshape(heights, (nlats, nlons)) -gdens = numpy.reshape(dens, (nlats, nlons)) - -# Set up a Mercator projection -bm = Basemap(projection='merc', - llcrnrlon=lons[0], llcrnrlat=lats[-1], - urcrnrlon=lons[-1], urcrnrlat=lats[0], - lon_0=lons[nlons//2], lat_0=lats[len(lats)//2], - resolution='l', - area_thresh=10000) -glons, glats = bm(glons, glats) - -# Plot the DEM first -print "Plotting DEM" -plt.figure() -bm.drawmeridians(numpy.arange(lons[0]+5., lons[-1], 5.), - labels=[0,0,0,1], fontsize=12, linewidth=0.5) -bm.drawparallels(numpy.arange(lats[-1]+5., lats[0], 5.), - labels=[1,0,0,0], fontsize=12, linewidth=0.5) -bm.drawcoastlines(linewidth=1) -bm.drawmapboundary() -bm.drawcountries(linewidth=0.8) -# Do the pseudocolor plot -cf = bm.pcolor(glons, glats, gheights, cmap=plt.cm.gist_earth, \ - vmin=-1000, vmax=1000) -cb = plt.colorbar() -cb.set_label("Height [m]") -# Plot the calculation area used later -w = -60 -e = -45 -s = -30 -n = -15 -areax, areay = bm([w, w, e, e, w], \ - [n, s, s, n, n]) -bm.plot(areax, areay, '-r', label="Computation grid", linewidth=1.8) -plt.legend(shadow=True, loc='lower right', prop={'size':10}) -# Save a png figure -plt.savefig('dem.png') - -# Now plot the densities -print "Plotting density model" -plt.figure() -bm.drawmeridians(numpy.arange(lons[0]+5., lons[-1], 5.), - labels=[0,0,0,1], fontsize=12, linewidth=0.5) -bm.drawparallels(numpy.arange(lats[-1]+5., lats[0], 5.), - labels=[1,0,0,0], fontsize=12, linewidth=0.5) -bm.drawcoastlines(linewidth=1) -bm.drawmapboundary() -bm.drawcountries(linewidth=0.8) -# Do the pseudocolor plot -cf = bm.pcolor(glons, glats, gdens, cmap=plt.cm.jet) -cb = plt.colorbar() -cb.set_label(r"Density [$g.cm^{-3}$]") -# Save a png figure -plt.savefig('dem-dens.png') - -# Plot the GGT -################################################################################ -print "Plotting GGT" -data = numpy.loadtxt('dem-ggt.txt') -lons, lats, heights, gxx, gxy, gxz, gyy, gyz, gzz = data.T -nlons = 50 # Number of points in the longitude direction -nlats = len(lats)/nlons - -# Convert the lists to 2D grids -glons = numpy.reshape(lons, (nlats, nlons)) -glats = numpy.reshape(lats, (nlats, nlons)) - -# Set up a Mercator projection -bm = Basemap(projection='merc', \ - llcrnrlon=lons[0], llcrnrlat=lats[0], \ - urcrnrlon=lons[-1], urcrnrlat=lats[-1], \ - lon_0=lons[nlons//2], lat_0=lats[len(lats)//2], - resolution='l', area_thresh=10000) -glons, glats = bm(glons, glats) - -# Plot each component -fig = plt.figure(figsize=(14,9)) -plt.subplots_adjust(wspace=0.35) -titles = [r"$g_{xx}$", r"$g_{xy}$", r"$g_{xz}$", r"$g_{yy}$", r"$g_{yz}$", - r"$g_{zz}$"] -fields = [gxx, gxy, gxz, gyy, gyz, gzz] -for i, args in enumerate(zip(fields, titles)): - field, title = args - ax = plt.subplot(2, 3, i + 1, aspect='equal') - plt.title(title, fontsize=18) - # Make it a 2D grid - gfield = numpy.reshape(field, (nlats, nlons)) - # Plot the coastlines and etc - mer = bm.drawmeridians(numpy.arange(lons[0]+3, lons[-1]-3, 3), - labels=[0,0,0,1], fontsize=9, linewidth=0.5) - bm.drawparallels(numpy.arange(lats[0]+3, lats[-1]-3, 3), - labels=[1,0,0,0], fontsize=9, linewidth=0.5) - bm.drawcoastlines(linewidth=1) - bm.drawmapboundary() - bm.drawcountries(linewidth=1) - bm.drawstates(linewidth=0.2) - # Make a pseudocolor plot - cf = bm.pcolor(glons, glats, gfield, cmap=plt.cm.jet) - cb = plt.colorbar(orientation='vertical', format='%.2f', shrink=0.8) - cb.set_label(r"$E\"otv\"os$") -# Save a png figure -plt.savefig('dem-ggt.png') diff --git a/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.png b/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.png deleted file mode 100755 index 9a7ebc7..0000000 Binary files a/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.txt b/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.txt deleted file mode 100755 index 04897af..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/sample-dem-dens.txt +++ /dev/null @@ -1,22801 +0,0 @@ --65.000000 -10.000000 157.000000 2670.000000 --64.833333 -10.000000 168.000000 2670.000000 --64.666667 -10.000000 177.000000 2670.000000 --64.500000 -10.000000 197.000000 2670.000000 --64.333333 -10.000000 144.000000 2670.000000 --64.166667 -10.000000 178.000000 2670.000000 --64.000000 -10.000000 166.000000 2670.000000 --63.833333 -10.000000 164.000000 2670.000000 --63.666667 -10.000000 189.000000 2670.000000 --63.500000 -10.000000 210.000000 2670.000000 --63.333333 -10.000000 187.000000 2670.000000 --63.166667 -10.000000 141.000000 2670.000000 --63.000000 -10.000000 156.000000 2670.000000 --62.833333 -10.000000 158.000000 2670.000000 --62.666667 -10.000000 225.000000 2670.000000 --62.500000 -10.000000 176.000000 2670.000000 --62.333333 -10.000000 196.000000 2670.000000 --62.166667 -10.000000 183.000000 2670.000000 --62.000000 -10.000000 149.000000 2670.000000 --61.833333 -10.000000 191.000000 2670.000000 --61.666667 -10.000000 158.000000 2670.000000 --61.500000 -10.000000 187.000000 2670.000000 --61.333333 -10.000000 189.000000 2670.000000 --61.166667 -10.000000 191.000000 2670.000000 --61.000000 -10.000000 169.000000 2670.000000 --60.833333 -10.000000 143.000000 2670.000000 --60.666667 -10.000000 157.000000 2670.000000 --60.500000 -10.000000 146.000000 2670.000000 --60.333333 -10.000000 188.000000 2670.000000 --60.166667 -10.000000 178.000000 2670.000000 --60.000000 -10.000000 198.000000 2670.000000 --59.833333 -10.000000 233.000000 2670.000000 --59.666667 -10.000000 211.000000 2670.000000 --59.500000 -10.000000 189.000000 2670.000000 --59.333333 -10.000000 145.000000 2670.000000 --59.166667 -10.000000 138.000000 2670.000000 --59.000000 -10.000000 142.000000 2670.000000 --58.833333 -10.000000 172.000000 2670.000000 --58.666667 -10.000000 215.000000 2670.000000 --58.500000 -10.000000 287.000000 2670.000000 --58.333333 -10.000000 254.000000 2670.000000 --58.166667 -10.000000 234.000000 2670.000000 --58.000000 -10.000000 277.000000 2670.000000 --57.833333 -10.000000 273.000000 2670.000000 --57.666667 -10.000000 245.000000 2670.000000 --57.500000 -10.000000 270.000000 2670.000000 --57.333333 -10.000000 269.000000 2670.000000 --57.166667 -10.000000 253.000000 2670.000000 --57.000000 -10.000000 223.000000 2670.000000 --56.833333 -10.000000 248.000000 2670.000000 --56.666667 -10.000000 253.000000 2670.000000 --56.500000 -10.000000 271.000000 2670.000000 --56.333333 -10.000000 277.000000 2670.000000 --56.166667 -10.000000 301.000000 2670.000000 --56.000000 -10.000000 282.000000 2670.000000 --55.833333 -10.000000 285.000000 2670.000000 --55.666667 -10.000000 275.000000 2670.000000 --55.500000 -10.000000 263.000000 2670.000000 --55.333333 -10.000000 277.000000 2670.000000 --55.166667 -10.000000 269.000000 2670.000000 --55.000000 -10.000000 261.000000 2670.000000 --54.833333 -10.000000 311.000000 2670.000000 --54.666667 -10.000000 302.000000 2670.000000 --54.500000 -10.000000 312.000000 2670.000000 --54.333333 -10.000000 407.000000 2670.000000 --54.166667 -10.000000 353.000000 2670.000000 --54.000000 -10.000000 337.000000 2670.000000 --53.833333 -10.000000 364.000000 2670.000000 --53.666667 -10.000000 305.000000 2670.000000 --53.500000 -10.000000 341.000000 2670.000000 --53.333333 -10.000000 302.000000 2670.000000 --53.166667 -10.000000 327.000000 2670.000000 --53.000000 -10.000000 326.000000 2670.000000 --52.833333 -10.000000 301.000000 2670.000000 --52.666667 -10.000000 325.000000 2670.000000 --52.500000 -10.000000 288.000000 2670.000000 --52.333333 -10.000000 271.000000 2670.000000 --52.166667 -10.000000 285.000000 2670.000000 --52.000000 -10.000000 295.000000 2670.000000 --51.833333 -10.000000 308.000000 2670.000000 --51.666667 -10.000000 380.000000 2670.000000 --51.500000 -10.000000 375.000000 2670.000000 --51.333333 -10.000000 352.000000 2670.000000 --51.166667 -10.000000 261.000000 2670.000000 --51.000000 -10.000000 223.000000 2670.000000 --50.833333 -10.000000 198.000000 2670.000000 --50.666667 -10.000000 197.000000 2670.000000 --50.500000 -10.000000 185.000000 2670.000000 --50.333333 -10.000000 175.000000 2670.000000 --50.166667 -10.000000 177.000000 2670.000000 --50.000000 -10.000000 171.000000 2670.000000 --49.833333 -10.000000 186.000000 2670.000000 --49.666667 -10.000000 179.000000 2670.000000 --49.500000 -10.000000 195.000000 2670.000000 --49.333333 -10.000000 196.000000 2670.000000 --49.166667 -10.000000 261.000000 2670.000000 --49.000000 -10.000000 276.000000 2670.000000 --48.833333 -10.000000 339.000000 2670.000000 --48.666667 -10.000000 295.000000 2670.000000 --48.500000 -10.000000 238.000000 2670.000000 --48.333333 -10.000000 207.000000 2670.000000 --48.166667 -10.000000 569.000000 2670.000000 --48.000000 -10.000000 318.000000 2670.000000 --47.833333 -10.000000 243.000000 2670.000000 --47.666667 -10.000000 312.000000 2670.000000 --47.500000 -10.000000 248.000000 2670.000000 --47.333333 -10.000000 287.000000 2670.000000 --47.166667 -10.000000 280.000000 2670.000000 --47.000000 -10.000000 280.000000 2670.000000 --46.833333 -10.000000 333.000000 2670.000000 --46.666667 -10.000000 471.000000 2670.000000 --46.500000 -10.000000 620.000000 2670.000000 --46.333333 -10.000000 444.000000 2670.000000 --46.166667 -10.000000 462.000000 2670.000000 --46.000000 -10.000000 521.000000 2670.000000 --45.833333 -10.000000 445.000000 2670.000000 --45.666667 -10.000000 454.000000 2670.000000 --45.500000 -10.000000 481.000000 2670.000000 --45.333333 -10.000000 496.000000 2670.000000 --45.166667 -10.000000 487.000000 2670.000000 --45.000000 -10.000000 430.000000 2670.000000 --44.833333 -10.000000 476.000000 2670.000000 --44.666667 -10.000000 364.000000 2670.000000 --44.500000 -10.000000 370.000000 2670.000000 --44.333333 -10.000000 359.000000 2670.000000 --44.166667 -10.000000 374.000000 2670.000000 --44.000000 -10.000000 389.000000 2670.000000 --43.833333 -10.000000 462.000000 2670.000000 --43.666667 -10.000000 547.000000 2670.000000 --43.500000 -10.000000 470.000000 2670.000000 --43.333333 -10.000000 480.000000 2670.000000 --43.166667 -10.000000 438.000000 2670.000000 --43.000000 -10.000000 421.000000 2670.000000 --42.833333 -10.000000 412.000000 2670.000000 --42.666667 -10.000000 408.000000 2670.000000 --42.500000 -10.000000 402.000000 2670.000000 --42.333333 -10.000000 395.000000 2670.000000 --42.166667 -10.000000 403.000000 2670.000000 --42.000000 -10.000000 621.000000 2670.000000 --41.833333 -10.000000 829.000000 2670.000000 --41.666667 -10.000000 611.000000 2670.000000 --41.500000 -10.000000 455.000000 2670.000000 --41.333333 -10.000000 748.000000 2670.000000 --41.166667 -10.000000 822.000000 2670.000000 --41.000000 -10.000000 754.000000 2670.000000 --40.833333 -10.000000 604.000000 2670.000000 --40.666667 -10.000000 527.000000 2670.000000 --40.500000 -10.000000 712.000000 2670.000000 --40.333333 -10.000000 578.000000 2670.000000 --40.166667 -10.000000 486.000000 2670.000000 --40.000000 -10.000000 461.000000 2670.000000 --65.000000 -10.166667 179.000000 2670.000000 --64.833333 -10.166667 177.000000 2670.000000 --64.666667 -10.166667 192.000000 2670.000000 --64.500000 -10.166667 173.000000 2670.000000 --64.333333 -10.166667 162.000000 2670.000000 --64.166667 -10.166667 159.000000 2670.000000 --64.000000 -10.166667 162.000000 2670.000000 --63.833333 -10.166667 167.000000 2670.000000 --63.666667 -10.166667 182.000000 2670.000000 --63.500000 -10.166667 191.000000 2670.000000 --63.333333 -10.166667 167.000000 2670.000000 --63.166667 -10.166667 148.000000 2670.000000 --63.000000 -10.166667 181.000000 2670.000000 --62.833333 -10.166667 134.000000 2670.000000 --62.666667 -10.166667 244.000000 2670.000000 --62.500000 -10.166667 222.000000 2670.000000 --62.333333 -10.166667 201.000000 2670.000000 --62.166667 -10.166667 155.000000 2670.000000 --62.000000 -10.166667 142.000000 2670.000000 --61.833333 -10.166667 170.000000 2670.000000 --61.666667 -10.166667 207.000000 2670.000000 --61.500000 -10.166667 325.000000 2670.000000 --61.333333 -10.166667 254.000000 2670.000000 --61.166667 -10.166667 233.000000 2670.000000 --61.000000 -10.166667 182.000000 2670.000000 --60.833333 -10.166667 153.000000 2670.000000 --60.666667 -10.166667 130.000000 2670.000000 --60.500000 -10.166667 158.000000 2670.000000 --60.333333 -10.166667 172.000000 2670.000000 --60.166667 -10.166667 164.000000 2670.000000 --60.000000 -10.166667 243.000000 2670.000000 --59.833333 -10.166667 204.000000 2670.000000 --59.666667 -10.166667 160.000000 2670.000000 --59.500000 -10.166667 241.000000 2670.000000 --59.333333 -10.166667 244.000000 2670.000000 --59.166667 -10.166667 174.000000 2670.000000 --59.000000 -10.166667 175.000000 2670.000000 --58.833333 -10.166667 179.000000 2670.000000 --58.666667 -10.166667 249.000000 2670.000000 --58.500000 -10.166667 235.000000 2670.000000 --58.333333 -10.166667 205.000000 2670.000000 --58.166667 -10.166667 229.000000 2670.000000 --58.000000 -10.166667 249.000000 2670.000000 --57.833333 -10.166667 299.000000 2670.000000 --57.666667 -10.166667 269.000000 2670.000000 --57.500000 -10.166667 288.000000 2670.000000 --57.333333 -10.166667 308.000000 2670.000000 --57.166667 -10.166667 295.000000 2670.000000 --57.000000 -10.166667 265.000000 2670.000000 --56.833333 -10.166667 287.000000 2670.000000 --56.666667 -10.166667 291.000000 2670.000000 --56.500000 -10.166667 271.000000 2670.000000 --56.333333 -10.166667 289.000000 2670.000000 --56.166667 -10.166667 312.000000 2670.000000 --56.000000 -10.166667 279.000000 2670.000000 --55.833333 -10.166667 285.000000 2670.000000 --55.666667 -10.166667 283.000000 2670.000000 --55.500000 -10.166667 287.000000 2670.000000 --55.333333 -10.166667 251.000000 2670.000000 --55.166667 -10.166667 249.000000 2670.000000 --55.000000 -10.166667 267.000000 2670.000000 --54.833333 -10.166667 269.000000 2670.000000 --54.666667 -10.166667 356.000000 2670.000000 --54.500000 -10.166667 374.000000 2670.000000 --54.333333 -10.166667 466.000000 2670.000000 --54.166667 -10.166667 375.000000 2670.000000 --54.000000 -10.166667 386.000000 2670.000000 --53.833333 -10.166667 366.000000 2670.000000 --53.666667 -10.166667 356.000000 2670.000000 --53.500000 -10.166667 314.000000 2670.000000 --53.333333 -10.166667 337.000000 2670.000000 --53.166667 -10.166667 293.000000 2670.000000 --53.000000 -10.166667 267.000000 2670.000000 --52.833333 -10.166667 325.000000 2670.000000 --52.666667 -10.166667 306.000000 2670.000000 --52.500000 -10.166667 322.000000 2670.000000 --52.333333 -10.166667 307.000000 2670.000000 --52.166667 -10.166667 305.000000 2670.000000 --52.000000 -10.166667 271.000000 2670.000000 --51.833333 -10.166667 300.000000 2670.000000 --51.666667 -10.166667 295.000000 2670.000000 --51.500000 -10.166667 310.000000 2670.000000 --51.333333 -10.166667 364.000000 2670.000000 --51.166667 -10.166667 245.000000 2670.000000 --51.000000 -10.166667 203.000000 2670.000000 --50.833333 -10.166667 246.000000 2670.000000 --50.666667 -10.166667 220.000000 2670.000000 --50.500000 -10.166667 178.000000 2670.000000 --50.333333 -10.166667 174.000000 2670.000000 --50.166667 -10.166667 173.000000 2670.000000 --50.000000 -10.166667 182.000000 2670.000000 --49.833333 -10.166667 183.000000 2670.000000 --49.666667 -10.166667 192.000000 2670.000000 --49.500000 -10.166667 205.000000 2670.000000 --49.333333 -10.166667 205.000000 2670.000000 --49.166667 -10.166667 267.000000 2670.000000 --49.000000 -10.166667 260.000000 2670.000000 --48.833333 -10.166667 471.000000 2670.000000 --48.666667 -10.166667 386.000000 2670.000000 --48.500000 -10.166667 271.000000 2670.000000 --48.333333 -10.166667 259.000000 2670.000000 --48.166667 -10.166667 668.000000 2670.000000 --48.000000 -10.166667 393.000000 2670.000000 --47.833333 -10.166667 300.000000 2670.000000 --47.666667 -10.166667 356.000000 2670.000000 --47.500000 -10.166667 309.000000 2670.000000 --47.333333 -10.166667 257.000000 2670.000000 --47.166667 -10.166667 361.000000 2670.000000 --47.000000 -10.166667 322.000000 2670.000000 --46.833333 -10.166667 335.000000 2670.000000 --46.666667 -10.166667 379.000000 2670.000000 --46.500000 -10.166667 494.000000 2670.000000 --46.333333 -10.166667 610.000000 2670.000000 --46.166667 -10.166667 694.000000 2670.000000 --46.000000 -10.166667 755.000000 2670.000000 --45.833333 -10.166667 441.000000 2670.000000 --45.666667 -10.166667 805.000000 2670.000000 --45.500000 -10.166667 489.000000 2670.000000 --45.333333 -10.166667 601.000000 2670.000000 --45.166667 -10.166667 505.000000 2670.000000 --45.000000 -10.166667 465.000000 2670.000000 --44.833333 -10.166667 397.000000 2670.000000 --44.666667 -10.166667 370.000000 2670.000000 --44.500000 -10.166667 379.000000 2670.000000 --44.333333 -10.166667 634.000000 2670.000000 --44.166667 -10.166667 407.000000 2670.000000 --44.000000 -10.166667 496.000000 2670.000000 --43.833333 -10.166667 494.000000 2670.000000 --43.666667 -10.166667 533.000000 2670.000000 --43.500000 -10.166667 486.000000 2670.000000 --43.333333 -10.166667 528.000000 2670.000000 --43.166667 -10.166667 468.000000 2670.000000 --43.000000 -10.166667 462.000000 2670.000000 --42.833333 -10.166667 433.000000 2670.000000 --42.666667 -10.166667 405.000000 2670.000000 --42.500000 -10.166667 394.000000 2670.000000 --42.333333 -10.166667 446.000000 2670.000000 --42.166667 -10.166667 396.000000 2670.000000 --42.000000 -10.166667 401.000000 2670.000000 --41.833333 -10.166667 448.000000 2670.000000 --41.666667 -10.166667 432.000000 2670.000000 --41.500000 -10.166667 683.000000 2670.000000 --41.333333 -10.166667 873.000000 2670.000000 --41.166667 -10.166667 1153.000000 2670.000000 --41.000000 -10.166667 696.000000 2670.000000 --40.833333 -10.166667 528.000000 2670.000000 --40.666667 -10.166667 554.000000 2670.000000 --40.500000 -10.166667 767.000000 2670.000000 --40.333333 -10.166667 804.000000 2670.000000 --40.166667 -10.166667 645.000000 2670.000000 --40.000000 -10.166667 485.000000 2670.000000 --65.000000 -10.333333 161.000000 2670.000000 --64.833333 -10.333333 173.000000 2670.000000 --64.666667 -10.333333 203.000000 2670.000000 --64.500000 -10.333333 154.000000 2670.000000 --64.333333 -10.333333 218.000000 2670.000000 --64.166667 -10.333333 169.000000 2670.000000 --64.000000 -10.333333 215.000000 2670.000000 --63.833333 -10.333333 188.000000 2670.000000 --63.666667 -10.333333 160.000000 2670.000000 --63.500000 -10.333333 253.000000 2670.000000 --63.333333 -10.333333 170.000000 2670.000000 --63.166667 -10.333333 150.000000 2670.000000 --63.000000 -10.333333 165.000000 2670.000000 --62.833333 -10.333333 177.000000 2670.000000 --62.666667 -10.333333 228.000000 2670.000000 --62.500000 -10.333333 169.000000 2670.000000 --62.333333 -10.333333 142.000000 2670.000000 --62.166667 -10.333333 155.000000 2670.000000 --62.000000 -10.333333 181.000000 2670.000000 --61.833333 -10.333333 136.000000 2670.000000 --61.666667 -10.333333 260.000000 2670.000000 --61.500000 -10.333333 225.000000 2670.000000 --61.333333 -10.333333 301.000000 2670.000000 --61.166667 -10.333333 206.000000 2670.000000 --61.000000 -10.333333 146.000000 2670.000000 --60.833333 -10.333333 173.000000 2670.000000 --60.666667 -10.333333 162.000000 2670.000000 --60.500000 -10.333333 166.000000 2670.000000 --60.333333 -10.333333 175.000000 2670.000000 --60.166667 -10.333333 198.000000 2670.000000 --60.000000 -10.333333 314.000000 2670.000000 --59.833333 -10.333333 228.000000 2670.000000 --59.666667 -10.333333 220.000000 2670.000000 --59.500000 -10.333333 264.000000 2670.000000 --59.333333 -10.333333 320.000000 2670.000000 --59.166667 -10.333333 430.000000 2670.000000 --59.000000 -10.333333 383.000000 2670.000000 --58.833333 -10.333333 190.000000 2670.000000 --58.666667 -10.333333 226.000000 2670.000000 --58.500000 -10.333333 238.000000 2670.000000 --58.333333 -10.333333 217.000000 2670.000000 --58.166667 -10.333333 275.000000 2670.000000 --58.000000 -10.333333 315.000000 2670.000000 --57.833333 -10.333333 360.000000 2670.000000 --57.666667 -10.333333 377.000000 2670.000000 --57.500000 -10.333333 437.000000 2670.000000 --57.333333 -10.333333 341.000000 2670.000000 --57.166667 -10.333333 451.000000 2670.000000 --57.000000 -10.333333 284.000000 2670.000000 --56.833333 -10.333333 301.000000 2670.000000 --56.666667 -10.333333 309.000000 2670.000000 --56.500000 -10.333333 300.000000 2670.000000 --56.333333 -10.333333 347.000000 2670.000000 --56.166667 -10.333333 297.000000 2670.000000 --56.000000 -10.333333 290.000000 2670.000000 --55.833333 -10.333333 280.000000 2670.000000 --55.666667 -10.333333 253.000000 2670.000000 --55.500000 -10.333333 272.000000 2670.000000 --55.333333 -10.333333 297.000000 2670.000000 --55.166667 -10.333333 267.000000 2670.000000 --55.000000 -10.333333 282.000000 2670.000000 --54.833333 -10.333333 263.000000 2670.000000 --54.666667 -10.333333 288.000000 2670.000000 --54.500000 -10.333333 280.000000 2670.000000 --54.333333 -10.333333 330.000000 2670.000000 --54.166667 -10.333333 457.000000 2670.000000 --54.000000 -10.333333 469.000000 2670.000000 --53.833333 -10.333333 342.000000 2670.000000 --53.666667 -10.333333 344.000000 2670.000000 --53.500000 -10.333333 322.000000 2670.000000 --53.333333 -10.333333 341.000000 2670.000000 --53.166667 -10.333333 312.000000 2670.000000 --53.000000 -10.333333 268.000000 2670.000000 --52.833333 -10.333333 292.000000 2670.000000 --52.666667 -10.333333 318.000000 2670.000000 --52.500000 -10.333333 306.000000 2670.000000 --52.333333 -10.333333 283.000000 2670.000000 --52.166667 -10.333333 259.000000 2670.000000 --52.000000 -10.333333 264.000000 2670.000000 --51.833333 -10.333333 269.000000 2670.000000 --51.666667 -10.333333 319.000000 2670.000000 --51.500000 -10.333333 297.000000 2670.000000 --51.333333 -10.333333 300.000000 2670.000000 --51.166667 -10.333333 235.000000 2670.000000 --51.000000 -10.333333 220.000000 2670.000000 --50.833333 -10.333333 233.000000 2670.000000 --50.666667 -10.333333 198.000000 2670.000000 --50.500000 -10.333333 180.000000 2670.000000 --50.333333 -10.333333 176.000000 2670.000000 --50.166667 -10.333333 174.000000 2670.000000 --50.000000 -10.333333 175.000000 2670.000000 --49.833333 -10.333333 179.000000 2670.000000 --49.666667 -10.333333 186.000000 2670.000000 --49.500000 -10.333333 201.000000 2670.000000 --49.333333 -10.333333 202.000000 2670.000000 --49.166667 -10.333333 293.000000 2670.000000 --49.000000 -10.333333 345.000000 2670.000000 --48.833333 -10.333333 357.000000 2670.000000 --48.666667 -10.333333 245.000000 2670.000000 --48.500000 -10.333333 239.000000 2670.000000 --48.333333 -10.333333 245.000000 2670.000000 --48.166667 -10.333333 563.000000 2670.000000 --48.000000 -10.333333 373.000000 2670.000000 --47.833333 -10.333333 353.000000 2670.000000 --47.666667 -10.333333 341.000000 2670.000000 --47.500000 -10.333333 329.000000 2670.000000 --47.333333 -10.333333 330.000000 2670.000000 --47.166667 -10.333333 387.000000 2670.000000 --47.000000 -10.333333 421.000000 2670.000000 --46.833333 -10.333333 369.000000 2670.000000 --46.666667 -10.333333 408.000000 2670.000000 --46.500000 -10.333333 446.000000 2670.000000 --46.333333 -10.333333 631.000000 2670.000000 --46.166667 -10.333333 745.000000 2670.000000 --46.000000 -10.333333 798.000000 2670.000000 --45.833333 -10.333333 785.000000 2670.000000 --45.666667 -10.333333 793.000000 2670.000000 --45.500000 -10.333333 806.000000 2670.000000 --45.333333 -10.333333 515.000000 2670.000000 --45.166667 -10.333333 523.000000 2670.000000 --45.000000 -10.333333 452.000000 2670.000000 --44.833333 -10.333333 403.000000 2670.000000 --44.666667 -10.333333 393.000000 2670.000000 --44.500000 -10.333333 427.000000 2670.000000 --44.333333 -10.333333 524.000000 2670.000000 --44.166667 -10.333333 515.000000 2670.000000 --44.000000 -10.333333 555.000000 2670.000000 --43.833333 -10.333333 605.000000 2670.000000 --43.666667 -10.333333 645.000000 2670.000000 --43.500000 -10.333333 510.000000 2670.000000 --43.333333 -10.333333 514.000000 2670.000000 --43.166667 -10.333333 529.000000 2670.000000 --43.000000 -10.333333 509.000000 2670.000000 --42.833333 -10.333333 462.000000 2670.000000 --42.666667 -10.333333 422.000000 2670.000000 --42.500000 -10.333333 435.000000 2670.000000 --42.333333 -10.333333 396.000000 2670.000000 --42.166667 -10.333333 403.000000 2670.000000 --42.000000 -10.333333 410.000000 2670.000000 --41.833333 -10.333333 411.000000 2670.000000 --41.666667 -10.333333 561.000000 2670.000000 --41.500000 -10.333333 1131.000000 2670.000000 --41.333333 -10.333333 1003.000000 2670.000000 --41.166667 -10.333333 910.000000 2670.000000 --41.000000 -10.333333 752.000000 2670.000000 --40.833333 -10.333333 526.000000 2670.000000 --40.666667 -10.333333 563.000000 2670.000000 --40.500000 -10.333333 791.000000 2670.000000 --40.333333 -10.333333 731.000000 2670.000000 --40.166667 -10.333333 593.000000 2670.000000 --40.000000 -10.333333 435.000000 2670.000000 --65.000000 -10.500000 157.000000 2670.000000 --64.833333 -10.500000 167.000000 2670.000000 --64.666667 -10.500000 191.000000 2670.000000 --64.500000 -10.500000 192.000000 2670.000000 --64.333333 -10.500000 230.000000 2670.000000 --64.166667 -10.500000 296.000000 2670.000000 --64.000000 -10.500000 161.000000 2670.000000 --63.833333 -10.500000 259.000000 2670.000000 --63.666667 -10.500000 189.000000 2670.000000 --63.500000 -10.500000 268.000000 2670.000000 --63.333333 -10.500000 178.000000 2670.000000 --63.166667 -10.500000 186.000000 2670.000000 --63.000000 -10.500000 319.000000 2670.000000 --62.833333 -10.500000 231.000000 2670.000000 --62.666667 -10.500000 208.000000 2670.000000 --62.500000 -10.500000 166.000000 2670.000000 --62.333333 -10.500000 201.000000 2670.000000 --62.166667 -10.500000 178.000000 2670.000000 --62.000000 -10.500000 203.000000 2670.000000 --61.833333 -10.500000 203.000000 2670.000000 --61.666667 -10.500000 214.000000 2670.000000 --61.500000 -10.500000 240.000000 2670.000000 --61.333333 -10.500000 251.000000 2670.000000 --61.166667 -10.500000 170.000000 2670.000000 --61.000000 -10.500000 195.000000 2670.000000 --60.833333 -10.500000 202.000000 2670.000000 --60.666667 -10.500000 178.000000 2670.000000 --60.500000 -10.500000 216.000000 2670.000000 --60.333333 -10.500000 347.000000 2670.000000 --60.166667 -10.500000 298.000000 2670.000000 --60.000000 -10.500000 257.000000 2670.000000 --59.833333 -10.500000 269.000000 2670.000000 --59.666667 -10.500000 282.000000 2670.000000 --59.500000 -10.500000 274.000000 2670.000000 --59.333333 -10.500000 300.000000 2670.000000 --59.166667 -10.500000 394.000000 2670.000000 --59.000000 -10.500000 433.000000 2670.000000 --58.833333 -10.500000 356.000000 2670.000000 --58.666667 -10.500000 238.000000 2670.000000 --58.500000 -10.500000 341.000000 2670.000000 --58.333333 -10.500000 244.000000 2670.000000 --58.166667 -10.500000 271.000000 2670.000000 --58.000000 -10.500000 350.000000 2670.000000 --57.833333 -10.500000 381.000000 2670.000000 --57.666667 -10.500000 394.000000 2670.000000 --57.500000 -10.500000 367.000000 2670.000000 --57.333333 -10.500000 313.000000 2670.000000 --57.166667 -10.500000 324.000000 2670.000000 --57.000000 -10.500000 323.000000 2670.000000 --56.833333 -10.500000 336.000000 2670.000000 --56.666667 -10.500000 319.000000 2670.000000 --56.500000 -10.500000 397.000000 2670.000000 --56.333333 -10.500000 338.000000 2670.000000 --56.166667 -10.500000 319.000000 2670.000000 --56.000000 -10.500000 265.000000 2670.000000 --55.833333 -10.500000 269.000000 2670.000000 --55.666667 -10.500000 264.000000 2670.000000 --55.500000 -10.500000 286.000000 2670.000000 --55.333333 -10.500000 264.000000 2670.000000 --55.166667 -10.500000 284.000000 2670.000000 --55.000000 -10.500000 350.000000 2670.000000 --54.833333 -10.500000 416.000000 2670.000000 --54.666667 -10.500000 283.000000 2670.000000 --54.500000 -10.500000 312.000000 2670.000000 --54.333333 -10.500000 401.000000 2670.000000 --54.166667 -10.500000 439.000000 2670.000000 --54.000000 -10.500000 444.000000 2670.000000 --53.833333 -10.500000 378.000000 2670.000000 --53.666667 -10.500000 349.000000 2670.000000 --53.500000 -10.500000 315.000000 2670.000000 --53.333333 -10.500000 294.000000 2670.000000 --53.166667 -10.500000 314.000000 2670.000000 --53.000000 -10.500000 308.000000 2670.000000 --52.833333 -10.500000 302.000000 2670.000000 --52.666667 -10.500000 301.000000 2670.000000 --52.500000 -10.500000 309.000000 2670.000000 --52.333333 -10.500000 284.000000 2670.000000 --52.166667 -10.500000 266.000000 2670.000000 --52.000000 -10.500000 293.000000 2670.000000 --51.833333 -10.500000 280.000000 2670.000000 --51.666667 -10.500000 222.000000 2670.000000 --51.500000 -10.500000 318.000000 2670.000000 --51.333333 -10.500000 404.000000 2670.000000 --51.166667 -10.500000 409.000000 2670.000000 --51.000000 -10.500000 225.000000 2670.000000 --50.833333 -10.500000 279.000000 2670.000000 --50.666667 -10.500000 227.000000 2670.000000 --50.500000 -10.500000 176.000000 2670.000000 --50.333333 -10.500000 176.000000 2670.000000 --50.166667 -10.500000 176.000000 2670.000000 --50.000000 -10.500000 177.000000 2670.000000 --49.833333 -10.500000 178.000000 2670.000000 --49.666667 -10.500000 183.000000 2670.000000 --49.500000 -10.500000 193.000000 2670.000000 --49.333333 -10.500000 205.000000 2670.000000 --49.166667 -10.500000 265.000000 2670.000000 --49.000000 -10.500000 314.000000 2670.000000 --48.833333 -10.500000 268.000000 2670.000000 --48.666667 -10.500000 512.000000 2670.000000 --48.500000 -10.500000 337.000000 2670.000000 --48.333333 -10.500000 237.000000 2670.000000 --48.166667 -10.500000 367.000000 2670.000000 --48.000000 -10.500000 481.000000 2670.000000 --47.833333 -10.500000 288.000000 2670.000000 --47.666667 -10.500000 366.000000 2670.000000 --47.500000 -10.500000 342.000000 2670.000000 --47.333333 -10.500000 354.000000 2670.000000 --47.166667 -10.500000 322.000000 2670.000000 --47.000000 -10.500000 482.000000 2670.000000 --46.833333 -10.500000 411.000000 2670.000000 --46.666667 -10.500000 427.000000 2670.000000 --46.500000 -10.500000 495.000000 2670.000000 --46.333333 -10.500000 613.000000 2670.000000 --46.166667 -10.500000 748.000000 2670.000000 --46.000000 -10.500000 722.000000 2670.000000 --45.833333 -10.500000 775.000000 2670.000000 --45.666667 -10.500000 775.000000 2670.000000 --45.500000 -10.500000 798.000000 2670.000000 --45.333333 -10.500000 661.000000 2670.000000 --45.166667 -10.500000 470.000000 2670.000000 --45.000000 -10.500000 440.000000 2670.000000 --44.833333 -10.500000 406.000000 2670.000000 --44.666667 -10.500000 454.000000 2670.000000 --44.500000 -10.500000 478.000000 2670.000000 --44.333333 -10.500000 673.000000 2670.000000 --44.166667 -10.500000 508.000000 2670.000000 --44.000000 -10.500000 630.000000 2670.000000 --43.833333 -10.500000 612.000000 2670.000000 --43.666667 -10.500000 655.000000 2670.000000 --43.500000 -10.500000 505.000000 2670.000000 --43.333333 -10.500000 576.000000 2670.000000 --43.166667 -10.500000 541.000000 2670.000000 --43.000000 -10.500000 491.000000 2670.000000 --42.833333 -10.500000 486.000000 2670.000000 --42.666667 -10.500000 496.000000 2670.000000 --42.500000 -10.500000 411.000000 2670.000000 --42.333333 -10.500000 404.000000 2670.000000 --42.166667 -10.500000 408.000000 2670.000000 --42.000000 -10.500000 416.000000 2670.000000 --41.833333 -10.500000 437.000000 2670.000000 --41.666667 -10.500000 830.000000 2670.000000 --41.500000 -10.500000 1016.000000 2670.000000 --41.333333 -10.500000 825.000000 2670.000000 --41.166667 -10.500000 938.000000 2670.000000 --41.000000 -10.500000 550.000000 2670.000000 --40.833333 -10.500000 531.000000 2670.000000 --40.666667 -10.500000 623.000000 2670.000000 --40.500000 -10.500000 824.000000 2670.000000 --40.333333 -10.500000 565.000000 2670.000000 --40.166667 -10.500000 477.000000 2670.000000 --40.000000 -10.500000 408.000000 2670.000000 --65.000000 -10.666667 191.000000 2670.000000 --64.833333 -10.666667 260.000000 2670.000000 --64.666667 -10.666667 173.000000 2670.000000 --64.500000 -10.666667 189.000000 2670.000000 --64.333333 -10.666667 359.000000 2670.000000 --64.166667 -10.666667 311.000000 2670.000000 --64.000000 -10.666667 244.000000 2670.000000 --63.833333 -10.666667 263.000000 2670.000000 --63.666667 -10.666667 300.000000 2670.000000 --63.500000 -10.666667 380.000000 2670.000000 --63.333333 -10.666667 219.000000 2670.000000 --63.166667 -10.666667 203.000000 2670.000000 --63.000000 -10.666667 277.000000 2670.000000 --62.833333 -10.666667 206.000000 2670.000000 --62.666667 -10.666667 171.000000 2670.000000 --62.500000 -10.666667 188.000000 2670.000000 --62.333333 -10.666667 240.000000 2670.000000 --62.166667 -10.666667 200.000000 2670.000000 --62.000000 -10.666667 173.000000 2670.000000 --61.833333 -10.666667 134.000000 2670.000000 --61.666667 -10.666667 289.000000 2670.000000 --61.500000 -10.666667 278.000000 2670.000000 --61.333333 -10.666667 285.000000 2670.000000 --61.166667 -10.666667 161.000000 2670.000000 --61.000000 -10.666667 177.000000 2670.000000 --60.833333 -10.666667 170.000000 2670.000000 --60.666667 -10.666667 157.000000 2670.000000 --60.500000 -10.666667 157.000000 2670.000000 --60.333333 -10.666667 177.000000 2670.000000 --60.166667 -10.666667 318.000000 2670.000000 --60.000000 -10.666667 250.000000 2670.000000 --59.833333 -10.666667 308.000000 2670.000000 --59.666667 -10.666667 359.000000 2670.000000 --59.500000 -10.666667 253.000000 2670.000000 --59.333333 -10.666667 302.000000 2670.000000 --59.166667 -10.666667 456.000000 2670.000000 --59.000000 -10.666667 457.000000 2670.000000 --58.833333 -10.666667 340.000000 2670.000000 --58.666667 -10.666667 248.000000 2670.000000 --58.500000 -10.666667 251.000000 2670.000000 --58.333333 -10.666667 236.000000 2670.000000 --58.166667 -10.666667 256.000000 2670.000000 --58.000000 -10.666667 230.000000 2670.000000 --57.833333 -10.666667 383.000000 2670.000000 --57.666667 -10.666667 490.000000 2670.000000 --57.500000 -10.666667 388.000000 2670.000000 --57.333333 -10.666667 399.000000 2670.000000 --57.166667 -10.666667 331.000000 2670.000000 --57.000000 -10.666667 332.000000 2670.000000 --56.833333 -10.666667 323.000000 2670.000000 --56.666667 -10.666667 308.000000 2670.000000 --56.500000 -10.666667 317.000000 2670.000000 --56.333333 -10.666667 302.000000 2670.000000 --56.166667 -10.666667 281.000000 2670.000000 --56.000000 -10.666667 280.000000 2670.000000 --55.833333 -10.666667 265.000000 2670.000000 --55.666667 -10.666667 299.000000 2670.000000 --55.500000 -10.666667 298.000000 2670.000000 --55.333333 -10.666667 298.000000 2670.000000 --55.166667 -10.666667 312.000000 2670.000000 --55.000000 -10.666667 394.000000 2670.000000 --54.833333 -10.666667 299.000000 2670.000000 --54.666667 -10.666667 381.000000 2670.000000 --54.500000 -10.666667 349.000000 2670.000000 --54.333333 -10.666667 367.000000 2670.000000 --54.166667 -10.666667 385.000000 2670.000000 --54.000000 -10.666667 333.000000 2670.000000 --53.833333 -10.666667 346.000000 2670.000000 --53.666667 -10.666667 347.000000 2670.000000 --53.500000 -10.666667 348.000000 2670.000000 --53.333333 -10.666667 335.000000 2670.000000 --53.166667 -10.666667 306.000000 2670.000000 --53.000000 -10.666667 331.000000 2670.000000 --52.833333 -10.666667 345.000000 2670.000000 --52.666667 -10.666667 308.000000 2670.000000 --52.500000 -10.666667 333.000000 2670.000000 --52.333333 -10.666667 297.000000 2670.000000 --52.166667 -10.666667 273.000000 2670.000000 --52.000000 -10.666667 225.000000 2670.000000 --51.833333 -10.666667 203.000000 2670.000000 --51.666667 -10.666667 219.000000 2670.000000 --51.500000 -10.666667 218.000000 2670.000000 --51.333333 -10.666667 287.000000 2670.000000 --51.166667 -10.666667 209.000000 2670.000000 --51.000000 -10.666667 202.000000 2670.000000 --50.833333 -10.666667 182.000000 2670.000000 --50.666667 -10.666667 184.000000 2670.000000 --50.500000 -10.666667 179.000000 2670.000000 --50.333333 -10.666667 178.000000 2670.000000 --50.166667 -10.666667 179.000000 2670.000000 --50.000000 -10.666667 177.000000 2670.000000 --49.833333 -10.666667 179.000000 2670.000000 --49.666667 -10.666667 187.000000 2670.000000 --49.500000 -10.666667 225.000000 2670.000000 --49.333333 -10.666667 218.000000 2670.000000 --49.166667 -10.666667 227.000000 2670.000000 --49.000000 -10.666667 349.000000 2670.000000 --48.833333 -10.666667 290.000000 2670.000000 --48.666667 -10.666667 458.000000 2670.000000 --48.500000 -10.666667 308.000000 2670.000000 --48.333333 -10.666667 296.000000 2670.000000 --48.166667 -10.666667 255.000000 2670.000000 --48.000000 -10.666667 697.000000 2670.000000 --47.833333 -10.666667 422.000000 2670.000000 --47.666667 -10.666667 372.000000 2670.000000 --47.500000 -10.666667 334.000000 2670.000000 --47.333333 -10.666667 327.000000 2670.000000 --47.166667 -10.666667 411.000000 2670.000000 --47.000000 -10.666667 403.000000 2670.000000 --46.833333 -10.666667 492.000000 2670.000000 --46.666667 -10.666667 449.000000 2670.000000 --46.500000 -10.666667 532.000000 2670.000000 --46.333333 -10.666667 579.000000 2670.000000 --46.166667 -10.666667 757.000000 2670.000000 --46.000000 -10.666667 737.000000 2670.000000 --45.833333 -10.666667 722.000000 2670.000000 --45.666667 -10.666667 778.000000 2670.000000 --45.500000 -10.666667 749.000000 2670.000000 --45.333333 -10.666667 680.000000 2670.000000 --45.166667 -10.666667 488.000000 2670.000000 --45.000000 -10.666667 428.000000 2670.000000 --44.833333 -10.666667 462.000000 2670.000000 --44.666667 -10.666667 663.000000 2670.000000 --44.500000 -10.666667 703.000000 2670.000000 --44.333333 -10.666667 674.000000 2670.000000 --44.166667 -10.666667 663.000000 2670.000000 --44.000000 -10.666667 654.000000 2670.000000 --43.833333 -10.666667 574.000000 2670.000000 --43.666667 -10.666667 532.000000 2670.000000 --43.500000 -10.666667 463.000000 2670.000000 --43.333333 -10.666667 620.000000 2670.000000 --43.166667 -10.666667 512.000000 2670.000000 --43.000000 -10.666667 460.000000 2670.000000 --42.833333 -10.666667 447.000000 2670.000000 --42.666667 -10.666667 399.000000 2670.000000 --42.500000 -10.666667 596.000000 2670.000000 --42.333333 -10.666667 416.000000 2670.000000 --42.166667 -10.666667 411.000000 2670.000000 --42.000000 -10.666667 437.000000 2670.000000 --41.833333 -10.666667 450.000000 2670.000000 --41.666667 -10.666667 511.000000 2670.000000 --41.500000 -10.666667 882.000000 2670.000000 --41.333333 -10.666667 785.000000 2670.000000 --41.166667 -10.666667 878.000000 2670.000000 --41.000000 -10.666667 556.000000 2670.000000 --40.833333 -10.666667 547.000000 2670.000000 --40.666667 -10.666667 753.000000 2670.000000 --40.500000 -10.666667 704.000000 2670.000000 --40.333333 -10.666667 478.000000 2670.000000 --40.166667 -10.666667 468.000000 2670.000000 --40.000000 -10.666667 401.000000 2670.000000 --65.000000 -10.833333 144.000000 2670.000000 --64.833333 -10.833333 158.000000 2670.000000 --64.666667 -10.833333 170.000000 2670.000000 --64.500000 -10.833333 156.000000 2670.000000 --64.333333 -10.833333 196.000000 2670.000000 --64.166667 -10.833333 307.000000 2670.000000 --64.000000 -10.833333 390.000000 2670.000000 --63.833333 -10.833333 380.000000 2670.000000 --63.666667 -10.833333 869.000000 2670.000000 --63.500000 -10.833333 342.000000 2670.000000 --63.333333 -10.833333 242.000000 2670.000000 --63.166667 -10.833333 318.000000 2670.000000 --63.000000 -10.833333 251.000000 2670.000000 --62.833333 -10.833333 196.000000 2670.000000 --62.666667 -10.833333 224.000000 2670.000000 --62.500000 -10.833333 270.000000 2670.000000 --62.333333 -10.833333 308.000000 2670.000000 --62.166667 -10.833333 214.000000 2670.000000 --62.000000 -10.833333 180.000000 2670.000000 --61.833333 -10.833333 170.000000 2670.000000 --61.666667 -10.833333 194.000000 2670.000000 --61.500000 -10.833333 289.000000 2670.000000 --61.333333 -10.833333 200.000000 2670.000000 --61.166667 -10.833333 172.000000 2670.000000 --61.000000 -10.833333 208.000000 2670.000000 --60.833333 -10.833333 194.000000 2670.000000 --60.666667 -10.833333 165.000000 2670.000000 --60.500000 -10.833333 214.000000 2670.000000 --60.333333 -10.833333 255.000000 2670.000000 --60.166667 -10.833333 235.000000 2670.000000 --60.000000 -10.833333 294.000000 2670.000000 --59.833333 -10.833333 276.000000 2670.000000 --59.666667 -10.833333 357.000000 2670.000000 --59.500000 -10.833333 325.000000 2670.000000 --59.333333 -10.833333 320.000000 2670.000000 --59.166667 -10.833333 298.000000 2670.000000 --59.000000 -10.833333 331.000000 2670.000000 --58.833333 -10.833333 353.000000 2670.000000 --58.666667 -10.833333 295.000000 2670.000000 --58.500000 -10.833333 281.000000 2670.000000 --58.333333 -10.833333 227.000000 2670.000000 --58.166667 -10.833333 265.000000 2670.000000 --58.000000 -10.833333 253.000000 2670.000000 --57.833333 -10.833333 257.000000 2670.000000 --57.666667 -10.833333 237.000000 2670.000000 --57.500000 -10.833333 302.000000 2670.000000 --57.333333 -10.833333 443.000000 2670.000000 --57.166667 -10.833333 319.000000 2670.000000 --57.000000 -10.833333 357.000000 2670.000000 --56.833333 -10.833333 316.000000 2670.000000 --56.666667 -10.833333 350.000000 2670.000000 --56.500000 -10.833333 354.000000 2670.000000 --56.333333 -10.833333 306.000000 2670.000000 --56.166667 -10.833333 277.000000 2670.000000 --56.000000 -10.833333 277.000000 2670.000000 --55.833333 -10.833333 311.000000 2670.000000 --55.666667 -10.833333 398.000000 2670.000000 --55.500000 -10.833333 304.000000 2670.000000 --55.333333 -10.833333 320.000000 2670.000000 --55.166667 -10.833333 347.000000 2670.000000 --55.000000 -10.833333 348.000000 2670.000000 --54.833333 -10.833333 382.000000 2670.000000 --54.666667 -10.833333 347.000000 2670.000000 --54.500000 -10.833333 427.000000 2670.000000 --54.333333 -10.833333 344.000000 2670.000000 --54.166667 -10.833333 343.000000 2670.000000 --54.000000 -10.833333 367.000000 2670.000000 --53.833333 -10.833333 374.000000 2670.000000 --53.666667 -10.833333 370.000000 2670.000000 --53.500000 -10.833333 353.000000 2670.000000 --53.333333 -10.833333 293.000000 2670.000000 --53.166667 -10.833333 273.000000 2670.000000 --53.000000 -10.833333 303.000000 2670.000000 --52.833333 -10.833333 345.000000 2670.000000 --52.666667 -10.833333 332.000000 2670.000000 --52.500000 -10.833333 329.000000 2670.000000 --52.333333 -10.833333 303.000000 2670.000000 --52.166667 -10.833333 285.000000 2670.000000 --52.000000 -10.833333 199.000000 2670.000000 --51.833333 -10.833333 214.000000 2670.000000 --51.666667 -10.833333 190.000000 2670.000000 --51.500000 -10.833333 192.000000 2670.000000 --51.333333 -10.833333 201.000000 2670.000000 --51.166667 -10.833333 193.000000 2670.000000 --51.000000 -10.833333 181.000000 2670.000000 --50.833333 -10.833333 181.000000 2670.000000 --50.666667 -10.833333 182.000000 2670.000000 --50.500000 -10.833333 182.000000 2670.000000 --50.333333 -10.833333 191.000000 2670.000000 --50.166667 -10.833333 192.000000 2670.000000 --50.000000 -10.833333 180.000000 2670.000000 --49.833333 -10.833333 186.000000 2670.000000 --49.666667 -10.833333 189.000000 2670.000000 --49.500000 -10.833333 190.000000 2670.000000 --49.333333 -10.833333 202.000000 2670.000000 --49.166667 -10.833333 284.000000 2670.000000 --49.000000 -10.833333 345.000000 2670.000000 --48.833333 -10.833333 291.000000 2670.000000 --48.666667 -10.833333 503.000000 2670.000000 --48.500000 -10.833333 342.000000 2670.000000 --48.333333 -10.833333 278.000000 2670.000000 --48.166667 -10.833333 292.000000 2670.000000 --48.000000 -10.833333 578.000000 2670.000000 --47.833333 -10.833333 374.000000 2670.000000 --47.666667 -10.833333 382.000000 2670.000000 --47.500000 -10.833333 394.000000 2670.000000 --47.333333 -10.833333 370.000000 2670.000000 --47.166667 -10.833333 401.000000 2670.000000 --47.000000 -10.833333 468.000000 2670.000000 --46.833333 -10.833333 597.000000 2670.000000 --46.666667 -10.833333 508.000000 2670.000000 --46.500000 -10.833333 764.000000 2670.000000 --46.333333 -10.833333 639.000000 2670.000000 --46.166667 -10.833333 661.000000 2670.000000 --46.000000 -10.833333 687.000000 2670.000000 --45.833333 -10.833333 555.000000 2670.000000 --45.666667 -10.833333 758.000000 2670.000000 --45.500000 -10.833333 746.000000 2670.000000 --45.333333 -10.833333 747.000000 2670.000000 --45.166667 -10.833333 613.000000 2670.000000 --45.000000 -10.833333 514.000000 2670.000000 --44.833333 -10.833333 567.000000 2670.000000 --44.666667 -10.833333 558.000000 2670.000000 --44.500000 -10.833333 548.000000 2670.000000 --44.333333 -10.833333 512.000000 2670.000000 --44.166667 -10.833333 496.000000 2670.000000 --44.000000 -10.833333 541.000000 2670.000000 --43.833333 -10.833333 570.000000 2670.000000 --43.666667 -10.833333 510.000000 2670.000000 --43.500000 -10.833333 440.000000 2670.000000 --43.333333 -10.833333 453.000000 2670.000000 --43.166667 -10.833333 468.000000 2670.000000 --43.000000 -10.833333 459.000000 2670.000000 --42.833333 -10.833333 402.000000 2670.000000 --42.666667 -10.833333 436.000000 2670.000000 --42.500000 -10.833333 478.000000 2670.000000 --42.333333 -10.833333 440.000000 2670.000000 --42.166667 -10.833333 428.000000 2670.000000 --42.000000 -10.833333 461.000000 2670.000000 --41.833333 -10.833333 490.000000 2670.000000 --41.666667 -10.833333 473.000000 2670.000000 --41.500000 -10.833333 764.000000 2670.000000 --41.333333 -10.833333 697.000000 2670.000000 --41.166667 -10.833333 615.000000 2670.000000 --41.000000 -10.833333 560.000000 2670.000000 --40.833333 -10.833333 566.000000 2670.000000 --40.666667 -10.833333 808.000000 2670.000000 --40.500000 -10.833333 603.000000 2670.000000 --40.333333 -10.833333 462.000000 2670.000000 --40.166667 -10.833333 404.000000 2670.000000 --40.000000 -10.833333 375.000000 2670.000000 --65.000000 -11.000000 163.000000 2670.000000 --64.833333 -11.000000 175.000000 2670.000000 --64.666667 -11.000000 160.000000 2670.000000 --64.500000 -11.000000 190.000000 2670.000000 --64.333333 -11.000000 191.000000 2670.000000 --64.166667 -11.000000 207.000000 2670.000000 --64.000000 -11.000000 185.000000 2670.000000 --63.833333 -11.000000 294.000000 2670.000000 --63.666667 -11.000000 857.000000 2670.000000 --63.500000 -11.000000 368.000000 2670.000000 --63.333333 -11.000000 301.000000 2670.000000 --63.166667 -11.000000 310.000000 2670.000000 --63.000000 -11.000000 309.000000 2670.000000 --62.833333 -11.000000 283.000000 2670.000000 --62.666667 -11.000000 257.000000 2670.000000 --62.500000 -11.000000 390.000000 2670.000000 --62.333333 -11.000000 211.000000 2670.000000 --62.166667 -11.000000 172.000000 2670.000000 --62.000000 -11.000000 177.000000 2670.000000 --61.833333 -11.000000 215.000000 2670.000000 --61.666667 -11.000000 281.000000 2670.000000 --61.500000 -11.000000 312.000000 2670.000000 --61.333333 -11.000000 207.000000 2670.000000 --61.166667 -11.000000 188.000000 2670.000000 --61.000000 -11.000000 194.000000 2670.000000 --60.833333 -11.000000 192.000000 2670.000000 --60.666667 -11.000000 241.000000 2670.000000 --60.500000 -11.000000 216.000000 2670.000000 --60.333333 -11.000000 215.000000 2670.000000 --60.166667 -11.000000 253.000000 2670.000000 --60.000000 -11.000000 273.000000 2670.000000 --59.833333 -11.000000 396.000000 2670.000000 --59.666667 -11.000000 380.000000 2670.000000 --59.500000 -11.000000 376.000000 2670.000000 --59.333333 -11.000000 276.000000 2670.000000 --59.166667 -11.000000 311.000000 2670.000000 --59.000000 -11.000000 339.000000 2670.000000 --58.833333 -11.000000 311.000000 2670.000000 --58.666667 -11.000000 269.000000 2670.000000 --58.500000 -11.000000 284.000000 2670.000000 --58.333333 -11.000000 251.000000 2670.000000 --58.166667 -11.000000 245.000000 2670.000000 --58.000000 -11.000000 289.000000 2670.000000 --57.833333 -11.000000 243.000000 2670.000000 --57.666667 -11.000000 264.000000 2670.000000 --57.500000 -11.000000 294.000000 2670.000000 --57.333333 -11.000000 255.000000 2670.000000 --57.166667 -11.000000 312.000000 2670.000000 --57.000000 -11.000000 316.000000 2670.000000 --56.833333 -11.000000 340.000000 2670.000000 --56.666667 -11.000000 431.000000 2670.000000 --56.500000 -11.000000 304.000000 2670.000000 --56.333333 -11.000000 332.000000 2670.000000 --56.166667 -11.000000 299.000000 2670.000000 --56.000000 -11.000000 306.000000 2670.000000 --55.833333 -11.000000 280.000000 2670.000000 --55.666667 -11.000000 291.000000 2670.000000 --55.500000 -11.000000 290.000000 2670.000000 --55.333333 -11.000000 322.000000 2670.000000 --55.166667 -11.000000 410.000000 2670.000000 --55.000000 -11.000000 424.000000 2670.000000 --54.833333 -11.000000 401.000000 2670.000000 --54.666667 -11.000000 355.000000 2670.000000 --54.500000 -11.000000 354.000000 2670.000000 --54.333333 -11.000000 317.000000 2670.000000 --54.166667 -11.000000 342.000000 2670.000000 --54.000000 -11.000000 318.000000 2670.000000 --53.833333 -11.000000 307.000000 2670.000000 --53.666667 -11.000000 317.000000 2670.000000 --53.500000 -11.000000 322.000000 2670.000000 --53.333333 -11.000000 276.000000 2670.000000 --53.166667 -11.000000 330.000000 2670.000000 --53.000000 -11.000000 304.000000 2670.000000 --52.833333 -11.000000 308.000000 2670.000000 --52.666667 -11.000000 325.000000 2670.000000 --52.500000 -11.000000 369.000000 2670.000000 --52.333333 -11.000000 310.000000 2670.000000 --52.166667 -11.000000 300.000000 2670.000000 --52.000000 -11.000000 239.000000 2670.000000 --51.833333 -11.000000 223.000000 2670.000000 --51.666667 -11.000000 191.000000 2670.000000 --51.500000 -11.000000 188.000000 2670.000000 --51.333333 -11.000000 187.000000 2670.000000 --51.166667 -11.000000 182.000000 2670.000000 --51.000000 -11.000000 182.000000 2670.000000 --50.833333 -11.000000 183.000000 2670.000000 --50.666667 -11.000000 185.000000 2670.000000 --50.500000 -11.000000 184.000000 2670.000000 --50.333333 -11.000000 190.000000 2670.000000 --50.166667 -11.000000 191.000000 2670.000000 --50.000000 -11.000000 184.000000 2670.000000 --49.833333 -11.000000 188.000000 2670.000000 --49.666667 -11.000000 189.000000 2670.000000 --49.500000 -11.000000 213.000000 2670.000000 --49.333333 -11.000000 219.000000 2670.000000 --49.166667 -11.000000 296.000000 2670.000000 --49.000000 -11.000000 277.000000 2670.000000 --48.833333 -11.000000 252.000000 2670.000000 --48.666667 -11.000000 381.000000 2670.000000 --48.500000 -11.000000 222.000000 2670.000000 --48.333333 -11.000000 296.000000 2670.000000 --48.166667 -11.000000 251.000000 2670.000000 --48.000000 -11.000000 306.000000 2670.000000 --47.833333 -11.000000 641.000000 2670.000000 --47.666667 -11.000000 357.000000 2670.000000 --47.500000 -11.000000 363.000000 2670.000000 --47.333333 -11.000000 364.000000 2670.000000 --47.166667 -11.000000 468.000000 2670.000000 --47.000000 -11.000000 465.000000 2670.000000 --46.833333 -11.000000 560.000000 2670.000000 --46.666667 -11.000000 589.000000 2670.000000 --46.500000 -11.000000 547.000000 2670.000000 --46.333333 -11.000000 807.000000 2670.000000 --46.166667 -11.000000 779.000000 2670.000000 --46.000000 -11.000000 678.000000 2670.000000 --45.833333 -11.000000 763.000000 2670.000000 --45.666667 -11.000000 739.000000 2670.000000 --45.500000 -11.000000 536.000000 2670.000000 --45.333333 -11.000000 689.000000 2670.000000 --45.166667 -11.000000 539.000000 2670.000000 --45.000000 -11.000000 532.000000 2670.000000 --44.833333 -11.000000 500.000000 2670.000000 --44.666667 -11.000000 467.000000 2670.000000 --44.500000 -11.000000 445.000000 2670.000000 --44.333333 -11.000000 454.000000 2670.000000 --44.166667 -11.000000 458.000000 2670.000000 --44.000000 -11.000000 698.000000 2670.000000 --43.833333 -11.000000 532.000000 2670.000000 --43.666667 -11.000000 480.000000 2670.000000 --43.500000 -11.000000 431.000000 2670.000000 --43.333333 -11.000000 419.000000 2670.000000 --43.166667 -11.000000 411.000000 2670.000000 --43.000000 -11.000000 403.000000 2670.000000 --42.833333 -11.000000 438.000000 2670.000000 --42.666667 -11.000000 531.000000 2670.000000 --42.500000 -11.000000 694.000000 2670.000000 --42.333333 -11.000000 445.000000 2670.000000 --42.166667 -11.000000 490.000000 2670.000000 --42.000000 -11.000000 551.000000 2670.000000 --41.833333 -11.000000 618.000000 2670.000000 --41.666667 -11.000000 766.000000 2670.000000 --41.500000 -11.000000 579.000000 2670.000000 --41.333333 -11.000000 792.000000 2670.000000 --41.166667 -11.000000 594.000000 2670.000000 --41.000000 -11.000000 586.000000 2670.000000 --40.833333 -11.000000 688.000000 2670.000000 --40.666667 -11.000000 773.000000 2670.000000 --40.500000 -11.000000 843.000000 2670.000000 --40.333333 -11.000000 460.000000 2670.000000 --40.166667 -11.000000 400.000000 2670.000000 --40.000000 -11.000000 350.000000 2670.000000 --65.000000 -11.166667 138.000000 2670.000000 --64.833333 -11.166667 153.000000 2670.000000 --64.666667 -11.166667 164.000000 2670.000000 --64.500000 -11.166667 183.000000 2670.000000 --64.333333 -11.166667 176.000000 2670.000000 --64.166667 -11.166667 176.000000 2670.000000 --64.000000 -11.166667 199.000000 2670.000000 --63.833333 -11.166667 221.000000 2670.000000 --63.666667 -11.166667 266.000000 2670.000000 --63.500000 -11.166667 253.000000 2670.000000 --63.333333 -11.166667 414.000000 2670.000000 --63.166667 -11.166667 256.000000 2670.000000 --63.000000 -11.166667 264.000000 2670.000000 --62.833333 -11.166667 251.000000 2670.000000 --62.666667 -11.166667 246.000000 2670.000000 --62.500000 -11.166667 244.000000 2670.000000 --62.333333 -11.166667 202.000000 2670.000000 --62.166667 -11.166667 234.000000 2670.000000 --62.000000 -11.166667 193.000000 2670.000000 --61.833333 -11.166667 200.000000 2670.000000 --61.666667 -11.166667 284.000000 2670.000000 --61.500000 -11.166667 270.000000 2670.000000 --61.333333 -11.166667 218.000000 2670.000000 --61.166667 -11.166667 229.000000 2670.000000 --61.000000 -11.166667 292.000000 2670.000000 --60.833333 -11.166667 492.000000 2670.000000 --60.666667 -11.166667 300.000000 2670.000000 --60.500000 -11.166667 241.000000 2670.000000 --60.333333 -11.166667 424.000000 2670.000000 --60.166667 -11.166667 292.000000 2670.000000 --60.000000 -11.166667 280.000000 2670.000000 --59.833333 -11.166667 473.000000 2670.000000 --59.666667 -11.166667 369.000000 2670.000000 --59.500000 -11.166667 306.000000 2670.000000 --59.333333 -11.166667 367.000000 2670.000000 --59.166667 -11.166667 410.000000 2670.000000 --59.000000 -11.166667 346.000000 2670.000000 --58.833333 -11.166667 359.000000 2670.000000 --58.666667 -11.166667 332.000000 2670.000000 --58.500000 -11.166667 332.000000 2670.000000 --58.333333 -11.166667 241.000000 2670.000000 --58.166667 -11.166667 297.000000 2670.000000 --58.000000 -11.166667 288.000000 2670.000000 --57.833333 -11.166667 277.000000 2670.000000 --57.666667 -11.166667 232.000000 2670.000000 --57.500000 -11.166667 291.000000 2670.000000 --57.333333 -11.166667 250.000000 2670.000000 --57.166667 -11.166667 346.000000 2670.000000 --57.000000 -11.166667 325.000000 2670.000000 --56.833333 -11.166667 365.000000 2670.000000 --56.666667 -11.166667 326.000000 2670.000000 --56.500000 -11.166667 417.000000 2670.000000 --56.333333 -11.166667 448.000000 2670.000000 --56.166667 -11.166667 444.000000 2670.000000 --56.000000 -11.166667 409.000000 2670.000000 --55.833333 -11.166667 315.000000 2670.000000 --55.666667 -11.166667 355.000000 2670.000000 --55.500000 -11.166667 342.000000 2670.000000 --55.333333 -11.166667 311.000000 2670.000000 --55.166667 -11.166667 333.000000 2670.000000 --55.000000 -11.166667 355.000000 2670.000000 --54.833333 -11.166667 330.000000 2670.000000 --54.666667 -11.166667 312.000000 2670.000000 --54.500000 -11.166667 309.000000 2670.000000 --54.333333 -11.166667 325.000000 2670.000000 --54.166667 -11.166667 348.000000 2670.000000 --54.000000 -11.166667 351.000000 2670.000000 --53.833333 -11.166667 324.000000 2670.000000 --53.666667 -11.166667 281.000000 2670.000000 --53.500000 -11.166667 323.000000 2670.000000 --53.333333 -11.166667 305.000000 2670.000000 --53.166667 -11.166667 328.000000 2670.000000 --53.000000 -11.166667 300.000000 2670.000000 --52.833333 -11.166667 327.000000 2670.000000 --52.666667 -11.166667 340.000000 2670.000000 --52.500000 -11.166667 359.000000 2670.000000 --52.333333 -11.166667 323.000000 2670.000000 --52.166667 -11.166667 327.000000 2670.000000 --52.000000 -11.166667 239.000000 2670.000000 --51.833333 -11.166667 224.000000 2670.000000 --51.666667 -11.166667 221.000000 2670.000000 --51.500000 -11.166667 193.000000 2670.000000 --51.333333 -11.166667 200.000000 2670.000000 --51.166667 -11.166667 188.000000 2670.000000 --51.000000 -11.166667 188.000000 2670.000000 --50.833333 -11.166667 187.000000 2670.000000 --50.666667 -11.166667 184.000000 2670.000000 --50.500000 -11.166667 185.000000 2670.000000 --50.333333 -11.166667 185.000000 2670.000000 --50.166667 -11.166667 187.000000 2670.000000 --50.000000 -11.166667 185.000000 2670.000000 --49.833333 -11.166667 185.000000 2670.000000 --49.666667 -11.166667 189.000000 2670.000000 --49.500000 -11.166667 196.000000 2670.000000 --49.333333 -11.166667 239.000000 2670.000000 --49.166667 -11.166667 302.000000 2670.000000 --49.000000 -11.166667 261.000000 2670.000000 --48.833333 -11.166667 258.000000 2670.000000 --48.666667 -11.166667 259.000000 2670.000000 --48.500000 -11.166667 226.000000 2670.000000 --48.333333 -11.166667 321.000000 2670.000000 --48.166667 -11.166667 273.000000 2670.000000 --48.000000 -11.166667 278.000000 2670.000000 --47.833333 -11.166667 330.000000 2670.000000 --47.666667 -11.166667 452.000000 2670.000000 --47.500000 -11.166667 510.000000 2670.000000 --47.333333 -11.166667 398.000000 2670.000000 --47.166667 -11.166667 450.000000 2670.000000 --47.000000 -11.166667 494.000000 2670.000000 --46.833333 -11.166667 591.000000 2670.000000 --46.666667 -11.166667 742.000000 2670.000000 --46.500000 -11.166667 851.000000 2670.000000 --46.333333 -11.166667 713.000000 2670.000000 --46.166667 -11.166667 661.000000 2670.000000 --46.000000 -11.166667 729.000000 2670.000000 --45.833333 -11.166667 767.000000 2670.000000 --45.666667 -11.166667 758.000000 2670.000000 --45.500000 -11.166667 545.000000 2670.000000 --45.333333 -11.166667 594.000000 2670.000000 --45.166667 -11.166667 602.000000 2670.000000 --45.000000 -11.166667 584.000000 2670.000000 --44.833333 -11.166667 527.000000 2670.000000 --44.666667 -11.166667 519.000000 2670.000000 --44.500000 -11.166667 499.000000 2670.000000 --44.333333 -11.166667 445.000000 2670.000000 --44.166667 -11.166667 432.000000 2670.000000 --44.000000 -11.166667 430.000000 2670.000000 --43.833333 -11.166667 455.000000 2670.000000 --43.666667 -11.166667 427.000000 2670.000000 --43.500000 -11.166667 413.000000 2670.000000 --43.333333 -11.166667 418.000000 2670.000000 --43.166667 -11.166667 408.000000 2670.000000 --43.000000 -11.166667 412.000000 2670.000000 --42.833333 -11.166667 409.000000 2670.000000 --42.666667 -11.166667 907.000000 2670.000000 --42.500000 -11.166667 773.000000 2670.000000 --42.333333 -11.166667 488.000000 2670.000000 --42.166667 -11.166667 512.000000 2670.000000 --42.000000 -11.166667 760.000000 2670.000000 --41.833333 -11.166667 779.000000 2670.000000 --41.666667 -11.166667 807.000000 2670.000000 --41.500000 -11.166667 766.000000 2670.000000 --41.333333 -11.166667 849.000000 2670.000000 --41.166667 -11.166667 751.000000 2670.000000 --41.000000 -11.166667 705.000000 2670.000000 --40.833333 -11.166667 711.000000 2670.000000 --40.666667 -11.166667 698.000000 2670.000000 --40.500000 -11.166667 707.000000 2670.000000 --40.333333 -11.166667 525.000000 2670.000000 --40.166667 -11.166667 389.000000 2670.000000 --40.000000 -11.166667 345.000000 2670.000000 --65.000000 -11.333333 166.000000 2670.000000 --64.833333 -11.333333 141.000000 2670.000000 --64.666667 -11.333333 167.000000 2670.000000 --64.500000 -11.333333 175.000000 2670.000000 --64.333333 -11.333333 186.000000 2670.000000 --64.166667 -11.333333 196.000000 2670.000000 --64.000000 -11.333333 218.000000 2670.000000 --63.833333 -11.333333 239.000000 2670.000000 --63.666667 -11.333333 325.000000 2670.000000 --63.500000 -11.333333 240.000000 2670.000000 --63.333333 -11.333333 223.000000 2670.000000 --63.166667 -11.333333 248.000000 2670.000000 --63.000000 -11.333333 290.000000 2670.000000 --62.833333 -11.333333 303.000000 2670.000000 --62.666667 -11.333333 259.000000 2670.000000 --62.500000 -11.333333 241.000000 2670.000000 --62.333333 -11.333333 214.000000 2670.000000 --62.166667 -11.333333 187.000000 2670.000000 --62.000000 -11.333333 167.000000 2670.000000 --61.833333 -11.333333 173.000000 2670.000000 --61.666667 -11.333333 259.000000 2670.000000 --61.500000 -11.333333 244.000000 2670.000000 --61.333333 -11.333333 261.000000 2670.000000 --61.166667 -11.333333 260.000000 2670.000000 --61.000000 -11.333333 416.000000 2670.000000 --60.833333 -11.333333 366.000000 2670.000000 --60.666667 -11.333333 375.000000 2670.000000 --60.500000 -11.333333 261.000000 2670.000000 --60.333333 -11.333333 296.000000 2670.000000 --60.166667 -11.333333 345.000000 2670.000000 --60.000000 -11.333333 355.000000 2670.000000 --59.833333 -11.333333 421.000000 2670.000000 --59.666667 -11.333333 423.000000 2670.000000 --59.500000 -11.333333 341.000000 2670.000000 --59.333333 -11.333333 327.000000 2670.000000 --59.166667 -11.333333 355.000000 2670.000000 --59.000000 -11.333333 409.000000 2670.000000 --58.833333 -11.333333 381.000000 2670.000000 --58.666667 -11.333333 364.000000 2670.000000 --58.500000 -11.333333 309.000000 2670.000000 --58.333333 -11.333333 256.000000 2670.000000 --58.166667 -11.333333 300.000000 2670.000000 --58.000000 -11.333333 300.000000 2670.000000 --57.833333 -11.333333 317.000000 2670.000000 --57.666667 -11.333333 281.000000 2670.000000 --57.500000 -11.333333 275.000000 2670.000000 --57.333333 -11.333333 312.000000 2670.000000 --57.166667 -11.333333 313.000000 2670.000000 --57.000000 -11.333333 350.000000 2670.000000 --56.833333 -11.333333 331.000000 2670.000000 --56.666667 -11.333333 361.000000 2670.000000 --56.500000 -11.333333 341.000000 2670.000000 --56.333333 -11.333333 350.000000 2670.000000 --56.166667 -11.333333 395.000000 2670.000000 --56.000000 -11.333333 349.000000 2670.000000 --55.833333 -11.333333 419.000000 2670.000000 --55.666667 -11.333333 339.000000 2670.000000 --55.500000 -11.333333 335.000000 2670.000000 --55.333333 -11.333333 346.000000 2670.000000 --55.166667 -11.333333 322.000000 2670.000000 --55.000000 -11.333333 315.000000 2670.000000 --54.833333 -11.333333 312.000000 2670.000000 --54.666667 -11.333333 331.000000 2670.000000 --54.500000 -11.333333 384.000000 2670.000000 --54.333333 -11.333333 355.000000 2670.000000 --54.166667 -11.333333 305.000000 2670.000000 --54.000000 -11.333333 365.000000 2670.000000 --53.833333 -11.333333 294.000000 2670.000000 --53.666667 -11.333333 332.000000 2670.000000 --53.500000 -11.333333 318.000000 2670.000000 --53.333333 -11.333333 275.000000 2670.000000 --53.166667 -11.333333 275.000000 2670.000000 --53.000000 -11.333333 306.000000 2670.000000 --52.833333 -11.333333 310.000000 2670.000000 --52.666667 -11.333333 328.000000 2670.000000 --52.500000 -11.333333 355.000000 2670.000000 --52.333333 -11.333333 362.000000 2670.000000 --52.166667 -11.333333 338.000000 2670.000000 --52.000000 -11.333333 276.000000 2670.000000 --51.833333 -11.333333 261.000000 2670.000000 --51.666667 -11.333333 239.000000 2670.000000 --51.500000 -11.333333 227.000000 2670.000000 --51.333333 -11.333333 200.000000 2670.000000 --51.166667 -11.333333 197.000000 2670.000000 --51.000000 -11.333333 188.000000 2670.000000 --50.833333 -11.333333 192.000000 2670.000000 --50.666667 -11.333333 188.000000 2670.000000 --50.500000 -11.333333 188.000000 2670.000000 --50.333333 -11.333333 187.000000 2670.000000 --50.166667 -11.333333 190.000000 2670.000000 --50.000000 -11.333333 189.000000 2670.000000 --49.833333 -11.333333 188.000000 2670.000000 --49.666667 -11.333333 191.000000 2670.000000 --49.500000 -11.333333 202.000000 2670.000000 --49.333333 -11.333333 239.000000 2670.000000 --49.166667 -11.333333 220.000000 2670.000000 --49.000000 -11.333333 288.000000 2670.000000 --48.833333 -11.333333 260.000000 2670.000000 --48.666667 -11.333333 308.000000 2670.000000 --48.500000 -11.333333 260.000000 2670.000000 --48.333333 -11.333333 256.000000 2670.000000 --48.166667 -11.333333 274.000000 2670.000000 --48.000000 -11.333333 282.000000 2670.000000 --47.833333 -11.333333 408.000000 2670.000000 --47.666667 -11.333333 467.000000 2670.000000 --47.500000 -11.333333 512.000000 2670.000000 --47.333333 -11.333333 531.000000 2670.000000 --47.166667 -11.333333 420.000000 2670.000000 --47.000000 -11.333333 550.000000 2670.000000 --46.833333 -11.333333 561.000000 2670.000000 --46.666667 -11.333333 723.000000 2670.000000 --46.500000 -11.333333 698.000000 2670.000000 --46.333333 -11.333333 718.000000 2670.000000 --46.166667 -11.333333 820.000000 2670.000000 --46.000000 -11.333333 803.000000 2670.000000 --45.833333 -11.333333 773.000000 2670.000000 --45.666667 -11.333333 768.000000 2670.000000 --45.500000 -11.333333 635.000000 2670.000000 --45.333333 -11.333333 646.000000 2670.000000 --45.166667 -11.333333 642.000000 2670.000000 --45.000000 -11.333333 751.000000 2670.000000 --44.833333 -11.333333 548.000000 2670.000000 --44.666667 -11.333333 490.000000 2670.000000 --44.500000 -11.333333 450.000000 2670.000000 --44.333333 -11.333333 435.000000 2670.000000 --44.166667 -11.333333 432.000000 2670.000000 --44.000000 -11.333333 427.000000 2670.000000 --43.833333 -11.333333 514.000000 2670.000000 --43.666667 -11.333333 520.000000 2670.000000 --43.500000 -11.333333 448.000000 2670.000000 --43.333333 -11.333333 432.000000 2670.000000 --43.166667 -11.333333 409.000000 2670.000000 --43.000000 -11.333333 417.000000 2670.000000 --42.833333 -11.333333 426.000000 2670.000000 --42.666667 -11.333333 980.000000 2670.000000 --42.500000 -11.333333 991.000000 2670.000000 --42.333333 -11.333333 499.000000 2670.000000 --42.166667 -11.333333 955.000000 2670.000000 --42.000000 -11.333333 698.000000 2670.000000 --41.833333 -11.333333 782.000000 2670.000000 --41.666667 -11.333333 818.000000 2670.000000 --41.500000 -11.333333 779.000000 2670.000000 --41.333333 -11.333333 952.000000 2670.000000 --41.166667 -11.333333 982.000000 2670.000000 --41.000000 -11.333333 889.000000 2670.000000 --40.833333 -11.333333 861.000000 2670.000000 --40.666667 -11.333333 523.000000 2670.000000 --40.500000 -11.333333 690.000000 2670.000000 --40.333333 -11.333333 450.000000 2670.000000 --40.166667 -11.333333 396.000000 2670.000000 --40.000000 -11.333333 398.000000 2670.000000 --65.000000 -11.500000 171.000000 2670.000000 --64.833333 -11.500000 159.000000 2670.000000 --64.666667 -11.500000 155.000000 2670.000000 --64.500000 -11.500000 168.000000 2670.000000 --64.333333 -11.500000 171.000000 2670.000000 --64.166667 -11.500000 175.000000 2670.000000 --64.000000 -11.500000 210.000000 2670.000000 --63.833333 -11.500000 202.000000 2670.000000 --63.666667 -11.500000 234.000000 2670.000000 --63.500000 -11.500000 239.000000 2670.000000 --63.333333 -11.500000 288.000000 2670.000000 --63.166667 -11.500000 298.000000 2670.000000 --63.000000 -11.500000 220.000000 2670.000000 --62.833333 -11.500000 288.000000 2670.000000 --62.666667 -11.500000 245.000000 2670.000000 --62.500000 -11.500000 286.000000 2670.000000 --62.333333 -11.500000 215.000000 2670.000000 --62.166667 -11.500000 203.000000 2670.000000 --62.000000 -11.500000 206.000000 2670.000000 --61.833333 -11.500000 182.000000 2670.000000 --61.666667 -11.500000 226.000000 2670.000000 --61.500000 -11.500000 207.000000 2670.000000 --61.333333 -11.500000 180.000000 2670.000000 --61.166667 -11.500000 222.000000 2670.000000 --61.000000 -11.500000 286.000000 2670.000000 --60.833333 -11.500000 237.000000 2670.000000 --60.666667 -11.500000 410.000000 2670.000000 --60.500000 -11.500000 320.000000 2670.000000 --60.333333 -11.500000 362.000000 2670.000000 --60.166667 -11.500000 424.000000 2670.000000 --60.000000 -11.500000 341.000000 2670.000000 --59.833333 -11.500000 342.000000 2670.000000 --59.666667 -11.500000 373.000000 2670.000000 --59.500000 -11.500000 370.000000 2670.000000 --59.333333 -11.500000 364.000000 2670.000000 --59.166667 -11.500000 342.000000 2670.000000 --59.000000 -11.500000 348.000000 2670.000000 --58.833333 -11.500000 335.000000 2670.000000 --58.666667 -11.500000 302.000000 2670.000000 --58.500000 -11.500000 305.000000 2670.000000 --58.333333 -11.500000 245.000000 2670.000000 --58.166667 -11.500000 251.000000 2670.000000 --58.000000 -11.500000 316.000000 2670.000000 --57.833333 -11.500000 299.000000 2670.000000 --57.666667 -11.500000 294.000000 2670.000000 --57.500000 -11.500000 264.000000 2670.000000 --57.333333 -11.500000 285.000000 2670.000000 --57.166667 -11.500000 275.000000 2670.000000 --57.000000 -11.500000 327.000000 2670.000000 --56.833333 -11.500000 340.000000 2670.000000 --56.666667 -11.500000 361.000000 2670.000000 --56.500000 -11.500000 365.000000 2670.000000 --56.333333 -11.500000 340.000000 2670.000000 --56.166667 -11.500000 356.000000 2670.000000 --56.000000 -11.500000 411.000000 2670.000000 --55.833333 -11.500000 413.000000 2670.000000 --55.666667 -11.500000 333.000000 2670.000000 --55.500000 -11.500000 339.000000 2670.000000 --55.333333 -11.500000 355.000000 2670.000000 --55.166667 -11.500000 371.000000 2670.000000 --55.000000 -11.500000 317.000000 2670.000000 --54.833333 -11.500000 328.000000 2670.000000 --54.666667 -11.500000 315.000000 2670.000000 --54.500000 -11.500000 384.000000 2670.000000 --54.333333 -11.500000 335.000000 2670.000000 --54.166667 -11.500000 359.000000 2670.000000 --54.000000 -11.500000 351.000000 2670.000000 --53.833333 -11.500000 312.000000 2670.000000 --53.666667 -11.500000 331.000000 2670.000000 --53.500000 -11.500000 278.000000 2670.000000 --53.333333 -11.500000 312.000000 2670.000000 --53.166667 -11.500000 312.000000 2670.000000 --53.000000 -11.500000 289.000000 2670.000000 --52.833333 -11.500000 317.000000 2670.000000 --52.666667 -11.500000 318.000000 2670.000000 --52.500000 -11.500000 329.000000 2670.000000 --52.333333 -11.500000 325.000000 2670.000000 --52.166667 -11.500000 369.000000 2670.000000 --52.000000 -11.500000 312.000000 2670.000000 --51.833333 -11.500000 295.000000 2670.000000 --51.666667 -11.500000 253.000000 2670.000000 --51.500000 -11.500000 267.000000 2670.000000 --51.333333 -11.500000 230.000000 2670.000000 --51.166667 -11.500000 222.000000 2670.000000 --51.000000 -11.500000 190.000000 2670.000000 --50.833333 -11.500000 191.000000 2670.000000 --50.666667 -11.500000 190.000000 2670.000000 --50.500000 -11.500000 191.000000 2670.000000 --50.333333 -11.500000 189.000000 2670.000000 --50.166667 -11.500000 191.000000 2670.000000 --50.000000 -11.500000 189.000000 2670.000000 --49.833333 -11.500000 190.000000 2670.000000 --49.666667 -11.500000 201.000000 2670.000000 --49.500000 -11.500000 217.000000 2670.000000 --49.333333 -11.500000 278.000000 2670.000000 --49.166667 -11.500000 262.000000 2670.000000 --49.000000 -11.500000 263.000000 2670.000000 --48.833333 -11.500000 287.000000 2670.000000 --48.666667 -11.500000 271.000000 2670.000000 --48.500000 -11.500000 254.000000 2670.000000 --48.333333 -11.500000 260.000000 2670.000000 --48.166667 -11.500000 267.000000 2670.000000 --48.000000 -11.500000 333.000000 2670.000000 --47.833333 -11.500000 339.000000 2670.000000 --47.666667 -11.500000 349.000000 2670.000000 --47.500000 -11.500000 451.000000 2670.000000 --47.333333 -11.500000 353.000000 2670.000000 --47.166667 -11.500000 420.000000 2670.000000 --47.000000 -11.500000 462.000000 2670.000000 --46.833333 -11.500000 546.000000 2670.000000 --46.666667 -11.500000 619.000000 2670.000000 --46.500000 -11.500000 903.000000 2670.000000 --46.333333 -11.500000 867.000000 2670.000000 --46.166667 -11.500000 838.000000 2670.000000 --46.000000 -11.500000 810.000000 2670.000000 --45.833333 -11.500000 788.000000 2670.000000 --45.666667 -11.500000 779.000000 2670.000000 --45.500000 -11.500000 770.000000 2670.000000 --45.333333 -11.500000 758.000000 2670.000000 --45.166667 -11.500000 654.000000 2670.000000 --45.000000 -11.500000 660.000000 2670.000000 --44.833333 -11.500000 474.000000 2670.000000 --44.666667 -11.500000 455.000000 2670.000000 --44.500000 -11.500000 441.000000 2670.000000 --44.333333 -11.500000 428.000000 2670.000000 --44.166667 -11.500000 428.000000 2670.000000 --44.000000 -11.500000 415.000000 2670.000000 --43.833333 -11.500000 438.000000 2670.000000 --43.666667 -11.500000 496.000000 2670.000000 --43.500000 -11.500000 456.000000 2670.000000 --43.333333 -11.500000 415.000000 2670.000000 --43.166667 -11.500000 416.000000 2670.000000 --43.000000 -11.500000 435.000000 2670.000000 --42.833333 -11.500000 512.000000 2670.000000 --42.666667 -11.500000 921.000000 2670.000000 --42.500000 -11.500000 1024.000000 2670.000000 --42.333333 -11.500000 775.000000 2670.000000 --42.166667 -11.500000 968.000000 2670.000000 --42.000000 -11.500000 773.000000 2670.000000 --41.833333 -11.500000 794.000000 2670.000000 --41.666667 -11.500000 789.000000 2670.000000 --41.500000 -11.500000 693.000000 2670.000000 --41.333333 -11.500000 927.000000 2670.000000 --41.166667 -11.500000 1078.000000 2670.000000 --41.000000 -11.500000 837.000000 2670.000000 --40.833333 -11.500000 888.000000 2670.000000 --40.666667 -11.500000 608.000000 2670.000000 --40.500000 -11.500000 589.000000 2670.000000 --40.333333 -11.500000 489.000000 2670.000000 --40.166667 -11.500000 398.000000 2670.000000 --40.000000 -11.500000 351.000000 2670.000000 --65.000000 -11.666667 157.000000 2670.000000 --64.833333 -11.666667 162.000000 2670.000000 --64.666667 -11.666667 161.000000 2670.000000 --64.500000 -11.666667 203.000000 2670.000000 --64.333333 -11.666667 206.000000 2670.000000 --64.166667 -11.666667 206.000000 2670.000000 --64.000000 -11.666667 399.000000 2670.000000 --63.833333 -11.666667 194.000000 2670.000000 --63.666667 -11.666667 203.000000 2670.000000 --63.500000 -11.666667 330.000000 2670.000000 --63.333333 -11.666667 240.000000 2670.000000 --63.166667 -11.666667 205.000000 2670.000000 --63.000000 -11.666667 205.000000 2670.000000 --62.833333 -11.666667 181.000000 2670.000000 --62.666667 -11.666667 208.000000 2670.000000 --62.500000 -11.666667 233.000000 2670.000000 --62.333333 -11.666667 258.000000 2670.000000 --62.166667 -11.666667 240.000000 2670.000000 --62.000000 -11.666667 221.000000 2670.000000 --61.833333 -11.666667 241.000000 2670.000000 --61.666667 -11.666667 234.000000 2670.000000 --61.500000 -11.666667 215.000000 2670.000000 --61.333333 -11.666667 238.000000 2670.000000 --61.166667 -11.666667 181.000000 2670.000000 --61.000000 -11.666667 226.000000 2670.000000 --60.833333 -11.666667 259.000000 2670.000000 --60.666667 -11.666667 359.000000 2670.000000 --60.500000 -11.666667 390.000000 2670.000000 --60.333333 -11.666667 355.000000 2670.000000 --60.166667 -11.666667 339.000000 2670.000000 --60.000000 -11.666667 346.000000 2670.000000 --59.833333 -11.666667 389.000000 2670.000000 --59.666667 -11.666667 349.000000 2670.000000 --59.500000 -11.666667 390.000000 2670.000000 --59.333333 -11.666667 352.000000 2670.000000 --59.166667 -11.666667 356.000000 2670.000000 --59.000000 -11.666667 362.000000 2670.000000 --58.833333 -11.666667 320.000000 2670.000000 --58.666667 -11.666667 326.000000 2670.000000 --58.500000 -11.666667 292.000000 2670.000000 --58.333333 -11.666667 295.000000 2670.000000 --58.166667 -11.666667 269.000000 2670.000000 --58.000000 -11.666667 299.000000 2670.000000 --57.833333 -11.666667 294.000000 2670.000000 --57.666667 -11.666667 314.000000 2670.000000 --57.500000 -11.666667 292.000000 2670.000000 --57.333333 -11.666667 280.000000 2670.000000 --57.166667 -11.666667 287.000000 2670.000000 --57.000000 -11.666667 307.000000 2670.000000 --56.833333 -11.666667 326.000000 2670.000000 --56.666667 -11.666667 368.000000 2670.000000 --56.500000 -11.666667 385.000000 2670.000000 --56.333333 -11.666667 352.000000 2670.000000 --56.166667 -11.666667 376.000000 2670.000000 --56.000000 -11.666667 396.000000 2670.000000 --55.833333 -11.666667 372.000000 2670.000000 --55.666667 -11.666667 351.000000 2670.000000 --55.500000 -11.666667 391.000000 2670.000000 --55.333333 -11.666667 377.000000 2670.000000 --55.166667 -11.666667 376.000000 2670.000000 --55.000000 -11.666667 317.000000 2670.000000 --54.833333 -11.666667 310.000000 2670.000000 --54.666667 -11.666667 332.000000 2670.000000 --54.500000 -11.666667 344.000000 2670.000000 --54.333333 -11.666667 345.000000 2670.000000 --54.166667 -11.666667 300.000000 2670.000000 --54.000000 -11.666667 330.000000 2670.000000 --53.833333 -11.666667 326.000000 2670.000000 --53.666667 -11.666667 320.000000 2670.000000 --53.500000 -11.666667 316.000000 2670.000000 --53.333333 -11.666667 326.000000 2670.000000 --53.166667 -11.666667 278.000000 2670.000000 --53.000000 -11.666667 320.000000 2670.000000 --52.833333 -11.666667 303.000000 2670.000000 --52.666667 -11.666667 281.000000 2670.000000 --52.500000 -11.666667 309.000000 2670.000000 --52.333333 -11.666667 344.000000 2670.000000 --52.166667 -11.666667 351.000000 2670.000000 --52.000000 -11.666667 343.000000 2670.000000 --51.833333 -11.666667 317.000000 2670.000000 --51.666667 -11.666667 321.000000 2670.000000 --51.500000 -11.666667 272.000000 2670.000000 --51.333333 -11.666667 235.000000 2670.000000 --51.166667 -11.666667 213.000000 2670.000000 --51.000000 -11.666667 195.000000 2670.000000 --50.833333 -11.666667 202.000000 2670.000000 --50.666667 -11.666667 191.000000 2670.000000 --50.500000 -11.666667 192.000000 2670.000000 --50.333333 -11.666667 191.000000 2670.000000 --50.166667 -11.666667 193.000000 2670.000000 --50.000000 -11.666667 191.000000 2670.000000 --49.833333 -11.666667 198.000000 2670.000000 --49.666667 -11.666667 194.000000 2670.000000 --49.500000 -11.666667 203.000000 2670.000000 --49.333333 -11.666667 285.000000 2670.000000 --49.166667 -11.666667 341.000000 2670.000000 --49.000000 -11.666667 286.000000 2670.000000 --48.833333 -11.666667 321.000000 2670.000000 --48.666667 -11.666667 238.000000 2670.000000 --48.500000 -11.666667 264.000000 2670.000000 --48.333333 -11.666667 262.000000 2670.000000 --48.166667 -11.666667 252.000000 2670.000000 --48.000000 -11.666667 311.000000 2670.000000 --47.833333 -11.666667 343.000000 2670.000000 --47.666667 -11.666667 426.000000 2670.000000 --47.500000 -11.666667 488.000000 2670.000000 --47.333333 -11.666667 372.000000 2670.000000 --47.166667 -11.666667 394.000000 2670.000000 --47.000000 -11.666667 407.000000 2670.000000 --46.833333 -11.666667 725.000000 2670.000000 --46.666667 -11.666667 592.000000 2670.000000 --46.500000 -11.666667 638.000000 2670.000000 --46.333333 -11.666667 803.000000 2670.000000 --46.166667 -11.666667 838.000000 2670.000000 --46.000000 -11.666667 813.000000 2670.000000 --45.833333 -11.666667 762.000000 2670.000000 --45.666667 -11.666667 779.000000 2670.000000 --45.500000 -11.666667 766.000000 2670.000000 --45.333333 -11.666667 667.000000 2670.000000 --45.166667 -11.666667 759.000000 2670.000000 --45.000000 -11.666667 769.000000 2670.000000 --44.833333 -11.666667 483.000000 2670.000000 --44.666667 -11.666667 444.000000 2670.000000 --44.500000 -11.666667 440.000000 2670.000000 --44.333333 -11.666667 434.000000 2670.000000 --44.166667 -11.666667 420.000000 2670.000000 --44.000000 -11.666667 426.000000 2670.000000 --43.833333 -11.666667 430.000000 2670.000000 --43.666667 -11.666667 539.000000 2670.000000 --43.500000 -11.666667 432.000000 2670.000000 --43.333333 -11.666667 411.000000 2670.000000 --43.166667 -11.666667 483.000000 2670.000000 --43.000000 -11.666667 558.000000 2670.000000 --42.833333 -11.666667 843.000000 2670.000000 --42.666667 -11.666667 856.000000 2670.000000 --42.500000 -11.666667 1323.000000 2670.000000 --42.333333 -11.666667 640.000000 2670.000000 --42.166667 -11.666667 738.000000 2670.000000 --42.000000 -11.666667 749.000000 2670.000000 --41.833333 -11.666667 742.000000 2670.000000 --41.666667 -11.666667 702.000000 2670.000000 --41.500000 -11.666667 760.000000 2670.000000 --41.333333 -11.666667 974.000000 2670.000000 --41.166667 -11.666667 961.000000 2670.000000 --41.000000 -11.666667 854.000000 2670.000000 --40.833333 -11.666667 712.000000 2670.000000 --40.666667 -11.666667 610.000000 2670.000000 --40.500000 -11.666667 554.000000 2670.000000 --40.333333 -11.666667 444.000000 2670.000000 --40.166667 -11.666667 467.000000 2670.000000 --40.000000 -11.666667 415.000000 2670.000000 --65.000000 -11.833333 163.000000 2670.000000 --64.833333 -11.833333 166.000000 2670.000000 --64.666667 -11.833333 169.000000 2670.000000 --64.500000 -11.833333 171.000000 2670.000000 --64.333333 -11.833333 201.000000 2670.000000 --64.166667 -11.833333 180.000000 2670.000000 --64.000000 -11.833333 217.000000 2670.000000 --63.833333 -11.833333 219.000000 2670.000000 --63.666667 -11.833333 238.000000 2670.000000 --63.500000 -11.833333 205.000000 2670.000000 --63.333333 -11.833333 193.000000 2670.000000 --63.166667 -11.833333 192.000000 2670.000000 --63.000000 -11.833333 183.000000 2670.000000 --62.833333 -11.833333 179.000000 2670.000000 --62.666667 -11.833333 204.000000 2670.000000 --62.500000 -11.833333 202.000000 2670.000000 --62.333333 -11.833333 277.000000 2670.000000 --62.166667 -11.833333 313.000000 2670.000000 --62.000000 -11.833333 283.000000 2670.000000 --61.833333 -11.833333 280.000000 2670.000000 --61.666667 -11.833333 240.000000 2670.000000 --61.500000 -11.833333 216.000000 2670.000000 --61.333333 -11.833333 231.000000 2670.000000 --61.166667 -11.833333 201.000000 2670.000000 --61.000000 -11.833333 209.000000 2670.000000 --60.833333 -11.833333 227.000000 2670.000000 --60.666667 -11.833333 328.000000 2670.000000 --60.500000 -11.833333 341.000000 2670.000000 --60.333333 -11.833333 371.000000 2670.000000 --60.166667 -11.833333 427.000000 2670.000000 --60.000000 -11.833333 423.000000 2670.000000 --59.833333 -11.833333 390.000000 2670.000000 --59.666667 -11.833333 334.000000 2670.000000 --59.500000 -11.833333 361.000000 2670.000000 --59.333333 -11.833333 388.000000 2670.000000 --59.166667 -11.833333 407.000000 2670.000000 --59.000000 -11.833333 425.000000 2670.000000 --58.833333 -11.833333 410.000000 2670.000000 --58.666667 -11.833333 289.000000 2670.000000 --58.500000 -11.833333 338.000000 2670.000000 --58.333333 -11.833333 276.000000 2670.000000 --58.166667 -11.833333 290.000000 2670.000000 --58.000000 -11.833333 285.000000 2670.000000 --57.833333 -11.833333 310.000000 2670.000000 --57.666667 -11.833333 337.000000 2670.000000 --57.500000 -11.833333 313.000000 2670.000000 --57.333333 -11.833333 290.000000 2670.000000 --57.166667 -11.833333 298.000000 2670.000000 --57.000000 -11.833333 315.000000 2670.000000 --56.833333 -11.833333 331.000000 2670.000000 --56.666667 -11.833333 333.000000 2670.000000 --56.500000 -11.833333 362.000000 2670.000000 --56.333333 -11.833333 372.000000 2670.000000 --56.166667 -11.833333 384.000000 2670.000000 --56.000000 -11.833333 373.000000 2670.000000 --55.833333 -11.833333 330.000000 2670.000000 --55.666667 -11.833333 323.000000 2670.000000 --55.500000 -11.833333 373.000000 2670.000000 --55.333333 -11.833333 353.000000 2670.000000 --55.166667 -11.833333 343.000000 2670.000000 --55.000000 -11.833333 354.000000 2670.000000 --54.833333 -11.833333 373.000000 2670.000000 --54.666667 -11.833333 376.000000 2670.000000 --54.500000 -11.833333 381.000000 2670.000000 --54.333333 -11.833333 339.000000 2670.000000 --54.166667 -11.833333 339.000000 2670.000000 --54.000000 -11.833333 349.000000 2670.000000 --53.833333 -11.833333 345.000000 2670.000000 --53.666667 -11.833333 316.000000 2670.000000 --53.500000 -11.833333 311.000000 2670.000000 --53.333333 -11.833333 329.000000 2670.000000 --53.166667 -11.833333 303.000000 2670.000000 --53.000000 -11.833333 325.000000 2670.000000 --52.833333 -11.833333 317.000000 2670.000000 --52.666667 -11.833333 326.000000 2670.000000 --52.500000 -11.833333 308.000000 2670.000000 --52.333333 -11.833333 345.000000 2670.000000 --52.166667 -11.833333 318.000000 2670.000000 --52.000000 -11.833333 375.000000 2670.000000 --51.833333 -11.833333 389.000000 2670.000000 --51.666667 -11.833333 319.000000 2670.000000 --51.500000 -11.833333 360.000000 2670.000000 --51.333333 -11.833333 246.000000 2670.000000 --51.166667 -11.833333 209.000000 2670.000000 --51.000000 -11.833333 195.000000 2670.000000 --50.833333 -11.833333 196.000000 2670.000000 --50.666667 -11.833333 195.000000 2670.000000 --50.500000 -11.833333 195.000000 2670.000000 --50.333333 -11.833333 194.000000 2670.000000 --50.166667 -11.833333 195.000000 2670.000000 --50.000000 -11.833333 194.000000 2670.000000 --49.833333 -11.833333 190.000000 2670.000000 --49.666667 -11.833333 192.000000 2670.000000 --49.500000 -11.833333 238.000000 2670.000000 --49.333333 -11.833333 233.000000 2670.000000 --49.166667 -11.833333 286.000000 2670.000000 --49.000000 -11.833333 255.000000 2670.000000 --48.833333 -11.833333 245.000000 2670.000000 --48.666667 -11.833333 244.000000 2670.000000 --48.500000 -11.833333 277.000000 2670.000000 --48.333333 -11.833333 274.000000 2670.000000 --48.166667 -11.833333 311.000000 2670.000000 --48.000000 -11.833333 303.000000 2670.000000 --47.833333 -11.833333 310.000000 2670.000000 --47.666667 -11.833333 302.000000 2670.000000 --47.500000 -11.833333 312.000000 2670.000000 --47.333333 -11.833333 353.000000 2670.000000 --47.166667 -11.833333 343.000000 2670.000000 --47.000000 -11.833333 384.000000 2670.000000 --46.833333 -11.833333 461.000000 2670.000000 --46.666667 -11.833333 639.000000 2670.000000 --46.500000 -11.833333 609.000000 2670.000000 --46.333333 -11.833333 864.000000 2670.000000 --46.166667 -11.833333 821.000000 2670.000000 --46.000000 -11.833333 781.000000 2670.000000 --45.833333 -11.833333 781.000000 2670.000000 --45.666667 -11.833333 766.000000 2670.000000 --45.500000 -11.833333 752.000000 2670.000000 --45.333333 -11.833333 609.000000 2670.000000 --45.166667 -11.833333 481.000000 2670.000000 --45.000000 -11.833333 673.000000 2670.000000 --44.833333 -11.833333 493.000000 2670.000000 --44.666667 -11.833333 448.000000 2670.000000 --44.500000 -11.833333 438.000000 2670.000000 --44.333333 -11.833333 430.000000 2670.000000 --44.166667 -11.833333 434.000000 2670.000000 --44.000000 -11.833333 446.000000 2670.000000 --43.833333 -11.833333 448.000000 2670.000000 --43.666667 -11.833333 677.000000 2670.000000 --43.500000 -11.833333 448.000000 2670.000000 --43.333333 -11.833333 413.000000 2670.000000 --43.166667 -11.833333 426.000000 2670.000000 --43.000000 -11.833333 434.000000 2670.000000 --42.833333 -11.833333 593.000000 2670.000000 --42.666667 -11.833333 732.000000 2670.000000 --42.500000 -11.833333 988.000000 2670.000000 --42.333333 -11.833333 1078.000000 2670.000000 --42.166667 -11.833333 878.000000 2670.000000 --42.000000 -11.833333 795.000000 2670.000000 --41.833333 -11.833333 786.000000 2670.000000 --41.666667 -11.833333 812.000000 2670.000000 --41.500000 -11.833333 791.000000 2670.000000 --41.333333 -11.833333 946.000000 2670.000000 --41.166667 -11.833333 946.000000 2670.000000 --41.000000 -11.833333 784.000000 2670.000000 --40.833333 -11.833333 805.000000 2670.000000 --40.666667 -11.833333 606.000000 2670.000000 --40.500000 -11.833333 665.000000 2670.000000 --40.333333 -11.833333 465.000000 2670.000000 --40.166667 -11.833333 425.000000 2670.000000 --40.000000 -11.833333 338.000000 2670.000000 --65.000000 -12.000000 132.000000 2670.000000 --64.833333 -12.000000 160.000000 2670.000000 --64.666667 -12.000000 167.000000 2670.000000 --64.500000 -12.000000 174.000000 2670.000000 --64.333333 -12.000000 168.000000 2670.000000 --64.166667 -12.000000 186.000000 2670.000000 --64.000000 -12.000000 181.000000 2670.000000 --63.833333 -12.000000 168.000000 2670.000000 --63.666667 -12.000000 198.000000 2670.000000 --63.500000 -12.000000 182.000000 2670.000000 --63.333333 -12.000000 210.000000 2670.000000 --63.166667 -12.000000 176.000000 2670.000000 --63.000000 -12.000000 165.000000 2670.000000 --62.833333 -12.000000 174.000000 2670.000000 --62.666667 -12.000000 334.000000 2670.000000 --62.500000 -12.000000 175.000000 2670.000000 --62.333333 -12.000000 327.000000 2670.000000 --62.166667 -12.000000 403.000000 2670.000000 --62.000000 -12.000000 398.000000 2670.000000 --61.833333 -12.000000 381.000000 2670.000000 --61.666667 -12.000000 337.000000 2670.000000 --61.500000 -12.000000 262.000000 2670.000000 --61.333333 -12.000000 213.000000 2670.000000 --61.166667 -12.000000 216.000000 2670.000000 --61.000000 -12.000000 283.000000 2670.000000 --60.833333 -12.000000 308.000000 2670.000000 --60.666667 -12.000000 275.000000 2670.000000 --60.500000 -12.000000 351.000000 2670.000000 --60.333333 -12.000000 370.000000 2670.000000 --60.166667 -12.000000 435.000000 2670.000000 --60.000000 -12.000000 395.000000 2670.000000 --59.833333 -12.000000 447.000000 2670.000000 --59.666667 -12.000000 427.000000 2670.000000 --59.500000 -12.000000 394.000000 2670.000000 --59.333333 -12.000000 469.000000 2670.000000 --59.166667 -12.000000 354.000000 2670.000000 --59.000000 -12.000000 354.000000 2670.000000 --58.833333 -12.000000 302.000000 2670.000000 --58.666667 -12.000000 284.000000 2670.000000 --58.500000 -12.000000 305.000000 2670.000000 --58.333333 -12.000000 325.000000 2670.000000 --58.166667 -12.000000 298.000000 2670.000000 --58.000000 -12.000000 273.000000 2670.000000 --57.833333 -12.000000 293.000000 2670.000000 --57.666667 -12.000000 332.000000 2670.000000 --57.500000 -12.000000 361.000000 2670.000000 --57.333333 -12.000000 326.000000 2670.000000 --57.166667 -12.000000 281.000000 2670.000000 --57.000000 -12.000000 318.000000 2670.000000 --56.833333 -12.000000 350.000000 2670.000000 --56.666667 -12.000000 344.000000 2670.000000 --56.500000 -12.000000 348.000000 2670.000000 --56.333333 -12.000000 378.000000 2670.000000 --56.166667 -12.000000 390.000000 2670.000000 --56.000000 -12.000000 351.000000 2670.000000 --55.833333 -12.000000 376.000000 2670.000000 --55.666667 -12.000000 360.000000 2670.000000 --55.500000 -12.000000 362.000000 2670.000000 --55.333333 -12.000000 357.000000 2670.000000 --55.166667 -12.000000 377.000000 2670.000000 --55.000000 -12.000000 313.000000 2670.000000 --54.833333 -12.000000 389.000000 2670.000000 --54.666667 -12.000000 371.000000 2670.000000 --54.500000 -12.000000 310.000000 2670.000000 --54.333333 -12.000000 351.000000 2670.000000 --54.166667 -12.000000 360.000000 2670.000000 --54.000000 -12.000000 324.000000 2670.000000 --53.833333 -12.000000 317.000000 2670.000000 --53.666667 -12.000000 290.000000 2670.000000 --53.500000 -12.000000 295.000000 2670.000000 --53.333333 -12.000000 318.000000 2670.000000 --53.166667 -12.000000 324.000000 2670.000000 --53.000000 -12.000000 327.000000 2670.000000 --52.833333 -12.000000 323.000000 2670.000000 --52.666667 -12.000000 318.000000 2670.000000 --52.500000 -12.000000 341.000000 2670.000000 --52.333333 -12.000000 301.000000 2670.000000 --52.166667 -12.000000 339.000000 2670.000000 --52.000000 -12.000000 333.000000 2670.000000 --51.833333 -12.000000 373.000000 2670.000000 --51.666667 -12.000000 298.000000 2670.000000 --51.500000 -12.000000 322.000000 2670.000000 --51.333333 -12.000000 270.000000 2670.000000 --51.166667 -12.000000 227.000000 2670.000000 --51.000000 -12.000000 200.000000 2670.000000 --50.833333 -12.000000 197.000000 2670.000000 --50.666667 -12.000000 198.000000 2670.000000 --50.500000 -12.000000 196.000000 2670.000000 --50.333333 -12.000000 195.000000 2670.000000 --50.166667 -12.000000 196.000000 2670.000000 --50.000000 -12.000000 197.000000 2670.000000 --49.833333 -12.000000 195.000000 2670.000000 --49.666667 -12.000000 196.000000 2670.000000 --49.500000 -12.000000 245.000000 2670.000000 --49.333333 -12.000000 282.000000 2670.000000 --49.166667 -12.000000 274.000000 2670.000000 --49.000000 -12.000000 264.000000 2670.000000 --48.833333 -12.000000 271.000000 2670.000000 --48.666667 -12.000000 241.000000 2670.000000 --48.500000 -12.000000 245.000000 2670.000000 --48.333333 -12.000000 326.000000 2670.000000 --48.166667 -12.000000 329.000000 2670.000000 --48.000000 -12.000000 386.000000 2670.000000 --47.833333 -12.000000 520.000000 2670.000000 --47.666667 -12.000000 342.000000 2670.000000 --47.500000 -12.000000 329.000000 2670.000000 --47.333333 -12.000000 322.000000 2670.000000 --47.166667 -12.000000 352.000000 2670.000000 --47.000000 -12.000000 375.000000 2670.000000 --46.833333 -12.000000 436.000000 2670.000000 --46.666667 -12.000000 393.000000 2670.000000 --46.500000 -12.000000 470.000000 2670.000000 --46.333333 -12.000000 846.000000 2670.000000 --46.166667 -12.000000 846.000000 2670.000000 --46.000000 -12.000000 807.000000 2670.000000 --45.833333 -12.000000 772.000000 2670.000000 --45.666667 -12.000000 766.000000 2670.000000 --45.500000 -12.000000 748.000000 2670.000000 --45.333333 -12.000000 739.000000 2670.000000 --45.166667 -12.000000 742.000000 2670.000000 --45.000000 -12.000000 457.000000 2670.000000 --44.833333 -12.000000 458.000000 2670.000000 --44.666667 -12.000000 470.000000 2670.000000 --44.500000 -12.000000 475.000000 2670.000000 --44.333333 -12.000000 482.000000 2670.000000 --44.166667 -12.000000 483.000000 2670.000000 --44.000000 -12.000000 716.000000 2670.000000 --43.833333 -12.000000 502.000000 2670.000000 --43.666667 -12.000000 469.000000 2670.000000 --43.500000 -12.000000 620.000000 2670.000000 --43.333333 -12.000000 415.000000 2670.000000 --43.166667 -12.000000 548.000000 2670.000000 --43.000000 -12.000000 445.000000 2670.000000 --42.833333 -12.000000 467.000000 2670.000000 --42.666667 -12.000000 913.000000 2670.000000 --42.500000 -12.000000 872.000000 2670.000000 --42.333333 -12.000000 1082.000000 2670.000000 --42.166667 -12.000000 1175.000000 2670.000000 --42.000000 -12.000000 833.000000 2670.000000 --41.833333 -12.000000 806.000000 2670.000000 --41.666667 -12.000000 843.000000 2670.000000 --41.500000 -12.000000 1030.000000 2670.000000 --41.333333 -12.000000 950.000000 2670.000000 --41.166667 -12.000000 810.000000 2670.000000 --41.000000 -12.000000 640.000000 2670.000000 --40.833333 -12.000000 710.000000 2670.000000 --40.666667 -12.000000 540.000000 2670.000000 --40.500000 -12.000000 459.000000 2670.000000 --40.333333 -12.000000 372.000000 2670.000000 --40.166667 -12.000000 341.000000 2670.000000 --40.000000 -12.000000 307.000000 2670.000000 --65.000000 -12.166667 145.000000 2670.000000 --64.833333 -12.166667 157.000000 2670.000000 --64.666667 -12.166667 132.000000 2670.000000 --64.500000 -12.166667 149.000000 2670.000000 --64.333333 -12.166667 165.000000 2670.000000 --64.166667 -12.166667 163.000000 2670.000000 --64.000000 -12.166667 172.000000 2670.000000 --63.833333 -12.166667 226.000000 2670.000000 --63.666667 -12.166667 189.000000 2670.000000 --63.500000 -12.166667 163.000000 2670.000000 --63.333333 -12.166667 162.000000 2670.000000 --63.166667 -12.166667 166.000000 2670.000000 --63.000000 -12.166667 175.000000 2670.000000 --62.833333 -12.166667 185.000000 2670.000000 --62.666667 -12.166667 193.000000 2670.000000 --62.500000 -12.166667 189.000000 2670.000000 --62.333333 -12.166667 436.000000 2670.000000 --62.166667 -12.166667 450.000000 2670.000000 --62.000000 -12.166667 445.000000 2670.000000 --61.833333 -12.166667 414.000000 2670.000000 --61.666667 -12.166667 335.000000 2670.000000 --61.500000 -12.166667 302.000000 2670.000000 --61.333333 -12.166667 273.000000 2670.000000 --61.166667 -12.166667 252.000000 2670.000000 --61.000000 -12.166667 306.000000 2670.000000 --60.833333 -12.166667 312.000000 2670.000000 --60.666667 -12.166667 322.000000 2670.000000 --60.500000 -12.166667 326.000000 2670.000000 --60.333333 -12.166667 371.000000 2670.000000 --60.166667 -12.166667 420.000000 2670.000000 --60.000000 -12.166667 440.000000 2670.000000 --59.833333 -12.166667 413.000000 2670.000000 --59.666667 -12.166667 469.000000 2670.000000 --59.500000 -12.166667 377.000000 2670.000000 --59.333333 -12.166667 337.000000 2670.000000 --59.166667 -12.166667 401.000000 2670.000000 --59.000000 -12.166667 344.000000 2670.000000 --58.833333 -12.166667 293.000000 2670.000000 --58.666667 -12.166667 290.000000 2670.000000 --58.500000 -12.166667 278.000000 2670.000000 --58.333333 -12.166667 343.000000 2670.000000 --58.166667 -12.166667 278.000000 2670.000000 --58.000000 -12.166667 287.000000 2670.000000 --57.833333 -12.166667 277.000000 2670.000000 --57.666667 -12.166667 279.000000 2670.000000 --57.500000 -12.166667 302.000000 2670.000000 --57.333333 -12.166667 377.000000 2670.000000 --57.166667 -12.166667 308.000000 2670.000000 --57.000000 -12.166667 322.000000 2670.000000 --56.833333 -12.166667 333.000000 2670.000000 --56.666667 -12.166667 305.000000 2670.000000 --56.500000 -12.166667 355.000000 2670.000000 --56.333333 -12.166667 400.000000 2670.000000 --56.166667 -12.166667 371.000000 2670.000000 --56.000000 -12.166667 374.000000 2670.000000 --55.833333 -12.166667 375.000000 2670.000000 --55.666667 -12.166667 370.000000 2670.000000 --55.500000 -12.166667 342.000000 2670.000000 --55.333333 -12.166667 371.000000 2670.000000 --55.166667 -12.166667 356.000000 2670.000000 --55.000000 -12.166667 389.000000 2670.000000 --54.833333 -12.166667 325.000000 2670.000000 --54.666667 -12.166667 352.000000 2670.000000 --54.500000 -12.166667 379.000000 2670.000000 --54.333333 -12.166667 356.000000 2670.000000 --54.166667 -12.166667 339.000000 2670.000000 --54.000000 -12.166667 346.000000 2670.000000 --53.833333 -12.166667 289.000000 2670.000000 --53.666667 -12.166667 311.000000 2670.000000 --53.500000 -12.166667 326.000000 2670.000000 --53.333333 -12.166667 288.000000 2670.000000 --53.166667 -12.166667 313.000000 2670.000000 --53.000000 -12.166667 313.000000 2670.000000 --52.833333 -12.166667 312.000000 2670.000000 --52.666667 -12.166667 331.000000 2670.000000 --52.500000 -12.166667 345.000000 2670.000000 --52.333333 -12.166667 312.000000 2670.000000 --52.166667 -12.166667 289.000000 2670.000000 --52.000000 -12.166667 333.000000 2670.000000 --51.833333 -12.166667 330.000000 2670.000000 --51.666667 -12.166667 332.000000 2670.000000 --51.500000 -12.166667 267.000000 2670.000000 --51.333333 -12.166667 266.000000 2670.000000 --51.166667 -12.166667 224.000000 2670.000000 --51.000000 -12.166667 201.000000 2670.000000 --50.833333 -12.166667 199.000000 2670.000000 --50.666667 -12.166667 201.000000 2670.000000 --50.500000 -12.166667 203.000000 2670.000000 --50.333333 -12.166667 199.000000 2670.000000 --50.166667 -12.166667 197.000000 2670.000000 --50.000000 -12.166667 199.000000 2670.000000 --49.833333 -12.166667 216.000000 2670.000000 --49.666667 -12.166667 213.000000 2670.000000 --49.500000 -12.166667 239.000000 2670.000000 --49.333333 -12.166667 306.000000 2670.000000 --49.166667 -12.166667 270.000000 2670.000000 --49.000000 -12.166667 290.000000 2670.000000 --48.833333 -12.166667 307.000000 2670.000000 --48.666667 -12.166667 258.000000 2670.000000 --48.500000 -12.166667 245.000000 2670.000000 --48.333333 -12.166667 295.000000 2670.000000 --48.166667 -12.166667 305.000000 2670.000000 --48.000000 -12.166667 367.000000 2670.000000 --47.833333 -12.166667 627.000000 2670.000000 --47.666667 -12.166667 470.000000 2670.000000 --47.500000 -12.166667 356.000000 2670.000000 --47.333333 -12.166667 381.000000 2670.000000 --47.166667 -12.166667 386.000000 2670.000000 --47.000000 -12.166667 617.000000 2670.000000 --46.833333 -12.166667 364.000000 2670.000000 --46.666667 -12.166667 394.000000 2670.000000 --46.500000 -12.166667 472.000000 2670.000000 --46.333333 -12.166667 886.000000 2670.000000 --46.166667 -12.166667 816.000000 2670.000000 --46.000000 -12.166667 756.000000 2670.000000 --45.833333 -12.166667 774.000000 2670.000000 --45.666667 -12.166667 726.000000 2670.000000 --45.500000 -12.166667 699.000000 2670.000000 --45.333333 -12.166667 730.000000 2670.000000 --45.166667 -12.166667 539.000000 2670.000000 --45.000000 -12.166667 455.000000 2670.000000 --44.833333 -12.166667 693.000000 2670.000000 --44.666667 -12.166667 752.000000 2670.000000 --44.500000 -12.166667 765.000000 2670.000000 --44.333333 -12.166667 789.000000 2670.000000 --44.166667 -12.166667 766.000000 2670.000000 --44.000000 -12.166667 785.000000 2670.000000 --43.833333 -12.166667 859.000000 2670.000000 --43.666667 -12.166667 461.000000 2670.000000 --43.500000 -12.166667 478.000000 2670.000000 --43.333333 -12.166667 497.000000 2670.000000 --43.166667 -12.166667 465.000000 2670.000000 --43.000000 -12.166667 867.000000 2670.000000 --42.833333 -12.166667 446.000000 2670.000000 --42.666667 -12.166667 546.000000 2670.000000 --42.500000 -12.166667 559.000000 2670.000000 --42.333333 -12.166667 1081.000000 2670.000000 --42.166667 -12.166667 1086.000000 2670.000000 --42.000000 -12.166667 917.000000 2670.000000 --41.833333 -12.166667 1013.000000 2670.000000 --41.666667 -12.166667 783.000000 2670.000000 --41.500000 -12.166667 799.000000 2670.000000 --41.333333 -12.166667 887.000000 2670.000000 --41.166667 -12.166667 535.000000 2670.000000 --41.000000 -12.166667 672.000000 2670.000000 --40.833333 -12.166667 612.000000 2670.000000 --40.666667 -12.166667 536.000000 2670.000000 --40.500000 -12.166667 435.000000 2670.000000 --40.333333 -12.166667 361.000000 2670.000000 --40.166667 -12.166667 278.000000 2670.000000 --40.000000 -12.166667 267.000000 2670.000000 --65.000000 -12.333333 150.000000 2670.000000 --64.833333 -12.333333 164.000000 2670.000000 --64.666667 -12.333333 184.000000 2670.000000 --64.500000 -12.333333 136.000000 2670.000000 --64.333333 -12.333333 293.000000 2670.000000 --64.166667 -12.333333 184.000000 2670.000000 --64.000000 -12.333333 192.000000 2670.000000 --63.833333 -12.333333 165.000000 2670.000000 --63.666667 -12.333333 169.000000 2670.000000 --63.500000 -12.333333 166.000000 2670.000000 --63.333333 -12.333333 186.000000 2670.000000 --63.166667 -12.333333 151.000000 2670.000000 --63.000000 -12.333333 166.000000 2670.000000 --62.833333 -12.333333 160.000000 2670.000000 --62.666667 -12.333333 179.000000 2670.000000 --62.500000 -12.333333 194.000000 2670.000000 --62.333333 -12.333333 243.000000 2670.000000 --62.166667 -12.333333 284.000000 2670.000000 --62.000000 -12.333333 216.000000 2670.000000 --61.833333 -12.333333 271.000000 2670.000000 --61.666667 -12.333333 458.000000 2670.000000 --61.500000 -12.333333 296.000000 2670.000000 --61.333333 -12.333333 332.000000 2670.000000 --61.166667 -12.333333 325.000000 2670.000000 --61.000000 -12.333333 287.000000 2670.000000 --60.833333 -12.333333 297.000000 2670.000000 --60.666667 -12.333333 319.000000 2670.000000 --60.500000 -12.333333 316.000000 2670.000000 --60.333333 -12.333333 450.000000 2670.000000 --60.166667 -12.333333 490.000000 2670.000000 --60.000000 -12.333333 473.000000 2670.000000 --59.833333 -12.333333 496.000000 2670.000000 --59.666667 -12.333333 424.000000 2670.000000 --59.500000 -12.333333 376.000000 2670.000000 --59.333333 -12.333333 397.000000 2670.000000 --59.166667 -12.333333 355.000000 2670.000000 --59.000000 -12.333333 383.000000 2670.000000 --58.833333 -12.333333 292.000000 2670.000000 --58.666667 -12.333333 350.000000 2670.000000 --58.500000 -12.333333 258.000000 2670.000000 --58.333333 -12.333333 341.000000 2670.000000 --58.166667 -12.333333 309.000000 2670.000000 --58.000000 -12.333333 289.000000 2670.000000 --57.833333 -12.333333 305.000000 2670.000000 --57.666667 -12.333333 313.000000 2670.000000 --57.500000 -12.333333 318.000000 2670.000000 --57.333333 -12.333333 348.000000 2670.000000 --57.166667 -12.333333 358.000000 2670.000000 --57.000000 -12.333333 289.000000 2670.000000 --56.833333 -12.333333 311.000000 2670.000000 --56.666667 -12.333333 287.000000 2670.000000 --56.500000 -12.333333 333.000000 2670.000000 --56.333333 -12.333333 392.000000 2670.000000 --56.166667 -12.333333 377.000000 2670.000000 --56.000000 -12.333333 339.000000 2670.000000 --55.833333 -12.333333 384.000000 2670.000000 --55.666667 -12.333333 375.000000 2670.000000 --55.500000 -12.333333 354.000000 2670.000000 --55.333333 -12.333333 390.000000 2670.000000 --55.166667 -12.333333 349.000000 2670.000000 --55.000000 -12.333333 372.000000 2670.000000 --54.833333 -12.333333 376.000000 2670.000000 --54.666667 -12.333333 335.000000 2670.000000 --54.500000 -12.333333 321.000000 2670.000000 --54.333333 -12.333333 325.000000 2670.000000 --54.166667 -12.333333 344.000000 2670.000000 --54.000000 -12.333333 354.000000 2670.000000 --53.833333 -12.333333 335.000000 2670.000000 --53.666667 -12.333333 331.000000 2670.000000 --53.500000 -12.333333 318.000000 2670.000000 --53.333333 -12.333333 313.000000 2670.000000 --53.166667 -12.333333 292.000000 2670.000000 --53.000000 -12.333333 289.000000 2670.000000 --52.833333 -12.333333 316.000000 2670.000000 --52.666667 -12.333333 343.000000 2670.000000 --52.500000 -12.333333 343.000000 2670.000000 --52.333333 -12.333333 328.000000 2670.000000 --52.166667 -12.333333 335.000000 2670.000000 --52.000000 -12.333333 352.000000 2670.000000 --51.833333 -12.333333 333.000000 2670.000000 --51.666667 -12.333333 371.000000 2670.000000 --51.500000 -12.333333 318.000000 2670.000000 --51.333333 -12.333333 222.000000 2670.000000 --51.166667 -12.333333 220.000000 2670.000000 --51.000000 -12.333333 206.000000 2670.000000 --50.833333 -12.333333 204.000000 2670.000000 --50.666667 -12.333333 204.000000 2670.000000 --50.500000 -12.333333 202.000000 2670.000000 --50.333333 -12.333333 201.000000 2670.000000 --50.166667 -12.333333 201.000000 2670.000000 --50.000000 -12.333333 210.000000 2670.000000 --49.833333 -12.333333 235.000000 2670.000000 --49.666667 -12.333333 212.000000 2670.000000 --49.500000 -12.333333 221.000000 2670.000000 --49.333333 -12.333333 267.000000 2670.000000 --49.166667 -12.333333 280.000000 2670.000000 --49.000000 -12.333333 273.000000 2670.000000 --48.833333 -12.333333 264.000000 2670.000000 --48.666667 -12.333333 265.000000 2670.000000 --48.500000 -12.333333 315.000000 2670.000000 --48.333333 -12.333333 286.000000 2670.000000 --48.166667 -12.333333 285.000000 2670.000000 --48.000000 -12.333333 367.000000 2670.000000 --47.833333 -12.333333 366.000000 2670.000000 --47.666667 -12.333333 326.000000 2670.000000 --47.500000 -12.333333 354.000000 2670.000000 --47.333333 -12.333333 380.000000 2670.000000 --47.166667 -12.333333 354.000000 2670.000000 --47.000000 -12.333333 362.000000 2670.000000 --46.833333 -12.333333 359.000000 2670.000000 --46.666667 -12.333333 398.000000 2670.000000 --46.500000 -12.333333 492.000000 2670.000000 --46.333333 -12.333333 899.000000 2670.000000 --46.166667 -12.333333 859.000000 2670.000000 --46.000000 -12.333333 813.000000 2670.000000 --45.833333 -12.333333 752.000000 2670.000000 --45.666667 -12.333333 726.000000 2670.000000 --45.500000 -12.333333 711.000000 2670.000000 --45.333333 -12.333333 700.000000 2670.000000 --45.166667 -12.333333 730.000000 2670.000000 --45.000000 -12.333333 522.000000 2670.000000 --44.833333 -12.333333 682.000000 2670.000000 --44.666667 -12.333333 668.000000 2670.000000 --44.500000 -12.333333 734.000000 2670.000000 --44.333333 -12.333333 755.000000 2670.000000 --44.166667 -12.333333 795.000000 2670.000000 --44.000000 -12.333333 856.000000 2670.000000 --43.833333 -12.333333 615.000000 2670.000000 --43.666667 -12.333333 494.000000 2670.000000 --43.500000 -12.333333 492.000000 2670.000000 --43.333333 -12.333333 452.000000 2670.000000 --43.166667 -12.333333 469.000000 2670.000000 --43.000000 -12.333333 1018.000000 2670.000000 --42.833333 -12.333333 486.000000 2670.000000 --42.666667 -12.333333 470.000000 2670.000000 --42.500000 -12.333333 495.000000 2670.000000 --42.333333 -12.333333 1157.000000 2670.000000 --42.166667 -12.333333 1082.000000 2670.000000 --42.000000 -12.333333 1046.000000 2670.000000 --41.833333 -12.333333 1092.000000 2670.000000 --41.666667 -12.333333 744.000000 2670.000000 --41.500000 -12.333333 692.000000 2670.000000 --41.333333 -12.333333 810.000000 2670.000000 --41.166667 -12.333333 458.000000 2670.000000 --41.000000 -12.333333 637.000000 2670.000000 --40.833333 -12.333333 620.000000 2670.000000 --40.666667 -12.333333 503.000000 2670.000000 --40.500000 -12.333333 601.000000 2670.000000 --40.333333 -12.333333 343.000000 2670.000000 --40.166667 -12.333333 269.000000 2670.000000 --40.000000 -12.333333 291.000000 2670.000000 --65.000000 -12.500000 140.000000 2670.000000 --64.833333 -12.500000 159.000000 2670.000000 --64.666667 -12.500000 154.000000 2670.000000 --64.500000 -12.500000 143.000000 2670.000000 --64.333333 -12.500000 135.000000 2670.000000 --64.166667 -12.500000 136.000000 2670.000000 --64.000000 -12.500000 138.000000 2670.000000 --63.833333 -12.500000 141.000000 2670.000000 --63.666667 -12.500000 143.000000 2670.000000 --63.500000 -12.500000 146.000000 2670.000000 --63.333333 -12.500000 139.000000 2670.000000 --63.166667 -12.500000 140.000000 2670.000000 --63.000000 -12.500000 159.000000 2670.000000 --62.833333 -12.500000 179.000000 2670.000000 --62.666667 -12.500000 183.000000 2670.000000 --62.500000 -12.500000 301.000000 2670.000000 --62.333333 -12.500000 256.000000 2670.000000 --62.166667 -12.500000 193.000000 2670.000000 --62.000000 -12.500000 205.000000 2670.000000 --61.833333 -12.500000 243.000000 2670.000000 --61.666667 -12.500000 469.000000 2670.000000 --61.500000 -12.500000 428.000000 2670.000000 --61.333333 -12.500000 407.000000 2670.000000 --61.166667 -12.500000 344.000000 2670.000000 --61.000000 -12.500000 263.000000 2670.000000 --60.833333 -12.500000 342.000000 2670.000000 --60.666667 -12.500000 448.000000 2670.000000 --60.500000 -12.500000 461.000000 2670.000000 --60.333333 -12.500000 473.000000 2670.000000 --60.166667 -12.500000 518.000000 2670.000000 --60.000000 -12.500000 596.000000 2670.000000 --59.833333 -12.500000 505.000000 2670.000000 --59.666667 -12.500000 368.000000 2670.000000 --59.500000 -12.500000 337.000000 2670.000000 --59.333333 -12.500000 365.000000 2670.000000 --59.166667 -12.500000 367.000000 2670.000000 --59.000000 -12.500000 412.000000 2670.000000 --58.833333 -12.500000 370.000000 2670.000000 --58.666667 -12.500000 352.000000 2670.000000 --58.500000 -12.500000 314.000000 2670.000000 --58.333333 -12.500000 322.000000 2670.000000 --58.166667 -12.500000 354.000000 2670.000000 --58.000000 -12.500000 333.000000 2670.000000 --57.833333 -12.500000 330.000000 2670.000000 --57.666667 -12.500000 271.000000 2670.000000 --57.500000 -12.500000 329.000000 2670.000000 --57.333333 -12.500000 302.000000 2670.000000 --57.166667 -12.500000 342.000000 2670.000000 --57.000000 -12.500000 304.000000 2670.000000 --56.833333 -12.500000 317.000000 2670.000000 --56.666667 -12.500000 353.000000 2670.000000 --56.500000 -12.500000 323.000000 2670.000000 --56.333333 -12.500000 345.000000 2670.000000 --56.166667 -12.500000 382.000000 2670.000000 --56.000000 -12.500000 369.000000 2670.000000 --55.833333 -12.500000 362.000000 2670.000000 --55.666667 -12.500000 384.000000 2670.000000 --55.500000 -12.500000 356.000000 2670.000000 --55.333333 -12.500000 408.000000 2670.000000 --55.166667 -12.500000 409.000000 2670.000000 --55.000000 -12.500000 402.000000 2670.000000 --54.833333 -12.500000 356.000000 2670.000000 --54.666667 -12.500000 345.000000 2670.000000 --54.500000 -12.500000 335.000000 2670.000000 --54.333333 -12.500000 362.000000 2670.000000 --54.166667 -12.500000 320.000000 2670.000000 --54.000000 -12.500000 321.000000 2670.000000 --53.833333 -12.500000 349.000000 2670.000000 --53.666667 -12.500000 323.000000 2670.000000 --53.500000 -12.500000 301.000000 2670.000000 --53.333333 -12.500000 321.000000 2670.000000 --53.166667 -12.500000 317.000000 2670.000000 --53.000000 -12.500000 326.000000 2670.000000 --52.833333 -12.500000 333.000000 2670.000000 --52.666667 -12.500000 334.000000 2670.000000 --52.500000 -12.500000 352.000000 2670.000000 --52.333333 -12.500000 320.000000 2670.000000 --52.166667 -12.500000 345.000000 2670.000000 --52.000000 -12.500000 325.000000 2670.000000 --51.833333 -12.500000 356.000000 2670.000000 --51.666667 -12.500000 387.000000 2670.000000 --51.500000 -12.500000 323.000000 2670.000000 --51.333333 -12.500000 231.000000 2670.000000 --51.166667 -12.500000 213.000000 2670.000000 --51.000000 -12.500000 207.000000 2670.000000 --50.833333 -12.500000 207.000000 2670.000000 --50.666667 -12.500000 205.000000 2670.000000 --50.500000 -12.500000 206.000000 2670.000000 --50.333333 -12.500000 207.000000 2670.000000 --50.166667 -12.500000 225.000000 2670.000000 --50.000000 -12.500000 226.000000 2670.000000 --49.833333 -12.500000 306.000000 2670.000000 --49.666667 -12.500000 260.000000 2670.000000 --49.500000 -12.500000 245.000000 2670.000000 --49.333333 -12.500000 226.000000 2670.000000 --49.166667 -12.500000 268.000000 2670.000000 --49.000000 -12.500000 262.000000 2670.000000 --48.833333 -12.500000 268.000000 2670.000000 --48.666667 -12.500000 286.000000 2670.000000 --48.500000 -12.500000 319.000000 2670.000000 --48.333333 -12.500000 316.000000 2670.000000 --48.166667 -12.500000 269.000000 2670.000000 --48.000000 -12.500000 308.000000 2670.000000 --47.833333 -12.500000 339.000000 2670.000000 --47.666667 -12.500000 320.000000 2670.000000 --47.500000 -12.500000 328.000000 2670.000000 --47.333333 -12.500000 336.000000 2670.000000 --47.166667 -12.500000 353.000000 2670.000000 --47.000000 -12.500000 396.000000 2670.000000 --46.833333 -12.500000 362.000000 2670.000000 --46.666667 -12.500000 411.000000 2670.000000 --46.500000 -12.500000 470.000000 2670.000000 --46.333333 -12.500000 553.000000 2670.000000 --46.166667 -12.500000 788.000000 2670.000000 --46.000000 -12.500000 821.000000 2670.000000 --45.833333 -12.500000 779.000000 2670.000000 --45.666667 -12.500000 732.000000 2670.000000 --45.500000 -12.500000 723.000000 2670.000000 --45.333333 -12.500000 709.000000 2670.000000 --45.166667 -12.500000 732.000000 2670.000000 --45.000000 -12.500000 696.000000 2670.000000 --44.833333 -12.500000 706.000000 2670.000000 --44.666667 -12.500000 740.000000 2670.000000 --44.500000 -12.500000 776.000000 2670.000000 --44.333333 -12.500000 786.000000 2670.000000 --44.166667 -12.500000 833.000000 2670.000000 --44.000000 -12.500000 632.000000 2670.000000 --43.833333 -12.500000 471.000000 2670.000000 --43.666667 -12.500000 450.000000 2670.000000 --43.500000 -12.500000 453.000000 2670.000000 --43.333333 -12.500000 583.000000 2670.000000 --43.166667 -12.500000 440.000000 2670.000000 --43.000000 -12.500000 532.000000 2670.000000 --42.833333 -12.500000 653.000000 2670.000000 --42.666667 -12.500000 474.000000 2670.000000 --42.500000 -12.500000 504.000000 2670.000000 --42.333333 -12.500000 864.000000 2670.000000 --42.166667 -12.500000 966.000000 2670.000000 --42.000000 -12.500000 1179.000000 2670.000000 --41.833333 -12.500000 993.000000 2670.000000 --41.666667 -12.500000 964.000000 2670.000000 --41.500000 -12.500000 991.000000 2670.000000 --41.333333 -12.500000 402.000000 2670.000000 --41.166667 -12.500000 462.000000 2670.000000 --41.000000 -12.500000 621.000000 2670.000000 --40.833333 -12.500000 546.000000 2670.000000 --40.666667 -12.500000 540.000000 2670.000000 --40.500000 -12.500000 359.000000 2670.000000 --40.333333 -12.500000 334.000000 2670.000000 --40.166667 -12.500000 251.000000 2670.000000 --40.000000 -12.500000 233.000000 2670.000000 --65.000000 -12.666667 134.000000 2670.000000 --64.833333 -12.666667 133.000000 2670.000000 --64.666667 -12.666667 158.000000 2670.000000 --64.500000 -12.666667 143.000000 2670.000000 --64.333333 -12.666667 144.000000 2670.000000 --64.166667 -12.666667 150.000000 2670.000000 --64.000000 -12.666667 131.000000 2670.000000 --63.833333 -12.666667 154.000000 2670.000000 --63.666667 -12.666667 151.000000 2670.000000 --63.500000 -12.666667 155.000000 2670.000000 --63.333333 -12.666667 142.000000 2670.000000 --63.166667 -12.666667 147.000000 2670.000000 --63.000000 -12.666667 141.000000 2670.000000 --62.833333 -12.666667 143.000000 2670.000000 --62.666667 -12.666667 174.000000 2670.000000 --62.500000 -12.666667 192.000000 2670.000000 --62.333333 -12.666667 190.000000 2670.000000 --62.166667 -12.666667 177.000000 2670.000000 --62.000000 -12.666667 192.000000 2670.000000 --61.833333 -12.666667 204.000000 2670.000000 --61.666667 -12.666667 349.000000 2670.000000 --61.500000 -12.666667 201.000000 2670.000000 --61.333333 -12.666667 378.000000 2670.000000 --61.166667 -12.666667 333.000000 2670.000000 --61.000000 -12.666667 309.000000 2670.000000 --60.833333 -12.666667 295.000000 2670.000000 --60.666667 -12.666667 333.000000 2670.000000 --60.500000 -12.666667 483.000000 2670.000000 --60.333333 -12.666667 552.000000 2670.000000 --60.166667 -12.666667 522.000000 2670.000000 --60.000000 -12.666667 507.000000 2670.000000 --59.833333 -12.666667 429.000000 2670.000000 --59.666667 -12.666667 322.000000 2670.000000 --59.500000 -12.666667 438.000000 2670.000000 --59.333333 -12.666667 354.000000 2670.000000 --59.166667 -12.666667 449.000000 2670.000000 --59.000000 -12.666667 353.000000 2670.000000 --58.833333 -12.666667 421.000000 2670.000000 --58.666667 -12.666667 353.000000 2670.000000 --58.500000 -12.666667 331.000000 2670.000000 --58.333333 -12.666667 321.000000 2670.000000 --58.166667 -12.666667 398.000000 2670.000000 --58.000000 -12.666667 411.000000 2670.000000 --57.833333 -12.666667 345.000000 2670.000000 --57.666667 -12.666667 328.000000 2670.000000 --57.500000 -12.666667 340.000000 2670.000000 --57.333333 -12.666667 339.000000 2670.000000 --57.166667 -12.666667 326.000000 2670.000000 --57.000000 -12.666667 322.000000 2670.000000 --56.833333 -12.666667 291.000000 2670.000000 --56.666667 -12.666667 326.000000 2670.000000 --56.500000 -12.666667 344.000000 2670.000000 --56.333333 -12.666667 397.000000 2670.000000 --56.166667 -12.666667 347.000000 2670.000000 --56.000000 -12.666667 406.000000 2670.000000 --55.833333 -12.666667 378.000000 2670.000000 --55.666667 -12.666667 373.000000 2670.000000 --55.500000 -12.666667 393.000000 2670.000000 --55.333333 -12.666667 419.000000 2670.000000 --55.166667 -12.666667 423.000000 2670.000000 --55.000000 -12.666667 379.000000 2670.000000 --54.833333 -12.666667 355.000000 2670.000000 --54.666667 -12.666667 338.000000 2670.000000 --54.500000 -12.666667 350.000000 2670.000000 --54.333333 -12.666667 317.000000 2670.000000 --54.166667 -12.666667 347.000000 2670.000000 --54.000000 -12.666667 358.000000 2670.000000 --53.833333 -12.666667 315.000000 2670.000000 --53.666667 -12.666667 340.000000 2670.000000 --53.500000 -12.666667 336.000000 2670.000000 --53.333333 -12.666667 326.000000 2670.000000 --53.166667 -12.666667 330.000000 2670.000000 --53.000000 -12.666667 309.000000 2670.000000 --52.833333 -12.666667 329.000000 2670.000000 --52.666667 -12.666667 306.000000 2670.000000 --52.500000 -12.666667 347.000000 2670.000000 --52.333333 -12.666667 319.000000 2670.000000 --52.166667 -12.666667 368.000000 2670.000000 --52.000000 -12.666667 373.000000 2670.000000 --51.833333 -12.666667 356.000000 2670.000000 --51.666667 -12.666667 313.000000 2670.000000 --51.500000 -12.666667 273.000000 2670.000000 --51.333333 -12.666667 228.000000 2670.000000 --51.166667 -12.666667 212.000000 2670.000000 --51.000000 -12.666667 212.000000 2670.000000 --50.833333 -12.666667 209.000000 2670.000000 --50.666667 -12.666667 208.000000 2670.000000 --50.500000 -12.666667 210.000000 2670.000000 --50.333333 -12.666667 209.000000 2670.000000 --50.166667 -12.666667 214.000000 2670.000000 --50.000000 -12.666667 235.000000 2670.000000 --49.833333 -12.666667 280.000000 2670.000000 --49.666667 -12.666667 274.000000 2670.000000 --49.500000 -12.666667 257.000000 2670.000000 --49.333333 -12.666667 223.000000 2670.000000 --49.166667 -12.666667 245.000000 2670.000000 --49.000000 -12.666667 273.000000 2670.000000 --48.833333 -12.666667 287.000000 2670.000000 --48.666667 -12.666667 564.000000 2670.000000 --48.500000 -12.666667 420.000000 2670.000000 --48.333333 -12.666667 338.000000 2670.000000 --48.166667 -12.666667 361.000000 2670.000000 --48.000000 -12.666667 323.000000 2670.000000 --47.833333 -12.666667 282.000000 2670.000000 --47.666667 -12.666667 339.000000 2670.000000 --47.500000 -12.666667 341.000000 2670.000000 --47.333333 -12.666667 384.000000 2670.000000 --47.166667 -12.666667 377.000000 2670.000000 --47.000000 -12.666667 535.000000 2670.000000 --46.833333 -12.666667 423.000000 2670.000000 --46.666667 -12.666667 384.000000 2670.000000 --46.500000 -12.666667 443.000000 2670.000000 --46.333333 -12.666667 533.000000 2670.000000 --46.166667 -12.666667 886.000000 2670.000000 --46.000000 -12.666667 835.000000 2670.000000 --45.833333 -12.666667 765.000000 2670.000000 --45.666667 -12.666667 759.000000 2670.000000 --45.500000 -12.666667 731.000000 2670.000000 --45.333333 -12.666667 737.000000 2670.000000 --45.166667 -12.666667 722.000000 2670.000000 --45.000000 -12.666667 708.000000 2670.000000 --44.833333 -12.666667 741.000000 2670.000000 --44.666667 -12.666667 778.000000 2670.000000 --44.500000 -12.666667 786.000000 2670.000000 --44.333333 -12.666667 782.000000 2670.000000 --44.166667 -12.666667 767.000000 2670.000000 --44.000000 -12.666667 528.000000 2670.000000 --43.833333 -12.666667 486.000000 2670.000000 --43.666667 -12.666667 460.000000 2670.000000 --43.500000 -12.666667 440.000000 2670.000000 --43.333333 -12.666667 441.000000 2670.000000 --43.166667 -12.666667 427.000000 2670.000000 --43.000000 -12.666667 474.000000 2670.000000 --42.833333 -12.666667 984.000000 2670.000000 --42.666667 -12.666667 519.000000 2670.000000 --42.500000 -12.666667 526.000000 2670.000000 --42.333333 -12.666667 572.000000 2670.000000 --42.166667 -12.666667 1225.000000 2670.000000 --42.000000 -12.666667 1197.000000 2670.000000 --41.833333 -12.666667 1030.000000 2670.000000 --41.666667 -12.666667 953.000000 2670.000000 --41.500000 -12.666667 1307.000000 2670.000000 --41.333333 -12.666667 346.000000 2670.000000 --41.166667 -12.666667 411.000000 2670.000000 --41.000000 -12.666667 598.000000 2670.000000 --40.833333 -12.666667 512.000000 2670.000000 --40.666667 -12.666667 349.000000 2670.000000 --40.500000 -12.666667 436.000000 2670.000000 --40.333333 -12.666667 280.000000 2670.000000 --40.166667 -12.666667 251.000000 2670.000000 --40.000000 -12.666667 227.000000 2670.000000 --65.000000 -12.833333 139.000000 2670.000000 --64.833333 -12.833333 141.000000 2670.000000 --64.666667 -12.833333 153.000000 2670.000000 --64.500000 -12.833333 141.000000 2670.000000 --64.333333 -12.833333 138.000000 2670.000000 --64.166667 -12.833333 175.000000 2670.000000 --64.000000 -12.833333 146.000000 2670.000000 --63.833333 -12.833333 138.000000 2670.000000 --63.666667 -12.833333 154.000000 2670.000000 --63.500000 -12.833333 158.000000 2670.000000 --63.333333 -12.833333 182.000000 2670.000000 --63.166667 -12.833333 154.000000 2670.000000 --63.000000 -12.833333 150.000000 2670.000000 --62.833333 -12.833333 143.000000 2670.000000 --62.666667 -12.833333 145.000000 2670.000000 --62.500000 -12.833333 149.000000 2670.000000 --62.333333 -12.833333 160.000000 2670.000000 --62.166667 -12.833333 188.000000 2670.000000 --62.000000 -12.833333 167.000000 2670.000000 --61.833333 -12.833333 163.000000 2670.000000 --61.666667 -12.833333 186.000000 2670.000000 --61.500000 -12.833333 193.000000 2670.000000 --61.333333 -12.833333 236.000000 2670.000000 --61.166667 -12.833333 294.000000 2670.000000 --61.000000 -12.833333 299.000000 2670.000000 --60.833333 -12.833333 301.000000 2670.000000 --60.666667 -12.833333 374.000000 2670.000000 --60.500000 -12.833333 338.000000 2670.000000 --60.333333 -12.833333 502.000000 2670.000000 --60.166667 -12.833333 570.000000 2670.000000 --60.000000 -12.833333 589.000000 2670.000000 --59.833333 -12.833333 521.000000 2670.000000 --59.666667 -12.833333 481.000000 2670.000000 --59.500000 -12.833333 457.000000 2670.000000 --59.333333 -12.833333 439.000000 2670.000000 --59.166667 -12.833333 366.000000 2670.000000 --59.000000 -12.833333 427.000000 2670.000000 --58.833333 -12.833333 387.000000 2670.000000 --58.666667 -12.833333 345.000000 2670.000000 --58.500000 -12.833333 391.000000 2670.000000 --58.333333 -12.833333 326.000000 2670.000000 --58.166667 -12.833333 408.000000 2670.000000 --58.000000 -12.833333 408.000000 2670.000000 --57.833333 -12.833333 413.000000 2670.000000 --57.666667 -12.833333 340.000000 2670.000000 --57.500000 -12.833333 335.000000 2670.000000 --57.333333 -12.833333 319.000000 2670.000000 --57.166667 -12.833333 354.000000 2670.000000 --57.000000 -12.833333 338.000000 2670.000000 --56.833333 -12.833333 322.000000 2670.000000 --56.666667 -12.833333 298.000000 2670.000000 --56.500000 -12.833333 380.000000 2670.000000 --56.333333 -12.833333 404.000000 2670.000000 --56.166667 -12.833333 369.000000 2670.000000 --56.000000 -12.833333 366.000000 2670.000000 --55.833333 -12.833333 403.000000 2670.000000 --55.666667 -12.833333 337.000000 2670.000000 --55.500000 -12.833333 417.000000 2670.000000 --55.333333 -12.833333 427.000000 2670.000000 --55.166667 -12.833333 415.000000 2670.000000 --55.000000 -12.833333 378.000000 2670.000000 --54.833333 -12.833333 363.000000 2670.000000 --54.666667 -12.833333 348.000000 2670.000000 --54.500000 -12.833333 381.000000 2670.000000 --54.333333 -12.833333 317.000000 2670.000000 --54.166667 -12.833333 316.000000 2670.000000 --54.000000 -12.833333 352.000000 2670.000000 --53.833333 -12.833333 338.000000 2670.000000 --53.666667 -12.833333 360.000000 2670.000000 --53.500000 -12.833333 357.000000 2670.000000 --53.333333 -12.833333 344.000000 2670.000000 --53.166667 -12.833333 342.000000 2670.000000 --53.000000 -12.833333 307.000000 2670.000000 --52.833333 -12.833333 304.000000 2670.000000 --52.666667 -12.833333 347.000000 2670.000000 --52.500000 -12.833333 335.000000 2670.000000 --52.333333 -12.833333 348.000000 2670.000000 --52.166667 -12.833333 377.000000 2670.000000 --52.000000 -12.833333 350.000000 2670.000000 --51.833333 -12.833333 382.000000 2670.000000 --51.666667 -12.833333 294.000000 2670.000000 --51.500000 -12.833333 242.000000 2670.000000 --51.333333 -12.833333 224.000000 2670.000000 --51.166667 -12.833333 214.000000 2670.000000 --51.000000 -12.833333 214.000000 2670.000000 --50.833333 -12.833333 210.000000 2670.000000 --50.666667 -12.833333 213.000000 2670.000000 --50.500000 -12.833333 214.000000 2670.000000 --50.333333 -12.833333 212.000000 2670.000000 --50.166667 -12.833333 285.000000 2670.000000 --50.000000 -12.833333 293.000000 2670.000000 --49.833333 -12.833333 315.000000 2670.000000 --49.666667 -12.833333 261.000000 2670.000000 --49.500000 -12.833333 265.000000 2670.000000 --49.333333 -12.833333 244.000000 2670.000000 --49.166667 -12.833333 261.000000 2670.000000 --49.000000 -12.833333 296.000000 2670.000000 --48.833333 -12.833333 308.000000 2670.000000 --48.666667 -12.833333 409.000000 2670.000000 --48.500000 -12.833333 429.000000 2670.000000 --48.333333 -12.833333 348.000000 2670.000000 --48.166667 -12.833333 441.000000 2670.000000 --48.000000 -12.833333 910.000000 2670.000000 --47.833333 -12.833333 317.000000 2670.000000 --47.666667 -12.833333 336.000000 2670.000000 --47.500000 -12.833333 371.000000 2670.000000 --47.333333 -12.833333 407.000000 2670.000000 --47.166667 -12.833333 444.000000 2670.000000 --47.000000 -12.833333 572.000000 2670.000000 --46.833333 -12.833333 733.000000 2670.000000 --46.666667 -12.833333 622.000000 2670.000000 --46.500000 -12.833333 425.000000 2670.000000 --46.333333 -12.833333 559.000000 2670.000000 --46.166667 -12.833333 905.000000 2670.000000 --46.000000 -12.833333 790.000000 2670.000000 --45.833333 -12.833333 807.000000 2670.000000 --45.666667 -12.833333 749.000000 2670.000000 --45.500000 -12.833333 756.000000 2670.000000 --45.333333 -12.833333 720.000000 2670.000000 --45.166667 -12.833333 741.000000 2670.000000 --45.000000 -12.833333 735.000000 2670.000000 --44.833333 -12.833333 767.000000 2670.000000 --44.666667 -12.833333 749.000000 2670.000000 --44.500000 -12.833333 788.000000 2670.000000 --44.333333 -12.833333 812.000000 2670.000000 --44.166667 -12.833333 829.000000 2670.000000 --44.000000 -12.833333 720.000000 2670.000000 --43.833333 -12.833333 505.000000 2670.000000 --43.666667 -12.833333 465.000000 2670.000000 --43.500000 -12.833333 442.000000 2670.000000 --43.333333 -12.833333 424.000000 2670.000000 --43.166667 -12.833333 447.000000 2670.000000 --43.000000 -12.833333 628.000000 2670.000000 --42.833333 -12.833333 866.000000 2670.000000 --42.666667 -12.833333 590.000000 2670.000000 --42.500000 -12.833333 501.000000 2670.000000 --42.333333 -12.833333 541.000000 2670.000000 --42.166667 -12.833333 873.000000 2670.000000 --42.000000 -12.833333 1155.000000 2670.000000 --41.833333 -12.833333 1103.000000 2670.000000 --41.666667 -12.833333 1260.000000 2670.000000 --41.500000 -12.833333 1154.000000 2670.000000 --41.333333 -12.833333 533.000000 2670.000000 --41.166667 -12.833333 363.000000 2670.000000 --41.000000 -12.833333 536.000000 2670.000000 --40.833333 -12.833333 652.000000 2670.000000 --40.666667 -12.833333 368.000000 2670.000000 --40.500000 -12.833333 450.000000 2670.000000 --40.333333 -12.833333 413.000000 2670.000000 --40.166667 -12.833333 300.000000 2670.000000 --40.000000 -12.833333 292.000000 2670.000000 --65.000000 -13.000000 143.000000 2670.000000 --64.833333 -13.000000 138.000000 2670.000000 --64.666667 -13.000000 138.000000 2670.000000 --64.500000 -13.000000 146.000000 2670.000000 --64.333333 -13.000000 134.000000 2670.000000 --64.166667 -13.000000 135.000000 2670.000000 --64.000000 -13.000000 146.000000 2670.000000 --63.833333 -13.000000 144.000000 2670.000000 --63.666667 -13.000000 175.000000 2670.000000 --63.500000 -13.000000 169.000000 2670.000000 --63.333333 -13.000000 179.000000 2670.000000 --63.166667 -13.000000 139.000000 2670.000000 --63.000000 -13.000000 149.000000 2670.000000 --62.833333 -13.000000 157.000000 2670.000000 --62.666667 -13.000000 158.000000 2670.000000 --62.500000 -13.000000 156.000000 2670.000000 --62.333333 -13.000000 220.000000 2670.000000 --62.166667 -13.000000 151.000000 2670.000000 --62.000000 -13.000000 160.000000 2670.000000 --61.833333 -13.000000 159.000000 2670.000000 --61.666667 -13.000000 179.000000 2670.000000 --61.500000 -13.000000 168.000000 2670.000000 --61.333333 -13.000000 205.000000 2670.000000 --61.166667 -13.000000 221.000000 2670.000000 --61.000000 -13.000000 253.000000 2670.000000 --60.833333 -13.000000 263.000000 2670.000000 --60.666667 -13.000000 554.000000 2670.000000 --60.500000 -13.000000 362.000000 2670.000000 --60.333333 -13.000000 322.000000 2670.000000 --60.166667 -13.000000 372.000000 2670.000000 --60.000000 -13.000000 566.000000 2670.000000 --59.833333 -13.000000 555.000000 2670.000000 --59.666667 -13.000000 535.000000 2670.000000 --59.500000 -13.000000 478.000000 2670.000000 --59.333333 -13.000000 449.000000 2670.000000 --59.166667 -13.000000 391.000000 2670.000000 --59.000000 -13.000000 431.000000 2670.000000 --58.833333 -13.000000 425.000000 2670.000000 --58.666667 -13.000000 457.000000 2670.000000 --58.500000 -13.000000 386.000000 2670.000000 --58.333333 -13.000000 378.000000 2670.000000 --58.166667 -13.000000 398.000000 2670.000000 --58.000000 -13.000000 415.000000 2670.000000 --57.833333 -13.000000 425.000000 2670.000000 --57.666667 -13.000000 375.000000 2670.000000 --57.500000 -13.000000 339.000000 2670.000000 --57.333333 -13.000000 319.000000 2670.000000 --57.166667 -13.000000 331.000000 2670.000000 --57.000000 -13.000000 386.000000 2670.000000 --56.833333 -13.000000 331.000000 2670.000000 --56.666667 -13.000000 300.000000 2670.000000 --56.500000 -13.000000 340.000000 2670.000000 --56.333333 -13.000000 371.000000 2670.000000 --56.166667 -13.000000 402.000000 2670.000000 --56.000000 -13.000000 405.000000 2670.000000 --55.833333 -13.000000 410.000000 2670.000000 --55.666667 -13.000000 356.000000 2670.000000 --55.500000 -13.000000 415.000000 2670.000000 --55.333333 -13.000000 418.000000 2670.000000 --55.166667 -13.000000 445.000000 2670.000000 --55.000000 -13.000000 403.000000 2670.000000 --54.833333 -13.000000 357.000000 2670.000000 --54.666667 -13.000000 347.000000 2670.000000 --54.500000 -13.000000 380.000000 2670.000000 --54.333333 -13.000000 365.000000 2670.000000 --54.166667 -13.000000 362.000000 2670.000000 --54.000000 -13.000000 325.000000 2670.000000 --53.833333 -13.000000 382.000000 2670.000000 --53.666667 -13.000000 359.000000 2670.000000 --53.500000 -13.000000 371.000000 2670.000000 --53.333333 -13.000000 343.000000 2670.000000 --53.166667 -13.000000 364.000000 2670.000000 --53.000000 -13.000000 335.000000 2670.000000 --52.833333 -13.000000 344.000000 2670.000000 --52.666667 -13.000000 367.000000 2670.000000 --52.500000 -13.000000 367.000000 2670.000000 --52.333333 -13.000000 355.000000 2670.000000 --52.166667 -13.000000 342.000000 2670.000000 --52.000000 -13.000000 397.000000 2670.000000 --51.833333 -13.000000 360.000000 2670.000000 --51.666667 -13.000000 261.000000 2670.000000 --51.500000 -13.000000 236.000000 2670.000000 --51.333333 -13.000000 224.000000 2670.000000 --51.166667 -13.000000 219.000000 2670.000000 --51.000000 -13.000000 217.000000 2670.000000 --50.833333 -13.000000 215.000000 2670.000000 --50.666667 -13.000000 216.000000 2670.000000 --50.500000 -13.000000 212.000000 2670.000000 --50.333333 -13.000000 221.000000 2670.000000 --50.166667 -13.000000 259.000000 2670.000000 --50.000000 -13.000000 270.000000 2670.000000 --49.833333 -13.000000 277.000000 2670.000000 --49.666667 -13.000000 294.000000 2670.000000 --49.500000 -13.000000 244.000000 2670.000000 --49.333333 -13.000000 285.000000 2670.000000 --49.166667 -13.000000 304.000000 2670.000000 --49.000000 -13.000000 409.000000 2670.000000 --48.833333 -13.000000 306.000000 2670.000000 --48.666667 -13.000000 344.000000 2670.000000 --48.500000 -13.000000 774.000000 2670.000000 --48.333333 -13.000000 432.000000 2670.000000 --48.166667 -13.000000 302.000000 2670.000000 --48.000000 -13.000000 743.000000 2670.000000 --47.833333 -13.000000 371.000000 2670.000000 --47.666667 -13.000000 335.000000 2670.000000 --47.500000 -13.000000 353.000000 2670.000000 --47.333333 -13.000000 404.000000 2670.000000 --47.166667 -13.000000 409.000000 2670.000000 --47.000000 -13.000000 584.000000 2670.000000 --46.833333 -13.000000 579.000000 2670.000000 --46.666667 -13.000000 638.000000 2670.000000 --46.500000 -13.000000 693.000000 2670.000000 --46.333333 -13.000000 684.000000 2670.000000 --46.166667 -13.000000 922.000000 2670.000000 --46.000000 -13.000000 841.000000 2670.000000 --45.833333 -13.000000 828.000000 2670.000000 --45.666667 -13.000000 777.000000 2670.000000 --45.500000 -13.000000 764.000000 2670.000000 --45.333333 -13.000000 762.000000 2670.000000 --45.166667 -13.000000 754.000000 2670.000000 --45.000000 -13.000000 752.000000 2670.000000 --44.833333 -13.000000 650.000000 2670.000000 --44.666667 -13.000000 702.000000 2670.000000 --44.500000 -13.000000 747.000000 2670.000000 --44.333333 -13.000000 783.000000 2670.000000 --44.166667 -13.000000 631.000000 2670.000000 --44.000000 -13.000000 522.000000 2670.000000 --43.833333 -13.000000 473.000000 2670.000000 --43.666667 -13.000000 461.000000 2670.000000 --43.500000 -13.000000 439.000000 2670.000000 --43.333333 -13.000000 430.000000 2670.000000 --43.166667 -13.000000 452.000000 2670.000000 --43.000000 -13.000000 883.000000 2670.000000 --42.833333 -13.000000 922.000000 2670.000000 --42.666667 -13.000000 634.000000 2670.000000 --42.500000 -13.000000 544.000000 2670.000000 --42.333333 -13.000000 554.000000 2670.000000 --42.166667 -13.000000 884.000000 2670.000000 --42.000000 -13.000000 1263.000000 2670.000000 --41.833333 -13.000000 1279.000000 2670.000000 --41.666667 -13.000000 1242.000000 2670.000000 --41.500000 -13.000000 1087.000000 2670.000000 --41.333333 -13.000000 982.000000 2670.000000 --41.166667 -13.000000 445.000000 2670.000000 --41.000000 -13.000000 604.000000 2670.000000 --40.833333 -13.000000 320.000000 2670.000000 --40.666667 -13.000000 281.000000 2670.000000 --40.500000 -13.000000 296.000000 2670.000000 --40.333333 -13.000000 718.000000 2670.000000 --40.166667 -13.000000 542.000000 2670.000000 --40.000000 -13.000000 538.000000 2670.000000 --65.000000 -13.166667 136.000000 2670.000000 --64.833333 -13.166667 134.000000 2670.000000 --64.666667 -13.166667 138.000000 2670.000000 --64.500000 -13.166667 139.000000 2670.000000 --64.333333 -13.166667 136.000000 2670.000000 --64.166667 -13.166667 137.000000 2670.000000 --64.000000 -13.166667 141.000000 2670.000000 --63.833333 -13.166667 140.000000 2670.000000 --63.666667 -13.166667 153.000000 2670.000000 --63.500000 -13.166667 198.000000 2670.000000 --63.333333 -13.166667 164.000000 2670.000000 --63.166667 -13.166667 148.000000 2670.000000 --63.000000 -13.166667 141.000000 2670.000000 --62.833333 -13.166667 188.000000 2670.000000 --62.666667 -13.166667 169.000000 2670.000000 --62.500000 -13.166667 175.000000 2670.000000 --62.333333 -13.166667 162.000000 2670.000000 --62.166667 -13.166667 165.000000 2670.000000 --62.000000 -13.166667 160.000000 2670.000000 --61.833333 -13.166667 158.000000 2670.000000 --61.666667 -13.166667 166.000000 2670.000000 --61.500000 -13.166667 174.000000 2670.000000 --61.333333 -13.166667 185.000000 2670.000000 --61.166667 -13.166667 193.000000 2670.000000 --61.000000 -13.166667 232.000000 2670.000000 --60.833333 -13.166667 255.000000 2670.000000 --60.666667 -13.166667 269.000000 2670.000000 --60.500000 -13.166667 412.000000 2670.000000 --60.333333 -13.166667 274.000000 2670.000000 --60.166667 -13.166667 291.000000 2670.000000 --60.000000 -13.166667 469.000000 2670.000000 --59.833333 -13.166667 559.000000 2670.000000 --59.666667 -13.166667 501.000000 2670.000000 --59.500000 -13.166667 438.000000 2670.000000 --59.333333 -13.166667 423.000000 2670.000000 --59.166667 -13.166667 437.000000 2670.000000 --59.000000 -13.166667 374.000000 2670.000000 --58.833333 -13.166667 487.000000 2670.000000 --58.666667 -13.166667 513.000000 2670.000000 --58.500000 -13.166667 444.000000 2670.000000 --58.333333 -13.166667 429.000000 2670.000000 --58.166667 -13.166667 415.000000 2670.000000 --58.000000 -13.166667 483.000000 2670.000000 --57.833333 -13.166667 478.000000 2670.000000 --57.666667 -13.166667 392.000000 2670.000000 --57.500000 -13.166667 313.000000 2670.000000 --57.333333 -13.166667 376.000000 2670.000000 --57.166667 -13.166667 308.000000 2670.000000 --57.000000 -13.166667 377.000000 2670.000000 --56.833333 -13.166667 351.000000 2670.000000 --56.666667 -13.166667 320.000000 2670.000000 --56.500000 -13.166667 397.000000 2670.000000 --56.333333 -13.166667 367.000000 2670.000000 --56.166667 -13.166667 415.000000 2670.000000 --56.000000 -13.166667 410.000000 2670.000000 --55.833333 -13.166667 405.000000 2670.000000 --55.666667 -13.166667 349.000000 2670.000000 --55.500000 -13.166667 431.000000 2670.000000 --55.333333 -13.166667 439.000000 2670.000000 --55.166667 -13.166667 437.000000 2670.000000 --55.000000 -13.166667 432.000000 2670.000000 --54.833333 -13.166667 354.000000 2670.000000 --54.666667 -13.166667 400.000000 2670.000000 --54.500000 -13.166667 383.000000 2670.000000 --54.333333 -13.166667 390.000000 2670.000000 --54.166667 -13.166667 352.000000 2670.000000 --54.000000 -13.166667 325.000000 2670.000000 --53.833333 -13.166667 392.000000 2670.000000 --53.666667 -13.166667 357.000000 2670.000000 --53.500000 -13.166667 356.000000 2670.000000 --53.333333 -13.166667 378.000000 2670.000000 --53.166667 -13.166667 399.000000 2670.000000 --53.000000 -13.166667 390.000000 2670.000000 --52.833333 -13.166667 379.000000 2670.000000 --52.666667 -13.166667 318.000000 2670.000000 --52.500000 -13.166667 360.000000 2670.000000 --52.333333 -13.166667 366.000000 2670.000000 --52.166667 -13.166667 353.000000 2670.000000 --52.000000 -13.166667 333.000000 2670.000000 --51.833333 -13.166667 386.000000 2670.000000 --51.666667 -13.166667 309.000000 2670.000000 --51.500000 -13.166667 250.000000 2670.000000 --51.333333 -13.166667 230.000000 2670.000000 --51.166667 -13.166667 218.000000 2670.000000 --51.000000 -13.166667 219.000000 2670.000000 --50.833333 -13.166667 216.000000 2670.000000 --50.666667 -13.166667 214.000000 2670.000000 --50.500000 -13.166667 214.000000 2670.000000 --50.333333 -13.166667 255.000000 2670.000000 --50.166667 -13.166667 350.000000 2670.000000 --50.000000 -13.166667 312.000000 2670.000000 --49.833333 -13.166667 296.000000 2670.000000 --49.666667 -13.166667 284.000000 2670.000000 --49.500000 -13.166667 253.000000 2670.000000 --49.333333 -13.166667 312.000000 2670.000000 --49.166667 -13.166667 313.000000 2670.000000 --49.000000 -13.166667 327.000000 2670.000000 --48.833333 -13.166667 313.000000 2670.000000 --48.666667 -13.166667 519.000000 2670.000000 --48.500000 -13.166667 660.000000 2670.000000 --48.333333 -13.166667 444.000000 2670.000000 --48.166667 -13.166667 310.000000 2670.000000 --48.000000 -13.166667 551.000000 2670.000000 --47.833333 -13.166667 878.000000 2670.000000 --47.666667 -13.166667 332.000000 2670.000000 --47.500000 -13.166667 341.000000 2670.000000 --47.333333 -13.166667 415.000000 2670.000000 --47.166667 -13.166667 424.000000 2670.000000 --47.000000 -13.166667 490.000000 2670.000000 --46.833333 -13.166667 677.000000 2670.000000 --46.666667 -13.166667 543.000000 2670.000000 --46.500000 -13.166667 608.000000 2670.000000 --46.333333 -13.166667 745.000000 2670.000000 --46.166667 -13.166667 942.000000 2670.000000 --46.000000 -13.166667 869.000000 2670.000000 --45.833333 -13.166667 841.000000 2670.000000 --45.666667 -13.166667 801.000000 2670.000000 --45.500000 -13.166667 761.000000 2670.000000 --45.333333 -13.166667 735.000000 2670.000000 --45.166667 -13.166667 760.000000 2670.000000 --45.000000 -13.166667 675.000000 2670.000000 --44.833333 -13.166667 734.000000 2670.000000 --44.666667 -13.166667 611.000000 2670.000000 --44.500000 -13.166667 694.000000 2670.000000 --44.333333 -13.166667 781.000000 2670.000000 --44.166667 -13.166667 642.000000 2670.000000 --44.000000 -13.166667 517.000000 2670.000000 --43.833333 -13.166667 472.000000 2670.000000 --43.666667 -13.166667 436.000000 2670.000000 --43.500000 -13.166667 436.000000 2670.000000 --43.333333 -13.166667 442.000000 2670.000000 --43.166667 -13.166667 450.000000 2670.000000 --43.000000 -13.166667 493.000000 2670.000000 --42.833333 -13.166667 659.000000 2670.000000 --42.666667 -13.166667 680.000000 2670.000000 --42.500000 -13.166667 622.000000 2670.000000 --42.333333 -13.166667 568.000000 2670.000000 --42.166667 -13.166667 908.000000 2670.000000 --42.000000 -13.166667 1185.000000 2670.000000 --41.833333 -13.166667 1349.000000 2670.000000 --41.666667 -13.166667 906.000000 2670.000000 --41.500000 -13.166667 1146.000000 2670.000000 --41.333333 -13.166667 1387.000000 2670.000000 --41.166667 -13.166667 835.000000 2670.000000 --41.000000 -13.166667 572.000000 2670.000000 --40.833333 -13.166667 391.000000 2670.000000 --40.666667 -13.166667 323.000000 2670.000000 --40.500000 -13.166667 629.000000 2670.000000 --40.333333 -13.166667 819.000000 2670.000000 --40.166667 -13.166667 842.000000 2670.000000 --40.000000 -13.166667 596.000000 2670.000000 --65.000000 -13.333333 137.000000 2670.000000 --64.833333 -13.333333 140.000000 2670.000000 --64.666667 -13.333333 138.000000 2670.000000 --64.500000 -13.333333 135.000000 2670.000000 --64.333333 -13.333333 137.000000 2670.000000 --64.166667 -13.333333 140.000000 2670.000000 --64.000000 -13.333333 140.000000 2670.000000 --63.833333 -13.333333 140.000000 2670.000000 --63.666667 -13.333333 142.000000 2670.000000 --63.500000 -13.333333 152.000000 2670.000000 --63.333333 -13.333333 143.000000 2670.000000 --63.166667 -13.333333 143.000000 2670.000000 --63.000000 -13.333333 147.000000 2670.000000 --62.833333 -13.333333 164.000000 2670.000000 --62.666667 -13.333333 210.000000 2670.000000 --62.500000 -13.333333 213.000000 2670.000000 --62.333333 -13.333333 152.000000 2670.000000 --62.166667 -13.333333 159.000000 2670.000000 --62.000000 -13.333333 166.000000 2670.000000 --61.833333 -13.333333 156.000000 2670.000000 --61.666667 -13.333333 161.000000 2670.000000 --61.500000 -13.333333 164.000000 2670.000000 --61.333333 -13.333333 166.000000 2670.000000 --61.166667 -13.333333 179.000000 2670.000000 --61.000000 -13.333333 193.000000 2670.000000 --60.833333 -13.333333 204.000000 2670.000000 --60.666667 -13.333333 239.000000 2670.000000 --60.500000 -13.333333 359.000000 2670.000000 --60.333333 -13.333333 248.000000 2670.000000 --60.166667 -13.333333 396.000000 2670.000000 --60.000000 -13.333333 456.000000 2670.000000 --59.833333 -13.333333 609.000000 2670.000000 --59.666667 -13.333333 568.000000 2670.000000 --59.500000 -13.333333 455.000000 2670.000000 --59.333333 -13.333333 509.000000 2670.000000 --59.166667 -13.333333 457.000000 2670.000000 --59.000000 -13.333333 443.000000 2670.000000 --58.833333 -13.333333 494.000000 2670.000000 --58.666667 -13.333333 471.000000 2670.000000 --58.500000 -13.333333 522.000000 2670.000000 --58.333333 -13.333333 433.000000 2670.000000 --58.166667 -13.333333 504.000000 2670.000000 --58.000000 -13.333333 478.000000 2670.000000 --57.833333 -13.333333 449.000000 2670.000000 --57.666667 -13.333333 434.000000 2670.000000 --57.500000 -13.333333 391.000000 2670.000000 --57.333333 -13.333333 364.000000 2670.000000 --57.166667 -13.333333 354.000000 2670.000000 --57.000000 -13.333333 317.000000 2670.000000 --56.833333 -13.333333 343.000000 2670.000000 --56.666667 -13.333333 328.000000 2670.000000 --56.500000 -13.333333 349.000000 2670.000000 --56.333333 -13.333333 375.000000 2670.000000 --56.166667 -13.333333 404.000000 2670.000000 --56.000000 -13.333333 427.000000 2670.000000 --55.833333 -13.333333 413.000000 2670.000000 --55.666667 -13.333333 442.000000 2670.000000 --55.500000 -13.333333 353.000000 2670.000000 --55.333333 -13.333333 446.000000 2670.000000 --55.166667 -13.333333 431.000000 2670.000000 --55.000000 -13.333333 448.000000 2670.000000 --54.833333 -13.333333 413.000000 2670.000000 --54.666667 -13.333333 450.000000 2670.000000 --54.500000 -13.333333 423.000000 2670.000000 --54.333333 -13.333333 452.000000 2670.000000 --54.166667 -13.333333 407.000000 2670.000000 --54.000000 -13.333333 387.000000 2670.000000 --53.833333 -13.333333 391.000000 2670.000000 --53.666667 -13.333333 395.000000 2670.000000 --53.500000 -13.333333 397.000000 2670.000000 --53.333333 -13.333333 361.000000 2670.000000 --53.166667 -13.333333 414.000000 2670.000000 --53.000000 -13.333333 318.000000 2670.000000 --52.833333 -13.333333 394.000000 2670.000000 --52.666667 -13.333333 373.000000 2670.000000 --52.500000 -13.333333 307.000000 2670.000000 --52.333333 -13.333333 345.000000 2670.000000 --52.166667 -13.333333 370.000000 2670.000000 --52.000000 -13.333333 370.000000 2670.000000 --51.833333 -13.333333 395.000000 2670.000000 --51.666667 -13.333333 260.000000 2670.000000 --51.500000 -13.333333 242.000000 2670.000000 --51.333333 -13.333333 224.000000 2670.000000 --51.166667 -13.333333 224.000000 2670.000000 --51.000000 -13.333333 220.000000 2670.000000 --50.833333 -13.333333 220.000000 2670.000000 --50.666667 -13.333333 223.000000 2670.000000 --50.500000 -13.333333 235.000000 2670.000000 --50.333333 -13.333333 288.000000 2670.000000 --50.166667 -13.333333 332.000000 2670.000000 --50.000000 -13.333333 245.000000 2670.000000 --49.833333 -13.333333 268.000000 2670.000000 --49.666667 -13.333333 292.000000 2670.000000 --49.500000 -13.333333 304.000000 2670.000000 --49.333333 -13.333333 459.000000 2670.000000 --49.166667 -13.333333 359.000000 2670.000000 --49.000000 -13.333333 316.000000 2670.000000 --48.833333 -13.333333 338.000000 2670.000000 --48.666667 -13.333333 411.000000 2670.000000 --48.500000 -13.333333 712.000000 2670.000000 --48.333333 -13.333333 393.000000 2670.000000 --48.166667 -13.333333 300.000000 2670.000000 --48.000000 -13.333333 856.000000 2670.000000 --47.833333 -13.333333 978.000000 2670.000000 --47.666667 -13.333333 457.000000 2670.000000 --47.500000 -13.333333 617.000000 2670.000000 --47.333333 -13.333333 447.000000 2670.000000 --47.166667 -13.333333 459.000000 2670.000000 --47.000000 -13.333333 432.000000 2670.000000 --46.833333 -13.333333 684.000000 2670.000000 --46.666667 -13.333333 488.000000 2670.000000 --46.500000 -13.333333 609.000000 2670.000000 --46.333333 -13.333333 688.000000 2670.000000 --46.166667 -13.333333 942.000000 2670.000000 --46.000000 -13.333333 888.000000 2670.000000 --45.833333 -13.333333 828.000000 2670.000000 --45.666667 -13.333333 799.000000 2670.000000 --45.500000 -13.333333 766.000000 2670.000000 --45.333333 -13.333333 770.000000 2670.000000 --45.166667 -13.333333 731.000000 2670.000000 --45.000000 -13.333333 759.000000 2670.000000 --44.833333 -13.333333 674.000000 2670.000000 --44.666667 -13.333333 603.000000 2670.000000 --44.500000 -13.333333 573.000000 2670.000000 --44.333333 -13.333333 601.000000 2670.000000 --44.166667 -13.333333 599.000000 2670.000000 --44.000000 -13.333333 465.000000 2670.000000 --43.833333 -13.333333 478.000000 2670.000000 --43.666667 -13.333333 460.000000 2670.000000 --43.500000 -13.333333 437.000000 2670.000000 --43.333333 -13.333333 444.000000 2670.000000 --43.166667 -13.333333 465.000000 2670.000000 --43.000000 -13.333333 650.000000 2670.000000 --42.833333 -13.333333 728.000000 2670.000000 --42.666667 -13.333333 856.000000 2670.000000 --42.500000 -13.333333 635.000000 2670.000000 --42.333333 -13.333333 600.000000 2670.000000 --42.166667 -13.333333 783.000000 2670.000000 --42.000000 -13.333333 1014.000000 2670.000000 --41.833333 -13.333333 1220.000000 2670.000000 --41.666667 -13.333333 820.000000 2670.000000 --41.500000 -13.333333 1206.000000 2670.000000 --41.333333 -13.333333 1084.000000 2670.000000 --41.166667 -13.333333 689.000000 2670.000000 --41.000000 -13.333333 695.000000 2670.000000 --40.833333 -13.333333 488.000000 2670.000000 --40.666667 -13.333333 477.000000 2670.000000 --40.500000 -13.333333 898.000000 2670.000000 --40.333333 -13.333333 807.000000 2670.000000 --40.166667 -13.333333 644.000000 2670.000000 --40.000000 -13.333333 696.000000 2670.000000 --65.000000 -13.500000 137.000000 2670.000000 --64.833333 -13.500000 136.000000 2670.000000 --64.666667 -13.500000 139.000000 2670.000000 --64.500000 -13.500000 138.000000 2670.000000 --64.333333 -13.500000 142.000000 2670.000000 --64.166667 -13.500000 140.000000 2670.000000 --64.000000 -13.500000 140.000000 2670.000000 --63.833333 -13.500000 144.000000 2670.000000 --63.666667 -13.500000 143.000000 2670.000000 --63.500000 -13.500000 142.000000 2670.000000 --63.333333 -13.500000 143.000000 2670.000000 --63.166667 -13.500000 145.000000 2670.000000 --63.000000 -13.500000 145.000000 2670.000000 --62.833333 -13.500000 149.000000 2670.000000 --62.666667 -13.500000 200.000000 2670.000000 --62.500000 -13.500000 205.000000 2670.000000 --62.333333 -13.500000 173.000000 2670.000000 --62.166667 -13.500000 178.000000 2670.000000 --62.000000 -13.500000 175.000000 2670.000000 --61.833333 -13.500000 170.000000 2670.000000 --61.666667 -13.500000 162.000000 2670.000000 --61.500000 -13.500000 174.000000 2670.000000 --61.333333 -13.500000 170.000000 2670.000000 --61.166667 -13.500000 171.000000 2670.000000 --61.000000 -13.500000 170.000000 2670.000000 --60.833333 -13.500000 189.000000 2670.000000 --60.666667 -13.500000 205.000000 2670.000000 --60.500000 -13.500000 207.000000 2670.000000 --60.333333 -13.500000 243.000000 2670.000000 --60.166667 -13.500000 259.000000 2670.000000 --60.000000 -13.500000 486.000000 2670.000000 --59.833333 -13.500000 633.000000 2670.000000 --59.666667 -13.500000 634.000000 2670.000000 --59.500000 -13.500000 553.000000 2670.000000 --59.333333 -13.500000 546.000000 2670.000000 --59.166667 -13.500000 530.000000 2670.000000 --59.000000 -13.500000 513.000000 2670.000000 --58.833333 -13.500000 527.000000 2670.000000 --58.666667 -13.500000 543.000000 2670.000000 --58.500000 -13.500000 550.000000 2670.000000 --58.333333 -13.500000 469.000000 2670.000000 --58.166667 -13.500000 539.000000 2670.000000 --58.000000 -13.500000 508.000000 2670.000000 --57.833333 -13.500000 529.000000 2670.000000 --57.666667 -13.500000 428.000000 2670.000000 --57.500000 -13.500000 499.000000 2670.000000 --57.333333 -13.500000 350.000000 2670.000000 --57.166667 -13.500000 376.000000 2670.000000 --57.000000 -13.500000 351.000000 2670.000000 --56.833333 -13.500000 390.000000 2670.000000 --56.666667 -13.500000 337.000000 2670.000000 --56.500000 -13.500000 341.000000 2670.000000 --56.333333 -13.500000 361.000000 2670.000000 --56.166667 -13.500000 388.000000 2670.000000 --56.000000 -13.500000 411.000000 2670.000000 --55.833333 -13.500000 435.000000 2670.000000 --55.666667 -13.500000 421.000000 2670.000000 --55.500000 -13.500000 431.000000 2670.000000 --55.333333 -13.500000 361.000000 2670.000000 --55.166667 -13.500000 470.000000 2670.000000 --55.000000 -13.500000 451.000000 2670.000000 --54.833333 -13.500000 455.000000 2670.000000 --54.666667 -13.500000 407.000000 2670.000000 --54.500000 -13.500000 427.000000 2670.000000 --54.333333 -13.500000 489.000000 2670.000000 --54.166667 -13.500000 426.000000 2670.000000 --54.000000 -13.500000 483.000000 2670.000000 --53.833333 -13.500000 466.000000 2670.000000 --53.666667 -13.500000 350.000000 2670.000000 --53.500000 -13.500000 416.000000 2670.000000 --53.333333 -13.500000 369.000000 2670.000000 --53.166667 -13.500000 371.000000 2670.000000 --53.000000 -13.500000 381.000000 2670.000000 --52.833333 -13.500000 414.000000 2670.000000 --52.666667 -13.500000 356.000000 2670.000000 --52.500000 -13.500000 348.000000 2670.000000 --52.333333 -13.500000 399.000000 2670.000000 --52.166667 -13.500000 385.000000 2670.000000 --52.000000 -13.500000 408.000000 2670.000000 --51.833333 -13.500000 459.000000 2670.000000 --51.666667 -13.500000 275.000000 2670.000000 --51.500000 -13.500000 238.000000 2670.000000 --51.333333 -13.500000 228.000000 2670.000000 --51.166667 -13.500000 225.000000 2670.000000 --51.000000 -13.500000 223.000000 2670.000000 --50.833333 -13.500000 222.000000 2670.000000 --50.666667 -13.500000 223.000000 2670.000000 --50.500000 -13.500000 225.000000 2670.000000 --50.333333 -13.500000 249.000000 2670.000000 --50.166667 -13.500000 246.000000 2670.000000 --50.000000 -13.500000 235.000000 2670.000000 --49.833333 -13.500000 247.000000 2670.000000 --49.666667 -13.500000 301.000000 2670.000000 --49.500000 -13.500000 405.000000 2670.000000 --49.333333 -13.500000 437.000000 2670.000000 --49.166667 -13.500000 351.000000 2670.000000 --49.000000 -13.500000 335.000000 2670.000000 --48.833333 -13.500000 338.000000 2670.000000 --48.666667 -13.500000 472.000000 2670.000000 --48.500000 -13.500000 807.000000 2670.000000 --48.333333 -13.500000 384.000000 2670.000000 --48.166667 -13.500000 341.000000 2670.000000 --48.000000 -13.500000 444.000000 2670.000000 --47.833333 -13.500000 697.000000 2670.000000 --47.666667 -13.500000 1161.000000 2670.000000 --47.500000 -13.500000 1191.000000 2670.000000 --47.333333 -13.500000 393.000000 2670.000000 --47.166667 -13.500000 418.000000 2670.000000 --47.000000 -13.500000 431.000000 2670.000000 --46.833333 -13.500000 635.000000 2670.000000 --46.666667 -13.500000 434.000000 2670.000000 --46.500000 -13.500000 545.000000 2670.000000 --46.333333 -13.500000 727.000000 2670.000000 --46.166667 -13.500000 962.000000 2670.000000 --46.000000 -13.500000 890.000000 2670.000000 --45.833333 -13.500000 832.000000 2670.000000 --45.666667 -13.500000 803.000000 2670.000000 --45.500000 -13.500000 728.000000 2670.000000 --45.333333 -13.500000 720.000000 2670.000000 --45.166667 -13.500000 677.000000 2670.000000 --45.000000 -13.500000 743.000000 2670.000000 --44.833333 -13.500000 642.000000 2670.000000 --44.666667 -13.500000 564.000000 2670.000000 --44.500000 -13.500000 615.000000 2670.000000 --44.333333 -13.500000 534.000000 2670.000000 --44.166667 -13.500000 655.000000 2670.000000 --44.000000 -13.500000 622.000000 2670.000000 --43.833333 -13.500000 737.000000 2670.000000 --43.666667 -13.500000 463.000000 2670.000000 --43.500000 -13.500000 429.000000 2670.000000 --43.333333 -13.500000 448.000000 2670.000000 --43.166667 -13.500000 549.000000 2670.000000 --43.000000 -13.500000 580.000000 2670.000000 --42.833333 -13.500000 1033.000000 2670.000000 --42.666667 -13.500000 756.000000 2670.000000 --42.500000 -13.500000 797.000000 2670.000000 --42.333333 -13.500000 659.000000 2670.000000 --42.166667 -13.500000 796.000000 2670.000000 --42.000000 -13.500000 1257.000000 2670.000000 --41.833333 -13.500000 1112.000000 2670.000000 --41.666667 -13.500000 777.000000 2670.000000 --41.500000 -13.500000 1312.000000 2670.000000 --41.333333 -13.500000 1155.000000 2670.000000 --41.166667 -13.500000 678.000000 2670.000000 --41.000000 -13.500000 550.000000 2670.000000 --40.833333 -13.500000 399.000000 2670.000000 --40.666667 -13.500000 364.000000 2670.000000 --40.500000 -13.500000 819.000000 2670.000000 --40.333333 -13.500000 841.000000 2670.000000 --40.166667 -13.500000 790.000000 2670.000000 --40.000000 -13.500000 738.000000 2670.000000 --65.000000 -13.666667 140.000000 2670.000000 --64.833333 -13.666667 140.000000 2670.000000 --64.666667 -13.666667 138.000000 2670.000000 --64.500000 -13.666667 142.000000 2670.000000 --64.333333 -13.666667 143.000000 2670.000000 --64.166667 -13.666667 144.000000 2670.000000 --64.000000 -13.666667 143.000000 2670.000000 --63.833333 -13.666667 144.000000 2670.000000 --63.666667 -13.666667 146.000000 2670.000000 --63.500000 -13.666667 144.000000 2670.000000 --63.333333 -13.666667 165.000000 2670.000000 --63.166667 -13.666667 156.000000 2670.000000 --63.000000 -13.666667 148.000000 2670.000000 --62.833333 -13.666667 150.000000 2670.000000 --62.666667 -13.666667 181.000000 2670.000000 --62.500000 -13.666667 214.000000 2670.000000 --62.333333 -13.666667 186.000000 2670.000000 --62.166667 -13.666667 332.000000 2670.000000 --62.000000 -13.666667 194.000000 2670.000000 --61.833333 -13.666667 181.000000 2670.000000 --61.666667 -13.666667 160.000000 2670.000000 --61.500000 -13.666667 164.000000 2670.000000 --61.333333 -13.666667 208.000000 2670.000000 --61.166667 -13.666667 224.000000 2670.000000 --61.000000 -13.666667 204.000000 2670.000000 --60.833333 -13.666667 465.000000 2670.000000 --60.666667 -13.666667 192.000000 2670.000000 --60.500000 -13.666667 208.000000 2670.000000 --60.333333 -13.666667 227.000000 2670.000000 --60.166667 -13.666667 280.000000 2670.000000 --60.000000 -13.666667 490.000000 2670.000000 --59.833333 -13.666667 573.000000 2670.000000 --59.666667 -13.666667 665.000000 2670.000000 --59.500000 -13.666667 536.000000 2670.000000 --59.333333 -13.666667 575.000000 2670.000000 --59.166667 -13.666667 583.000000 2670.000000 --59.000000 -13.666667 515.000000 2670.000000 --58.833333 -13.666667 588.000000 2670.000000 --58.666667 -13.666667 524.000000 2670.000000 --58.500000 -13.666667 559.000000 2670.000000 --58.333333 -13.666667 556.000000 2670.000000 --58.166667 -13.666667 546.000000 2670.000000 --58.000000 -13.666667 512.000000 2670.000000 --57.833333 -13.666667 560.000000 2670.000000 --57.666667 -13.666667 473.000000 2670.000000 --57.500000 -13.666667 532.000000 2670.000000 --57.333333 -13.666667 450.000000 2670.000000 --57.166667 -13.666667 402.000000 2670.000000 --57.000000 -13.666667 462.000000 2670.000000 --56.833333 -13.666667 401.000000 2670.000000 --56.666667 -13.666667 383.000000 2670.000000 --56.500000 -13.666667 351.000000 2670.000000 --56.333333 -13.666667 358.000000 2670.000000 --56.166667 -13.666667 395.000000 2670.000000 --56.000000 -13.666667 461.000000 2670.000000 --55.833333 -13.666667 459.000000 2670.000000 --55.666667 -13.666667 460.000000 2670.000000 --55.500000 -13.666667 446.000000 2670.000000 --55.333333 -13.666667 446.000000 2670.000000 --55.166667 -13.666667 389.000000 2670.000000 --55.000000 -13.666667 470.000000 2670.000000 --54.833333 -13.666667 504.000000 2670.000000 --54.666667 -13.666667 423.000000 2670.000000 --54.500000 -13.666667 474.000000 2670.000000 --54.333333 -13.666667 544.000000 2670.000000 --54.166667 -13.666667 470.000000 2670.000000 --54.000000 -13.666667 510.000000 2670.000000 --53.833333 -13.666667 348.000000 2670.000000 --53.666667 -13.666667 428.000000 2670.000000 --53.500000 -13.666667 423.000000 2670.000000 --53.333333 -13.666667 394.000000 2670.000000 --53.166667 -13.666667 366.000000 2670.000000 --53.000000 -13.666667 407.000000 2670.000000 --52.833333 -13.666667 357.000000 2670.000000 --52.666667 -13.666667 450.000000 2670.000000 --52.500000 -13.666667 336.000000 2670.000000 --52.333333 -13.666667 356.000000 2670.000000 --52.166667 -13.666667 397.000000 2670.000000 --52.000000 -13.666667 408.000000 2670.000000 --51.833333 -13.666667 268.000000 2670.000000 --51.666667 -13.666667 237.000000 2670.000000 --51.500000 -13.666667 221.000000 2670.000000 --51.333333 -13.666667 227.000000 2670.000000 --51.166667 -13.666667 226.000000 2670.000000 --51.000000 -13.666667 227.000000 2670.000000 --50.833333 -13.666667 228.000000 2670.000000 --50.666667 -13.666667 284.000000 2670.000000 --50.500000 -13.666667 254.000000 2670.000000 --50.333333 -13.666667 240.000000 2670.000000 --50.166667 -13.666667 236.000000 2670.000000 --50.000000 -13.666667 251.000000 2670.000000 --49.833333 -13.666667 259.000000 2670.000000 --49.666667 -13.666667 352.000000 2670.000000 --49.500000 -13.666667 324.000000 2670.000000 --49.333333 -13.666667 388.000000 2670.000000 --49.166667 -13.666667 380.000000 2670.000000 --49.000000 -13.666667 390.000000 2670.000000 --48.833333 -13.666667 444.000000 2670.000000 --48.666667 -13.666667 570.000000 2670.000000 --48.500000 -13.666667 655.000000 2670.000000 --48.333333 -13.666667 685.000000 2670.000000 --48.166667 -13.666667 435.000000 2670.000000 --48.000000 -13.666667 528.000000 2670.000000 --47.833333 -13.666667 806.000000 2670.000000 --47.666667 -13.666667 899.000000 2670.000000 --47.500000 -13.666667 1186.000000 2670.000000 --47.333333 -13.666667 824.000000 2670.000000 --47.166667 -13.666667 896.000000 2670.000000 --47.000000 -13.666667 463.000000 2670.000000 --46.833333 -13.666667 428.000000 2670.000000 --46.666667 -13.666667 508.000000 2670.000000 --46.500000 -13.666667 596.000000 2670.000000 --46.333333 -13.666667 734.000000 2670.000000 --46.166667 -13.666667 970.000000 2670.000000 --46.000000 -13.666667 854.000000 2670.000000 --45.833333 -13.666667 857.000000 2670.000000 --45.666667 -13.666667 820.000000 2670.000000 --45.500000 -13.666667 789.000000 2670.000000 --45.333333 -13.666667 758.000000 2670.000000 --45.166667 -13.666667 697.000000 2670.000000 --45.000000 -13.666667 677.000000 2670.000000 --44.833333 -13.666667 710.000000 2670.000000 --44.666667 -13.666667 654.000000 2670.000000 --44.500000 -13.666667 559.000000 2670.000000 --44.333333 -13.666667 673.000000 2670.000000 --44.166667 -13.666667 738.000000 2670.000000 --44.000000 -13.666667 801.000000 2670.000000 --43.833333 -13.666667 735.000000 2670.000000 --43.666667 -13.666667 448.000000 2670.000000 --43.500000 -13.666667 430.000000 2670.000000 --43.333333 -13.666667 447.000000 2670.000000 --43.166667 -13.666667 477.000000 2670.000000 --43.000000 -13.666667 590.000000 2670.000000 --42.833333 -13.666667 683.000000 2670.000000 --42.666667 -13.666667 832.000000 2670.000000 --42.500000 -13.666667 877.000000 2670.000000 --42.333333 -13.666667 1056.000000 2670.000000 --42.166667 -13.666667 943.000000 2670.000000 --42.000000 -13.666667 749.000000 2670.000000 --41.833333 -13.666667 472.000000 2670.000000 --41.666667 -13.666667 553.000000 2670.000000 --41.500000 -13.666667 1051.000000 2670.000000 --41.333333 -13.666667 1044.000000 2670.000000 --41.166667 -13.666667 631.000000 2670.000000 --41.000000 -13.666667 440.000000 2670.000000 --40.833333 -13.666667 325.000000 2670.000000 --40.666667 -13.666667 354.000000 2670.000000 --40.500000 -13.666667 820.000000 2670.000000 --40.333333 -13.666667 657.000000 2670.000000 --40.166667 -13.666667 571.000000 2670.000000 --40.000000 -13.666667 599.000000 2670.000000 --65.000000 -13.833333 141.000000 2670.000000 --64.833333 -13.833333 141.000000 2670.000000 --64.666667 -13.833333 141.000000 2670.000000 --64.500000 -13.833333 142.000000 2670.000000 --64.333333 -13.833333 143.000000 2670.000000 --64.166667 -13.833333 148.000000 2670.000000 --64.000000 -13.833333 150.000000 2670.000000 --63.833333 -13.833333 147.000000 2670.000000 --63.666667 -13.833333 152.000000 2670.000000 --63.500000 -13.833333 145.000000 2670.000000 --63.333333 -13.833333 152.000000 2670.000000 --63.166667 -13.833333 154.000000 2670.000000 --63.000000 -13.833333 153.000000 2670.000000 --62.833333 -13.833333 153.000000 2670.000000 --62.666667 -13.833333 170.000000 2670.000000 --62.500000 -13.833333 221.000000 2670.000000 --62.333333 -13.833333 227.000000 2670.000000 --62.166667 -13.833333 229.000000 2670.000000 --62.000000 -13.833333 187.000000 2670.000000 --61.833333 -13.833333 218.000000 2670.000000 --61.666667 -13.833333 161.000000 2670.000000 --61.500000 -13.833333 174.000000 2670.000000 --61.333333 -13.833333 258.000000 2670.000000 --61.166667 -13.833333 238.000000 2670.000000 --61.000000 -13.833333 376.000000 2670.000000 --60.833333 -13.833333 552.000000 2670.000000 --60.666667 -13.833333 296.000000 2670.000000 --60.500000 -13.833333 181.000000 2670.000000 --60.333333 -13.833333 204.000000 2670.000000 --60.166667 -13.833333 242.000000 2670.000000 --60.000000 -13.833333 491.000000 2670.000000 --59.833333 -13.833333 540.000000 2670.000000 --59.666667 -13.833333 625.000000 2670.000000 --59.500000 -13.833333 587.000000 2670.000000 --59.333333 -13.833333 658.000000 2670.000000 --59.166667 -13.833333 619.000000 2670.000000 --59.000000 -13.833333 557.000000 2670.000000 --58.833333 -13.833333 615.000000 2670.000000 --58.666667 -13.833333 565.000000 2670.000000 --58.500000 -13.833333 556.000000 2670.000000 --58.333333 -13.833333 595.000000 2670.000000 --58.166667 -13.833333 588.000000 2670.000000 --58.000000 -13.833333 546.000000 2670.000000 --57.833333 -13.833333 556.000000 2670.000000 --57.666667 -13.833333 581.000000 2670.000000 --57.500000 -13.833333 546.000000 2670.000000 --57.333333 -13.833333 541.000000 2670.000000 --57.166667 -13.833333 540.000000 2670.000000 --57.000000 -13.833333 467.000000 2670.000000 --56.833333 -13.833333 412.000000 2670.000000 --56.666667 -13.833333 407.000000 2670.000000 --56.500000 -13.833333 372.000000 2670.000000 --56.333333 -13.833333 407.000000 2670.000000 --56.166667 -13.833333 438.000000 2670.000000 --56.000000 -13.833333 405.000000 2670.000000 --55.833333 -13.833333 501.000000 2670.000000 --55.666667 -13.833333 477.000000 2670.000000 --55.500000 -13.833333 482.000000 2670.000000 --55.333333 -13.833333 493.000000 2670.000000 --55.166667 -13.833333 404.000000 2670.000000 --55.000000 -13.833333 373.000000 2670.000000 --54.833333 -13.833333 478.000000 2670.000000 --54.666667 -13.833333 501.000000 2670.000000 --54.500000 -13.833333 466.000000 2670.000000 --54.333333 -13.833333 539.000000 2670.000000 --54.166667 -13.833333 533.000000 2670.000000 --54.000000 -13.833333 464.000000 2670.000000 --53.833333 -13.833333 367.000000 2670.000000 --53.666667 -13.833333 366.000000 2670.000000 --53.500000 -13.833333 411.000000 2670.000000 --53.333333 -13.833333 366.000000 2670.000000 --53.166667 -13.833333 419.000000 2670.000000 --53.000000 -13.833333 391.000000 2670.000000 --52.833333 -13.833333 365.000000 2670.000000 --52.666667 -13.833333 431.000000 2670.000000 --52.500000 -13.833333 410.000000 2670.000000 --52.333333 -13.833333 395.000000 2670.000000 --52.166667 -13.833333 388.000000 2670.000000 --52.000000 -13.833333 283.000000 2670.000000 --51.833333 -13.833333 339.000000 2670.000000 --51.666667 -13.833333 237.000000 2670.000000 --51.500000 -13.833333 237.000000 2670.000000 --51.333333 -13.833333 232.000000 2670.000000 --51.166667 -13.833333 231.000000 2670.000000 --51.000000 -13.833333 236.000000 2670.000000 --50.833333 -13.833333 238.000000 2670.000000 --50.666667 -13.833333 284.000000 2670.000000 --50.500000 -13.833333 257.000000 2670.000000 --50.333333 -13.833333 282.000000 2670.000000 --50.166667 -13.833333 288.000000 2670.000000 --50.000000 -13.833333 301.000000 2670.000000 --49.833333 -13.833333 299.000000 2670.000000 --49.666667 -13.833333 341.000000 2670.000000 --49.500000 -13.833333 310.000000 2670.000000 --49.333333 -13.833333 389.000000 2670.000000 --49.166667 -13.833333 365.000000 2670.000000 --49.000000 -13.833333 415.000000 2670.000000 --48.833333 -13.833333 756.000000 2670.000000 --48.666667 -13.833333 715.000000 2670.000000 --48.500000 -13.833333 712.000000 2670.000000 --48.333333 -13.833333 449.000000 2670.000000 --48.166667 -13.833333 840.000000 2670.000000 --48.000000 -13.833333 401.000000 2670.000000 --47.833333 -13.833333 451.000000 2670.000000 --47.666667 -13.833333 499.000000 2670.000000 --47.500000 -13.833333 849.000000 2670.000000 --47.333333 -13.833333 1116.000000 2670.000000 --47.166667 -13.833333 736.000000 2670.000000 --47.000000 -13.833333 990.000000 2670.000000 --46.833333 -13.833333 421.000000 2670.000000 --46.666667 -13.833333 459.000000 2670.000000 --46.500000 -13.833333 598.000000 2670.000000 --46.333333 -13.833333 682.000000 2670.000000 --46.166667 -13.833333 972.000000 2670.000000 --46.000000 -13.833333 911.000000 2670.000000 --45.833333 -13.833333 808.000000 2670.000000 --45.666667 -13.833333 826.000000 2670.000000 --45.500000 -13.833333 733.000000 2670.000000 --45.333333 -13.833333 755.000000 2670.000000 --45.166667 -13.833333 768.000000 2670.000000 --45.000000 -13.833333 708.000000 2670.000000 --44.833333 -13.833333 680.000000 2670.000000 --44.666667 -13.833333 720.000000 2670.000000 --44.500000 -13.833333 694.000000 2670.000000 --44.333333 -13.833333 731.000000 2670.000000 --44.166667 -13.833333 721.000000 2670.000000 --44.000000 -13.833333 484.000000 2670.000000 --43.833333 -13.833333 461.000000 2670.000000 --43.666667 -13.833333 450.000000 2670.000000 --43.500000 -13.833333 441.000000 2670.000000 --43.333333 -13.833333 455.000000 2670.000000 --43.166667 -13.833333 488.000000 2670.000000 --43.000000 -13.833333 500.000000 2670.000000 --42.833333 -13.833333 702.000000 2670.000000 --42.666667 -13.833333 929.000000 2670.000000 --42.500000 -13.833333 1028.000000 2670.000000 --42.333333 -13.833333 1023.000000 2670.000000 --42.166667 -13.833333 634.000000 2670.000000 --42.000000 -13.833333 581.000000 2670.000000 --41.833333 -13.833333 606.000000 2670.000000 --41.666667 -13.833333 504.000000 2670.000000 --41.500000 -13.833333 484.000000 2670.000000 --41.333333 -13.833333 541.000000 2670.000000 --41.166667 -13.833333 555.000000 2670.000000 --41.000000 -13.833333 295.000000 2670.000000 --40.833333 -13.833333 255.000000 2670.000000 --40.666667 -13.833333 235.000000 2670.000000 --40.500000 -13.833333 421.000000 2670.000000 --40.333333 -13.833333 407.000000 2670.000000 --40.166667 -13.833333 513.000000 2670.000000 --40.000000 -13.833333 348.000000 2670.000000 --65.000000 -14.000000 144.000000 2670.000000 --64.833333 -14.000000 142.000000 2670.000000 --64.666667 -14.000000 144.000000 2670.000000 --64.500000 -14.000000 156.000000 2670.000000 --64.333333 -14.000000 148.000000 2670.000000 --64.166667 -14.000000 162.000000 2670.000000 --64.000000 -14.000000 154.000000 2670.000000 --63.833333 -14.000000 160.000000 2670.000000 --63.666667 -14.000000 171.000000 2670.000000 --63.500000 -14.000000 198.000000 2670.000000 --63.333333 -14.000000 166.000000 2670.000000 --63.166667 -14.000000 178.000000 2670.000000 --63.000000 -14.000000 167.000000 2670.000000 --62.833333 -14.000000 166.000000 2670.000000 --62.666667 -14.000000 162.000000 2670.000000 --62.500000 -14.000000 169.000000 2670.000000 --62.333333 -14.000000 183.000000 2670.000000 --62.166667 -14.000000 180.000000 2670.000000 --62.000000 -14.000000 212.000000 2670.000000 --61.833333 -14.000000 193.000000 2670.000000 --61.666667 -14.000000 189.000000 2670.000000 --61.500000 -14.000000 174.000000 2670.000000 --61.333333 -14.000000 186.000000 2670.000000 --61.166667 -14.000000 227.000000 2670.000000 --61.000000 -14.000000 233.000000 2670.000000 --60.833333 -14.000000 527.000000 2670.000000 --60.666667 -14.000000 560.000000 2670.000000 --60.500000 -14.000000 393.000000 2670.000000 --60.333333 -14.000000 193.000000 2670.000000 --60.166667 -14.000000 230.000000 2670.000000 --60.000000 -14.000000 245.000000 2670.000000 --59.833333 -14.000000 288.000000 2670.000000 --59.666667 -14.000000 445.000000 2670.000000 --59.500000 -14.000000 574.000000 2670.000000 --59.333333 -14.000000 615.000000 2670.000000 --59.166667 -14.000000 672.000000 2670.000000 --59.000000 -14.000000 545.000000 2670.000000 --58.833333 -14.000000 639.000000 2670.000000 --58.666667 -14.000000 572.000000 2670.000000 --58.500000 -14.000000 545.000000 2670.000000 --58.333333 -14.000000 584.000000 2670.000000 --58.166667 -14.000000 626.000000 2670.000000 --58.000000 -14.000000 619.000000 2670.000000 --57.833333 -14.000000 506.000000 2670.000000 --57.666667 -14.000000 553.000000 2670.000000 --57.500000 -14.000000 578.000000 2670.000000 --57.333333 -14.000000 590.000000 2670.000000 --57.166667 -14.000000 528.000000 2670.000000 --57.000000 -14.000000 500.000000 2670.000000 --56.833333 -14.000000 380.000000 2670.000000 --56.666667 -14.000000 396.000000 2670.000000 --56.500000 -14.000000 423.000000 2670.000000 --56.333333 -14.000000 322.000000 2670.000000 --56.166667 -14.000000 394.000000 2670.000000 --56.000000 -14.000000 397.000000 2670.000000 --55.833333 -14.000000 491.000000 2670.000000 --55.666667 -14.000000 453.000000 2670.000000 --55.500000 -14.000000 509.000000 2670.000000 --55.333333 -14.000000 509.000000 2670.000000 --55.166667 -14.000000 441.000000 2670.000000 --55.000000 -14.000000 443.000000 2670.000000 --54.833333 -14.000000 430.000000 2670.000000 --54.666667 -14.000000 474.000000 2670.000000 --54.500000 -14.000000 473.000000 2670.000000 --54.333333 -14.000000 476.000000 2670.000000 --54.166667 -14.000000 527.000000 2670.000000 --54.000000 -14.000000 514.000000 2670.000000 --53.833333 -14.000000 402.000000 2670.000000 --53.666667 -14.000000 522.000000 2670.000000 --53.500000 -14.000000 413.000000 2670.000000 --53.333333 -14.000000 354.000000 2670.000000 --53.166667 -14.000000 410.000000 2670.000000 --53.000000 -14.000000 336.000000 2670.000000 --52.833333 -14.000000 451.000000 2670.000000 --52.666667 -14.000000 463.000000 2670.000000 --52.500000 -14.000000 372.000000 2670.000000 --52.333333 -14.000000 347.000000 2670.000000 --52.166667 -14.000000 446.000000 2670.000000 --52.000000 -14.000000 288.000000 2670.000000 --51.833333 -14.000000 243.000000 2670.000000 --51.666667 -14.000000 231.000000 2670.000000 --51.500000 -14.000000 238.000000 2670.000000 --51.333333 -14.000000 242.000000 2670.000000 --51.166667 -14.000000 236.000000 2670.000000 --51.000000 -14.000000 236.000000 2670.000000 --50.833333 -14.000000 239.000000 2670.000000 --50.666667 -14.000000 291.000000 2670.000000 --50.500000 -14.000000 252.000000 2670.000000 --50.333333 -14.000000 297.000000 2670.000000 --50.166667 -14.000000 258.000000 2670.000000 --50.000000 -14.000000 297.000000 2670.000000 --49.833333 -14.000000 306.000000 2670.000000 --49.666667 -14.000000 313.000000 2670.000000 --49.500000 -14.000000 381.000000 2670.000000 --49.333333 -14.000000 362.000000 2670.000000 --49.166667 -14.000000 470.000000 2670.000000 --49.000000 -14.000000 534.000000 2670.000000 --48.833333 -14.000000 754.000000 2670.000000 --48.666667 -14.000000 557.000000 2670.000000 --48.500000 -14.000000 517.000000 2670.000000 --48.333333 -14.000000 638.000000 2670.000000 --48.166667 -14.000000 612.000000 2670.000000 --48.000000 -14.000000 504.000000 2670.000000 --47.833333 -14.000000 492.000000 2670.000000 --47.666667 -14.000000 1132.000000 2670.000000 --47.500000 -14.000000 1559.000000 2670.000000 --47.333333 -14.000000 937.000000 2670.000000 --47.166667 -14.000000 891.000000 2670.000000 --47.000000 -14.000000 470.000000 2670.000000 --46.833333 -14.000000 428.000000 2670.000000 --46.666667 -14.000000 522.000000 2670.000000 --46.500000 -14.000000 542.000000 2670.000000 --46.333333 -14.000000 889.000000 2670.000000 --46.166667 -14.000000 892.000000 2670.000000 --46.000000 -14.000000 931.000000 2670.000000 --45.833333 -14.000000 884.000000 2670.000000 --45.666667 -14.000000 834.000000 2670.000000 --45.500000 -14.000000 805.000000 2670.000000 --45.333333 -14.000000 736.000000 2670.000000 --45.166667 -14.000000 694.000000 2670.000000 --45.000000 -14.000000 677.000000 2670.000000 --44.833333 -14.000000 673.000000 2670.000000 --44.666667 -14.000000 681.000000 2670.000000 --44.500000 -14.000000 696.000000 2670.000000 --44.333333 -14.000000 688.000000 2670.000000 --44.166667 -14.000000 563.000000 2670.000000 --44.000000 -14.000000 472.000000 2670.000000 --43.833333 -14.000000 458.000000 2670.000000 --43.666667 -14.000000 447.000000 2670.000000 --43.500000 -14.000000 458.000000 2670.000000 --43.333333 -14.000000 451.000000 2670.000000 --43.166667 -14.000000 466.000000 2670.000000 --43.000000 -14.000000 493.000000 2670.000000 --42.833333 -14.000000 513.000000 2670.000000 --42.666667 -14.000000 830.000000 2670.000000 --42.500000 -14.000000 974.000000 2670.000000 --42.333333 -14.000000 942.000000 2670.000000 --42.166667 -14.000000 555.000000 2670.000000 --42.000000 -14.000000 509.000000 2670.000000 --41.833333 -14.000000 485.000000 2670.000000 --41.666667 -14.000000 411.000000 2670.000000 --41.500000 -14.000000 432.000000 2670.000000 --41.333333 -14.000000 629.000000 2670.000000 --41.166667 -14.000000 441.000000 2670.000000 --41.000000 -14.000000 279.000000 2670.000000 --40.833333 -14.000000 342.000000 2670.000000 --40.666667 -14.000000 314.000000 2670.000000 --40.500000 -14.000000 402.000000 2670.000000 --40.333333 -14.000000 556.000000 2670.000000 --40.166667 -14.000000 327.000000 2670.000000 --40.000000 -14.000000 690.000000 2670.000000 --65.000000 -14.166667 151.000000 2670.000000 --64.833333 -14.166667 145.000000 2670.000000 --64.666667 -14.166667 149.000000 2670.000000 --64.500000 -14.166667 158.000000 2670.000000 --64.333333 -14.166667 154.000000 2670.000000 --64.166667 -14.166667 165.000000 2670.000000 --64.000000 -14.166667 154.000000 2670.000000 --63.833333 -14.166667 164.000000 2670.000000 --63.666667 -14.166667 170.000000 2670.000000 --63.500000 -14.166667 166.000000 2670.000000 --63.333333 -14.166667 234.000000 2670.000000 --63.166667 -14.166667 196.000000 2670.000000 --63.000000 -14.166667 173.000000 2670.000000 --62.833333 -14.166667 165.000000 2670.000000 --62.666667 -14.166667 176.000000 2670.000000 --62.500000 -14.166667 177.000000 2670.000000 --62.333333 -14.166667 187.000000 2670.000000 --62.166667 -14.166667 225.000000 2670.000000 --62.000000 -14.166667 241.000000 2670.000000 --61.833333 -14.166667 274.000000 2670.000000 --61.666667 -14.166667 214.000000 2670.000000 --61.500000 -14.166667 168.000000 2670.000000 --61.333333 -14.166667 182.000000 2670.000000 --61.166667 -14.166667 189.000000 2670.000000 --61.000000 -14.166667 212.000000 2670.000000 --60.833333 -14.166667 607.000000 2670.000000 --60.666667 -14.166667 593.000000 2670.000000 --60.500000 -14.166667 372.000000 2670.000000 --60.333333 -14.166667 197.000000 2670.000000 --60.166667 -14.166667 212.000000 2670.000000 --60.000000 -14.166667 231.000000 2670.000000 --59.833333 -14.166667 236.000000 2670.000000 --59.666667 -14.166667 241.000000 2670.000000 --59.500000 -14.166667 602.000000 2670.000000 --59.333333 -14.166667 641.000000 2670.000000 --59.166667 -14.166667 699.000000 2670.000000 --59.000000 -14.166667 605.000000 2670.000000 --58.833333 -14.166667 633.000000 2670.000000 --58.666667 -14.166667 631.000000 2670.000000 --58.500000 -14.166667 658.000000 2670.000000 --58.333333 -14.166667 627.000000 2670.000000 --58.166667 -14.166667 614.000000 2670.000000 --58.000000 -14.166667 651.000000 2670.000000 --57.833333 -14.166667 638.000000 2670.000000 --57.666667 -14.166667 566.000000 2670.000000 --57.500000 -14.166667 605.000000 2670.000000 --57.333333 -14.166667 566.000000 2670.000000 --57.166667 -14.166667 534.000000 2670.000000 --57.000000 -14.166667 541.000000 2670.000000 --56.833333 -14.166667 442.000000 2670.000000 --56.666667 -14.166667 409.000000 2670.000000 --56.500000 -14.166667 490.000000 2670.000000 --56.333333 -14.166667 388.000000 2670.000000 --56.166667 -14.166667 338.000000 2670.000000 --56.000000 -14.166667 353.000000 2670.000000 --55.833333 -14.166667 385.000000 2670.000000 --55.666667 -14.166667 455.000000 2670.000000 --55.500000 -14.166667 457.000000 2670.000000 --55.333333 -14.166667 568.000000 2670.000000 --55.166667 -14.166667 540.000000 2670.000000 --55.000000 -14.166667 523.000000 2670.000000 --54.833333 -14.166667 424.000000 2670.000000 --54.666667 -14.166667 528.000000 2670.000000 --54.500000 -14.166667 548.000000 2670.000000 --54.333333 -14.166667 470.000000 2670.000000 --54.166667 -14.166667 514.000000 2670.000000 --54.000000 -14.166667 593.000000 2670.000000 --53.833333 -14.166667 570.000000 2670.000000 --53.666667 -14.166667 492.000000 2670.000000 --53.500000 -14.166667 421.000000 2670.000000 --53.333333 -14.166667 412.000000 2670.000000 --53.166667 -14.166667 451.000000 2670.000000 --53.000000 -14.166667 357.000000 2670.000000 --52.833333 -14.166667 495.000000 2670.000000 --52.666667 -14.166667 391.000000 2670.000000 --52.500000 -14.166667 336.000000 2670.000000 --52.333333 -14.166667 320.000000 2670.000000 --52.166667 -14.166667 350.000000 2670.000000 --52.000000 -14.166667 265.000000 2670.000000 --51.833333 -14.166667 251.000000 2670.000000 --51.666667 -14.166667 244.000000 2670.000000 --51.500000 -14.166667 242.000000 2670.000000 --51.333333 -14.166667 241.000000 2670.000000 --51.166667 -14.166667 241.000000 2670.000000 --51.000000 -14.166667 242.000000 2670.000000 --50.833333 -14.166667 236.000000 2670.000000 --50.666667 -14.166667 243.000000 2670.000000 --50.500000 -14.166667 265.000000 2670.000000 --50.333333 -14.166667 286.000000 2670.000000 --50.166667 -14.166667 294.000000 2670.000000 --50.000000 -14.166667 364.000000 2670.000000 --49.833333 -14.166667 290.000000 2670.000000 --49.666667 -14.166667 341.000000 2670.000000 --49.500000 -14.166667 307.000000 2670.000000 --49.333333 -14.166667 356.000000 2670.000000 --49.166667 -14.166667 584.000000 2670.000000 --49.000000 -14.166667 573.000000 2670.000000 --48.833333 -14.166667 444.000000 2670.000000 --48.666667 -14.166667 465.000000 2670.000000 --48.500000 -14.166667 446.000000 2670.000000 --48.333333 -14.166667 468.000000 2670.000000 --48.166667 -14.166667 523.000000 2670.000000 --48.000000 -14.166667 654.000000 2670.000000 --47.833333 -14.166667 957.000000 2670.000000 --47.666667 -14.166667 1200.000000 2670.000000 --47.500000 -14.166667 1349.000000 2670.000000 --47.333333 -14.166667 776.000000 2670.000000 --47.166667 -14.166667 492.000000 2670.000000 --47.000000 -14.166667 445.000000 2670.000000 --46.833333 -14.166667 469.000000 2670.000000 --46.666667 -14.166667 528.000000 2670.000000 --46.500000 -14.166667 705.000000 2670.000000 --46.333333 -14.166667 835.000000 2670.000000 --46.166667 -14.166667 848.000000 2670.000000 --46.000000 -14.166667 937.000000 2670.000000 --45.833333 -14.166667 890.000000 2670.000000 --45.666667 -14.166667 829.000000 2670.000000 --45.500000 -14.166667 812.000000 2670.000000 --45.333333 -14.166667 793.000000 2670.000000 --45.166667 -14.166667 757.000000 2670.000000 --45.000000 -14.166667 740.000000 2670.000000 --44.833333 -14.166667 614.000000 2670.000000 --44.666667 -14.166667 560.000000 2670.000000 --44.500000 -14.166667 596.000000 2670.000000 --44.333333 -14.166667 531.000000 2670.000000 --44.166667 -14.166667 490.000000 2670.000000 --44.000000 -14.166667 474.000000 2670.000000 --43.833333 -14.166667 462.000000 2670.000000 --43.666667 -14.166667 439.000000 2670.000000 --43.500000 -14.166667 455.000000 2670.000000 --43.333333 -14.166667 458.000000 2670.000000 --43.166667 -14.166667 492.000000 2670.000000 --43.000000 -14.166667 529.000000 2670.000000 --42.833333 -14.166667 507.000000 2670.000000 --42.666667 -14.166667 746.000000 2670.000000 --42.500000 -14.166667 1052.000000 2670.000000 --42.333333 -14.166667 632.000000 2670.000000 --42.166667 -14.166667 559.000000 2670.000000 --42.000000 -14.166667 872.000000 2670.000000 --41.833333 -14.166667 573.000000 2670.000000 --41.666667 -14.166667 521.000000 2670.000000 --41.500000 -14.166667 381.000000 2670.000000 --41.333333 -14.166667 431.000000 2670.000000 --41.166667 -14.166667 315.000000 2670.000000 --41.000000 -14.166667 312.000000 2670.000000 --40.833333 -14.166667 335.000000 2670.000000 --40.666667 -14.166667 610.000000 2670.000000 --40.500000 -14.166667 754.000000 2670.000000 --40.333333 -14.166667 567.000000 2670.000000 --40.166667 -14.166667 736.000000 2670.000000 --40.000000 -14.166667 236.000000 2670.000000 --65.000000 -14.333333 157.000000 2670.000000 --64.833333 -14.333333 148.000000 2670.000000 --64.666667 -14.333333 149.000000 2670.000000 --64.500000 -14.333333 151.000000 2670.000000 --64.333333 -14.333333 171.000000 2670.000000 --64.166667 -14.333333 170.000000 2670.000000 --64.000000 -14.333333 157.000000 2670.000000 --63.833333 -14.333333 159.000000 2670.000000 --63.666667 -14.333333 165.000000 2670.000000 --63.500000 -14.333333 179.000000 2670.000000 --63.333333 -14.333333 206.000000 2670.000000 --63.166667 -14.333333 195.000000 2670.000000 --63.000000 -14.333333 168.000000 2670.000000 --62.833333 -14.333333 185.000000 2670.000000 --62.666667 -14.333333 187.000000 2670.000000 --62.500000 -14.333333 204.000000 2670.000000 --62.333333 -14.333333 191.000000 2670.000000 --62.166667 -14.333333 198.000000 2670.000000 --62.000000 -14.333333 207.000000 2670.000000 --61.833333 -14.333333 253.000000 2670.000000 --61.666667 -14.333333 249.000000 2670.000000 --61.500000 -14.333333 204.000000 2670.000000 --61.333333 -14.333333 176.000000 2670.000000 --61.166667 -14.333333 209.000000 2670.000000 --61.000000 -14.333333 201.000000 2670.000000 --60.833333 -14.333333 718.000000 2670.000000 --60.666667 -14.333333 643.000000 2670.000000 --60.500000 -14.333333 362.000000 2670.000000 --60.333333 -14.333333 381.000000 2670.000000 --60.166667 -14.333333 189.000000 2670.000000 --60.000000 -14.333333 208.000000 2670.000000 --59.833333 -14.333333 208.000000 2670.000000 --59.666667 -14.333333 243.000000 2670.000000 --59.500000 -14.333333 657.000000 2670.000000 --59.333333 -14.333333 693.000000 2670.000000 --59.166667 -14.333333 630.000000 2670.000000 --59.000000 -14.333333 645.000000 2670.000000 --58.833333 -14.333333 738.000000 2670.000000 --58.666667 -14.333333 699.000000 2670.000000 --58.500000 -14.333333 634.000000 2670.000000 --58.333333 -14.333333 688.000000 2670.000000 --58.166667 -14.333333 628.000000 2670.000000 --58.000000 -14.333333 604.000000 2670.000000 --57.833333 -14.333333 582.000000 2670.000000 --57.666667 -14.333333 530.000000 2670.000000 --57.500000 -14.333333 323.000000 2670.000000 --57.333333 -14.333333 295.000000 2670.000000 --57.166667 -14.333333 344.000000 2670.000000 --57.000000 -14.333333 331.000000 2670.000000 --56.833333 -14.333333 326.000000 2670.000000 --56.666667 -14.333333 364.000000 2670.000000 --56.500000 -14.333333 469.000000 2670.000000 --56.333333 -14.333333 386.000000 2670.000000 --56.166667 -14.333333 455.000000 2670.000000 --56.000000 -14.333333 443.000000 2670.000000 --55.833333 -14.333333 469.000000 2670.000000 --55.666667 -14.333333 453.000000 2670.000000 --55.500000 -14.333333 311.000000 2670.000000 --55.333333 -14.333333 317.000000 2670.000000 --55.166667 -14.333333 389.000000 2670.000000 --55.000000 -14.333333 436.000000 2670.000000 --54.833333 -14.333333 406.000000 2670.000000 --54.666667 -14.333333 412.000000 2670.000000 --54.500000 -14.333333 454.000000 2670.000000 --54.333333 -14.333333 449.000000 2670.000000 --54.166667 -14.333333 514.000000 2670.000000 --54.000000 -14.333333 615.000000 2670.000000 --53.833333 -14.333333 626.000000 2670.000000 --53.666667 -14.333333 492.000000 2670.000000 --53.500000 -14.333333 415.000000 2670.000000 --53.333333 -14.333333 403.000000 2670.000000 --53.166667 -14.333333 390.000000 2670.000000 --53.000000 -14.333333 367.000000 2670.000000 --52.833333 -14.333333 412.000000 2670.000000 --52.666667 -14.333333 445.000000 2670.000000 --52.500000 -14.333333 361.000000 2670.000000 --52.333333 -14.333333 295.000000 2670.000000 --52.166667 -14.333333 281.000000 2670.000000 --52.000000 -14.333333 311.000000 2670.000000 --51.833333 -14.333333 257.000000 2670.000000 --51.666667 -14.333333 250.000000 2670.000000 --51.500000 -14.333333 247.000000 2670.000000 --51.333333 -14.333333 245.000000 2670.000000 --51.166667 -14.333333 248.000000 2670.000000 --51.000000 -14.333333 241.000000 2670.000000 --50.833333 -14.333333 239.000000 2670.000000 --50.666667 -14.333333 246.000000 2670.000000 --50.500000 -14.333333 307.000000 2670.000000 --50.333333 -14.333333 277.000000 2670.000000 --50.166667 -14.333333 326.000000 2670.000000 --50.000000 -14.333333 372.000000 2670.000000 --49.833333 -14.333333 348.000000 2670.000000 --49.666667 -14.333333 343.000000 2670.000000 --49.500000 -14.333333 376.000000 2670.000000 --49.333333 -14.333333 598.000000 2670.000000 --49.166667 -14.333333 544.000000 2670.000000 --49.000000 -14.333333 451.000000 2670.000000 --48.833333 -14.333333 495.000000 2670.000000 --48.666667 -14.333333 591.000000 2670.000000 --48.500000 -14.333333 736.000000 2670.000000 --48.333333 -14.333333 516.000000 2670.000000 --48.166667 -14.333333 486.000000 2670.000000 --48.000000 -14.333333 718.000000 2670.000000 --47.833333 -14.333333 605.000000 2670.000000 --47.666667 -14.333333 1045.000000 2670.000000 --47.500000 -14.333333 1127.000000 2670.000000 --47.333333 -14.333333 1049.000000 2670.000000 --47.166667 -14.333333 493.000000 2670.000000 --47.000000 -14.333333 438.000000 2670.000000 --46.833333 -14.333333 458.000000 2670.000000 --46.666667 -14.333333 503.000000 2670.000000 --46.500000 -14.333333 774.000000 2670.000000 --46.333333 -14.333333 703.000000 2670.000000 --46.166667 -14.333333 785.000000 2670.000000 --46.000000 -14.333333 755.000000 2670.000000 --45.833333 -14.333333 894.000000 2670.000000 --45.666667 -14.333333 850.000000 2670.000000 --45.500000 -14.333333 828.000000 2670.000000 --45.333333 -14.333333 798.000000 2670.000000 --45.166667 -14.333333 710.000000 2670.000000 --45.000000 -14.333333 649.000000 2670.000000 --44.833333 -14.333333 675.000000 2670.000000 --44.666667 -14.333333 629.000000 2670.000000 --44.500000 -14.333333 512.000000 2670.000000 --44.333333 -14.333333 622.000000 2670.000000 --44.166667 -14.333333 489.000000 2670.000000 --44.000000 -14.333333 464.000000 2670.000000 --43.833333 -14.333333 445.000000 2670.000000 --43.666667 -14.333333 465.000000 2670.000000 --43.500000 -14.333333 482.000000 2670.000000 --43.333333 -14.333333 493.000000 2670.000000 --43.166667 -14.333333 540.000000 2670.000000 --43.000000 -14.333333 692.000000 2670.000000 --42.833333 -14.333333 645.000000 2670.000000 --42.666667 -14.333333 842.000000 2670.000000 --42.500000 -14.333333 873.000000 2670.000000 --42.333333 -14.333333 708.000000 2670.000000 --42.166667 -14.333333 625.000000 2670.000000 --42.000000 -14.333333 596.000000 2670.000000 --41.833333 -14.333333 534.000000 2670.000000 --41.666667 -14.333333 606.000000 2670.000000 --41.500000 -14.333333 489.000000 2670.000000 --41.333333 -14.333333 517.000000 2670.000000 --41.166667 -14.333333 453.000000 2670.000000 --41.000000 -14.333333 419.000000 2670.000000 --40.833333 -14.333333 656.000000 2670.000000 --40.666667 -14.333333 851.000000 2670.000000 --40.500000 -14.333333 608.000000 2670.000000 --40.333333 -14.333333 532.000000 2670.000000 --40.166667 -14.333333 723.000000 2670.000000 --40.000000 -14.333333 316.000000 2670.000000 --65.000000 -14.500000 160.000000 2670.000000 --64.833333 -14.500000 151.000000 2670.000000 --64.666667 -14.500000 150.000000 2670.000000 --64.500000 -14.500000 153.000000 2670.000000 --64.333333 -14.500000 171.000000 2670.000000 --64.166667 -14.500000 174.000000 2670.000000 --64.000000 -14.500000 169.000000 2670.000000 --63.833333 -14.500000 164.000000 2670.000000 --63.666667 -14.500000 167.000000 2670.000000 --63.500000 -14.500000 179.000000 2670.000000 --63.333333 -14.500000 185.000000 2670.000000 --63.166667 -14.500000 240.000000 2670.000000 --63.000000 -14.500000 210.000000 2670.000000 --62.833333 -14.500000 213.000000 2670.000000 --62.666667 -14.500000 189.000000 2670.000000 --62.500000 -14.500000 183.000000 2670.000000 --62.333333 -14.500000 206.000000 2670.000000 --62.166667 -14.500000 233.000000 2670.000000 --62.000000 -14.500000 200.000000 2670.000000 --61.833333 -14.500000 200.000000 2670.000000 --61.666667 -14.500000 274.000000 2670.000000 --61.500000 -14.500000 228.000000 2670.000000 --61.333333 -14.500000 190.000000 2670.000000 --61.166667 -14.500000 187.000000 2670.000000 --61.000000 -14.500000 196.000000 2670.000000 --60.833333 -14.500000 284.000000 2670.000000 --60.666667 -14.500000 646.000000 2670.000000 --60.500000 -14.500000 535.000000 2670.000000 --60.333333 -14.500000 486.000000 2670.000000 --60.166667 -14.500000 246.000000 2670.000000 --60.000000 -14.500000 204.000000 2670.000000 --59.833333 -14.500000 347.000000 2670.000000 --59.666667 -14.500000 253.000000 2670.000000 --59.500000 -14.500000 597.000000 2670.000000 --59.333333 -14.500000 743.000000 2670.000000 --59.166667 -14.500000 679.000000 2670.000000 --59.000000 -14.500000 679.000000 2670.000000 --58.833333 -14.500000 697.000000 2670.000000 --58.666667 -14.500000 696.000000 2670.000000 --58.500000 -14.500000 637.000000 2670.000000 --58.333333 -14.500000 625.000000 2670.000000 --58.166667 -14.500000 599.000000 2670.000000 --58.000000 -14.500000 524.000000 2670.000000 --57.833333 -14.500000 301.000000 2670.000000 --57.666667 -14.500000 296.000000 2670.000000 --57.500000 -14.500000 291.000000 2670.000000 --57.333333 -14.500000 298.000000 2670.000000 --57.166667 -14.500000 391.000000 2670.000000 --57.000000 -14.500000 416.000000 2670.000000 --56.833333 -14.500000 246.000000 2670.000000 --56.666667 -14.500000 223.000000 2670.000000 --56.500000 -14.500000 226.000000 2670.000000 --56.333333 -14.500000 430.000000 2670.000000 --56.166667 -14.500000 468.000000 2670.000000 --56.000000 -14.500000 324.000000 2670.000000 --55.833333 -14.500000 371.000000 2670.000000 --55.666667 -14.500000 361.000000 2670.000000 --55.500000 -14.500000 358.000000 2670.000000 --55.333333 -14.500000 424.000000 2670.000000 --55.166667 -14.500000 453.000000 2670.000000 --55.000000 -14.500000 427.000000 2670.000000 --54.833333 -14.500000 438.000000 2670.000000 --54.666667 -14.500000 458.000000 2670.000000 --54.500000 -14.500000 419.000000 2670.000000 --54.333333 -14.500000 450.000000 2670.000000 --54.166667 -14.500000 485.000000 2670.000000 --54.000000 -14.500000 533.000000 2670.000000 --53.833333 -14.500000 601.000000 2670.000000 --53.666667 -14.500000 583.000000 2670.000000 --53.500000 -14.500000 493.000000 2670.000000 --53.333333 -14.500000 523.000000 2670.000000 --53.166667 -14.500000 429.000000 2670.000000 --53.000000 -14.500000 459.000000 2670.000000 --52.833333 -14.500000 457.000000 2670.000000 --52.666667 -14.500000 491.000000 2670.000000 --52.500000 -14.500000 375.000000 2670.000000 --52.333333 -14.500000 279.000000 2670.000000 --52.166667 -14.500000 303.000000 2670.000000 --52.000000 -14.500000 276.000000 2670.000000 --51.833333 -14.500000 241.000000 2670.000000 --51.666667 -14.500000 268.000000 2670.000000 --51.500000 -14.500000 251.000000 2670.000000 --51.333333 -14.500000 249.000000 2670.000000 --51.166667 -14.500000 255.000000 2670.000000 --51.000000 -14.500000 247.000000 2670.000000 --50.833333 -14.500000 243.000000 2670.000000 --50.666667 -14.500000 259.000000 2670.000000 --50.500000 -14.500000 268.000000 2670.000000 --50.333333 -14.500000 306.000000 2670.000000 --50.166667 -14.500000 321.000000 2670.000000 --50.000000 -14.500000 411.000000 2670.000000 --49.833333 -14.500000 406.000000 2670.000000 --49.666667 -14.500000 361.000000 2670.000000 --49.500000 -14.500000 385.000000 2670.000000 --49.333333 -14.500000 715.000000 2670.000000 --49.166667 -14.500000 481.000000 2670.000000 --49.000000 -14.500000 504.000000 2670.000000 --48.833333 -14.500000 560.000000 2670.000000 --48.666667 -14.500000 659.000000 2670.000000 --48.500000 -14.500000 646.000000 2670.000000 --48.333333 -14.500000 622.000000 2670.000000 --48.166667 -14.500000 584.000000 2670.000000 --48.000000 -14.500000 686.000000 2670.000000 --47.833333 -14.500000 876.000000 2670.000000 --47.666667 -14.500000 890.000000 2670.000000 --47.500000 -14.500000 1020.000000 2670.000000 --47.333333 -14.500000 603.000000 2670.000000 --47.166667 -14.500000 452.000000 2670.000000 --47.000000 -14.500000 443.000000 2670.000000 --46.833333 -14.500000 471.000000 2670.000000 --46.666667 -14.500000 478.000000 2670.000000 --46.500000 -14.500000 563.000000 2670.000000 --46.333333 -14.500000 733.000000 2670.000000 --46.166667 -14.500000 701.000000 2670.000000 --46.000000 -14.500000 868.000000 2670.000000 --45.833333 -14.500000 885.000000 2670.000000 --45.666667 -14.500000 850.000000 2670.000000 --45.500000 -14.500000 835.000000 2670.000000 --45.333333 -14.500000 716.000000 2670.000000 --45.166667 -14.500000 746.000000 2670.000000 --45.000000 -14.500000 737.000000 2670.000000 --44.833333 -14.500000 577.000000 2670.000000 --44.666667 -14.500000 664.000000 2670.000000 --44.500000 -14.500000 646.000000 2670.000000 --44.333333 -14.500000 573.000000 2670.000000 --44.166667 -14.500000 525.000000 2670.000000 --44.000000 -14.500000 484.000000 2670.000000 --43.833333 -14.500000 448.000000 2670.000000 --43.666667 -14.500000 809.000000 2670.000000 --43.500000 -14.500000 507.000000 2670.000000 --43.333333 -14.500000 489.000000 2670.000000 --43.166667 -14.500000 522.000000 2670.000000 --43.000000 -14.500000 608.000000 2670.000000 --42.833333 -14.500000 769.000000 2670.000000 --42.666667 -14.500000 648.000000 2670.000000 --42.500000 -14.500000 784.000000 2670.000000 --42.333333 -14.500000 734.000000 2670.000000 --42.166667 -14.500000 614.000000 2670.000000 --42.000000 -14.500000 588.000000 2670.000000 --41.833333 -14.500000 599.000000 2670.000000 --41.666667 -14.500000 641.000000 2670.000000 --41.500000 -14.500000 584.000000 2670.000000 --41.333333 -14.500000 544.000000 2670.000000 --41.166667 -14.500000 490.000000 2670.000000 --41.000000 -14.500000 500.000000 2670.000000 --40.833333 -14.500000 606.000000 2670.000000 --40.666667 -14.500000 802.000000 2670.000000 --40.500000 -14.500000 823.000000 2670.000000 --40.333333 -14.500000 751.000000 2670.000000 --40.166667 -14.500000 895.000000 2670.000000 --40.000000 -14.500000 336.000000 2670.000000 --65.000000 -14.666667 159.000000 2670.000000 --64.833333 -14.666667 153.000000 2670.000000 --64.666667 -14.666667 156.000000 2670.000000 --64.500000 -14.666667 156.000000 2670.000000 --64.333333 -14.666667 165.000000 2670.000000 --64.166667 -14.666667 177.000000 2670.000000 --64.000000 -14.666667 172.000000 2670.000000 --63.833333 -14.666667 183.000000 2670.000000 --63.666667 -14.666667 182.000000 2670.000000 --63.500000 -14.666667 199.000000 2670.000000 --63.333333 -14.666667 188.000000 2670.000000 --63.166667 -14.666667 190.000000 2670.000000 --63.000000 -14.666667 249.000000 2670.000000 --62.833333 -14.666667 229.000000 2670.000000 --62.666667 -14.666667 195.000000 2670.000000 --62.500000 -14.666667 218.000000 2670.000000 --62.333333 -14.666667 213.000000 2670.000000 --62.166667 -14.666667 248.000000 2670.000000 --62.000000 -14.666667 206.000000 2670.000000 --61.833333 -14.666667 214.000000 2670.000000 --61.666667 -14.666667 245.000000 2670.000000 --61.500000 -14.666667 256.000000 2670.000000 --61.333333 -14.666667 211.000000 2670.000000 --61.166667 -14.666667 186.000000 2670.000000 --61.000000 -14.666667 216.000000 2670.000000 --60.833333 -14.666667 212.000000 2670.000000 --60.666667 -14.666667 783.000000 2670.000000 --60.500000 -14.666667 684.000000 2670.000000 --60.333333 -14.666667 608.000000 2670.000000 --60.166667 -14.666667 212.000000 2670.000000 --60.000000 -14.666667 194.000000 2670.000000 --59.833333 -14.666667 618.000000 2670.000000 --59.666667 -14.666667 290.000000 2670.000000 --59.500000 -14.666667 251.000000 2670.000000 --59.333333 -14.666667 620.000000 2670.000000 --59.166667 -14.666667 680.000000 2670.000000 --59.000000 -14.666667 682.000000 2670.000000 --58.833333 -14.666667 706.000000 2670.000000 --58.666667 -14.666667 621.000000 2670.000000 --58.500000 -14.666667 551.000000 2670.000000 --58.333333 -14.666667 672.000000 2670.000000 --58.166667 -14.666667 521.000000 2670.000000 --58.000000 -14.666667 359.000000 2670.000000 --57.833333 -14.666667 225.000000 2670.000000 --57.666667 -14.666667 330.000000 2670.000000 --57.500000 -14.666667 424.000000 2670.000000 --57.333333 -14.666667 512.000000 2670.000000 --57.166667 -14.666667 334.000000 2670.000000 --57.000000 -14.666667 221.000000 2670.000000 --56.833333 -14.666667 216.000000 2670.000000 --56.666667 -14.666667 213.000000 2670.000000 --56.500000 -14.666667 439.000000 2670.000000 --56.333333 -14.666667 416.000000 2670.000000 --56.166667 -14.666667 208.000000 2670.000000 --56.000000 -14.666667 221.000000 2670.000000 --55.833333 -14.666667 248.000000 2670.000000 --55.666667 -14.666667 296.000000 2670.000000 --55.500000 -14.666667 369.000000 2670.000000 --55.333333 -14.666667 428.000000 2670.000000 --55.166667 -14.666667 422.000000 2670.000000 --55.000000 -14.666667 462.000000 2670.000000 --54.833333 -14.666667 516.000000 2670.000000 --54.666667 -14.666667 483.000000 2670.000000 --54.500000 -14.666667 587.000000 2670.000000 --54.333333 -14.666667 650.000000 2670.000000 --54.166667 -14.666667 591.000000 2670.000000 --54.000000 -14.666667 535.000000 2670.000000 --53.833333 -14.666667 499.000000 2670.000000 --53.666667 -14.666667 487.000000 2670.000000 --53.500000 -14.666667 466.000000 2670.000000 --53.333333 -14.666667 555.000000 2670.000000 --53.166667 -14.666667 477.000000 2670.000000 --53.000000 -14.666667 354.000000 2670.000000 --52.833333 -14.666667 386.000000 2670.000000 --52.666667 -14.666667 349.000000 2670.000000 --52.500000 -14.666667 288.000000 2670.000000 --52.333333 -14.666667 266.000000 2670.000000 --52.166667 -14.666667 267.000000 2670.000000 --52.000000 -14.666667 280.000000 2670.000000 --51.833333 -14.666667 259.000000 2670.000000 --51.666667 -14.666667 257.000000 2670.000000 --51.500000 -14.666667 257.000000 2670.000000 --51.333333 -14.666667 253.000000 2670.000000 --51.166667 -14.666667 257.000000 2670.000000 --51.000000 -14.666667 249.000000 2670.000000 --50.833333 -14.666667 251.000000 2670.000000 --50.666667 -14.666667 265.000000 2670.000000 --50.500000 -14.666667 289.000000 2670.000000 --50.333333 -14.666667 329.000000 2670.000000 --50.166667 -14.666667 337.000000 2670.000000 --50.000000 -14.666667 522.000000 2670.000000 --49.833333 -14.666667 382.000000 2670.000000 --49.666667 -14.666667 467.000000 2670.000000 --49.500000 -14.666667 674.000000 2670.000000 --49.333333 -14.666667 666.000000 2670.000000 --49.166667 -14.666667 558.000000 2670.000000 --49.000000 -14.666667 494.000000 2670.000000 --48.833333 -14.666667 505.000000 2670.000000 --48.666667 -14.666667 545.000000 2670.000000 --48.500000 -14.666667 853.000000 2670.000000 --48.333333 -14.666667 841.000000 2670.000000 --48.166667 -14.666667 546.000000 2670.000000 --48.000000 -14.666667 1096.000000 2670.000000 --47.833333 -14.666667 1012.000000 2670.000000 --47.666667 -14.666667 1132.000000 2670.000000 --47.500000 -14.666667 1006.000000 2670.000000 --47.333333 -14.666667 504.000000 2670.000000 --47.166667 -14.666667 458.000000 2670.000000 --47.000000 -14.666667 454.000000 2670.000000 --46.833333 -14.666667 485.000000 2670.000000 --46.666667 -14.666667 489.000000 2670.000000 --46.500000 -14.666667 1016.000000 2670.000000 --46.333333 -14.666667 710.000000 2670.000000 --46.166667 -14.666667 782.000000 2670.000000 --46.000000 -14.666667 935.000000 2670.000000 --45.833333 -14.666667 846.000000 2670.000000 --45.666667 -14.666667 869.000000 2670.000000 --45.500000 -14.666667 738.000000 2670.000000 --45.333333 -14.666667 827.000000 2670.000000 --45.166667 -14.666667 819.000000 2670.000000 --45.000000 -14.666667 635.000000 2670.000000 --44.833333 -14.666667 785.000000 2670.000000 --44.666667 -14.666667 712.000000 2670.000000 --44.500000 -14.666667 759.000000 2670.000000 --44.333333 -14.666667 643.000000 2670.000000 --44.166667 -14.666667 542.000000 2670.000000 --44.000000 -14.666667 480.000000 2670.000000 --43.833333 -14.666667 448.000000 2670.000000 --43.666667 -14.666667 468.000000 2670.000000 --43.500000 -14.666667 478.000000 2670.000000 --43.333333 -14.666667 467.000000 2670.000000 --43.166667 -14.666667 489.000000 2670.000000 --43.000000 -14.666667 508.000000 2670.000000 --42.833333 -14.666667 540.000000 2670.000000 --42.666667 -14.666667 701.000000 2670.000000 --42.500000 -14.666667 863.000000 2670.000000 --42.333333 -14.666667 680.000000 2670.000000 --42.166667 -14.666667 734.000000 2670.000000 --42.000000 -14.666667 660.000000 2670.000000 --41.833333 -14.666667 799.000000 2670.000000 --41.666667 -14.666667 740.000000 2670.000000 --41.500000 -14.666667 639.000000 2670.000000 --41.333333 -14.666667 494.000000 2670.000000 --41.166667 -14.666667 450.000000 2670.000000 --41.000000 -14.666667 641.000000 2670.000000 --40.833333 -14.666667 900.000000 2670.000000 --40.666667 -14.666667 848.000000 2670.000000 --40.500000 -14.666667 917.000000 2670.000000 --40.333333 -14.666667 916.000000 2670.000000 --40.166667 -14.666667 699.000000 2670.000000 --40.000000 -14.666667 434.000000 2670.000000 --65.000000 -14.833333 159.000000 2670.000000 --64.833333 -14.833333 157.000000 2670.000000 --64.666667 -14.833333 160.000000 2670.000000 --64.500000 -14.833333 169.000000 2670.000000 --64.333333 -14.833333 170.000000 2670.000000 --64.166667 -14.833333 182.000000 2670.000000 --64.000000 -14.833333 172.000000 2670.000000 --63.833333 -14.833333 185.000000 2670.000000 --63.666667 -14.833333 190.000000 2670.000000 --63.500000 -14.833333 177.000000 2670.000000 --63.333333 -14.833333 199.000000 2670.000000 --63.166667 -14.833333 256.000000 2670.000000 --63.000000 -14.833333 269.000000 2670.000000 --62.833333 -14.833333 223.000000 2670.000000 --62.666667 -14.833333 220.000000 2670.000000 --62.500000 -14.833333 220.000000 2670.000000 --62.333333 -14.833333 277.000000 2670.000000 --62.166667 -14.833333 260.000000 2670.000000 --62.000000 -14.833333 217.000000 2670.000000 --61.833333 -14.833333 272.000000 2670.000000 --61.666667 -14.833333 264.000000 2670.000000 --61.500000 -14.833333 273.000000 2670.000000 --61.333333 -14.833333 211.000000 2670.000000 --61.166667 -14.833333 176.000000 2670.000000 --61.000000 -14.833333 175.000000 2670.000000 --60.833333 -14.833333 205.000000 2670.000000 --60.666667 -14.833333 203.000000 2670.000000 --60.500000 -14.833333 314.000000 2670.000000 --60.333333 -14.833333 677.000000 2670.000000 --60.166667 -14.833333 425.000000 2670.000000 --60.000000 -14.833333 201.000000 2670.000000 --59.833333 -14.833333 210.000000 2670.000000 --59.666667 -14.833333 739.000000 2670.000000 --59.500000 -14.833333 341.000000 2670.000000 --59.333333 -14.833333 327.000000 2670.000000 --59.166667 -14.833333 673.000000 2670.000000 --59.000000 -14.833333 649.000000 2670.000000 --58.833333 -14.833333 605.000000 2670.000000 --58.666667 -14.833333 530.000000 2670.000000 --58.500000 -14.833333 584.000000 2670.000000 --58.333333 -14.833333 560.000000 2670.000000 --58.166667 -14.833333 492.000000 2670.000000 --58.000000 -14.833333 412.000000 2670.000000 --57.833333 -14.833333 244.000000 2670.000000 --57.666667 -14.833333 206.000000 2670.000000 --57.500000 -14.833333 223.000000 2670.000000 --57.333333 -14.833333 171.000000 2670.000000 --57.166667 -14.833333 198.000000 2670.000000 --57.000000 -14.833333 187.000000 2670.000000 --56.833333 -14.833333 187.000000 2670.000000 --56.666667 -14.833333 266.000000 2670.000000 --56.500000 -14.833333 278.000000 2670.000000 --56.333333 -14.833333 201.000000 2670.000000 --56.166667 -14.833333 245.000000 2670.000000 --56.000000 -14.833333 272.000000 2670.000000 --55.833333 -14.833333 267.000000 2670.000000 --55.666667 -14.833333 266.000000 2670.000000 --55.500000 -14.833333 309.000000 2670.000000 --55.333333 -14.833333 317.000000 2670.000000 --55.166667 -14.833333 388.000000 2670.000000 --55.000000 -14.833333 416.000000 2670.000000 --54.833333 -14.833333 493.000000 2670.000000 --54.666667 -14.833333 625.000000 2670.000000 --54.500000 -14.833333 784.000000 2670.000000 --54.333333 -14.833333 687.000000 2670.000000 --54.166667 -14.833333 699.000000 2670.000000 --54.000000 -14.833333 645.000000 2670.000000 --53.833333 -14.833333 619.000000 2670.000000 --53.666667 -14.833333 616.000000 2670.000000 --53.500000 -14.833333 628.000000 2670.000000 --53.333333 -14.833333 474.000000 2670.000000 --53.166667 -14.833333 458.000000 2670.000000 --53.000000 -14.833333 436.000000 2670.000000 --52.833333 -14.833333 347.000000 2670.000000 --52.666667 -14.833333 303.000000 2670.000000 --52.500000 -14.833333 449.000000 2670.000000 --52.333333 -14.833333 304.000000 2670.000000 --52.166667 -14.833333 285.000000 2670.000000 --52.000000 -14.833333 259.000000 2670.000000 --51.833333 -14.833333 268.000000 2670.000000 --51.666667 -14.833333 263.000000 2670.000000 --51.500000 -14.833333 260.000000 2670.000000 --51.333333 -14.833333 265.000000 2670.000000 --51.166667 -14.833333 258.000000 2670.000000 --51.000000 -14.833333 253.000000 2670.000000 --50.833333 -14.833333 254.000000 2670.000000 --50.666667 -14.833333 308.000000 2670.000000 --50.500000 -14.833333 355.000000 2670.000000 --50.333333 -14.833333 303.000000 2670.000000 --50.166667 -14.833333 423.000000 2670.000000 --50.000000 -14.833333 408.000000 2670.000000 --49.833333 -14.833333 436.000000 2670.000000 --49.666667 -14.833333 905.000000 2670.000000 --49.500000 -14.833333 707.000000 2670.000000 --49.333333 -14.833333 549.000000 2670.000000 --49.166667 -14.833333 533.000000 2670.000000 --49.000000 -14.833333 544.000000 2670.000000 --48.833333 -14.833333 698.000000 2670.000000 --48.666667 -14.833333 559.000000 2670.000000 --48.500000 -14.833333 700.000000 2670.000000 --48.333333 -14.833333 885.000000 2670.000000 --48.166667 -14.833333 1086.000000 2670.000000 --48.000000 -14.833333 1048.000000 2670.000000 --47.833333 -14.833333 1102.000000 2670.000000 --47.666667 -14.833333 1142.000000 2670.000000 --47.500000 -14.833333 1144.000000 2670.000000 --47.333333 -14.833333 525.000000 2670.000000 --47.166667 -14.833333 484.000000 2670.000000 --47.000000 -14.833333 480.000000 2670.000000 --46.833333 -14.833333 504.000000 2670.000000 --46.666667 -14.833333 534.000000 2670.000000 --46.500000 -14.833333 972.000000 2670.000000 --46.333333 -14.833333 875.000000 2670.000000 --46.166667 -14.833333 787.000000 2670.000000 --46.000000 -14.833333 882.000000 2670.000000 --45.833333 -14.833333 812.000000 2670.000000 --45.666667 -14.833333 862.000000 2670.000000 --45.500000 -14.833333 776.000000 2670.000000 --45.333333 -14.833333 752.000000 2670.000000 --45.166667 -14.833333 800.000000 2670.000000 --45.000000 -14.833333 727.000000 2670.000000 --44.833333 -14.833333 743.000000 2670.000000 --44.666667 -14.833333 781.000000 2670.000000 --44.500000 -14.833333 782.000000 2670.000000 --44.333333 -14.833333 636.000000 2670.000000 --44.166667 -14.833333 673.000000 2670.000000 --44.000000 -14.833333 484.000000 2670.000000 --43.833333 -14.833333 467.000000 2670.000000 --43.666667 -14.833333 471.000000 2670.000000 --43.500000 -14.833333 463.000000 2670.000000 --43.333333 -14.833333 534.000000 2670.000000 --43.166667 -14.833333 525.000000 2670.000000 --43.000000 -14.833333 649.000000 2670.000000 --42.833333 -14.833333 744.000000 2670.000000 --42.666667 -14.833333 792.000000 2670.000000 --42.500000 -14.833333 1141.000000 2670.000000 --42.333333 -14.833333 788.000000 2670.000000 --42.166667 -14.833333 767.000000 2670.000000 --42.000000 -14.833333 740.000000 2670.000000 --41.833333 -14.833333 695.000000 2670.000000 --41.666667 -14.833333 618.000000 2670.000000 --41.500000 -14.833333 534.000000 2670.000000 --41.333333 -14.833333 507.000000 2670.000000 --41.166667 -14.833333 464.000000 2670.000000 --41.000000 -14.833333 842.000000 2670.000000 --40.833333 -14.833333 1031.000000 2670.000000 --40.666667 -14.833333 874.000000 2670.000000 --40.500000 -14.833333 907.000000 2670.000000 --40.333333 -14.833333 801.000000 2670.000000 --40.166667 -14.833333 452.000000 2670.000000 --40.000000 -14.833333 376.000000 2670.000000 --65.000000 -15.000000 158.000000 2670.000000 --64.833333 -15.000000 158.000000 2670.000000 --64.666667 -15.000000 160.000000 2670.000000 --64.500000 -15.000000 162.000000 2670.000000 --64.333333 -15.000000 171.000000 2670.000000 --64.166667 -15.000000 168.000000 2670.000000 --64.000000 -15.000000 188.000000 2670.000000 --63.833333 -15.000000 182.000000 2670.000000 --63.666667 -15.000000 189.000000 2670.000000 --63.500000 -15.000000 213.000000 2670.000000 --63.333333 -15.000000 222.000000 2670.000000 --63.166667 -15.000000 231.000000 2670.000000 --63.000000 -15.000000 293.000000 2670.000000 --62.833333 -15.000000 255.000000 2670.000000 --62.666667 -15.000000 226.000000 2670.000000 --62.500000 -15.000000 262.000000 2670.000000 --62.333333 -15.000000 236.000000 2670.000000 --62.166667 -15.000000 279.000000 2670.000000 --62.000000 -15.000000 252.000000 2670.000000 --61.833333 -15.000000 228.000000 2670.000000 --61.666667 -15.000000 250.000000 2670.000000 --61.500000 -15.000000 304.000000 2670.000000 --61.333333 -15.000000 238.000000 2670.000000 --61.166667 -15.000000 189.000000 2670.000000 --61.000000 -15.000000 200.000000 2670.000000 --60.833333 -15.000000 225.000000 2670.000000 --60.666667 -15.000000 206.000000 2670.000000 --60.500000 -15.000000 215.000000 2670.000000 --60.333333 -15.000000 273.000000 2670.000000 --60.166667 -15.000000 249.000000 2670.000000 --60.000000 -15.000000 232.000000 2670.000000 --59.833333 -15.000000 209.000000 2670.000000 --59.666667 -15.000000 214.000000 2670.000000 --59.500000 -15.000000 253.000000 2670.000000 --59.333333 -15.000000 248.000000 2670.000000 --59.166667 -15.000000 282.000000 2670.000000 --59.000000 -15.000000 582.000000 2670.000000 --58.833333 -15.000000 488.000000 2670.000000 --58.666667 -15.000000 561.000000 2670.000000 --58.500000 -15.000000 488.000000 2670.000000 --58.333333 -15.000000 569.000000 2670.000000 --58.166667 -15.000000 421.000000 2670.000000 --58.000000 -15.000000 231.000000 2670.000000 --57.833333 -15.000000 230.000000 2670.000000 --57.666667 -15.000000 238.000000 2670.000000 --57.500000 -15.000000 223.000000 2670.000000 --57.333333 -15.000000 192.000000 2670.000000 --57.166667 -15.000000 160.000000 2670.000000 --57.000000 -15.000000 197.000000 2670.000000 --56.833333 -15.000000 194.000000 2670.000000 --56.666667 -15.000000 239.000000 2670.000000 --56.500000 -15.000000 222.000000 2670.000000 --56.333333 -15.000000 278.000000 2670.000000 --56.166667 -15.000000 335.000000 2670.000000 --56.000000 -15.000000 332.000000 2670.000000 --55.833333 -15.000000 354.000000 2670.000000 --55.666667 -15.000000 284.000000 2670.000000 --55.500000 -15.000000 339.000000 2670.000000 --55.333333 -15.000000 577.000000 2670.000000 --55.166667 -15.000000 694.000000 2670.000000 --55.000000 -15.000000 704.000000 2670.000000 --54.833333 -15.000000 548.000000 2670.000000 --54.666667 -15.000000 729.000000 2670.000000 --54.500000 -15.000000 721.000000 2670.000000 --54.333333 -15.000000 698.000000 2670.000000 --54.166667 -15.000000 681.000000 2670.000000 --54.000000 -15.000000 670.000000 2670.000000 --53.833333 -15.000000 631.000000 2670.000000 --53.666667 -15.000000 593.000000 2670.000000 --53.500000 -15.000000 604.000000 2670.000000 --53.333333 -15.000000 530.000000 2670.000000 --53.166667 -15.000000 456.000000 2670.000000 --53.000000 -15.000000 456.000000 2670.000000 --52.833333 -15.000000 445.000000 2670.000000 --52.666667 -15.000000 510.000000 2670.000000 --52.500000 -15.000000 586.000000 2670.000000 --52.333333 -15.000000 316.000000 2670.000000 --52.166667 -15.000000 277.000000 2670.000000 --52.000000 -15.000000 281.000000 2670.000000 --51.833333 -15.000000 275.000000 2670.000000 --51.666667 -15.000000 267.000000 2670.000000 --51.500000 -15.000000 269.000000 2670.000000 --51.333333 -15.000000 264.000000 2670.000000 --51.166667 -15.000000 255.000000 2670.000000 --51.000000 -15.000000 257.000000 2670.000000 --50.833333 -15.000000 268.000000 2670.000000 --50.666667 -15.000000 290.000000 2670.000000 --50.500000 -15.000000 307.000000 2670.000000 --50.333333 -15.000000 330.000000 2670.000000 --50.166667 -15.000000 379.000000 2670.000000 --50.000000 -15.000000 561.000000 2670.000000 --49.833333 -15.000000 790.000000 2670.000000 --49.666667 -15.000000 642.000000 2670.000000 --49.500000 -15.000000 532.000000 2670.000000 --49.333333 -15.000000 508.000000 2670.000000 --49.166667 -15.000000 598.000000 2670.000000 --49.000000 -15.000000 1079.000000 2670.000000 --48.833333 -15.000000 551.000000 2670.000000 --48.666667 -15.000000 562.000000 2670.000000 --48.500000 -15.000000 843.000000 2670.000000 --48.333333 -15.000000 721.000000 2670.000000 --48.166667 -15.000000 782.000000 2670.000000 --48.000000 -15.000000 894.000000 2670.000000 --47.833333 -15.000000 877.000000 2670.000000 --47.666667 -15.000000 1078.000000 2670.000000 --47.500000 -15.000000 612.000000 2670.000000 --47.333333 -15.000000 783.000000 2670.000000 --47.166667 -15.000000 482.000000 2670.000000 --47.000000 -15.000000 524.000000 2670.000000 --46.833333 -15.000000 963.000000 2670.000000 --46.666667 -15.000000 787.000000 2670.000000 --46.500000 -15.000000 945.000000 2670.000000 --46.333333 -15.000000 926.000000 2670.000000 --46.166667 -15.000000 811.000000 2670.000000 --46.000000 -15.000000 846.000000 2670.000000 --45.833333 -15.000000 838.000000 2670.000000 --45.666667 -15.000000 733.000000 2670.000000 --45.500000 -15.000000 755.000000 2670.000000 --45.333333 -15.000000 815.000000 2670.000000 --45.166667 -15.000000 822.000000 2670.000000 --45.000000 -15.000000 737.000000 2670.000000 --44.833333 -15.000000 815.000000 2670.000000 --44.666667 -15.000000 820.000000 2670.000000 --44.500000 -15.000000 745.000000 2670.000000 --44.333333 -15.000000 740.000000 2670.000000 --44.166667 -15.000000 723.000000 2670.000000 --44.000000 -15.000000 447.000000 2670.000000 --43.833333 -15.000000 475.000000 2670.000000 --43.666667 -15.000000 476.000000 2670.000000 --43.500000 -15.000000 465.000000 2670.000000 --43.333333 -15.000000 481.000000 2670.000000 --43.166667 -15.000000 517.000000 2670.000000 --43.000000 -15.000000 898.000000 2670.000000 --42.833333 -15.000000 620.000000 2670.000000 --42.666667 -15.000000 1048.000000 2670.000000 --42.500000 -15.000000 994.000000 2670.000000 --42.333333 -15.000000 920.000000 2670.000000 --42.166667 -15.000000 809.000000 2670.000000 --42.000000 -15.000000 728.000000 2670.000000 --41.833333 -15.000000 1000.000000 2670.000000 --41.666667 -15.000000 746.000000 2670.000000 --41.500000 -15.000000 741.000000 2670.000000 --41.333333 -15.000000 588.000000 2670.000000 --41.166667 -15.000000 847.000000 2670.000000 --41.000000 -15.000000 832.000000 2670.000000 --40.833333 -15.000000 866.000000 2670.000000 --40.666667 -15.000000 658.000000 2670.000000 --40.500000 -15.000000 593.000000 2670.000000 --40.333333 -15.000000 406.000000 2670.000000 --40.166667 -15.000000 663.000000 2670.000000 --40.000000 -15.000000 410.000000 2670.000000 --65.000000 -15.166667 162.000000 2670.000000 --64.833333 -15.166667 160.000000 2670.000000 --64.666667 -15.166667 159.000000 2670.000000 --64.500000 -15.166667 162.000000 2670.000000 --64.333333 -15.166667 166.000000 2670.000000 --64.166667 -15.166667 180.000000 2670.000000 --64.000000 -15.166667 187.000000 2670.000000 --63.833333 -15.166667 186.000000 2670.000000 --63.666667 -15.166667 190.000000 2670.000000 --63.500000 -15.166667 188.000000 2670.000000 --63.333333 -15.166667 196.000000 2670.000000 --63.166667 -15.166667 213.000000 2670.000000 --63.000000 -15.166667 296.000000 2670.000000 --62.833333 -15.166667 259.000000 2670.000000 --62.666667 -15.166667 286.000000 2670.000000 --62.500000 -15.166667 236.000000 2670.000000 --62.333333 -15.166667 280.000000 2670.000000 --62.166667 -15.166667 306.000000 2670.000000 --62.000000 -15.166667 249.000000 2670.000000 --61.833333 -15.166667 263.000000 2670.000000 --61.666667 -15.166667 280.000000 2670.000000 --61.500000 -15.166667 287.000000 2670.000000 --61.333333 -15.166667 330.000000 2670.000000 --61.166667 -15.166667 234.000000 2670.000000 --61.000000 -15.166667 182.000000 2670.000000 --60.833333 -15.166667 203.000000 2670.000000 --60.666667 -15.166667 216.000000 2670.000000 --60.500000 -15.166667 196.000000 2670.000000 --60.333333 -15.166667 225.000000 2670.000000 --60.166667 -15.166667 259.000000 2670.000000 --60.000000 -15.166667 209.000000 2670.000000 --59.833333 -15.166667 211.000000 2670.000000 --59.666667 -15.166667 216.000000 2670.000000 --59.500000 -15.166667 271.000000 2670.000000 --59.333333 -15.166667 268.000000 2670.000000 --59.166667 -15.166667 352.000000 2670.000000 --59.000000 -15.166667 358.000000 2670.000000 --58.833333 -15.166667 524.000000 2670.000000 --58.666667 -15.166667 493.000000 2670.000000 --58.500000 -15.166667 511.000000 2670.000000 --58.333333 -15.166667 296.000000 2670.000000 --58.166667 -15.166667 310.000000 2670.000000 --58.000000 -15.166667 407.000000 2670.000000 --57.833333 -15.166667 217.000000 2670.000000 --57.666667 -15.166667 183.000000 2670.000000 --57.500000 -15.166667 201.000000 2670.000000 --57.333333 -15.166667 198.000000 2670.000000 --57.166667 -15.166667 155.000000 2670.000000 --57.000000 -15.166667 192.000000 2670.000000 --56.833333 -15.166667 303.000000 2670.000000 --56.666667 -15.166667 269.000000 2670.000000 --56.500000 -15.166667 250.000000 2670.000000 --56.333333 -15.166667 205.000000 2670.000000 --56.166667 -15.166667 309.000000 2670.000000 --56.000000 -15.166667 348.000000 2670.000000 --55.833333 -15.166667 441.000000 2670.000000 --55.666667 -15.166667 322.000000 2670.000000 --55.500000 -15.166667 330.000000 2670.000000 --55.333333 -15.166667 463.000000 2670.000000 --55.166667 -15.166667 701.000000 2670.000000 --55.000000 -15.166667 775.000000 2670.000000 --54.833333 -15.166667 710.000000 2670.000000 --54.666667 -15.166667 632.000000 2670.000000 --54.500000 -15.166667 711.000000 2670.000000 --54.333333 -15.166667 617.000000 2670.000000 --54.166667 -15.166667 611.000000 2670.000000 --54.000000 -15.166667 594.000000 2670.000000 --53.833333 -15.166667 554.000000 2670.000000 --53.666667 -15.166667 556.000000 2670.000000 --53.500000 -15.166667 525.000000 2670.000000 --53.333333 -15.166667 554.000000 2670.000000 --53.166667 -15.166667 380.000000 2670.000000 --53.000000 -15.166667 450.000000 2670.000000 --52.833333 -15.166667 399.000000 2670.000000 --52.666667 -15.166667 587.000000 2670.000000 --52.500000 -15.166667 694.000000 2670.000000 --52.333333 -15.166667 490.000000 2670.000000 --52.166667 -15.166667 307.000000 2670.000000 --52.000000 -15.166667 288.000000 2670.000000 --51.833333 -15.166667 276.000000 2670.000000 --51.666667 -15.166667 272.000000 2670.000000 --51.500000 -15.166667 268.000000 2670.000000 --51.333333 -15.166667 276.000000 2670.000000 --51.166667 -15.166667 255.000000 2670.000000 --51.000000 -15.166667 271.000000 2670.000000 --50.833333 -15.166667 347.000000 2670.000000 --50.666667 -15.166667 299.000000 2670.000000 --50.500000 -15.166667 331.000000 2670.000000 --50.333333 -15.166667 378.000000 2670.000000 --50.166667 -15.166667 437.000000 2670.000000 --50.000000 -15.166667 742.000000 2670.000000 --49.833333 -15.166667 663.000000 2670.000000 --49.666667 -15.166667 579.000000 2670.000000 --49.500000 -15.166667 533.000000 2670.000000 --49.333333 -15.166667 616.000000 2670.000000 --49.166667 -15.166667 734.000000 2670.000000 --49.000000 -15.166667 761.000000 2670.000000 --48.833333 -15.166667 612.000000 2670.000000 --48.666667 -15.166667 651.000000 2670.000000 --48.500000 -15.166667 611.000000 2670.000000 --48.333333 -15.166667 612.000000 2670.000000 --48.166667 -15.166667 684.000000 2670.000000 --48.000000 -15.166667 736.000000 2670.000000 --47.833333 -15.166667 908.000000 2670.000000 --47.666667 -15.166667 998.000000 2670.000000 --47.500000 -15.166667 698.000000 2670.000000 --47.333333 -15.166667 814.000000 2670.000000 --47.166667 -15.166667 527.000000 2670.000000 --47.000000 -15.166667 537.000000 2670.000000 --46.833333 -15.166667 936.000000 2670.000000 --46.666667 -15.166667 961.000000 2670.000000 --46.500000 -15.166667 942.000000 2670.000000 --46.333333 -15.166667 961.000000 2670.000000 --46.166667 -15.166667 803.000000 2670.000000 --46.000000 -15.166667 782.000000 2670.000000 --45.833333 -15.166667 773.000000 2670.000000 --45.666667 -15.166667 785.000000 2670.000000 --45.500000 -15.166667 781.000000 2670.000000 --45.333333 -15.166667 792.000000 2670.000000 --45.166667 -15.166667 733.000000 2670.000000 --45.000000 -15.166667 682.000000 2670.000000 --44.833333 -15.166667 663.000000 2670.000000 --44.666667 -15.166667 716.000000 2670.000000 --44.500000 -15.166667 817.000000 2670.000000 --44.333333 -15.166667 754.000000 2670.000000 --44.166667 -15.166667 471.000000 2670.000000 --44.000000 -15.166667 465.000000 2670.000000 --43.833333 -15.166667 475.000000 2670.000000 --43.666667 -15.166667 468.000000 2670.000000 --43.500000 -15.166667 485.000000 2670.000000 --43.333333 -15.166667 476.000000 2670.000000 --43.166667 -15.166667 501.000000 2670.000000 --43.000000 -15.166667 1015.000000 2670.000000 --42.833333 -15.166667 687.000000 2670.000000 --42.666667 -15.166667 984.000000 2670.000000 --42.500000 -15.166667 929.000000 2670.000000 --42.333333 -15.166667 996.000000 2670.000000 --42.166667 -15.166667 939.000000 2670.000000 --42.000000 -15.166667 1056.000000 2670.000000 --41.833333 -15.166667 895.000000 2670.000000 --41.666667 -15.166667 885.000000 2670.000000 --41.500000 -15.166667 890.000000 2670.000000 --41.333333 -15.166667 821.000000 2670.000000 --41.166667 -15.166667 844.000000 2670.000000 --41.000000 -15.166667 788.000000 2670.000000 --40.833333 -15.166667 810.000000 2670.000000 --40.666667 -15.166667 364.000000 2670.000000 --40.500000 -15.166667 365.000000 2670.000000 --40.333333 -15.166667 289.000000 2670.000000 --40.166667 -15.166667 500.000000 2670.000000 --40.000000 -15.166667 276.000000 2670.000000 --65.000000 -15.333333 170.000000 2670.000000 --64.833333 -15.333333 164.000000 2670.000000 --64.666667 -15.333333 164.000000 2670.000000 --64.500000 -15.333333 167.000000 2670.000000 --64.333333 -15.333333 168.000000 2670.000000 --64.166667 -15.333333 173.000000 2670.000000 --64.000000 -15.333333 183.000000 2670.000000 --63.833333 -15.333333 191.000000 2670.000000 --63.666667 -15.333333 182.000000 2670.000000 --63.500000 -15.333333 196.000000 2670.000000 --63.333333 -15.333333 192.000000 2670.000000 --63.166667 -15.333333 220.000000 2670.000000 --63.000000 -15.333333 308.000000 2670.000000 --62.833333 -15.333333 309.000000 2670.000000 --62.666667 -15.333333 350.000000 2670.000000 --62.500000 -15.333333 306.000000 2670.000000 --62.333333 -15.333333 257.000000 2670.000000 --62.166667 -15.333333 290.000000 2670.000000 --62.000000 -15.333333 295.000000 2670.000000 --61.833333 -15.333333 281.000000 2670.000000 --61.666667 -15.333333 291.000000 2670.000000 --61.500000 -15.333333 285.000000 2670.000000 --61.333333 -15.333333 312.000000 2670.000000 --61.166667 -15.333333 251.000000 2670.000000 --61.000000 -15.333333 232.000000 2670.000000 --60.833333 -15.333333 201.000000 2670.000000 --60.666667 -15.333333 226.000000 2670.000000 --60.500000 -15.333333 195.000000 2670.000000 --60.333333 -15.333333 227.000000 2670.000000 --60.166667 -15.333333 221.000000 2670.000000 --60.000000 -15.333333 203.000000 2670.000000 --59.833333 -15.333333 209.000000 2670.000000 --59.666667 -15.333333 222.000000 2670.000000 --59.500000 -15.333333 232.000000 2670.000000 --59.333333 -15.333333 336.000000 2670.000000 --59.166667 -15.333333 329.000000 2670.000000 --59.000000 -15.333333 363.000000 2670.000000 --58.833333 -15.333333 427.000000 2670.000000 --58.666667 -15.333333 207.000000 2670.000000 --58.500000 -15.333333 357.000000 2670.000000 --58.333333 -15.333333 238.000000 2670.000000 --58.166667 -15.333333 435.000000 2670.000000 --58.000000 -15.333333 180.000000 2670.000000 --57.833333 -15.333333 205.000000 2670.000000 --57.666667 -15.333333 201.000000 2670.000000 --57.500000 -15.333333 177.000000 2670.000000 --57.333333 -15.333333 182.000000 2670.000000 --57.166667 -15.333333 161.000000 2670.000000 --57.000000 -15.333333 221.000000 2670.000000 --56.833333 -15.333333 477.000000 2670.000000 --56.666667 -15.333333 275.000000 2670.000000 --56.500000 -15.333333 255.000000 2670.000000 --56.333333 -15.333333 220.000000 2670.000000 --56.166667 -15.333333 218.000000 2670.000000 --56.000000 -15.333333 276.000000 2670.000000 --55.833333 -15.333333 376.000000 2670.000000 --55.666667 -15.333333 575.000000 2670.000000 --55.500000 -15.333333 433.000000 2670.000000 --55.333333 -15.333333 572.000000 2670.000000 --55.166667 -15.333333 710.000000 2670.000000 --55.000000 -15.333333 635.000000 2670.000000 --54.833333 -15.333333 651.000000 2670.000000 --54.666667 -15.333333 644.000000 2670.000000 --54.500000 -15.333333 689.000000 2670.000000 --54.333333 -15.333333 574.000000 2670.000000 --54.166667 -15.333333 573.000000 2670.000000 --54.000000 -15.333333 557.000000 2670.000000 --53.833333 -15.333333 547.000000 2670.000000 --53.666667 -15.333333 522.000000 2670.000000 --53.500000 -15.333333 530.000000 2670.000000 --53.333333 -15.333333 461.000000 2670.000000 --53.166667 -15.333333 440.000000 2670.000000 --53.000000 -15.333333 388.000000 2670.000000 --52.833333 -15.333333 392.000000 2670.000000 --52.666667 -15.333333 670.000000 2670.000000 --52.500000 -15.333333 806.000000 2670.000000 --52.333333 -15.333333 775.000000 2670.000000 --52.166667 -15.333333 350.000000 2670.000000 --52.000000 -15.333333 296.000000 2670.000000 --51.833333 -15.333333 278.000000 2670.000000 --51.666667 -15.333333 286.000000 2670.000000 --51.500000 -15.333333 286.000000 2670.000000 --51.333333 -15.333333 280.000000 2670.000000 --51.166667 -15.333333 259.000000 2670.000000 --51.000000 -15.333333 271.000000 2670.000000 --50.833333 -15.333333 343.000000 2670.000000 --50.666667 -15.333333 344.000000 2670.000000 --50.500000 -15.333333 315.000000 2670.000000 --50.333333 -15.333333 398.000000 2670.000000 --50.166667 -15.333333 470.000000 2670.000000 --50.000000 -15.333333 666.000000 2670.000000 --49.833333 -15.333333 605.000000 2670.000000 --49.666667 -15.333333 624.000000 2670.000000 --49.500000 -15.333333 704.000000 2670.000000 --49.333333 -15.333333 568.000000 2670.000000 --49.166667 -15.333333 621.000000 2670.000000 --49.000000 -15.333333 653.000000 2670.000000 --48.833333 -15.333333 652.000000 2670.000000 --48.666667 -15.333333 682.000000 2670.000000 --48.500000 -15.333333 691.000000 2670.000000 --48.333333 -15.333333 774.000000 2670.000000 --48.166667 -15.333333 729.000000 2670.000000 --48.000000 -15.333333 776.000000 2670.000000 --47.833333 -15.333333 930.000000 2670.000000 --47.666667 -15.333333 984.000000 2670.000000 --47.500000 -15.333333 1110.000000 2670.000000 --47.333333 -15.333333 778.000000 2670.000000 --47.166667 -15.333333 930.000000 2670.000000 --47.000000 -15.333333 805.000000 2670.000000 --46.833333 -15.333333 1002.000000 2670.000000 --46.666667 -15.333333 948.000000 2670.000000 --46.500000 -15.333333 927.000000 2670.000000 --46.333333 -15.333333 555.000000 2670.000000 --46.166667 -15.333333 734.000000 2670.000000 --46.000000 -15.333333 844.000000 2670.000000 --45.833333 -15.333333 787.000000 2670.000000 --45.666667 -15.333333 859.000000 2670.000000 --45.500000 -15.333333 708.000000 2670.000000 --45.333333 -15.333333 633.000000 2670.000000 --45.166667 -15.333333 675.000000 2670.000000 --45.000000 -15.333333 586.000000 2670.000000 --44.833333 -15.333333 601.000000 2670.000000 --44.666667 -15.333333 651.000000 2670.000000 --44.500000 -15.333333 669.000000 2670.000000 --44.333333 -15.333333 613.000000 2670.000000 --44.166667 -15.333333 450.000000 2670.000000 --44.000000 -15.333333 497.000000 2670.000000 --43.833333 -15.333333 533.000000 2670.000000 --43.666667 -15.333333 474.000000 2670.000000 --43.500000 -15.333333 491.000000 2670.000000 --43.333333 -15.333333 488.000000 2670.000000 --43.166667 -15.333333 483.000000 2670.000000 --43.000000 -15.333333 501.000000 2670.000000 --42.833333 -15.333333 571.000000 2670.000000 --42.666667 -15.333333 962.000000 2670.000000 --42.500000 -15.333333 874.000000 2670.000000 --42.333333 -15.333333 986.000000 2670.000000 --42.166667 -15.333333 860.000000 2670.000000 --42.000000 -15.333333 861.000000 2670.000000 --41.833333 -15.333333 903.000000 2670.000000 --41.666667 -15.333333 934.000000 2670.000000 --41.500000 -15.333333 821.000000 2670.000000 --41.333333 -15.333333 830.000000 2670.000000 --41.166667 -15.333333 743.000000 2670.000000 --41.000000 -15.333333 813.000000 2670.000000 --40.833333 -15.333333 613.000000 2670.000000 --40.666667 -15.333333 502.000000 2670.000000 --40.500000 -15.333333 406.000000 2670.000000 --40.333333 -15.333333 309.000000 2670.000000 --40.166667 -15.333333 247.000000 2670.000000 --40.000000 -15.333333 210.000000 2670.000000 --65.000000 -15.500000 163.000000 2670.000000 --64.833333 -15.500000 171.000000 2670.000000 --64.666667 -15.500000 174.000000 2670.000000 --64.500000 -15.500000 171.000000 2670.000000 --64.333333 -15.500000 171.000000 2670.000000 --64.166667 -15.500000 174.000000 2670.000000 --64.000000 -15.500000 179.000000 2670.000000 --63.833333 -15.500000 184.000000 2670.000000 --63.666667 -15.500000 192.000000 2670.000000 --63.500000 -15.500000 202.000000 2670.000000 --63.333333 -15.500000 202.000000 2670.000000 --63.166667 -15.500000 197.000000 2670.000000 --63.000000 -15.500000 204.000000 2670.000000 --62.833333 -15.500000 251.000000 2670.000000 --62.666667 -15.500000 288.000000 2670.000000 --62.500000 -15.500000 344.000000 2670.000000 --62.333333 -15.500000 319.000000 2670.000000 --62.166667 -15.500000 305.000000 2670.000000 --62.000000 -15.500000 388.000000 2670.000000 --61.833333 -15.500000 359.000000 2670.000000 --61.666667 -15.500000 362.000000 2670.000000 --61.500000 -15.500000 282.000000 2670.000000 --61.333333 -15.500000 318.000000 2670.000000 --61.166667 -15.500000 278.000000 2670.000000 --61.000000 -15.500000 227.000000 2670.000000 --60.833333 -15.500000 220.000000 2670.000000 --60.666667 -15.500000 335.000000 2670.000000 --60.500000 -15.500000 235.000000 2670.000000 --60.333333 -15.500000 227.000000 2670.000000 --60.166667 -15.500000 210.000000 2670.000000 --60.000000 -15.500000 200.000000 2670.000000 --59.833333 -15.500000 209.000000 2670.000000 --59.666667 -15.500000 220.000000 2670.000000 --59.500000 -15.500000 245.000000 2670.000000 --59.333333 -15.500000 236.000000 2670.000000 --59.166667 -15.500000 343.000000 2670.000000 --59.000000 -15.500000 338.000000 2670.000000 --58.833333 -15.500000 316.000000 2670.000000 --58.666667 -15.500000 264.000000 2670.000000 --58.500000 -15.500000 215.000000 2670.000000 --58.333333 -15.500000 208.000000 2670.000000 --58.166667 -15.500000 194.000000 2670.000000 --58.000000 -15.500000 184.000000 2670.000000 --57.833333 -15.500000 150.000000 2670.000000 --57.666667 -15.500000 177.000000 2670.000000 --57.500000 -15.500000 159.000000 2670.000000 --57.333333 -15.500000 147.000000 2670.000000 --57.166667 -15.500000 203.000000 2670.000000 --57.000000 -15.500000 381.000000 2670.000000 --56.833333 -15.500000 317.000000 2670.000000 --56.666667 -15.500000 272.000000 2670.000000 --56.500000 -15.500000 230.000000 2670.000000 --56.333333 -15.500000 189.000000 2670.000000 --56.166667 -15.500000 169.000000 2670.000000 --56.000000 -15.500000 215.000000 2670.000000 --55.833333 -15.500000 343.000000 2670.000000 --55.666667 -15.500000 368.000000 2670.000000 --55.500000 -15.500000 726.000000 2670.000000 --55.333333 -15.500000 735.000000 2670.000000 --55.166667 -15.500000 701.000000 2670.000000 --55.000000 -15.500000 654.000000 2670.000000 --54.833333 -15.500000 668.000000 2670.000000 --54.666667 -15.500000 622.000000 2670.000000 --54.500000 -15.500000 644.000000 2670.000000 --54.333333 -15.500000 610.000000 2670.000000 --54.166667 -15.500000 625.000000 2670.000000 --54.000000 -15.500000 587.000000 2670.000000 --53.833333 -15.500000 594.000000 2670.000000 --53.666667 -15.500000 582.000000 2670.000000 --53.500000 -15.500000 568.000000 2670.000000 --53.333333 -15.500000 476.000000 2670.000000 --53.166667 -15.500000 513.000000 2670.000000 --53.000000 -15.500000 445.000000 2670.000000 --52.833333 -15.500000 467.000000 2670.000000 --52.666667 -15.500000 462.000000 2670.000000 --52.500000 -15.500000 687.000000 2670.000000 --52.333333 -15.500000 391.000000 2670.000000 --52.166667 -15.500000 318.000000 2670.000000 --52.000000 -15.500000 309.000000 2670.000000 --51.833333 -15.500000 300.000000 2670.000000 --51.666667 -15.500000 280.000000 2670.000000 --51.500000 -15.500000 294.000000 2670.000000 --51.333333 -15.500000 286.000000 2670.000000 --51.166667 -15.500000 284.000000 2670.000000 --51.000000 -15.500000 287.000000 2670.000000 --50.833333 -15.500000 287.000000 2670.000000 --50.666667 -15.500000 338.000000 2670.000000 --50.500000 -15.500000 425.000000 2670.000000 --50.333333 -15.500000 418.000000 2670.000000 --50.166667 -15.500000 678.000000 2670.000000 --50.000000 -15.500000 734.000000 2670.000000 --49.833333 -15.500000 734.000000 2670.000000 --49.666667 -15.500000 611.000000 2670.000000 --49.500000 -15.500000 585.000000 2670.000000 --49.333333 -15.500000 751.000000 2670.000000 --49.166667 -15.500000 628.000000 2670.000000 --49.000000 -15.500000 767.000000 2670.000000 --48.833333 -15.500000 856.000000 2670.000000 --48.666667 -15.500000 674.000000 2670.000000 --48.500000 -15.500000 693.000000 2670.000000 --48.333333 -15.500000 740.000000 2670.000000 --48.166667 -15.500000 894.000000 2670.000000 --48.000000 -15.500000 854.000000 2670.000000 --47.833333 -15.500000 751.000000 2670.000000 --47.666667 -15.500000 932.000000 2670.000000 --47.500000 -15.500000 1129.000000 2670.000000 --47.333333 -15.500000 847.000000 2670.000000 --47.166667 -15.500000 1007.000000 2670.000000 --47.000000 -15.500000 873.000000 2670.000000 --46.833333 -15.500000 757.000000 2670.000000 --46.666667 -15.500000 833.000000 2670.000000 --46.500000 -15.500000 940.000000 2670.000000 --46.333333 -15.500000 593.000000 2670.000000 --46.166667 -15.500000 711.000000 2670.000000 --46.000000 -15.500000 723.000000 2670.000000 --45.833333 -15.500000 803.000000 2670.000000 --45.666667 -15.500000 704.000000 2670.000000 --45.500000 -15.500000 694.000000 2670.000000 --45.333333 -15.500000 638.000000 2670.000000 --45.166667 -15.500000 593.000000 2670.000000 --45.000000 -15.500000 613.000000 2670.000000 --44.833333 -15.500000 593.000000 2670.000000 --44.666667 -15.500000 608.000000 2670.000000 --44.500000 -15.500000 562.000000 2670.000000 --44.333333 -15.500000 456.000000 2670.000000 --44.166667 -15.500000 486.000000 2670.000000 --44.000000 -15.500000 748.000000 2670.000000 --43.833333 -15.500000 579.000000 2670.000000 --43.666667 -15.500000 480.000000 2670.000000 --43.500000 -15.500000 530.000000 2670.000000 --43.333333 -15.500000 508.000000 2670.000000 --43.166667 -15.500000 518.000000 2670.000000 --43.000000 -15.500000 525.000000 2670.000000 --42.833333 -15.500000 740.000000 2670.000000 --42.666667 -15.500000 947.000000 2670.000000 --42.500000 -15.500000 926.000000 2670.000000 --42.333333 -15.500000 921.000000 2670.000000 --42.166667 -15.500000 961.000000 2670.000000 --42.000000 -15.500000 760.000000 2670.000000 --41.833333 -15.500000 775.000000 2670.000000 --41.666667 -15.500000 729.000000 2670.000000 --41.500000 -15.500000 767.000000 2670.000000 --41.333333 -15.500000 683.000000 2670.000000 --41.166667 -15.500000 729.000000 2670.000000 --41.000000 -15.500000 763.000000 2670.000000 --40.833333 -15.500000 819.000000 2670.000000 --40.666667 -15.500000 785.000000 2670.000000 --40.500000 -15.500000 348.000000 2670.000000 --40.333333 -15.500000 304.000000 2670.000000 --40.166667 -15.500000 418.000000 2670.000000 --40.000000 -15.500000 238.000000 2670.000000 --65.000000 -15.666667 165.000000 2670.000000 --64.833333 -15.666667 167.000000 2670.000000 --64.666667 -15.666667 180.000000 2670.000000 --64.500000 -15.666667 178.000000 2670.000000 --64.333333 -15.666667 187.000000 2670.000000 --64.166667 -15.666667 182.000000 2670.000000 --64.000000 -15.666667 178.000000 2670.000000 --63.833333 -15.666667 187.000000 2670.000000 --63.666667 -15.666667 202.000000 2670.000000 --63.500000 -15.666667 199.000000 2670.000000 --63.333333 -15.666667 208.000000 2670.000000 --63.166667 -15.666667 190.000000 2670.000000 --63.000000 -15.666667 236.000000 2670.000000 --62.833333 -15.666667 304.000000 2670.000000 --62.666667 -15.666667 372.000000 2670.000000 --62.500000 -15.666667 517.000000 2670.000000 --62.333333 -15.666667 390.000000 2670.000000 --62.166667 -15.666667 342.000000 2670.000000 --62.000000 -15.666667 341.000000 2670.000000 --61.833333 -15.666667 418.000000 2670.000000 --61.666667 -15.666667 422.000000 2670.000000 --61.500000 -15.666667 411.000000 2670.000000 --61.333333 -15.666667 350.000000 2670.000000 --61.166667 -15.666667 319.000000 2670.000000 --61.000000 -15.666667 269.000000 2670.000000 --60.833333 -15.666667 235.000000 2670.000000 --60.666667 -15.666667 288.000000 2670.000000 --60.500000 -15.666667 254.000000 2670.000000 --60.333333 -15.666667 240.000000 2670.000000 --60.166667 -15.666667 205.000000 2670.000000 --60.000000 -15.666667 209.000000 2670.000000 --59.833333 -15.666667 210.000000 2670.000000 --59.666667 -15.666667 228.000000 2670.000000 --59.500000 -15.666667 450.000000 2670.000000 --59.333333 -15.666667 400.000000 2670.000000 --59.166667 -15.666667 379.000000 2670.000000 --59.000000 -15.666667 274.000000 2670.000000 --58.833333 -15.666667 311.000000 2670.000000 --58.666667 -15.666667 190.000000 2670.000000 --58.500000 -15.666667 222.000000 2670.000000 --58.333333 -15.666667 213.000000 2670.000000 --58.166667 -15.666667 228.000000 2670.000000 --58.000000 -15.666667 237.000000 2670.000000 --57.833333 -15.666667 158.000000 2670.000000 --57.666667 -15.666667 157.000000 2670.000000 --57.500000 -15.666667 134.000000 2670.000000 --57.333333 -15.666667 249.000000 2670.000000 --57.166667 -15.666667 570.000000 2670.000000 --57.000000 -15.666667 448.000000 2670.000000 --56.833333 -15.666667 313.000000 2670.000000 --56.666667 -15.666667 365.000000 2670.000000 --56.500000 -15.666667 244.000000 2670.000000 --56.333333 -15.666667 259.000000 2670.000000 --56.166667 -15.666667 206.000000 2670.000000 --56.000000 -15.666667 191.000000 2670.000000 --55.833333 -15.666667 173.000000 2670.000000 --55.666667 -15.666667 195.000000 2670.000000 --55.500000 -15.666667 614.000000 2670.000000 --55.333333 -15.666667 794.000000 2670.000000 --55.166667 -15.666667 727.000000 2670.000000 --55.000000 -15.666667 432.000000 2670.000000 --54.833333 -15.666667 381.000000 2670.000000 --54.666667 -15.666667 542.000000 2670.000000 --54.500000 -15.666667 564.000000 2670.000000 --54.333333 -15.666667 452.000000 2670.000000 --54.166667 -15.666667 716.000000 2670.000000 --54.000000 -15.666667 622.000000 2670.000000 --53.833333 -15.666667 675.000000 2670.000000 --53.666667 -15.666667 566.000000 2670.000000 --53.500000 -15.666667 524.000000 2670.000000 --53.333333 -15.666667 448.000000 2670.000000 --53.166667 -15.666667 402.000000 2670.000000 --53.000000 -15.666667 410.000000 2670.000000 --52.833333 -15.666667 400.000000 2670.000000 --52.666667 -15.666667 452.000000 2670.000000 --52.500000 -15.666667 711.000000 2670.000000 --52.333333 -15.666667 408.000000 2670.000000 --52.166667 -15.666667 337.000000 2670.000000 --52.000000 -15.666667 348.000000 2670.000000 --51.833333 -15.666667 344.000000 2670.000000 --51.666667 -15.666667 312.000000 2670.000000 --51.500000 -15.666667 310.000000 2670.000000 --51.333333 -15.666667 315.000000 2670.000000 --51.166667 -15.666667 308.000000 2670.000000 --51.000000 -15.666667 301.000000 2670.000000 --50.833333 -15.666667 364.000000 2670.000000 --50.666667 -15.666667 347.000000 2670.000000 --50.500000 -15.666667 431.000000 2670.000000 --50.333333 -15.666667 518.000000 2670.000000 --50.166667 -15.666667 549.000000 2670.000000 --50.000000 -15.666667 768.000000 2670.000000 --49.833333 -15.666667 707.000000 2670.000000 --49.666667 -15.666667 613.000000 2670.000000 --49.500000 -15.666667 638.000000 2670.000000 --49.333333 -15.666667 713.000000 2670.000000 --49.166667 -15.666667 756.000000 2670.000000 --49.000000 -15.666667 843.000000 2670.000000 --48.833333 -15.666667 992.000000 2670.000000 --48.666667 -15.666667 844.000000 2670.000000 --48.500000 -15.666667 716.000000 2670.000000 --48.333333 -15.666667 941.000000 2670.000000 --48.166667 -15.666667 1212.000000 2670.000000 --48.000000 -15.666667 1091.000000 2670.000000 --47.833333 -15.666667 1089.000000 2670.000000 --47.666667 -15.666667 956.000000 2670.000000 --47.500000 -15.666667 1160.000000 2670.000000 --47.333333 -15.666667 874.000000 2670.000000 --47.166667 -15.666667 919.000000 2670.000000 --47.000000 -15.666667 720.000000 2670.000000 --46.833333 -15.666667 906.000000 2670.000000 --46.666667 -15.666667 637.000000 2670.000000 --46.500000 -15.666667 623.000000 2670.000000 --46.333333 -15.666667 586.000000 2670.000000 --46.166667 -15.666667 550.000000 2670.000000 --46.000000 -15.666667 545.000000 2670.000000 --45.833333 -15.666667 737.000000 2670.000000 --45.666667 -15.666667 697.000000 2670.000000 --45.500000 -15.666667 657.000000 2670.000000 --45.333333 -15.666667 648.000000 2670.000000 --45.166667 -15.666667 598.000000 2670.000000 --45.000000 -15.666667 534.000000 2670.000000 --44.833333 -15.666667 502.000000 2670.000000 --44.666667 -15.666667 463.000000 2670.000000 --44.500000 -15.666667 456.000000 2670.000000 --44.333333 -15.666667 490.000000 2670.000000 --44.166667 -15.666667 779.000000 2670.000000 --44.000000 -15.666667 710.000000 2670.000000 --43.833333 -15.666667 562.000000 2670.000000 --43.666667 -15.666667 508.000000 2670.000000 --43.500000 -15.666667 530.000000 2670.000000 --43.333333 -15.666667 523.000000 2670.000000 --43.166667 -15.666667 551.000000 2670.000000 --43.000000 -15.666667 546.000000 2670.000000 --42.833333 -15.666667 1280.000000 2670.000000 --42.666667 -15.666667 875.000000 2670.000000 --42.500000 -15.666667 848.000000 2670.000000 --42.333333 -15.666667 842.000000 2670.000000 --42.166667 -15.666667 821.000000 2670.000000 --42.000000 -15.666667 776.000000 2670.000000 --41.833333 -15.666667 785.000000 2670.000000 --41.666667 -15.666667 842.000000 2670.000000 --41.500000 -15.666667 795.000000 2670.000000 --41.333333 -15.666667 880.000000 2670.000000 --41.166667 -15.666667 773.000000 2670.000000 --41.000000 -15.666667 852.000000 2670.000000 --40.833333 -15.666667 925.000000 2670.000000 --40.666667 -15.666667 805.000000 2670.000000 --40.500000 -15.666667 323.000000 2670.000000 --40.333333 -15.666667 626.000000 2670.000000 --40.166667 -15.666667 454.000000 2670.000000 --40.000000 -15.666667 252.000000 2670.000000 --65.000000 -15.833333 169.000000 2670.000000 --64.833333 -15.833333 179.000000 2670.000000 --64.666667 -15.833333 184.000000 2670.000000 --64.500000 -15.833333 192.000000 2670.000000 --64.333333 -15.833333 189.000000 2670.000000 --64.166667 -15.833333 196.000000 2670.000000 --64.000000 -15.833333 195.000000 2670.000000 --63.833333 -15.833333 192.000000 2670.000000 --63.666667 -15.833333 194.000000 2670.000000 --63.500000 -15.833333 199.000000 2670.000000 --63.333333 -15.833333 201.000000 2670.000000 --63.166667 -15.833333 206.000000 2670.000000 --63.000000 -15.833333 248.000000 2670.000000 --62.833333 -15.833333 244.000000 2670.000000 --62.666667 -15.833333 320.000000 2670.000000 --62.500000 -15.833333 447.000000 2670.000000 --62.333333 -15.833333 472.000000 2670.000000 --62.166667 -15.833333 440.000000 2670.000000 --62.000000 -15.833333 408.000000 2670.000000 --61.833333 -15.833333 398.000000 2670.000000 --61.666667 -15.833333 389.000000 2670.000000 --61.500000 -15.833333 359.000000 2670.000000 --61.333333 -15.833333 353.000000 2670.000000 --61.166667 -15.833333 253.000000 2670.000000 --61.000000 -15.833333 291.000000 2670.000000 --60.833333 -15.833333 273.000000 2670.000000 --60.666667 -15.833333 253.000000 2670.000000 --60.500000 -15.833333 231.000000 2670.000000 --60.333333 -15.833333 218.000000 2670.000000 --60.166667 -15.833333 213.000000 2670.000000 --60.000000 -15.833333 205.000000 2670.000000 --59.833333 -15.833333 214.000000 2670.000000 --59.666667 -15.833333 229.000000 2670.000000 --59.500000 -15.833333 486.000000 2670.000000 --59.333333 -15.833333 595.000000 2670.000000 --59.166667 -15.833333 309.000000 2670.000000 --59.000000 -15.833333 283.000000 2670.000000 --58.833333 -15.833333 238.000000 2670.000000 --58.666667 -15.833333 197.000000 2670.000000 --58.500000 -15.833333 186.000000 2670.000000 --58.333333 -15.833333 182.000000 2670.000000 --58.166667 -15.833333 246.000000 2670.000000 --58.000000 -15.833333 158.000000 2670.000000 --57.833333 -15.833333 153.000000 2670.000000 --57.666667 -15.833333 131.000000 2670.000000 --57.500000 -15.833333 189.000000 2670.000000 --57.333333 -15.833333 206.000000 2670.000000 --57.166667 -15.833333 500.000000 2670.000000 --57.000000 -15.833333 190.000000 2670.000000 --56.833333 -15.833333 339.000000 2670.000000 --56.666667 -15.833333 220.000000 2670.000000 --56.500000 -15.833333 205.000000 2670.000000 --56.333333 -15.833333 224.000000 2670.000000 --56.166667 -15.833333 166.000000 2670.000000 --56.000000 -15.833333 151.000000 2670.000000 --55.833333 -15.833333 157.000000 2670.000000 --55.666667 -15.833333 233.000000 2670.000000 --55.500000 -15.833333 631.000000 2670.000000 --55.333333 -15.833333 815.000000 2670.000000 --55.166667 -15.833333 734.000000 2670.000000 --55.000000 -15.833333 405.000000 2670.000000 --54.833333 -15.833333 424.000000 2670.000000 --54.666667 -15.833333 383.000000 2670.000000 --54.500000 -15.833333 503.000000 2670.000000 --54.333333 -15.833333 441.000000 2670.000000 --54.166667 -15.833333 608.000000 2670.000000 --54.000000 -15.833333 663.000000 2670.000000 --53.833333 -15.833333 637.000000 2670.000000 --53.666667 -15.833333 631.000000 2670.000000 --53.500000 -15.833333 484.000000 2670.000000 --53.333333 -15.833333 438.000000 2670.000000 --53.166667 -15.833333 441.000000 2670.000000 --53.000000 -15.833333 391.000000 2670.000000 --52.833333 -15.833333 399.000000 2670.000000 --52.666667 -15.833333 380.000000 2670.000000 --52.500000 -15.833333 381.000000 2670.000000 --52.333333 -15.833333 382.000000 2670.000000 --52.166667 -15.833333 401.000000 2670.000000 --52.000000 -15.833333 317.000000 2670.000000 --51.833333 -15.833333 304.000000 2670.000000 --51.666667 -15.833333 316.000000 2670.000000 --51.500000 -15.833333 316.000000 2670.000000 --51.333333 -15.833333 350.000000 2670.000000 --51.166667 -15.833333 427.000000 2670.000000 --51.000000 -15.833333 323.000000 2670.000000 --50.833333 -15.833333 349.000000 2670.000000 --50.666667 -15.833333 361.000000 2670.000000 --50.500000 -15.833333 398.000000 2670.000000 --50.333333 -15.833333 421.000000 2670.000000 --50.166667 -15.833333 660.000000 2670.000000 --50.000000 -15.833333 675.000000 2670.000000 --49.833333 -15.833333 699.000000 2670.000000 --49.666667 -15.833333 836.000000 2670.000000 --49.500000 -15.833333 716.000000 2670.000000 --49.333333 -15.833333 709.000000 2670.000000 --49.166667 -15.833333 670.000000 2670.000000 --49.000000 -15.833333 764.000000 2670.000000 --48.833333 -15.833333 1137.000000 2670.000000 --48.666667 -15.833333 1211.000000 2670.000000 --48.500000 -15.833333 984.000000 2670.000000 --48.333333 -15.833333 1067.000000 2670.000000 --48.166667 -15.833333 1049.000000 2670.000000 --48.000000 -15.833333 1073.000000 2670.000000 --47.833333 -15.833333 1016.000000 2670.000000 --47.666667 -15.833333 1002.000000 2670.000000 --47.500000 -15.833333 895.000000 2670.000000 --47.333333 -15.833333 927.000000 2670.000000 --47.166667 -15.833333 937.000000 2670.000000 --47.000000 -15.833333 972.000000 2670.000000 --46.833333 -15.833333 832.000000 2670.000000 --46.666667 -15.833333 956.000000 2670.000000 --46.500000 -15.833333 934.000000 2670.000000 --46.333333 -15.833333 860.000000 2670.000000 --46.166667 -15.833333 516.000000 2670.000000 --46.000000 -15.833333 532.000000 2670.000000 --45.833333 -15.833333 546.000000 2670.000000 --45.666667 -15.833333 641.000000 2670.000000 --45.500000 -15.833333 649.000000 2670.000000 --45.333333 -15.833333 599.000000 2670.000000 --45.166667 -15.833333 544.000000 2670.000000 --45.000000 -15.833333 487.000000 2670.000000 --44.833333 -15.833333 479.000000 2670.000000 --44.666667 -15.833333 512.000000 2670.000000 --44.500000 -15.833333 625.000000 2670.000000 --44.333333 -15.833333 699.000000 2670.000000 --44.166667 -15.833333 870.000000 2670.000000 --44.000000 -15.833333 715.000000 2670.000000 --43.833333 -15.833333 609.000000 2670.000000 --43.666667 -15.833333 507.000000 2670.000000 --43.500000 -15.833333 532.000000 2670.000000 --43.333333 -15.833333 541.000000 2670.000000 --43.166667 -15.833333 806.000000 2670.000000 --43.000000 -15.833333 600.000000 2670.000000 --42.833333 -15.833333 815.000000 2670.000000 --42.666667 -15.833333 1032.000000 2670.000000 --42.500000 -15.833333 817.000000 2670.000000 --42.333333 -15.833333 960.000000 2670.000000 --42.166667 -15.833333 802.000000 2670.000000 --42.000000 -15.833333 917.000000 2670.000000 --41.833333 -15.833333 829.000000 2670.000000 --41.666667 -15.833333 844.000000 2670.000000 --41.500000 -15.833333 860.000000 2670.000000 --41.333333 -15.833333 737.000000 2670.000000 --41.166667 -15.833333 728.000000 2670.000000 --41.000000 -15.833333 874.000000 2670.000000 --40.833333 -15.833333 721.000000 2670.000000 --40.666667 -15.833333 545.000000 2670.000000 --40.500000 -15.833333 611.000000 2670.000000 --40.333333 -15.833333 308.000000 2670.000000 --40.166667 -15.833333 222.000000 2670.000000 --40.000000 -15.833333 194.000000 2670.000000 --65.000000 -16.000000 175.000000 2670.000000 --64.833333 -16.000000 181.000000 2670.000000 --64.666667 -16.000000 181.000000 2670.000000 --64.500000 -16.000000 181.000000 2670.000000 --64.333333 -16.000000 197.000000 2670.000000 --64.166667 -16.000000 192.000000 2670.000000 --64.000000 -16.000000 188.000000 2670.000000 --63.833333 -16.000000 204.000000 2670.000000 --63.666667 -16.000000 205.000000 2670.000000 --63.500000 -16.000000 207.000000 2670.000000 --63.333333 -16.000000 209.000000 2670.000000 --63.166667 -16.000000 211.000000 2670.000000 --63.000000 -16.000000 298.000000 2670.000000 --62.833333 -16.000000 357.000000 2670.000000 --62.666667 -16.000000 404.000000 2670.000000 --62.500000 -16.000000 419.000000 2670.000000 --62.333333 -16.000000 476.000000 2670.000000 --62.166667 -16.000000 465.000000 2670.000000 --62.000000 -16.000000 455.000000 2670.000000 --61.833333 -16.000000 386.000000 2670.000000 --61.666667 -16.000000 418.000000 2670.000000 --61.500000 -16.000000 401.000000 2670.000000 --61.333333 -16.000000 404.000000 2670.000000 --61.166667 -16.000000 348.000000 2670.000000 --61.000000 -16.000000 348.000000 2670.000000 --60.833333 -16.000000 339.000000 2670.000000 --60.666667 -16.000000 269.000000 2670.000000 --60.500000 -16.000000 235.000000 2670.000000 --60.333333 -16.000000 231.000000 2670.000000 --60.166667 -16.000000 223.000000 2670.000000 --60.000000 -16.000000 222.000000 2670.000000 --59.833333 -16.000000 226.000000 2670.000000 --59.666667 -16.000000 244.000000 2670.000000 --59.500000 -16.000000 478.000000 2670.000000 --59.333333 -16.000000 737.000000 2670.000000 --59.166667 -16.000000 232.000000 2670.000000 --59.000000 -16.000000 219.000000 2670.000000 --58.833333 -16.000000 220.000000 2670.000000 --58.666667 -16.000000 231.000000 2670.000000 --58.500000 -16.000000 178.000000 2670.000000 --58.333333 -16.000000 156.000000 2670.000000 --58.166667 -16.000000 175.000000 2670.000000 --58.000000 -16.000000 130.000000 2670.000000 --57.833333 -16.000000 132.000000 2670.000000 --57.666667 -16.000000 124.000000 2670.000000 --57.500000 -16.000000 346.000000 2670.000000 --57.333333 -16.000000 305.000000 2670.000000 --57.166667 -16.000000 139.000000 2670.000000 --57.000000 -16.000000 155.000000 2670.000000 --56.833333 -16.000000 174.000000 2670.000000 --56.666667 -16.000000 195.000000 2670.000000 --56.500000 -16.000000 145.000000 2670.000000 --56.333333 -16.000000 155.000000 2670.000000 --56.166667 -16.000000 146.000000 2670.000000 --56.000000 -16.000000 150.000000 2670.000000 --55.833333 -16.000000 138.000000 2670.000000 --55.666667 -16.000000 164.000000 2670.000000 --55.500000 -16.000000 322.000000 2670.000000 --55.333333 -16.000000 701.000000 2670.000000 --55.166667 -16.000000 580.000000 2670.000000 --55.000000 -16.000000 323.000000 2670.000000 --54.833333 -16.000000 324.000000 2670.000000 --54.666667 -16.000000 351.000000 2670.000000 --54.500000 -16.000000 462.000000 2670.000000 --54.333333 -16.000000 338.000000 2670.000000 --54.166667 -16.000000 388.000000 2670.000000 --54.000000 -16.000000 383.000000 2670.000000 --53.833333 -16.000000 507.000000 2670.000000 --53.666667 -16.000000 537.000000 2670.000000 --53.500000 -16.000000 589.000000 2670.000000 --53.333333 -16.000000 458.000000 2670.000000 --53.166667 -16.000000 461.000000 2670.000000 --53.000000 -16.000000 461.000000 2670.000000 --52.833333 -16.000000 368.000000 2670.000000 --52.666667 -16.000000 506.000000 2670.000000 --52.500000 -16.000000 454.000000 2670.000000 --52.333333 -16.000000 351.000000 2670.000000 --52.166667 -16.000000 358.000000 2670.000000 --52.000000 -16.000000 345.000000 2670.000000 --51.833333 -16.000000 311.000000 2670.000000 --51.666667 -16.000000 360.000000 2670.000000 --51.500000 -16.000000 396.000000 2670.000000 --51.333333 -16.000000 385.000000 2670.000000 --51.166667 -16.000000 350.000000 2670.000000 --51.000000 -16.000000 535.000000 2670.000000 --50.833333 -16.000000 488.000000 2670.000000 --50.666667 -16.000000 413.000000 2670.000000 --50.500000 -16.000000 401.000000 2670.000000 --50.333333 -16.000000 550.000000 2670.000000 --50.166667 -16.000000 519.000000 2670.000000 --50.000000 -16.000000 725.000000 2670.000000 --49.833333 -16.000000 733.000000 2670.000000 --49.666667 -16.000000 765.000000 2670.000000 --49.500000 -16.000000 777.000000 2670.000000 --49.333333 -16.000000 729.000000 2670.000000 --49.166667 -16.000000 713.000000 2670.000000 --49.000000 -16.000000 822.000000 2670.000000 --48.833333 -16.000000 1013.000000 2670.000000 --48.666667 -16.000000 1099.000000 2670.000000 --48.500000 -16.000000 994.000000 2670.000000 --48.333333 -16.000000 1030.000000 2670.000000 --48.166667 -16.000000 1072.000000 2670.000000 --48.000000 -16.000000 1233.000000 2670.000000 --47.833333 -16.000000 967.000000 2670.000000 --47.666667 -16.000000 868.000000 2670.000000 --47.500000 -16.000000 964.000000 2670.000000 --47.333333 -16.000000 896.000000 2670.000000 --47.166667 -16.000000 861.000000 2670.000000 --47.000000 -16.000000 861.000000 2670.000000 --46.833333 -16.000000 811.000000 2670.000000 --46.666667 -16.000000 958.000000 2670.000000 --46.500000 -16.000000 882.000000 2670.000000 --46.333333 -16.000000 586.000000 2670.000000 --46.166667 -16.000000 787.000000 2670.000000 --46.000000 -16.000000 497.000000 2670.000000 --45.833333 -16.000000 536.000000 2670.000000 --45.666667 -16.000000 562.000000 2670.000000 --45.500000 -16.000000 619.000000 2670.000000 --45.333333 -16.000000 568.000000 2670.000000 --45.166667 -16.000000 526.000000 2670.000000 --45.000000 -16.000000 463.000000 2670.000000 --44.833333 -16.000000 517.000000 2670.000000 --44.666667 -16.000000 630.000000 2670.000000 --44.500000 -16.000000 701.000000 2670.000000 --44.333333 -16.000000 747.000000 2670.000000 --44.166667 -16.000000 806.000000 2670.000000 --44.000000 -16.000000 767.000000 2670.000000 --43.833333 -16.000000 628.000000 2670.000000 --43.666667 -16.000000 509.000000 2670.000000 --43.500000 -16.000000 546.000000 2670.000000 --43.333333 -16.000000 644.000000 2670.000000 --43.166667 -16.000000 682.000000 2670.000000 --43.000000 -16.000000 859.000000 2670.000000 --42.833333 -16.000000 817.000000 2670.000000 --42.666667 -16.000000 852.000000 2670.000000 --42.500000 -16.000000 857.000000 2670.000000 --42.333333 -16.000000 612.000000 2670.000000 --42.166667 -16.000000 620.000000 2670.000000 --42.000000 -16.000000 917.000000 2670.000000 --41.833333 -16.000000 855.000000 2670.000000 --41.666667 -16.000000 917.000000 2670.000000 --41.500000 -16.000000 776.000000 2670.000000 --41.333333 -16.000000 676.000000 2670.000000 --41.166667 -16.000000 764.000000 2670.000000 --41.000000 -16.000000 437.000000 2670.000000 --40.833333 -16.000000 366.000000 2670.000000 --40.666667 -16.000000 517.000000 2670.000000 --40.500000 -16.000000 300.000000 2670.000000 --40.333333 -16.000000 231.000000 2670.000000 --40.166667 -16.000000 197.000000 2670.000000 --40.000000 -16.000000 138.000000 2670.000000 --65.000000 -16.166667 181.000000 2670.000000 --64.833333 -16.166667 184.000000 2670.000000 --64.666667 -16.166667 188.000000 2670.000000 --64.500000 -16.166667 193.000000 2670.000000 --64.333333 -16.166667 187.000000 2670.000000 --64.166667 -16.166667 207.000000 2670.000000 --64.000000 -16.166667 204.000000 2670.000000 --63.833333 -16.166667 195.000000 2670.000000 --63.666667 -16.166667 203.000000 2670.000000 --63.500000 -16.166667 213.000000 2670.000000 --63.333333 -16.166667 217.000000 2670.000000 --63.166667 -16.166667 220.000000 2670.000000 --63.000000 -16.166667 310.000000 2670.000000 --62.833333 -16.166667 406.000000 2670.000000 --62.666667 -16.166667 652.000000 2670.000000 --62.500000 -16.166667 482.000000 2670.000000 --62.333333 -16.166667 506.000000 2670.000000 --62.166667 -16.166667 612.000000 2670.000000 --62.000000 -16.166667 505.000000 2670.000000 --61.833333 -16.166667 445.000000 2670.000000 --61.666667 -16.166667 412.000000 2670.000000 --61.500000 -16.166667 434.000000 2670.000000 --61.333333 -16.166667 410.000000 2670.000000 --61.166667 -16.166667 372.000000 2670.000000 --61.000000 -16.166667 382.000000 2670.000000 --60.833333 -16.166667 378.000000 2670.000000 --60.666667 -16.166667 310.000000 2670.000000 --60.500000 -16.166667 251.000000 2670.000000 --60.333333 -16.166667 276.000000 2670.000000 --60.166667 -16.166667 238.000000 2670.000000 --60.000000 -16.166667 259.000000 2670.000000 --59.833333 -16.166667 247.000000 2670.000000 --59.666667 -16.166667 250.000000 2670.000000 --59.500000 -16.166667 444.000000 2670.000000 --59.333333 -16.166667 226.000000 2670.000000 --59.166667 -16.166667 180.000000 2670.000000 --59.000000 -16.166667 166.000000 2670.000000 --58.833333 -16.166667 146.000000 2670.000000 --58.666667 -16.166667 194.000000 2670.000000 --58.500000 -16.166667 152.000000 2670.000000 --58.333333 -16.166667 137.000000 2670.000000 --58.166667 -16.166667 228.000000 2670.000000 --58.000000 -16.166667 128.000000 2670.000000 --57.833333 -16.166667 120.000000 2670.000000 --57.666667 -16.166667 154.000000 2670.000000 --57.500000 -16.166667 451.000000 2670.000000 --57.333333 -16.166667 179.000000 2670.000000 --57.166667 -16.166667 122.000000 2670.000000 --57.000000 -16.166667 122.000000 2670.000000 --56.833333 -16.166667 133.000000 2670.000000 --56.666667 -16.166667 156.000000 2670.000000 --56.500000 -16.166667 127.000000 2670.000000 --56.333333 -16.166667 133.000000 2670.000000 --56.166667 -16.166667 139.000000 2670.000000 --56.000000 -16.166667 135.000000 2670.000000 --55.833333 -16.166667 135.000000 2670.000000 --55.666667 -16.166667 143.000000 2670.000000 --55.500000 -16.166667 170.000000 2670.000000 --55.333333 -16.166667 732.000000 2670.000000 --55.166667 -16.166667 633.000000 2670.000000 --55.000000 -16.166667 461.000000 2670.000000 --54.833333 -16.166667 277.000000 2670.000000 --54.666667 -16.166667 298.000000 2670.000000 --54.500000 -16.166667 417.000000 2670.000000 --54.333333 -16.166667 318.000000 2670.000000 --54.166667 -16.166667 391.000000 2670.000000 --54.000000 -16.166667 371.000000 2670.000000 --53.833333 -16.166667 609.000000 2670.000000 --53.666667 -16.166667 527.000000 2670.000000 --53.500000 -16.166667 485.000000 2670.000000 --53.333333 -16.166667 536.000000 2670.000000 --53.166667 -16.166667 433.000000 2670.000000 --53.000000 -16.166667 393.000000 2670.000000 --52.833333 -16.166667 459.000000 2670.000000 --52.666667 -16.166667 423.000000 2670.000000 --52.500000 -16.166667 362.000000 2670.000000 --52.333333 -16.166667 374.000000 2670.000000 --52.166667 -16.166667 448.000000 2670.000000 --52.000000 -16.166667 383.000000 2670.000000 --51.833333 -16.166667 360.000000 2670.000000 --51.666667 -16.166667 346.000000 2670.000000 --51.500000 -16.166667 446.000000 2670.000000 --51.333333 -16.166667 500.000000 2670.000000 --51.166667 -16.166667 364.000000 2670.000000 --51.000000 -16.166667 366.000000 2670.000000 --50.833333 -16.166667 419.000000 2670.000000 --50.666667 -16.166667 451.000000 2670.000000 --50.500000 -16.166667 654.000000 2670.000000 --50.333333 -16.166667 538.000000 2670.000000 --50.166667 -16.166667 654.000000 2670.000000 --50.000000 -16.166667 839.000000 2670.000000 --49.833333 -16.166667 746.000000 2670.000000 --49.666667 -16.166667 897.000000 2670.000000 --49.500000 -16.166667 923.000000 2670.000000 --49.333333 -16.166667 785.000000 2670.000000 --49.166667 -16.166667 1084.000000 2670.000000 --49.000000 -16.166667 1056.000000 2670.000000 --48.833333 -16.166667 1054.000000 2670.000000 --48.666667 -16.166667 905.000000 2670.000000 --48.500000 -16.166667 903.000000 2670.000000 --48.333333 -16.166667 1006.000000 2670.000000 --48.166667 -16.166667 945.000000 2670.000000 --48.000000 -16.166667 906.000000 2670.000000 --47.833333 -16.166667 963.000000 2670.000000 --47.666667 -16.166667 996.000000 2670.000000 --47.500000 -16.166667 961.000000 2670.000000 --47.333333 -16.166667 832.000000 2670.000000 --47.166667 -16.166667 701.000000 2670.000000 --47.000000 -16.166667 693.000000 2670.000000 --46.833333 -16.166667 759.000000 2670.000000 --46.666667 -16.166667 798.000000 2670.000000 --46.500000 -16.166667 919.000000 2670.000000 --46.333333 -16.166667 815.000000 2670.000000 --46.166667 -16.166667 563.000000 2670.000000 --46.000000 -16.166667 529.000000 2670.000000 --45.833333 -16.166667 499.000000 2670.000000 --45.666667 -16.166667 483.000000 2670.000000 --45.500000 -16.166667 542.000000 2670.000000 --45.333333 -16.166667 588.000000 2670.000000 --45.166667 -16.166667 469.000000 2670.000000 --45.000000 -16.166667 510.000000 2670.000000 --44.833333 -16.166667 664.000000 2670.000000 --44.666667 -16.166667 690.000000 2670.000000 --44.500000 -16.166667 813.000000 2670.000000 --44.333333 -16.166667 847.000000 2670.000000 --44.166667 -16.166667 801.000000 2670.000000 --44.000000 -16.166667 669.000000 2670.000000 --43.833333 -16.166667 548.000000 2670.000000 --43.666667 -16.166667 678.000000 2670.000000 --43.500000 -16.166667 555.000000 2670.000000 --43.333333 -16.166667 687.000000 2670.000000 --43.166667 -16.166667 862.000000 2670.000000 --43.000000 -16.166667 801.000000 2670.000000 --42.833333 -16.166667 782.000000 2670.000000 --42.666667 -16.166667 682.000000 2670.000000 --42.500000 -16.166667 887.000000 2670.000000 --42.333333 -16.166667 564.000000 2670.000000 --42.166667 -16.166667 704.000000 2670.000000 --42.000000 -16.166667 872.000000 2670.000000 --41.833333 -16.166667 638.000000 2670.000000 --41.666667 -16.166667 780.000000 2670.000000 --41.500000 -16.166667 706.000000 2670.000000 --41.333333 -16.166667 657.000000 2670.000000 --41.166667 -16.166667 823.000000 2670.000000 --41.000000 -16.166667 770.000000 2670.000000 --40.833333 -16.166667 357.000000 2670.000000 --40.666667 -16.166667 186.000000 2670.000000 --40.500000 -16.166667 228.000000 2670.000000 --40.333333 -16.166667 209.000000 2670.000000 --40.166667 -16.166667 238.000000 2670.000000 --40.000000 -16.166667 214.000000 2670.000000 --65.000000 -16.333333 186.000000 2670.000000 --64.833333 -16.333333 200.000000 2670.000000 --64.666667 -16.333333 193.000000 2670.000000 --64.500000 -16.333333 198.000000 2670.000000 --64.333333 -16.333333 205.000000 2670.000000 --64.166667 -16.333333 193.000000 2670.000000 --64.000000 -16.333333 201.000000 2670.000000 --63.833333 -16.333333 210.000000 2670.000000 --63.666667 -16.333333 211.000000 2670.000000 --63.500000 -16.333333 209.000000 2670.000000 --63.333333 -16.333333 222.000000 2670.000000 --63.166667 -16.333333 224.000000 2670.000000 --63.000000 -16.333333 238.000000 2670.000000 --62.833333 -16.333333 249.000000 2670.000000 --62.666667 -16.333333 471.000000 2670.000000 --62.500000 -16.333333 445.000000 2670.000000 --62.333333 -16.333333 464.000000 2670.000000 --62.166667 -16.333333 635.000000 2670.000000 --62.000000 -16.333333 534.000000 2670.000000 --61.833333 -16.333333 506.000000 2670.000000 --61.666667 -16.333333 467.000000 2670.000000 --61.500000 -16.333333 450.000000 2670.000000 --61.333333 -16.333333 441.000000 2670.000000 --61.166667 -16.333333 440.000000 2670.000000 --61.000000 -16.333333 402.000000 2670.000000 --60.833333 -16.333333 381.000000 2670.000000 --60.666667 -16.333333 330.000000 2670.000000 --60.500000 -16.333333 309.000000 2670.000000 --60.333333 -16.333333 341.000000 2670.000000 --60.166667 -16.333333 316.000000 2670.000000 --60.000000 -16.333333 308.000000 2670.000000 --59.833333 -16.333333 274.000000 2670.000000 --59.666667 -16.333333 227.000000 2670.000000 --59.500000 -16.333333 210.000000 2670.000000 --59.333333 -16.333333 200.000000 2670.000000 --59.166667 -16.333333 199.000000 2670.000000 --59.000000 -16.333333 129.000000 2670.000000 --58.833333 -16.333333 124.000000 2670.000000 --58.666667 -16.333333 146.000000 2670.000000 --58.500000 -16.333333 160.000000 2670.000000 --58.333333 -16.333333 157.000000 2670.000000 --58.166667 -16.333333 217.000000 2670.000000 --58.000000 -16.333333 122.000000 2670.000000 --57.833333 -16.333333 117.000000 2670.000000 --57.666667 -16.333333 239.000000 2670.000000 --57.500000 -16.333333 617.000000 2670.000000 --57.333333 -16.333333 136.000000 2670.000000 --57.166667 -16.333333 138.000000 2670.000000 --57.000000 -16.333333 109.000000 2670.000000 --56.833333 -16.333333 127.000000 2670.000000 --56.666667 -16.333333 126.000000 2670.000000 --56.500000 -16.333333 126.000000 2670.000000 --56.333333 -16.333333 130.000000 2670.000000 --56.166667 -16.333333 129.000000 2670.000000 --56.000000 -16.333333 131.000000 2670.000000 --55.833333 -16.333333 134.000000 2670.000000 --55.666667 -16.333333 143.000000 2670.000000 --55.500000 -16.333333 154.000000 2670.000000 --55.333333 -16.333333 530.000000 2670.000000 --55.166667 -16.333333 498.000000 2670.000000 --55.000000 -16.333333 435.000000 2670.000000 --54.833333 -16.333333 274.000000 2670.000000 --54.666667 -16.333333 357.000000 2670.000000 --54.500000 -16.333333 314.000000 2670.000000 --54.333333 -16.333333 241.000000 2670.000000 --54.166667 -16.333333 310.000000 2670.000000 --54.000000 -16.333333 368.000000 2670.000000 --53.833333 -16.333333 445.000000 2670.000000 --53.666667 -16.333333 500.000000 2670.000000 --53.500000 -16.333333 655.000000 2670.000000 --53.333333 -16.333333 705.000000 2670.000000 --53.166667 -16.333333 567.000000 2670.000000 --53.000000 -16.333333 584.000000 2670.000000 --52.833333 -16.333333 493.000000 2670.000000 --52.666667 -16.333333 445.000000 2670.000000 --52.500000 -16.333333 692.000000 2670.000000 --52.333333 -16.333333 938.000000 2670.000000 --52.166667 -16.333333 499.000000 2670.000000 --52.000000 -16.333333 367.000000 2670.000000 --51.833333 -16.333333 340.000000 2670.000000 --51.666667 -16.333333 393.000000 2670.000000 --51.500000 -16.333333 522.000000 2670.000000 --51.333333 -16.333333 462.000000 2670.000000 --51.166667 -16.333333 757.000000 2670.000000 --51.000000 -16.333333 477.000000 2670.000000 --50.833333 -16.333333 411.000000 2670.000000 --50.666667 -16.333333 595.000000 2670.000000 --50.500000 -16.333333 484.000000 2670.000000 --50.333333 -16.333333 633.000000 2670.000000 --50.166667 -16.333333 707.000000 2670.000000 --50.000000 -16.333333 841.000000 2670.000000 --49.833333 -16.333333 775.000000 2670.000000 --49.666667 -16.333333 733.000000 2670.000000 --49.500000 -16.333333 768.000000 2670.000000 --49.333333 -16.333333 828.000000 2670.000000 --49.166667 -16.333333 927.000000 2670.000000 --49.000000 -16.333333 950.000000 2670.000000 --48.833333 -16.333333 982.000000 2670.000000 --48.666667 -16.333333 940.000000 2670.000000 --48.500000 -16.333333 903.000000 2670.000000 --48.333333 -16.333333 844.000000 2670.000000 --48.166667 -16.333333 794.000000 2670.000000 --48.000000 -16.333333 892.000000 2670.000000 --47.833333 -16.333333 977.000000 2670.000000 --47.666667 -16.333333 928.000000 2670.000000 --47.500000 -16.333333 949.000000 2670.000000 --47.333333 -16.333333 882.000000 2670.000000 --47.166667 -16.333333 901.000000 2670.000000 --47.000000 -16.333333 621.000000 2670.000000 --46.833333 -16.333333 616.000000 2670.000000 --46.666667 -16.333333 726.000000 2670.000000 --46.500000 -16.333333 946.000000 2670.000000 --46.333333 -16.333333 897.000000 2670.000000 --46.166667 -16.333333 831.000000 2670.000000 --46.000000 -16.333333 710.000000 2670.000000 --45.833333 -16.333333 623.000000 2670.000000 --45.666667 -16.333333 525.000000 2670.000000 --45.500000 -16.333333 497.000000 2670.000000 --45.333333 -16.333333 488.000000 2670.000000 --45.166667 -16.333333 498.000000 2670.000000 --45.000000 -16.333333 542.000000 2670.000000 --44.833333 -16.333333 617.000000 2670.000000 --44.666667 -16.333333 627.000000 2670.000000 --44.500000 -16.333333 737.000000 2670.000000 --44.333333 -16.333333 758.000000 2670.000000 --44.166667 -16.333333 838.000000 2670.000000 --44.000000 -16.333333 755.000000 2670.000000 --43.833333 -16.333333 718.000000 2670.000000 --43.666667 -16.333333 596.000000 2670.000000 --43.500000 -16.333333 635.000000 2670.000000 --43.333333 -16.333333 917.000000 2670.000000 --43.166667 -16.333333 925.000000 2670.000000 --43.000000 -16.333333 908.000000 2670.000000 --42.833333 -16.333333 792.000000 2670.000000 --42.666667 -16.333333 888.000000 2670.000000 --42.500000 -16.333333 626.000000 2670.000000 --42.333333 -16.333333 537.000000 2670.000000 --42.166667 -16.333333 782.000000 2670.000000 --42.000000 -16.333333 545.000000 2670.000000 --41.833333 -16.333333 714.000000 2670.000000 --41.666667 -16.333333 656.000000 2670.000000 --41.500000 -16.333333 794.000000 2670.000000 --41.333333 -16.333333 606.000000 2670.000000 --41.166667 -16.333333 696.000000 2670.000000 --41.000000 -16.333333 976.000000 2670.000000 --40.833333 -16.333333 213.000000 2670.000000 --40.666667 -16.333333 519.000000 2670.000000 --40.500000 -16.333333 232.000000 2670.000000 --40.333333 -16.333333 571.000000 2670.000000 --40.166667 -16.333333 499.000000 2670.000000 --40.000000 -16.333333 732.000000 2670.000000 --65.000000 -16.500000 197.000000 2670.000000 --64.833333 -16.500000 201.000000 2670.000000 --64.666667 -16.500000 195.000000 2670.000000 --64.500000 -16.500000 205.000000 2670.000000 --64.333333 -16.500000 211.000000 2670.000000 --64.166667 -16.500000 206.000000 2670.000000 --64.000000 -16.500000 216.000000 2670.000000 --63.833333 -16.500000 203.000000 2670.000000 --63.666667 -16.500000 211.000000 2670.000000 --63.500000 -16.500000 216.000000 2670.000000 --63.333333 -16.500000 216.000000 2670.000000 --63.166667 -16.500000 222.000000 2670.000000 --63.000000 -16.500000 227.000000 2670.000000 --62.833333 -16.500000 240.000000 2670.000000 --62.666667 -16.500000 248.000000 2670.000000 --62.500000 -16.500000 281.000000 2670.000000 --62.333333 -16.500000 353.000000 2670.000000 --62.166667 -16.500000 482.000000 2670.000000 --62.000000 -16.500000 648.000000 2670.000000 --61.833333 -16.500000 441.000000 2670.000000 --61.666667 -16.500000 420.000000 2670.000000 --61.500000 -16.500000 450.000000 2670.000000 --61.333333 -16.500000 438.000000 2670.000000 --61.166667 -16.500000 468.000000 2670.000000 --61.000000 -16.500000 467.000000 2670.000000 --60.833333 -16.500000 487.000000 2670.000000 --60.666667 -16.500000 409.000000 2670.000000 --60.500000 -16.500000 396.000000 2670.000000 --60.333333 -16.500000 306.000000 2670.000000 --60.166667 -16.500000 270.000000 2670.000000 --60.000000 -16.500000 211.000000 2670.000000 --59.833333 -16.500000 213.000000 2670.000000 --59.666667 -16.500000 188.000000 2670.000000 --59.500000 -16.500000 173.000000 2670.000000 --59.333333 -16.500000 193.000000 2670.000000 --59.166667 -16.500000 182.000000 2670.000000 --59.000000 -16.500000 119.000000 2670.000000 --58.833333 -16.500000 112.000000 2670.000000 --58.666667 -16.500000 109.000000 2670.000000 --58.500000 -16.500000 104.000000 2670.000000 --58.333333 -16.500000 100.000000 2670.000000 --58.166667 -16.500000 160.000000 2670.000000 --58.000000 -16.500000 114.000000 2670.000000 --57.833333 -16.500000 113.000000 2670.000000 --57.666667 -16.500000 329.000000 2670.000000 --57.500000 -16.500000 368.000000 2670.000000 --57.333333 -16.500000 112.000000 2670.000000 --57.166667 -16.500000 129.000000 2670.000000 --57.000000 -16.500000 112.000000 2670.000000 --56.833333 -16.500000 118.000000 2670.000000 --56.666667 -16.500000 123.000000 2670.000000 --56.500000 -16.500000 124.000000 2670.000000 --56.333333 -16.500000 127.000000 2670.000000 --56.166667 -16.500000 133.000000 2670.000000 --56.000000 -16.500000 135.000000 2670.000000 --55.833333 -16.500000 138.000000 2670.000000 --55.666667 -16.500000 147.000000 2670.000000 --55.500000 -16.500000 156.000000 2670.000000 --55.333333 -16.500000 176.000000 2670.000000 --55.166667 -16.500000 422.000000 2670.000000 --55.000000 -16.500000 189.000000 2670.000000 --54.833333 -16.500000 224.000000 2670.000000 --54.666667 -16.500000 237.000000 2670.000000 --54.500000 -16.500000 241.000000 2670.000000 --54.333333 -16.500000 278.000000 2670.000000 --54.166667 -16.500000 272.000000 2670.000000 --54.000000 -16.500000 336.000000 2670.000000 --53.833333 -16.500000 542.000000 2670.000000 --53.666667 -16.500000 509.000000 2670.000000 --53.500000 -16.500000 575.000000 2670.000000 --53.333333 -16.500000 565.000000 2670.000000 --53.166667 -16.500000 724.000000 2670.000000 --53.000000 -16.500000 615.000000 2670.000000 --52.833333 -16.500000 552.000000 2670.000000 --52.666667 -16.500000 520.000000 2670.000000 --52.500000 -16.500000 495.000000 2670.000000 --52.333333 -16.500000 616.000000 2670.000000 --52.166667 -16.500000 767.000000 2670.000000 --52.000000 -16.500000 651.000000 2670.000000 --51.833333 -16.500000 385.000000 2670.000000 --51.666667 -16.500000 475.000000 2670.000000 --51.500000 -16.500000 713.000000 2670.000000 --51.333333 -16.500000 484.000000 2670.000000 --51.166667 -16.500000 531.000000 2670.000000 --51.000000 -16.500000 460.000000 2670.000000 --50.833333 -16.500000 637.000000 2670.000000 --50.666667 -16.500000 562.000000 2670.000000 --50.500000 -16.500000 450.000000 2670.000000 --50.333333 -16.500000 578.000000 2670.000000 --50.166667 -16.500000 611.000000 2670.000000 --50.000000 -16.500000 792.000000 2670.000000 --49.833333 -16.500000 703.000000 2670.000000 --49.666667 -16.500000 634.000000 2670.000000 --49.500000 -16.500000 750.000000 2670.000000 --49.333333 -16.500000 751.000000 2670.000000 --49.166667 -16.500000 819.000000 2670.000000 --49.000000 -16.500000 956.000000 2670.000000 --48.833333 -16.500000 1016.000000 2670.000000 --48.666667 -16.500000 904.000000 2670.000000 --48.500000 -16.500000 903.000000 2670.000000 --48.333333 -16.500000 1019.000000 2670.000000 --48.166667 -16.500000 930.000000 2670.000000 --48.000000 -16.500000 809.000000 2670.000000 --47.833333 -16.500000 808.000000 2670.000000 --47.666667 -16.500000 887.000000 2670.000000 --47.500000 -16.500000 881.000000 2670.000000 --47.333333 -16.500000 958.000000 2670.000000 --47.166667 -16.500000 917.000000 2670.000000 --47.000000 -16.500000 872.000000 2670.000000 --46.833333 -16.500000 583.000000 2670.000000 --46.666667 -16.500000 562.000000 2670.000000 --46.500000 -16.500000 578.000000 2670.000000 --46.333333 -16.500000 909.000000 2670.000000 --46.166667 -16.500000 846.000000 2670.000000 --46.000000 -16.500000 749.000000 2670.000000 --45.833333 -16.500000 603.000000 2670.000000 --45.666667 -16.500000 564.000000 2670.000000 --45.500000 -16.500000 611.000000 2670.000000 --45.333333 -16.500000 522.000000 2670.000000 --45.166667 -16.500000 509.000000 2670.000000 --45.000000 -16.500000 530.000000 2670.000000 --44.833333 -16.500000 574.000000 2670.000000 --44.666667 -16.500000 603.000000 2670.000000 --44.500000 -16.500000 725.000000 2670.000000 --44.333333 -16.500000 794.000000 2670.000000 --44.166667 -16.500000 841.000000 2670.000000 --44.000000 -16.500000 902.000000 2670.000000 --43.833333 -16.500000 703.000000 2670.000000 --43.666667 -16.500000 595.000000 2670.000000 --43.500000 -16.500000 663.000000 2670.000000 --43.333333 -16.500000 945.000000 2670.000000 --43.166667 -16.500000 908.000000 2670.000000 --43.000000 -16.500000 822.000000 2670.000000 --42.833333 -16.500000 670.000000 2670.000000 --42.666667 -16.500000 946.000000 2670.000000 --42.500000 -16.500000 632.000000 2670.000000 --42.333333 -16.500000 730.000000 2670.000000 --42.166667 -16.500000 776.000000 2670.000000 --42.000000 -16.500000 866.000000 2670.000000 --41.833333 -16.500000 566.000000 2670.000000 --41.666667 -16.500000 459.000000 2670.000000 --41.500000 -16.500000 336.000000 2670.000000 --41.333333 -16.500000 311.000000 2670.000000 --41.166667 -16.500000 729.000000 2670.000000 --41.000000 -16.500000 519.000000 2670.000000 --40.833333 -16.500000 557.000000 2670.000000 --40.666667 -16.500000 542.000000 2670.000000 --40.500000 -16.500000 409.000000 2670.000000 --40.333333 -16.500000 723.000000 2670.000000 --40.166667 -16.500000 548.000000 2670.000000 --40.000000 -16.500000 277.000000 2670.000000 --65.000000 -16.666667 215.000000 2670.000000 --64.833333 -16.666667 208.000000 2670.000000 --64.666667 -16.666667 201.000000 2670.000000 --64.500000 -16.666667 209.000000 2670.000000 --64.333333 -16.666667 209.000000 2670.000000 --64.166667 -16.666667 234.000000 2670.000000 --64.000000 -16.666667 227.000000 2670.000000 --63.833333 -16.666667 224.000000 2670.000000 --63.666667 -16.666667 213.000000 2670.000000 --63.500000 -16.666667 222.000000 2670.000000 --63.333333 -16.666667 220.000000 2670.000000 --63.166667 -16.666667 230.000000 2670.000000 --63.000000 -16.666667 235.000000 2670.000000 --62.833333 -16.666667 235.000000 2670.000000 --62.666667 -16.666667 241.000000 2670.000000 --62.500000 -16.666667 244.000000 2670.000000 --62.333333 -16.666667 447.000000 2670.000000 --62.166667 -16.666667 554.000000 2670.000000 --62.000000 -16.666667 442.000000 2670.000000 --61.833333 -16.666667 357.000000 2670.000000 --61.666667 -16.666667 441.000000 2670.000000 --61.500000 -16.666667 488.000000 2670.000000 --61.333333 -16.666667 451.000000 2670.000000 --61.166667 -16.666667 426.000000 2670.000000 --61.000000 -16.666667 453.000000 2670.000000 --60.833333 -16.666667 518.000000 2670.000000 --60.666667 -16.666667 464.000000 2670.000000 --60.500000 -16.666667 422.000000 2670.000000 --60.333333 -16.666667 269.000000 2670.000000 --60.166667 -16.666667 281.000000 2670.000000 --60.000000 -16.666667 259.000000 2670.000000 --59.833333 -16.666667 225.000000 2670.000000 --59.666667 -16.666667 227.000000 2670.000000 --59.500000 -16.666667 177.000000 2670.000000 --59.333333 -16.666667 169.000000 2670.000000 --59.166667 -16.666667 128.000000 2670.000000 --59.000000 -16.666667 144.000000 2670.000000 --58.833333 -16.666667 147.000000 2670.000000 --58.666667 -16.666667 103.000000 2670.000000 --58.500000 -16.666667 101.000000 2670.000000 --58.333333 -16.666667 107.000000 2670.000000 --58.166667 -16.666667 108.000000 2670.000000 --58.000000 -16.666667 128.000000 2670.000000 --57.833333 -16.666667 145.000000 2670.000000 --57.666667 -16.666667 141.000000 2670.000000 --57.500000 -16.666667 103.000000 2670.000000 --57.333333 -16.666667 104.000000 2670.000000 --57.166667 -16.666667 107.000000 2670.000000 --57.000000 -16.666667 114.000000 2670.000000 --56.833333 -16.666667 115.000000 2670.000000 --56.666667 -16.666667 119.000000 2670.000000 --56.500000 -16.666667 124.000000 2670.000000 --56.333333 -16.666667 129.000000 2670.000000 --56.166667 -16.666667 131.000000 2670.000000 --56.000000 -16.666667 142.000000 2670.000000 --55.833333 -16.666667 144.000000 2670.000000 --55.666667 -16.666667 148.000000 2670.000000 --55.500000 -16.666667 183.000000 2670.000000 --55.333333 -16.666667 171.000000 2670.000000 --55.166667 -16.666667 176.000000 2670.000000 --55.000000 -16.666667 371.000000 2670.000000 --54.833333 -16.666667 528.000000 2670.000000 --54.666667 -16.666667 464.000000 2670.000000 --54.500000 -16.666667 330.000000 2670.000000 --54.333333 -16.666667 317.000000 2670.000000 --54.166667 -16.666667 540.000000 2670.000000 --54.000000 -16.666667 499.000000 2670.000000 --53.833333 -16.666667 602.000000 2670.000000 --53.666667 -16.666667 677.000000 2670.000000 --53.500000 -16.666667 599.000000 2670.000000 --53.333333 -16.666667 541.000000 2670.000000 --53.166667 -16.666667 686.000000 2670.000000 --53.000000 -16.666667 596.000000 2670.000000 --52.833333 -16.666667 525.000000 2670.000000 --52.666667 -16.666667 533.000000 2670.000000 --52.500000 -16.666667 537.000000 2670.000000 --52.333333 -16.666667 543.000000 2670.000000 --52.166667 -16.666667 661.000000 2670.000000 --52.000000 -16.666667 712.000000 2670.000000 --51.833333 -16.666667 630.000000 2670.000000 --51.666667 -16.666667 668.000000 2670.000000 --51.500000 -16.666667 675.000000 2670.000000 --51.333333 -16.666667 611.000000 2670.000000 --51.166667 -16.666667 598.000000 2670.000000 --51.000000 -16.666667 581.000000 2670.000000 --50.833333 -16.666667 555.000000 2670.000000 --50.666667 -16.666667 787.000000 2670.000000 --50.500000 -16.666667 500.000000 2670.000000 --50.333333 -16.666667 620.000000 2670.000000 --50.166667 -16.666667 649.000000 2670.000000 --50.000000 -16.666667 681.000000 2670.000000 --49.833333 -16.666667 625.000000 2670.000000 --49.666667 -16.666667 609.000000 2670.000000 --49.500000 -16.666667 787.000000 2670.000000 --49.333333 -16.666667 789.000000 2670.000000 --49.166667 -16.666667 752.000000 2670.000000 --49.000000 -16.666667 866.000000 2670.000000 --48.833333 -16.666667 903.000000 2670.000000 --48.666667 -16.666667 992.000000 2670.000000 --48.500000 -16.666667 862.000000 2670.000000 --48.333333 -16.666667 820.000000 2670.000000 --48.166667 -16.666667 926.000000 2670.000000 --48.000000 -16.666667 840.000000 2670.000000 --47.833333 -16.666667 839.000000 2670.000000 --47.666667 -16.666667 976.000000 2670.000000 --47.500000 -16.666667 951.000000 2670.000000 --47.333333 -16.666667 908.000000 2670.000000 --47.166667 -16.666667 926.000000 2670.000000 --47.000000 -16.666667 850.000000 2670.000000 --46.833333 -16.666667 590.000000 2670.000000 --46.666667 -16.666667 592.000000 2670.000000 --46.500000 -16.666667 531.000000 2670.000000 --46.333333 -16.666667 627.000000 2670.000000 --46.166667 -16.666667 748.000000 2670.000000 --46.000000 -16.666667 703.000000 2670.000000 --45.833333 -16.666667 752.000000 2670.000000 --45.666667 -16.666667 649.000000 2670.000000 --45.500000 -16.666667 583.000000 2670.000000 --45.333333 -16.666667 533.000000 2670.000000 --45.166667 -16.666667 478.000000 2670.000000 --45.000000 -16.666667 506.000000 2670.000000 --44.833333 -16.666667 531.000000 2670.000000 --44.666667 -16.666667 715.000000 2670.000000 --44.500000 -16.666667 742.000000 2670.000000 --44.333333 -16.666667 835.000000 2670.000000 --44.166667 -16.666667 801.000000 2670.000000 --44.000000 -16.666667 826.000000 2670.000000 --43.833333 -16.666667 604.000000 2670.000000 --43.666667 -16.666667 603.000000 2670.000000 --43.500000 -16.666667 780.000000 2670.000000 --43.333333 -16.666667 967.000000 2670.000000 --43.166667 -16.666667 782.000000 2670.000000 --43.000000 -16.666667 806.000000 2670.000000 --42.833333 -16.666667 637.000000 2670.000000 --42.666667 -16.666667 786.000000 2670.000000 --42.500000 -16.666667 484.000000 2670.000000 --42.333333 -16.666667 432.000000 2670.000000 --42.166667 -16.666667 398.000000 2670.000000 --42.000000 -16.666667 444.000000 2670.000000 --41.833333 -16.666667 306.000000 2670.000000 --41.666667 -16.666667 712.000000 2670.000000 --41.500000 -16.666667 370.000000 2670.000000 --41.333333 -16.666667 708.000000 2670.000000 --41.166667 -16.666667 677.000000 2670.000000 --41.000000 -16.666667 284.000000 2670.000000 --40.833333 -16.666667 596.000000 2670.000000 --40.666667 -16.666667 639.000000 2670.000000 --40.500000 -16.666667 825.000000 2670.000000 --40.333333 -16.666667 840.000000 2670.000000 --40.166667 -16.666667 444.000000 2670.000000 --40.000000 -16.666667 468.000000 2670.000000 --65.000000 -16.833333 215.000000 2670.000000 --64.833333 -16.833333 200.000000 2670.000000 --64.666667 -16.833333 201.000000 2670.000000 --64.500000 -16.833333 205.000000 2670.000000 --64.333333 -16.833333 226.000000 2670.000000 --64.166667 -16.833333 239.000000 2670.000000 --64.000000 -16.833333 233.000000 2670.000000 --63.833333 -16.833333 224.000000 2670.000000 --63.666667 -16.833333 221.000000 2670.000000 --63.500000 -16.833333 219.000000 2670.000000 --63.333333 -16.833333 228.000000 2670.000000 --63.166667 -16.833333 239.000000 2670.000000 --63.000000 -16.833333 240.000000 2670.000000 --62.833333 -16.833333 243.000000 2670.000000 --62.666667 -16.833333 255.000000 2670.000000 --62.500000 -16.833333 253.000000 2670.000000 --62.333333 -16.833333 247.000000 2670.000000 --62.166667 -16.833333 379.000000 2670.000000 --62.000000 -16.833333 334.000000 2670.000000 --61.833333 -16.833333 398.000000 2670.000000 --61.666667 -16.833333 418.000000 2670.000000 --61.500000 -16.833333 401.000000 2670.000000 --61.333333 -16.833333 389.000000 2670.000000 --61.166667 -16.833333 431.000000 2670.000000 --61.000000 -16.833333 388.000000 2670.000000 --60.833333 -16.833333 401.000000 2670.000000 --60.666667 -16.833333 392.000000 2670.000000 --60.500000 -16.833333 337.000000 2670.000000 --60.333333 -16.833333 308.000000 2670.000000 --60.166667 -16.833333 289.000000 2670.000000 --60.000000 -16.833333 291.000000 2670.000000 --59.833333 -16.833333 212.000000 2670.000000 --59.666667 -16.833333 203.000000 2670.000000 --59.500000 -16.833333 171.000000 2670.000000 --59.333333 -16.833333 158.000000 2670.000000 --59.166667 -16.833333 132.000000 2670.000000 --59.000000 -16.833333 120.000000 2670.000000 --58.833333 -16.833333 111.000000 2670.000000 --58.666667 -16.833333 106.000000 2670.000000 --58.500000 -16.833333 99.000000 2670.000000 --58.333333 -16.833333 103.000000 2670.000000 --58.166667 -16.833333 105.000000 2670.000000 --58.000000 -16.833333 106.000000 2670.000000 --57.833333 -16.833333 108.000000 2670.000000 --57.666667 -16.833333 102.000000 2670.000000 --57.500000 -16.833333 107.000000 2670.000000 --57.333333 -16.833333 103.000000 2670.000000 --57.166667 -16.833333 108.000000 2670.000000 --57.000000 -16.833333 111.000000 2670.000000 --56.833333 -16.833333 113.000000 2670.000000 --56.666667 -16.833333 120.000000 2670.000000 --56.500000 -16.833333 122.000000 2670.000000 --56.333333 -16.833333 131.000000 2670.000000 --56.166667 -16.833333 138.000000 2670.000000 --56.000000 -16.833333 134.000000 2670.000000 --55.833333 -16.833333 139.000000 2670.000000 --55.666667 -16.833333 150.000000 2670.000000 --55.500000 -16.833333 155.000000 2670.000000 --55.333333 -16.833333 163.000000 2670.000000 --55.166667 -16.833333 168.000000 2670.000000 --55.000000 -16.833333 193.000000 2670.000000 --54.833333 -16.833333 475.000000 2670.000000 --54.666667 -16.833333 439.000000 2670.000000 --54.500000 -16.833333 321.000000 2670.000000 --54.333333 -16.833333 359.000000 2670.000000 --54.166667 -16.833333 416.000000 2670.000000 --54.000000 -16.833333 709.000000 2670.000000 --53.833333 -16.833333 747.000000 2670.000000 --53.666667 -16.833333 758.000000 2670.000000 --53.500000 -16.833333 690.000000 2670.000000 --53.333333 -16.833333 549.000000 2670.000000 --53.166667 -16.833333 496.000000 2670.000000 --53.000000 -16.833333 507.000000 2670.000000 --52.833333 -16.833333 456.000000 2670.000000 --52.666667 -16.833333 566.000000 2670.000000 --52.500000 -16.833333 606.000000 2670.000000 --52.333333 -16.833333 566.000000 2670.000000 --52.166667 -16.833333 582.000000 2670.000000 --52.000000 -16.833333 714.000000 2670.000000 --51.833333 -16.833333 658.000000 2670.000000 --51.666667 -16.833333 640.000000 2670.000000 --51.500000 -16.833333 818.000000 2670.000000 --51.333333 -16.833333 645.000000 2670.000000 --51.166667 -16.833333 531.000000 2670.000000 --51.000000 -16.833333 748.000000 2670.000000 --50.833333 -16.833333 583.000000 2670.000000 --50.666667 -16.833333 637.000000 2670.000000 --50.500000 -16.833333 743.000000 2670.000000 --50.333333 -16.833333 578.000000 2670.000000 --50.166667 -16.833333 665.000000 2670.000000 --50.000000 -16.833333 601.000000 2670.000000 --49.833333 -16.833333 654.000000 2670.000000 --49.666667 -16.833333 763.000000 2670.000000 --49.500000 -16.833333 748.000000 2670.000000 --49.333333 -16.833333 894.000000 2670.000000 --49.166667 -16.833333 698.000000 2670.000000 --49.000000 -16.833333 764.000000 2670.000000 --48.833333 -16.833333 874.000000 2670.000000 --48.666667 -16.833333 902.000000 2670.000000 --48.500000 -16.833333 955.000000 2670.000000 --48.333333 -16.833333 906.000000 2670.000000 --48.166667 -16.833333 948.000000 2670.000000 --48.000000 -16.833333 959.000000 2670.000000 --47.833333 -16.833333 852.000000 2670.000000 --47.666667 -16.833333 1140.000000 2670.000000 --47.500000 -16.833333 974.000000 2670.000000 --47.333333 -16.833333 925.000000 2670.000000 --47.166667 -16.833333 870.000000 2670.000000 --47.000000 -16.833333 826.000000 2670.000000 --46.833333 -16.833333 628.000000 2670.000000 --46.666667 -16.833333 545.000000 2670.000000 --46.500000 -16.833333 536.000000 2670.000000 --46.333333 -16.833333 539.000000 2670.000000 --46.166667 -16.833333 550.000000 2670.000000 --46.000000 -16.833333 644.000000 2670.000000 --45.833333 -16.833333 737.000000 2670.000000 --45.666667 -16.833333 678.000000 2670.000000 --45.500000 -16.833333 562.000000 2670.000000 --45.333333 -16.833333 531.000000 2670.000000 --45.166667 -16.833333 547.000000 2670.000000 --45.000000 -16.833333 515.000000 2670.000000 --44.833333 -16.833333 535.000000 2670.000000 --44.666667 -16.833333 694.000000 2670.000000 --44.500000 -16.833333 727.000000 2670.000000 --44.333333 -16.833333 880.000000 2670.000000 --44.166667 -16.833333 918.000000 2670.000000 --44.000000 -16.833333 901.000000 2670.000000 --43.833333 -16.833333 885.000000 2670.000000 --43.666667 -16.833333 662.000000 2670.000000 --43.500000 -16.833333 1112.000000 2670.000000 --43.333333 -16.833333 1159.000000 2670.000000 --43.166667 -16.833333 845.000000 2670.000000 --43.000000 -16.833333 813.000000 2670.000000 --42.833333 -16.833333 671.000000 2670.000000 --42.666667 -16.833333 725.000000 2670.000000 --42.500000 -16.833333 712.000000 2670.000000 --42.333333 -16.833333 381.000000 2670.000000 --42.166667 -16.833333 430.000000 2670.000000 --42.000000 -16.833333 313.000000 2670.000000 --41.833333 -16.833333 375.000000 2670.000000 --41.666667 -16.833333 811.000000 2670.000000 --41.500000 -16.833333 791.000000 2670.000000 --41.333333 -16.833333 759.000000 2670.000000 --41.166667 -16.833333 814.000000 2670.000000 --41.000000 -16.833333 409.000000 2670.000000 --40.833333 -16.833333 586.000000 2670.000000 --40.666667 -16.833333 851.000000 2670.000000 --40.500000 -16.833333 492.000000 2670.000000 --40.333333 -16.833333 448.000000 2670.000000 --40.166667 -16.833333 316.000000 2670.000000 --40.000000 -16.833333 191.000000 2670.000000 --65.000000 -17.000000 235.000000 2670.000000 --64.833333 -17.000000 215.000000 2670.000000 --64.666667 -17.000000 211.000000 2670.000000 --64.500000 -17.000000 219.000000 2670.000000 --64.333333 -17.000000 231.000000 2670.000000 --64.166667 -17.000000 236.000000 2670.000000 --64.000000 -17.000000 251.000000 2670.000000 --63.833333 -17.000000 249.000000 2670.000000 --63.666667 -17.000000 304.000000 2670.000000 --63.500000 -17.000000 237.000000 2670.000000 --63.333333 -17.000000 245.000000 2670.000000 --63.166667 -17.000000 240.000000 2670.000000 --63.000000 -17.000000 252.000000 2670.000000 --62.833333 -17.000000 249.000000 2670.000000 --62.666667 -17.000000 248.000000 2670.000000 --62.500000 -17.000000 251.000000 2670.000000 --62.333333 -17.000000 249.000000 2670.000000 --62.166667 -17.000000 256.000000 2670.000000 --62.000000 -17.000000 291.000000 2670.000000 --61.833333 -17.000000 320.000000 2670.000000 --61.666667 -17.000000 324.000000 2670.000000 --61.500000 -17.000000 435.000000 2670.000000 --61.333333 -17.000000 435.000000 2670.000000 --61.166667 -17.000000 380.000000 2670.000000 --61.000000 -17.000000 363.000000 2670.000000 --60.833333 -17.000000 315.000000 2670.000000 --60.666667 -17.000000 301.000000 2670.000000 --60.500000 -17.000000 320.000000 2670.000000 --60.333333 -17.000000 342.000000 2670.000000 --60.166667 -17.000000 369.000000 2670.000000 --60.000000 -17.000000 247.000000 2670.000000 --59.833333 -17.000000 223.000000 2670.000000 --59.666667 -17.000000 242.000000 2670.000000 --59.500000 -17.000000 234.000000 2670.000000 --59.333333 -17.000000 154.000000 2670.000000 --59.166667 -17.000000 134.000000 2670.000000 --59.000000 -17.000000 122.000000 2670.000000 --58.833333 -17.000000 119.000000 2670.000000 --58.666667 -17.000000 104.000000 2670.000000 --58.500000 -17.000000 99.000000 2670.000000 --58.333333 -17.000000 98.000000 2670.000000 --58.166667 -17.000000 100.000000 2670.000000 --58.000000 -17.000000 102.000000 2670.000000 --57.833333 -17.000000 103.000000 2670.000000 --57.666667 -17.000000 103.000000 2670.000000 --57.500000 -17.000000 101.000000 2670.000000 --57.333333 -17.000000 100.000000 2670.000000 --57.166667 -17.000000 104.000000 2670.000000 --57.000000 -17.000000 111.000000 2670.000000 --56.833333 -17.000000 115.000000 2670.000000 --56.666667 -17.000000 112.000000 2670.000000 --56.500000 -17.000000 115.000000 2670.000000 --56.333333 -17.000000 118.000000 2670.000000 --56.166667 -17.000000 127.000000 2670.000000 --56.000000 -17.000000 134.000000 2670.000000 --55.833333 -17.000000 134.000000 2670.000000 --55.666667 -17.000000 143.000000 2670.000000 --55.500000 -17.000000 150.000000 2670.000000 --55.333333 -17.000000 156.000000 2670.000000 --55.166667 -17.000000 157.000000 2670.000000 --55.000000 -17.000000 177.000000 2670.000000 --54.833333 -17.000000 457.000000 2670.000000 --54.666667 -17.000000 467.000000 2670.000000 --54.500000 -17.000000 339.000000 2670.000000 --54.333333 -17.000000 393.000000 2670.000000 --54.166667 -17.000000 747.000000 2670.000000 --54.000000 -17.000000 639.000000 2670.000000 --53.833333 -17.000000 649.000000 2670.000000 --53.666667 -17.000000 693.000000 2670.000000 --53.500000 -17.000000 819.000000 2670.000000 --53.333333 -17.000000 819.000000 2670.000000 --53.166667 -17.000000 522.000000 2670.000000 --53.000000 -17.000000 524.000000 2670.000000 --52.833333 -17.000000 481.000000 2670.000000 --52.666667 -17.000000 542.000000 2670.000000 --52.500000 -17.000000 608.000000 2670.000000 --52.333333 -17.000000 591.000000 2670.000000 --52.166667 -17.000000 646.000000 2670.000000 --52.000000 -17.000000 643.000000 2670.000000 --51.833333 -17.000000 738.000000 2670.000000 --51.666667 -17.000000 810.000000 2670.000000 --51.500000 -17.000000 600.000000 2670.000000 --51.333333 -17.000000 714.000000 2670.000000 --51.166667 -17.000000 538.000000 2670.000000 --51.000000 -17.000000 751.000000 2670.000000 --50.833333 -17.000000 829.000000 2670.000000 --50.666667 -17.000000 676.000000 2670.000000 --50.500000 -17.000000 691.000000 2670.000000 --50.333333 -17.000000 585.000000 2670.000000 --50.166667 -17.000000 672.000000 2670.000000 --50.000000 -17.000000 561.000000 2670.000000 --49.833333 -17.000000 634.000000 2670.000000 --49.666667 -17.000000 705.000000 2670.000000 --49.500000 -17.000000 758.000000 2670.000000 --49.333333 -17.000000 866.000000 2670.000000 --49.166667 -17.000000 759.000000 2670.000000 --49.000000 -17.000000 744.000000 2670.000000 --48.833333 -17.000000 834.000000 2670.000000 --48.666667 -17.000000 937.000000 2670.000000 --48.500000 -17.000000 830.000000 2670.000000 --48.333333 -17.000000 860.000000 2670.000000 --48.166667 -17.000000 821.000000 2670.000000 --48.000000 -17.000000 859.000000 2670.000000 --47.833333 -17.000000 816.000000 2670.000000 --47.666667 -17.000000 954.000000 2670.000000 --47.500000 -17.000000 921.000000 2670.000000 --47.333333 -17.000000 865.000000 2670.000000 --47.166667 -17.000000 836.000000 2670.000000 --47.000000 -17.000000 881.000000 2670.000000 --46.833333 -17.000000 590.000000 2670.000000 --46.666667 -17.000000 584.000000 2670.000000 --46.500000 -17.000000 527.000000 2670.000000 --46.333333 -17.000000 529.000000 2670.000000 --46.166667 -17.000000 502.000000 2670.000000 --46.000000 -17.000000 559.000000 2670.000000 --45.833333 -17.000000 591.000000 2670.000000 --45.666667 -17.000000 608.000000 2670.000000 --45.500000 -17.000000 509.000000 2670.000000 --45.333333 -17.000000 523.000000 2670.000000 --45.166667 -17.000000 657.000000 2670.000000 --45.000000 -17.000000 679.000000 2670.000000 --44.833333 -17.000000 479.000000 2670.000000 --44.666667 -17.000000 652.000000 2670.000000 --44.500000 -17.000000 675.000000 2670.000000 --44.333333 -17.000000 786.000000 2670.000000 --44.166667 -17.000000 853.000000 2670.000000 --44.000000 -17.000000 912.000000 2670.000000 --43.833333 -17.000000 817.000000 2670.000000 --43.666667 -17.000000 793.000000 2670.000000 --43.500000 -17.000000 1034.000000 2670.000000 --43.333333 -17.000000 1273.000000 2670.000000 --43.166667 -17.000000 897.000000 2670.000000 --43.000000 -17.000000 880.000000 2670.000000 --42.833333 -17.000000 799.000000 2670.000000 --42.666667 -17.000000 780.000000 2670.000000 --42.500000 -17.000000 550.000000 2670.000000 --42.333333 -17.000000 436.000000 2670.000000 --42.166667 -17.000000 422.000000 2670.000000 --42.000000 -17.000000 602.000000 2670.000000 --41.833333 -17.000000 599.000000 2670.000000 --41.666667 -17.000000 940.000000 2670.000000 --41.500000 -17.000000 877.000000 2670.000000 --41.333333 -17.000000 861.000000 2670.000000 --41.166667 -17.000000 769.000000 2670.000000 --41.000000 -17.000000 362.000000 2670.000000 --40.833333 -17.000000 335.000000 2670.000000 --40.666667 -17.000000 338.000000 2670.000000 --40.500000 -17.000000 286.000000 2670.000000 --40.333333 -17.000000 625.000000 2670.000000 --40.166667 -17.000000 624.000000 2670.000000 --40.000000 -17.000000 411.000000 2670.000000 --65.000000 -17.166667 349.000000 2670.000000 --64.833333 -17.166667 243.000000 2670.000000 --64.666667 -17.166667 230.000000 2670.000000 --64.500000 -17.166667 229.000000 2670.000000 --64.333333 -17.166667 242.000000 2670.000000 --64.166667 -17.166667 252.000000 2670.000000 --64.000000 -17.166667 262.000000 2670.000000 --63.833333 -17.166667 265.000000 2670.000000 --63.666667 -17.166667 265.000000 2670.000000 --63.500000 -17.166667 255.000000 2670.000000 --63.333333 -17.166667 265.000000 2670.000000 --63.166667 -17.166667 263.000000 2670.000000 --63.000000 -17.166667 255.000000 2670.000000 --62.833333 -17.166667 259.000000 2670.000000 --62.666667 -17.166667 265.000000 2670.000000 --62.500000 -17.166667 260.000000 2670.000000 --62.333333 -17.166667 259.000000 2670.000000 --62.166667 -17.166667 261.000000 2670.000000 --62.000000 -17.166667 257.000000 2670.000000 --61.833333 -17.166667 266.000000 2670.000000 --61.666667 -17.166667 252.000000 2670.000000 --61.500000 -17.166667 300.000000 2670.000000 --61.333333 -17.166667 351.000000 2670.000000 --61.166667 -17.166667 316.000000 2670.000000 --61.000000 -17.166667 291.000000 2670.000000 --60.833333 -17.166667 290.000000 2670.000000 --60.666667 -17.166667 338.000000 2670.000000 --60.500000 -17.166667 308.000000 2670.000000 --60.333333 -17.166667 330.000000 2670.000000 --60.166667 -17.166667 356.000000 2670.000000 --60.000000 -17.166667 413.000000 2670.000000 --59.833333 -17.166667 284.000000 2670.000000 --59.666667 -17.166667 256.000000 2670.000000 --59.500000 -17.166667 191.000000 2670.000000 --59.333333 -17.166667 166.000000 2670.000000 --59.166667 -17.166667 147.000000 2670.000000 --59.000000 -17.166667 131.000000 2670.000000 --58.833333 -17.166667 123.000000 2670.000000 --58.666667 -17.166667 116.000000 2670.000000 --58.500000 -17.166667 105.000000 2670.000000 --58.333333 -17.166667 97.000000 2670.000000 --58.166667 -17.166667 99.000000 2670.000000 --58.000000 -17.166667 98.000000 2670.000000 --57.833333 -17.166667 98.000000 2670.000000 --57.666667 -17.166667 99.000000 2670.000000 --57.500000 -17.166667 99.000000 2670.000000 --57.333333 -17.166667 100.000000 2670.000000 --57.166667 -17.166667 103.000000 2670.000000 --57.000000 -17.166667 109.000000 2670.000000 --56.833333 -17.166667 109.000000 2670.000000 --56.666667 -17.166667 110.000000 2670.000000 --56.500000 -17.166667 112.000000 2670.000000 --56.333333 -17.166667 119.000000 2670.000000 --56.166667 -17.166667 121.000000 2670.000000 --56.000000 -17.166667 122.000000 2670.000000 --55.833333 -17.166667 131.000000 2670.000000 --55.666667 -17.166667 138.000000 2670.000000 --55.500000 -17.166667 144.000000 2670.000000 --55.333333 -17.166667 145.000000 2670.000000 --55.166667 -17.166667 155.000000 2670.000000 --55.000000 -17.166667 166.000000 2670.000000 --54.833333 -17.166667 442.000000 2670.000000 --54.666667 -17.166667 510.000000 2670.000000 --54.500000 -17.166667 591.000000 2670.000000 --54.333333 -17.166667 646.000000 2670.000000 --54.166667 -17.166667 556.000000 2670.000000 --54.000000 -17.166667 525.000000 2670.000000 --53.833333 -17.166667 613.000000 2670.000000 --53.666667 -17.166667 704.000000 2670.000000 --53.500000 -17.166667 760.000000 2670.000000 --53.333333 -17.166667 736.000000 2670.000000 --53.166667 -17.166667 676.000000 2670.000000 --53.000000 -17.166667 745.000000 2670.000000 --52.833333 -17.166667 516.000000 2670.000000 --52.666667 -17.166667 548.000000 2670.000000 --52.500000 -17.166667 565.000000 2670.000000 --52.333333 -17.166667 643.000000 2670.000000 --52.166667 -17.166667 656.000000 2670.000000 --52.000000 -17.166667 776.000000 2670.000000 --51.833333 -17.166667 827.000000 2670.000000 --51.666667 -17.166667 931.000000 2670.000000 --51.500000 -17.166667 703.000000 2670.000000 --51.333333 -17.166667 608.000000 2670.000000 --51.166667 -17.166667 813.000000 2670.000000 --51.000000 -17.166667 774.000000 2670.000000 --50.833333 -17.166667 698.000000 2670.000000 --50.666667 -17.166667 625.000000 2670.000000 --50.500000 -17.166667 639.000000 2670.000000 --50.333333 -17.166667 550.000000 2670.000000 --50.166667 -17.166667 581.000000 2670.000000 --50.000000 -17.166667 585.000000 2670.000000 --49.833333 -17.166667 682.000000 2670.000000 --49.666667 -17.166667 554.000000 2670.000000 --49.500000 -17.166667 839.000000 2670.000000 --49.333333 -17.166667 758.000000 2670.000000 --49.166667 -17.166667 735.000000 2670.000000 --49.000000 -17.166667 776.000000 2670.000000 --48.833333 -17.166667 905.000000 2670.000000 --48.666667 -17.166667 745.000000 2670.000000 --48.500000 -17.166667 864.000000 2670.000000 --48.333333 -17.166667 885.000000 2670.000000 --48.166667 -17.166667 748.000000 2670.000000 --48.000000 -17.166667 717.000000 2670.000000 --47.833333 -17.166667 828.000000 2670.000000 --47.666667 -17.166667 852.000000 2670.000000 --47.500000 -17.166667 886.000000 2670.000000 --47.333333 -17.166667 801.000000 2670.000000 --47.166667 -17.166667 686.000000 2670.000000 --47.000000 -17.166667 768.000000 2670.000000 --46.833333 -17.166667 602.000000 2670.000000 --46.666667 -17.166667 576.000000 2670.000000 --46.500000 -17.166667 539.000000 2670.000000 --46.333333 -17.166667 561.000000 2670.000000 --46.166667 -17.166667 525.000000 2670.000000 --46.000000 -17.166667 690.000000 2670.000000 --45.833333 -17.166667 505.000000 2670.000000 --45.666667 -17.166667 541.000000 2670.000000 --45.500000 -17.166667 588.000000 2670.000000 --45.333333 -17.166667 629.000000 2670.000000 --45.166667 -17.166667 696.000000 2670.000000 --45.000000 -17.166667 700.000000 2670.000000 --44.833333 -17.166667 479.000000 2670.000000 --44.666667 -17.166667 493.000000 2670.000000 --44.500000 -17.166667 537.000000 2670.000000 --44.333333 -17.166667 659.000000 2670.000000 --44.166667 -17.166667 890.000000 2670.000000 --44.000000 -17.166667 656.000000 2670.000000 --43.833333 -17.166667 708.000000 2670.000000 --43.666667 -17.166667 760.000000 2670.000000 --43.500000 -17.166667 729.000000 2670.000000 --43.333333 -17.166667 1126.000000 2670.000000 --43.166667 -17.166667 942.000000 2670.000000 --43.000000 -17.166667 643.000000 2670.000000 --42.833333 -17.166667 903.000000 2670.000000 --42.666667 -17.166667 663.000000 2670.000000 --42.500000 -17.166667 628.000000 2670.000000 --42.333333 -17.166667 765.000000 2670.000000 --42.166667 -17.166667 793.000000 2670.000000 --42.000000 -17.166667 715.000000 2670.000000 --41.833333 -17.166667 874.000000 2670.000000 --41.666667 -17.166667 906.000000 2670.000000 --41.500000 -17.166667 659.000000 2670.000000 --41.333333 -17.166667 872.000000 2670.000000 --41.166667 -17.166667 589.000000 2670.000000 --41.000000 -17.166667 430.000000 2670.000000 --40.833333 -17.166667 287.000000 2670.000000 --40.666667 -17.166667 327.000000 2670.000000 --40.500000 -17.166667 296.000000 2670.000000 --40.333333 -17.166667 193.000000 2670.000000 --40.166667 -17.166667 259.000000 2670.000000 --40.000000 -17.166667 169.000000 2670.000000 --65.000000 -17.333333 843.000000 2670.000000 --64.833333 -17.333333 766.000000 2670.000000 --64.666667 -17.333333 974.000000 2670.000000 --64.500000 -17.333333 429.000000 2670.000000 --64.333333 -17.333333 298.000000 2670.000000 --64.166667 -17.333333 267.000000 2670.000000 --64.000000 -17.333333 285.000000 2670.000000 --63.833333 -17.333333 295.000000 2670.000000 --63.666667 -17.333333 295.000000 2670.000000 --63.500000 -17.333333 287.000000 2670.000000 --63.333333 -17.333333 290.000000 2670.000000 --63.166667 -17.333333 295.000000 2670.000000 --63.000000 -17.333333 276.000000 2670.000000 --62.833333 -17.333333 266.000000 2670.000000 --62.666667 -17.333333 270.000000 2670.000000 --62.500000 -17.333333 273.000000 2670.000000 --62.333333 -17.333333 269.000000 2670.000000 --62.166667 -17.333333 266.000000 2670.000000 --62.000000 -17.333333 267.000000 2670.000000 --61.833333 -17.333333 267.000000 2670.000000 --61.666667 -17.333333 264.000000 2670.000000 --61.500000 -17.333333 259.000000 2670.000000 --61.333333 -17.333333 377.000000 2670.000000 --61.166667 -17.333333 260.000000 2670.000000 --61.000000 -17.333333 262.000000 2670.000000 --60.833333 -17.333333 341.000000 2670.000000 --60.666667 -17.333333 275.000000 2670.000000 --60.500000 -17.333333 333.000000 2670.000000 --60.333333 -17.333333 323.000000 2670.000000 --60.166667 -17.333333 349.000000 2670.000000 --60.000000 -17.333333 402.000000 2670.000000 --59.833333 -17.333333 382.000000 2670.000000 --59.666667 -17.333333 291.000000 2670.000000 --59.500000 -17.333333 257.000000 2670.000000 --59.333333 -17.333333 222.000000 2670.000000 --59.166667 -17.333333 157.000000 2670.000000 --59.000000 -17.333333 144.000000 2670.000000 --58.833333 -17.333333 129.000000 2670.000000 --58.666667 -17.333333 113.000000 2670.000000 --58.500000 -17.333333 100.000000 2670.000000 --58.333333 -17.333333 97.000000 2670.000000 --58.166667 -17.333333 94.000000 2670.000000 --58.000000 -17.333333 96.000000 2670.000000 --57.833333 -17.333333 95.000000 2670.000000 --57.666667 -17.333333 95.000000 2670.000000 --57.500000 -17.333333 97.000000 2670.000000 --57.333333 -17.333333 103.000000 2670.000000 --57.166667 -17.333333 100.000000 2670.000000 --57.000000 -17.333333 107.000000 2670.000000 --56.833333 -17.333333 106.000000 2670.000000 --56.666667 -17.333333 114.000000 2670.000000 --56.500000 -17.333333 116.000000 2670.000000 --56.333333 -17.333333 115.000000 2670.000000 --56.166667 -17.333333 119.000000 2670.000000 --56.000000 -17.333333 126.000000 2670.000000 --55.833333 -17.333333 129.000000 2670.000000 --55.666667 -17.333333 133.000000 2670.000000 --55.500000 -17.333333 136.000000 2670.000000 --55.333333 -17.333333 142.000000 2670.000000 --55.166667 -17.333333 150.000000 2670.000000 --55.000000 -17.333333 170.000000 2670.000000 --54.833333 -17.333333 463.000000 2670.000000 --54.666667 -17.333333 543.000000 2670.000000 --54.500000 -17.333333 514.000000 2670.000000 --54.333333 -17.333333 554.000000 2670.000000 --54.166667 -17.333333 578.000000 2670.000000 --54.000000 -17.333333 671.000000 2670.000000 --53.833333 -17.333333 648.000000 2670.000000 --53.666667 -17.333333 718.000000 2670.000000 --53.500000 -17.333333 702.000000 2670.000000 --53.333333 -17.333333 682.000000 2670.000000 --53.166667 -17.333333 726.000000 2670.000000 --53.000000 -17.333333 745.000000 2670.000000 --52.833333 -17.333333 876.000000 2670.000000 --52.666667 -17.333333 883.000000 2670.000000 --52.500000 -17.333333 938.000000 2670.000000 --52.333333 -17.333333 898.000000 2670.000000 --52.166667 -17.333333 818.000000 2670.000000 --52.000000 -17.333333 763.000000 2670.000000 --51.833333 -17.333333 954.000000 2670.000000 --51.666667 -17.333333 998.000000 2670.000000 --51.500000 -17.333333 934.000000 2670.000000 --51.333333 -17.333333 800.000000 2670.000000 --51.166667 -17.333333 854.000000 2670.000000 --51.000000 -17.333333 693.000000 2670.000000 --50.833333 -17.333333 743.000000 2670.000000 --50.666667 -17.333333 590.000000 2670.000000 --50.500000 -17.333333 582.000000 2670.000000 --50.333333 -17.333333 591.000000 2670.000000 --50.166667 -17.333333 522.000000 2670.000000 --50.000000 -17.333333 527.000000 2670.000000 --49.833333 -17.333333 568.000000 2670.000000 --49.666667 -17.333333 565.000000 2670.000000 --49.500000 -17.333333 743.000000 2670.000000 --49.333333 -17.333333 686.000000 2670.000000 --49.166667 -17.333333 668.000000 2670.000000 --49.000000 -17.333333 748.000000 2670.000000 --48.833333 -17.333333 775.000000 2670.000000 --48.666667 -17.333333 780.000000 2670.000000 --48.500000 -17.333333 719.000000 2670.000000 --48.333333 -17.333333 775.000000 2670.000000 --48.166667 -17.333333 728.000000 2670.000000 --48.000000 -17.333333 943.000000 2670.000000 --47.833333 -17.333333 958.000000 2670.000000 --47.666667 -17.333333 902.000000 2670.000000 --47.500000 -17.333333 797.000000 2670.000000 --47.333333 -17.333333 870.000000 2670.000000 --47.166667 -17.333333 855.000000 2670.000000 --47.000000 -17.333333 603.000000 2670.000000 --46.833333 -17.333333 681.000000 2670.000000 --46.666667 -17.333333 652.000000 2670.000000 --46.500000 -17.333333 517.000000 2670.000000 --46.333333 -17.333333 539.000000 2670.000000 --46.166667 -17.333333 528.000000 2670.000000 --46.000000 -17.333333 538.000000 2670.000000 --45.833333 -17.333333 578.000000 2670.000000 --45.666667 -17.333333 705.000000 2670.000000 --45.500000 -17.333333 617.000000 2670.000000 --45.333333 -17.333333 638.000000 2670.000000 --45.166667 -17.333333 744.000000 2670.000000 --45.000000 -17.333333 530.000000 2670.000000 --44.833333 -17.333333 585.000000 2670.000000 --44.666667 -17.333333 557.000000 2670.000000 --44.500000 -17.333333 564.000000 2670.000000 --44.333333 -17.333333 624.000000 2670.000000 --44.166667 -17.333333 637.000000 2670.000000 --44.000000 -17.333333 710.000000 2670.000000 --43.833333 -17.333333 881.000000 2670.000000 --43.666667 -17.333333 857.000000 2670.000000 --43.500000 -17.333333 832.000000 2670.000000 --43.333333 -17.333333 655.000000 2670.000000 --43.166667 -17.333333 720.000000 2670.000000 --43.000000 -17.333333 820.000000 2670.000000 --42.833333 -17.333333 617.000000 2670.000000 --42.666667 -17.333333 824.000000 2670.000000 --42.500000 -17.333333 822.000000 2670.000000 --42.333333 -17.333333 586.000000 2670.000000 --42.166667 -17.333333 807.000000 2670.000000 --42.000000 -17.333333 881.000000 2670.000000 --41.833333 -17.333333 914.000000 2670.000000 --41.666667 -17.333333 744.000000 2670.000000 --41.500000 -17.333333 687.000000 2670.000000 --41.333333 -17.333333 387.000000 2670.000000 --41.166667 -17.333333 483.000000 2670.000000 --41.000000 -17.333333 303.000000 2670.000000 --40.833333 -17.333333 330.000000 2670.000000 --40.666667 -17.333333 228.000000 2670.000000 --40.500000 -17.333333 230.000000 2670.000000 --40.333333 -17.333333 217.000000 2670.000000 --40.166667 -17.333333 215.000000 2670.000000 --40.000000 -17.333333 196.000000 2670.000000 --65.000000 -17.500000 1156.000000 2670.000000 --64.833333 -17.500000 1576.000000 2670.000000 --64.666667 -17.500000 775.000000 2670.000000 --64.500000 -17.500000 1004.000000 2670.000000 --64.333333 -17.500000 705.000000 2670.000000 --64.166667 -17.500000 1079.000000 2670.000000 --64.000000 -17.500000 441.000000 2670.000000 --63.833333 -17.500000 345.000000 2670.000000 --63.666667 -17.500000 349.000000 2670.000000 --63.500000 -17.500000 338.000000 2670.000000 --63.333333 -17.500000 347.000000 2670.000000 --63.166667 -17.500000 332.000000 2670.000000 --63.000000 -17.500000 313.000000 2670.000000 --62.833333 -17.500000 289.000000 2670.000000 --62.666667 -17.500000 277.000000 2670.000000 --62.500000 -17.500000 277.000000 2670.000000 --62.333333 -17.500000 275.000000 2670.000000 --62.166667 -17.500000 274.000000 2670.000000 --62.000000 -17.500000 278.000000 2670.000000 --61.833333 -17.500000 272.000000 2670.000000 --61.666667 -17.500000 270.000000 2670.000000 --61.500000 -17.500000 254.000000 2670.000000 --61.333333 -17.500000 251.000000 2670.000000 --61.166667 -17.500000 262.000000 2670.000000 --61.000000 -17.500000 265.000000 2670.000000 --60.833333 -17.500000 256.000000 2670.000000 --60.666667 -17.500000 267.000000 2670.000000 --60.500000 -17.500000 301.000000 2670.000000 --60.333333 -17.500000 324.000000 2670.000000 --60.166667 -17.500000 409.000000 2670.000000 --60.000000 -17.500000 364.000000 2670.000000 --59.833333 -17.500000 379.000000 2670.000000 --59.666667 -17.500000 336.000000 2670.000000 --59.500000 -17.500000 295.000000 2670.000000 --59.333333 -17.500000 236.000000 2670.000000 --59.166667 -17.500000 564.000000 2670.000000 --59.000000 -17.500000 153.000000 2670.000000 --58.833333 -17.500000 138.000000 2670.000000 --58.666667 -17.500000 173.000000 2670.000000 --58.500000 -17.500000 118.000000 2670.000000 --58.333333 -17.500000 103.000000 2670.000000 --58.166667 -17.500000 106.000000 2670.000000 --58.000000 -17.500000 95.000000 2670.000000 --57.833333 -17.500000 93.000000 2670.000000 --57.666667 -17.500000 95.000000 2670.000000 --57.500000 -17.500000 94.000000 2670.000000 --57.333333 -17.500000 96.000000 2670.000000 --57.166667 -17.500000 98.000000 2670.000000 --57.000000 -17.500000 108.000000 2670.000000 --56.833333 -17.500000 105.000000 2670.000000 --56.666667 -17.500000 110.000000 2670.000000 --56.500000 -17.500000 116.000000 2670.000000 --56.333333 -17.500000 118.000000 2670.000000 --56.166667 -17.500000 120.000000 2670.000000 --56.000000 -17.500000 125.000000 2670.000000 --55.833333 -17.500000 132.000000 2670.000000 --55.666667 -17.500000 135.000000 2670.000000 --55.500000 -17.500000 138.000000 2670.000000 --55.333333 -17.500000 142.000000 2670.000000 --55.166667 -17.500000 325.000000 2670.000000 --55.000000 -17.500000 214.000000 2670.000000 --54.833333 -17.500000 491.000000 2670.000000 --54.666667 -17.500000 417.000000 2670.000000 --54.500000 -17.500000 498.000000 2670.000000 --54.333333 -17.500000 589.000000 2670.000000 --54.166667 -17.500000 669.000000 2670.000000 --54.000000 -17.500000 630.000000 2670.000000 --53.833333 -17.500000 648.000000 2670.000000 --53.666667 -17.500000 733.000000 2670.000000 --53.500000 -17.500000 613.000000 2670.000000 --53.333333 -17.500000 756.000000 2670.000000 --53.166667 -17.500000 745.000000 2670.000000 --53.000000 -17.500000 720.000000 2670.000000 --52.833333 -17.500000 927.000000 2670.000000 --52.666667 -17.500000 856.000000 2670.000000 --52.500000 -17.500000 779.000000 2670.000000 --52.333333 -17.500000 910.000000 2670.000000 --52.166667 -17.500000 843.000000 2670.000000 --52.000000 -17.500000 785.000000 2670.000000 --51.833333 -17.500000 860.000000 2670.000000 --51.666667 -17.500000 918.000000 2670.000000 --51.500000 -17.500000 926.000000 2670.000000 --51.333333 -17.500000 930.000000 2670.000000 --51.166667 -17.500000 883.000000 2670.000000 --51.000000 -17.500000 814.000000 2670.000000 --50.833333 -17.500000 705.000000 2670.000000 --50.666667 -17.500000 602.000000 2670.000000 --50.500000 -17.500000 540.000000 2670.000000 --50.333333 -17.500000 498.000000 2670.000000 --50.166667 -17.500000 492.000000 2670.000000 --50.000000 -17.500000 496.000000 2670.000000 --49.833333 -17.500000 589.000000 2670.000000 --49.666667 -17.500000 507.000000 2670.000000 --49.500000 -17.500000 647.000000 2670.000000 --49.333333 -17.500000 657.000000 2670.000000 --49.166667 -17.500000 685.000000 2670.000000 --49.000000 -17.500000 734.000000 2670.000000 --48.833333 -17.500000 745.000000 2670.000000 --48.666667 -17.500000 731.000000 2670.000000 --48.500000 -17.500000 673.000000 2670.000000 --48.333333 -17.500000 770.000000 2670.000000 --48.166667 -17.500000 818.000000 2670.000000 --48.000000 -17.500000 878.000000 2670.000000 --47.833333 -17.500000 923.000000 2670.000000 --47.666667 -17.500000 850.000000 2670.000000 --47.500000 -17.500000 860.000000 2670.000000 --47.333333 -17.500000 983.000000 2670.000000 --47.166667 -17.500000 955.000000 2670.000000 --47.000000 -17.500000 628.000000 2670.000000 --46.833333 -17.500000 579.000000 2670.000000 --46.666667 -17.500000 567.000000 2670.000000 --46.500000 -17.500000 529.000000 2670.000000 --46.333333 -17.500000 554.000000 2670.000000 --46.166667 -17.500000 556.000000 2670.000000 --46.000000 -17.500000 550.000000 2670.000000 --45.833333 -17.500000 685.000000 2670.000000 --45.666667 -17.500000 613.000000 2670.000000 --45.500000 -17.500000 722.000000 2670.000000 --45.333333 -17.500000 866.000000 2670.000000 --45.166667 -17.500000 881.000000 2670.000000 --45.000000 -17.500000 521.000000 2670.000000 --44.833333 -17.500000 628.000000 2670.000000 --44.666667 -17.500000 516.000000 2670.000000 --44.500000 -17.500000 993.000000 2670.000000 --44.333333 -17.500000 740.000000 2670.000000 --44.166667 -17.500000 950.000000 2670.000000 --44.000000 -17.500000 625.000000 2670.000000 --43.833333 -17.500000 666.000000 2670.000000 --43.666667 -17.500000 949.000000 2670.000000 --43.500000 -17.500000 653.000000 2670.000000 --43.333333 -17.500000 651.000000 2670.000000 --43.166667 -17.500000 861.000000 2670.000000 --43.000000 -17.500000 722.000000 2670.000000 --42.833333 -17.500000 763.000000 2670.000000 --42.666667 -17.500000 669.000000 2670.000000 --42.500000 -17.500000 817.000000 2670.000000 --42.333333 -17.500000 998.000000 2670.000000 --42.166667 -17.500000 681.000000 2670.000000 --42.000000 -17.500000 827.000000 2670.000000 --41.833333 -17.500000 963.000000 2670.000000 --41.666667 -17.500000 810.000000 2670.000000 --41.500000 -17.500000 581.000000 2670.000000 --41.333333 -17.500000 293.000000 2670.000000 --41.166667 -17.500000 439.000000 2670.000000 --41.000000 -17.500000 278.000000 2670.000000 --40.833333 -17.500000 327.000000 2670.000000 --40.666667 -17.500000 230.000000 2670.000000 --40.500000 -17.500000 317.000000 2670.000000 --40.333333 -17.500000 241.000000 2670.000000 --40.166667 -17.500000 203.000000 2670.000000 --40.000000 -17.500000 168.000000 2670.000000 --65.000000 -17.666667 3295.000000 2670.000000 --64.833333 -17.666667 3692.000000 2670.000000 --64.666667 -17.666667 2116.000000 2670.000000 --64.500000 -17.666667 1733.000000 2670.000000 --64.333333 -17.666667 1817.000000 2670.000000 --64.166667 -17.666667 1102.000000 2670.000000 --64.000000 -17.666667 957.000000 2670.000000 --63.833333 -17.666667 899.000000 2670.000000 --63.666667 -17.666667 420.000000 2670.000000 --63.500000 -17.666667 422.000000 2670.000000 --63.333333 -17.666667 403.000000 2670.000000 --63.166667 -17.666667 387.000000 2670.000000 --63.000000 -17.666667 352.000000 2670.000000 --62.833333 -17.666667 306.000000 2670.000000 --62.666667 -17.666667 289.000000 2670.000000 --62.500000 -17.666667 289.000000 2670.000000 --62.333333 -17.666667 282.000000 2670.000000 --62.166667 -17.666667 286.000000 2670.000000 --62.000000 -17.666667 278.000000 2670.000000 --61.833333 -17.666667 278.000000 2670.000000 --61.666667 -17.666667 274.000000 2670.000000 --61.500000 -17.666667 272.000000 2670.000000 --61.333333 -17.666667 270.000000 2670.000000 --61.166667 -17.666667 267.000000 2670.000000 --61.000000 -17.666667 267.000000 2670.000000 --60.833333 -17.666667 258.000000 2670.000000 --60.666667 -17.666667 272.000000 2670.000000 --60.500000 -17.666667 287.000000 2670.000000 --60.333333 -17.666667 310.000000 2670.000000 --60.166667 -17.666667 330.000000 2670.000000 --60.000000 -17.666667 296.000000 2670.000000 --59.833333 -17.666667 332.000000 2670.000000 --59.666667 -17.666667 312.000000 2670.000000 --59.500000 -17.666667 268.000000 2670.000000 --59.333333 -17.666667 318.000000 2670.000000 --59.166667 -17.666667 282.000000 2670.000000 --59.000000 -17.666667 184.000000 2670.000000 --58.833333 -17.666667 163.000000 2670.000000 --58.666667 -17.666667 154.000000 2670.000000 --58.500000 -17.666667 129.000000 2670.000000 --58.333333 -17.666667 125.000000 2670.000000 --58.166667 -17.666667 149.000000 2670.000000 --58.000000 -17.666667 150.000000 2670.000000 --57.833333 -17.666667 134.000000 2670.000000 --57.666667 -17.666667 94.000000 2670.000000 --57.500000 -17.666667 93.000000 2670.000000 --57.333333 -17.666667 97.000000 2670.000000 --57.166667 -17.666667 99.000000 2670.000000 --57.000000 -17.666667 103.000000 2670.000000 --56.833333 -17.666667 107.000000 2670.000000 --56.666667 -17.666667 115.000000 2670.000000 --56.500000 -17.666667 120.000000 2670.000000 --56.333333 -17.666667 122.000000 2670.000000 --56.166667 -17.666667 126.000000 2670.000000 --56.000000 -17.666667 130.000000 2670.000000 --55.833333 -17.666667 134.000000 2670.000000 --55.666667 -17.666667 142.000000 2670.000000 --55.500000 -17.666667 146.000000 2670.000000 --55.333333 -17.666667 147.000000 2670.000000 --55.166667 -17.666667 151.000000 2670.000000 --55.000000 -17.666667 159.000000 2670.000000 --54.833333 -17.666667 434.000000 2670.000000 --54.666667 -17.666667 501.000000 2670.000000 --54.500000 -17.666667 551.000000 2670.000000 --54.333333 -17.666667 478.000000 2670.000000 --54.166667 -17.666667 620.000000 2670.000000 --54.000000 -17.666667 493.000000 2670.000000 --53.833333 -17.666667 422.000000 2670.000000 --53.666667 -17.666667 713.000000 2670.000000 --53.500000 -17.666667 695.000000 2670.000000 --53.333333 -17.666667 846.000000 2670.000000 --53.166667 -17.666667 824.000000 2670.000000 --53.000000 -17.666667 758.000000 2670.000000 --52.833333 -17.666667 814.000000 2670.000000 --52.666667 -17.666667 828.000000 2670.000000 --52.500000 -17.666667 669.000000 2670.000000 --52.333333 -17.666667 707.000000 2670.000000 --52.166667 -17.666667 856.000000 2670.000000 --52.000000 -17.666667 719.000000 2670.000000 --51.833333 -17.666667 811.000000 2670.000000 --51.666667 -17.666667 890.000000 2670.000000 --51.500000 -17.666667 881.000000 2670.000000 --51.333333 -17.666667 846.000000 2670.000000 --51.166667 -17.666667 847.000000 2670.000000 --51.000000 -17.666667 788.000000 2670.000000 --50.833333 -17.666667 724.000000 2670.000000 --50.666667 -17.666667 616.000000 2670.000000 --50.500000 -17.666667 535.000000 2670.000000 --50.333333 -17.666667 519.000000 2670.000000 --50.166667 -17.666667 458.000000 2670.000000 --50.000000 -17.666667 483.000000 2670.000000 --49.833333 -17.666667 528.000000 2670.000000 --49.666667 -17.666667 567.000000 2670.000000 --49.500000 -17.666667 698.000000 2670.000000 --49.333333 -17.666667 728.000000 2670.000000 --49.166667 -17.666667 710.000000 2670.000000 --49.000000 -17.666667 853.000000 2670.000000 --48.833333 -17.666667 634.000000 2670.000000 --48.666667 -17.666667 741.000000 2670.000000 --48.500000 -17.666667 832.000000 2670.000000 --48.333333 -17.666667 785.000000 2670.000000 --48.166667 -17.666667 848.000000 2670.000000 --48.000000 -17.666667 875.000000 2670.000000 --47.833333 -17.666667 895.000000 2670.000000 --47.666667 -17.666667 792.000000 2670.000000 --47.500000 -17.666667 930.000000 2670.000000 --47.333333 -17.666667 860.000000 2670.000000 --47.166667 -17.666667 872.000000 2670.000000 --47.000000 -17.666667 670.000000 2670.000000 --46.833333 -17.666667 563.000000 2670.000000 --46.666667 -17.666667 583.000000 2670.000000 --46.500000 -17.666667 563.000000 2670.000000 --46.333333 -17.666667 563.000000 2670.000000 --46.166667 -17.666667 634.000000 2670.000000 --46.000000 -17.666667 673.000000 2670.000000 --45.833333 -17.666667 760.000000 2670.000000 --45.666667 -17.666667 651.000000 2670.000000 --45.500000 -17.666667 765.000000 2670.000000 --45.333333 -17.666667 872.000000 2670.000000 --45.166667 -17.666667 717.000000 2670.000000 --45.000000 -17.666667 545.000000 2670.000000 --44.833333 -17.666667 651.000000 2670.000000 --44.666667 -17.666667 498.000000 2670.000000 --44.500000 -17.666667 851.000000 2670.000000 --44.333333 -17.666667 1142.000000 2670.000000 --44.166667 -17.666667 705.000000 2670.000000 --44.000000 -17.666667 693.000000 2670.000000 --43.833333 -17.666667 996.000000 2670.000000 --43.666667 -17.666667 683.000000 2670.000000 --43.500000 -17.666667 824.000000 2670.000000 --43.333333 -17.666667 741.000000 2670.000000 --43.166667 -17.666667 795.000000 2670.000000 --43.000000 -17.666667 726.000000 2670.000000 --42.833333 -17.666667 911.000000 2670.000000 --42.666667 -17.666667 751.000000 2670.000000 --42.500000 -17.666667 966.000000 2670.000000 --42.333333 -17.666667 930.000000 2670.000000 --42.166667 -17.666667 861.000000 2670.000000 --42.000000 -17.666667 892.000000 2670.000000 --41.833333 -17.666667 536.000000 2670.000000 --41.666667 -17.666667 454.000000 2670.000000 --41.500000 -17.666667 447.000000 2670.000000 --41.333333 -17.666667 445.000000 2670.000000 --41.166667 -17.666667 321.000000 2670.000000 --41.000000 -17.666667 270.000000 2670.000000 --40.833333 -17.666667 260.000000 2670.000000 --40.666667 -17.666667 256.000000 2670.000000 --40.500000 -17.666667 227.000000 2670.000000 --40.333333 -17.666667 238.000000 2670.000000 --40.166667 -17.666667 218.000000 2670.000000 --40.000000 -17.666667 132.000000 2670.000000 --65.000000 -17.833333 2490.000000 2670.000000 --64.833333 -17.833333 2706.000000 2670.000000 --64.666667 -17.833333 2420.000000 2670.000000 --64.500000 -17.833333 2319.000000 2670.000000 --64.333333 -17.833333 2304.000000 2670.000000 --64.166667 -17.833333 1652.000000 2670.000000 --64.000000 -17.833333 1047.000000 2670.000000 --63.833333 -17.833333 805.000000 2670.000000 --63.666667 -17.833333 1520.000000 2670.000000 --63.500000 -17.833333 584.000000 2670.000000 --63.333333 -17.833333 518.000000 2670.000000 --63.166667 -17.833333 425.000000 2670.000000 --63.000000 -17.833333 369.000000 2670.000000 --62.833333 -17.833333 319.000000 2670.000000 --62.666667 -17.833333 301.000000 2670.000000 --62.500000 -17.833333 298.000000 2670.000000 --62.333333 -17.833333 290.000000 2670.000000 --62.166667 -17.833333 291.000000 2670.000000 --62.000000 -17.833333 291.000000 2670.000000 --61.833333 -17.833333 284.000000 2670.000000 --61.666667 -17.833333 281.000000 2670.000000 --61.500000 -17.833333 277.000000 2670.000000 --61.333333 -17.833333 272.000000 2670.000000 --61.166667 -17.833333 268.000000 2670.000000 --61.000000 -17.833333 353.000000 2670.000000 --60.833333 -17.833333 325.000000 2670.000000 --60.666667 -17.833333 293.000000 2670.000000 --60.500000 -17.833333 339.000000 2670.000000 --60.333333 -17.833333 387.000000 2670.000000 --60.166667 -17.833333 404.000000 2670.000000 --60.000000 -17.833333 297.000000 2670.000000 --59.833333 -17.833333 252.000000 2670.000000 --59.666667 -17.833333 294.000000 2670.000000 --59.500000 -17.833333 577.000000 2670.000000 --59.333333 -17.833333 493.000000 2670.000000 --59.166667 -17.833333 554.000000 2670.000000 --59.000000 -17.833333 490.000000 2670.000000 --58.833333 -17.833333 220.000000 2670.000000 --58.666667 -17.833333 457.000000 2670.000000 --58.500000 -17.833333 175.000000 2670.000000 --58.333333 -17.833333 147.000000 2670.000000 --58.166667 -17.833333 194.000000 2670.000000 --58.000000 -17.833333 194.000000 2670.000000 --57.833333 -17.833333 126.000000 2670.000000 --57.666667 -17.833333 178.000000 2670.000000 --57.500000 -17.833333 92.000000 2670.000000 --57.333333 -17.833333 97.000000 2670.000000 --57.166667 -17.833333 101.000000 2670.000000 --57.000000 -17.833333 104.000000 2670.000000 --56.833333 -17.833333 109.000000 2670.000000 --56.666667 -17.833333 113.000000 2670.000000 --56.500000 -17.833333 118.000000 2670.000000 --56.333333 -17.833333 125.000000 2670.000000 --56.166667 -17.833333 130.000000 2670.000000 --56.000000 -17.833333 135.000000 2670.000000 --55.833333 -17.833333 138.000000 2670.000000 --55.666667 -17.833333 145.000000 2670.000000 --55.500000 -17.833333 150.000000 2670.000000 --55.333333 -17.833333 155.000000 2670.000000 --55.166667 -17.833333 160.000000 2670.000000 --55.000000 -17.833333 167.000000 2670.000000 --54.833333 -17.833333 477.000000 2670.000000 --54.666667 -17.833333 277.000000 2670.000000 --54.500000 -17.833333 264.000000 2670.000000 --54.333333 -17.833333 294.000000 2670.000000 --54.166667 -17.833333 360.000000 2670.000000 --54.000000 -17.833333 333.000000 2670.000000 --53.833333 -17.833333 357.000000 2670.000000 --53.666667 -17.833333 437.000000 2670.000000 --53.500000 -17.833333 836.000000 2670.000000 --53.333333 -17.833333 859.000000 2670.000000 --53.166667 -17.833333 789.000000 2670.000000 --53.000000 -17.833333 886.000000 2670.000000 --52.833333 -17.833333 739.000000 2670.000000 --52.666667 -17.833333 653.000000 2670.000000 --52.500000 -17.833333 681.000000 2670.000000 --52.333333 -17.833333 596.000000 2670.000000 --52.166667 -17.833333 882.000000 2670.000000 --52.000000 -17.833333 836.000000 2670.000000 --51.833333 -17.833333 679.000000 2670.000000 --51.666667 -17.833333 760.000000 2670.000000 --51.500000 -17.833333 855.000000 2670.000000 --51.333333 -17.833333 779.000000 2670.000000 --51.166667 -17.833333 836.000000 2670.000000 --51.000000 -17.833333 726.000000 2670.000000 --50.833333 -17.833333 713.000000 2670.000000 --50.666667 -17.833333 627.000000 2670.000000 --50.500000 -17.833333 524.000000 2670.000000 --50.333333 -17.833333 506.000000 2670.000000 --50.166667 -17.833333 484.000000 2670.000000 --50.000000 -17.833333 498.000000 2670.000000 --49.833333 -17.833333 667.000000 2670.000000 --49.666667 -17.833333 785.000000 2670.000000 --49.500000 -17.833333 588.000000 2670.000000 --49.333333 -17.833333 750.000000 2670.000000 --49.166667 -17.833333 881.000000 2670.000000 --49.000000 -17.833333 736.000000 2670.000000 --48.833333 -17.833333 580.000000 2670.000000 --48.666667 -17.833333 905.000000 2670.000000 --48.500000 -17.833333 703.000000 2670.000000 --48.333333 -17.833333 736.000000 2670.000000 --48.166667 -17.833333 714.000000 2670.000000 --48.000000 -17.833333 814.000000 2670.000000 --47.833333 -17.833333 845.000000 2670.000000 --47.666667 -17.833333 724.000000 2670.000000 --47.500000 -17.833333 864.000000 2670.000000 --47.333333 -17.833333 790.000000 2670.000000 --47.166667 -17.833333 947.000000 2670.000000 --47.000000 -17.833333 731.000000 2670.000000 --46.833333 -17.833333 653.000000 2670.000000 --46.666667 -17.833333 624.000000 2670.000000 --46.500000 -17.833333 579.000000 2670.000000 --46.333333 -17.833333 598.000000 2670.000000 --46.166667 -17.833333 839.000000 2670.000000 --46.000000 -17.833333 802.000000 2670.000000 --45.833333 -17.833333 752.000000 2670.000000 --45.666667 -17.833333 773.000000 2670.000000 --45.500000 -17.833333 818.000000 2670.000000 --45.333333 -17.833333 784.000000 2670.000000 --45.166667 -17.833333 573.000000 2670.000000 --45.000000 -17.833333 687.000000 2670.000000 --44.833333 -17.833333 802.000000 2670.000000 --44.666667 -17.833333 752.000000 2670.000000 --44.500000 -17.833333 743.000000 2670.000000 --44.333333 -17.833333 1181.000000 2670.000000 --44.166667 -17.833333 667.000000 2670.000000 --44.000000 -17.833333 624.000000 2670.000000 --43.833333 -17.833333 1100.000000 2670.000000 --43.666667 -17.833333 1037.000000 2670.000000 --43.500000 -17.833333 723.000000 2670.000000 --43.333333 -17.833333 904.000000 2670.000000 --43.166667 -17.833333 836.000000 2670.000000 --43.000000 -17.833333 900.000000 2670.000000 --42.833333 -17.833333 1041.000000 2670.000000 --42.666667 -17.833333 802.000000 2670.000000 --42.500000 -17.833333 978.000000 2670.000000 --42.333333 -17.833333 565.000000 2670.000000 --42.166667 -17.833333 585.000000 2670.000000 --42.000000 -17.833333 761.000000 2670.000000 --41.833333 -17.833333 566.000000 2670.000000 --41.666667 -17.833333 628.000000 2670.000000 --41.500000 -17.833333 374.000000 2670.000000 --41.333333 -17.833333 386.000000 2670.000000 --41.166667 -17.833333 273.000000 2670.000000 --41.000000 -17.833333 393.000000 2670.000000 --40.833333 -17.833333 288.000000 2670.000000 --40.666667 -17.833333 250.000000 2670.000000 --40.500000 -17.833333 207.000000 2670.000000 --40.333333 -17.833333 129.000000 2670.000000 --40.166667 -17.833333 157.000000 2670.000000 --40.000000 -17.833333 107.000000 2670.000000 --65.000000 -18.000000 2040.000000 2670.000000 --64.833333 -18.000000 1834.000000 2670.000000 --64.666667 -18.000000 1624.000000 2670.000000 --64.500000 -18.000000 2060.000000 2670.000000 --64.333333 -18.000000 1898.000000 2670.000000 --64.166667 -18.000000 1668.000000 2670.000000 --64.000000 -18.000000 1505.000000 2670.000000 --63.833333 -18.000000 1347.000000 2670.000000 --63.666667 -18.000000 1530.000000 2670.000000 --63.500000 -18.000000 714.000000 2670.000000 --63.333333 -18.000000 622.000000 2670.000000 --63.166667 -18.000000 447.000000 2670.000000 --63.000000 -18.000000 365.000000 2670.000000 --62.833333 -18.000000 322.000000 2670.000000 --62.666667 -18.000000 318.000000 2670.000000 --62.500000 -18.000000 308.000000 2670.000000 --62.333333 -18.000000 308.000000 2670.000000 --62.166667 -18.000000 300.000000 2670.000000 --62.000000 -18.000000 296.000000 2670.000000 --61.833333 -18.000000 288.000000 2670.000000 --61.666667 -18.000000 285.000000 2670.000000 --61.500000 -18.000000 278.000000 2670.000000 --61.333333 -18.000000 275.000000 2670.000000 --61.166667 -18.000000 274.000000 2670.000000 --61.000000 -18.000000 321.000000 2670.000000 --60.833333 -18.000000 364.000000 2670.000000 --60.666667 -18.000000 406.000000 2670.000000 --60.500000 -18.000000 422.000000 2670.000000 --60.333333 -18.000000 421.000000 2670.000000 --60.166667 -18.000000 403.000000 2670.000000 --60.000000 -18.000000 430.000000 2670.000000 --59.833333 -18.000000 318.000000 2670.000000 --59.666667 -18.000000 240.000000 2670.000000 --59.500000 -18.000000 371.000000 2670.000000 --59.333333 -18.000000 658.000000 2670.000000 --59.166667 -18.000000 670.000000 2670.000000 --59.000000 -18.000000 452.000000 2670.000000 --58.833333 -18.000000 244.000000 2670.000000 --58.666667 -18.000000 313.000000 2670.000000 --58.500000 -18.000000 181.000000 2670.000000 --58.333333 -18.000000 204.000000 2670.000000 --58.166667 -18.000000 174.000000 2670.000000 --58.000000 -18.000000 203.000000 2670.000000 --57.833333 -18.000000 264.000000 2670.000000 --57.666667 -18.000000 174.000000 2670.000000 --57.500000 -18.000000 200.000000 2670.000000 --57.333333 -18.000000 94.000000 2670.000000 --57.166667 -18.000000 98.000000 2670.000000 --57.000000 -18.000000 102.000000 2670.000000 --56.833333 -18.000000 108.000000 2670.000000 --56.666667 -18.000000 113.000000 2670.000000 --56.500000 -18.000000 119.000000 2670.000000 --56.333333 -18.000000 123.000000 2670.000000 --56.166667 -18.000000 132.000000 2670.000000 --56.000000 -18.000000 137.000000 2670.000000 --55.833333 -18.000000 143.000000 2670.000000 --55.666667 -18.000000 148.000000 2670.000000 --55.500000 -18.000000 158.000000 2670.000000 --55.333333 -18.000000 162.000000 2670.000000 --55.166667 -18.000000 168.000000 2670.000000 --55.000000 -18.000000 170.000000 2670.000000 --54.833333 -18.000000 183.000000 2670.000000 --54.666667 -18.000000 349.000000 2670.000000 --54.500000 -18.000000 280.000000 2670.000000 --54.333333 -18.000000 315.000000 2670.000000 --54.166667 -18.000000 370.000000 2670.000000 --54.000000 -18.000000 322.000000 2670.000000 --53.833333 -18.000000 371.000000 2670.000000 --53.666667 -18.000000 349.000000 2670.000000 --53.500000 -18.000000 431.000000 2670.000000 --53.333333 -18.000000 554.000000 2670.000000 --53.166667 -18.000000 856.000000 2670.000000 --53.000000 -18.000000 879.000000 2670.000000 --52.833333 -18.000000 760.000000 2670.000000 --52.666667 -18.000000 710.000000 2670.000000 --52.500000 -18.000000 685.000000 2670.000000 --52.333333 -18.000000 642.000000 2670.000000 --52.166667 -18.000000 857.000000 2670.000000 --52.000000 -18.000000 790.000000 2670.000000 --51.833333 -18.000000 691.000000 2670.000000 --51.666667 -18.000000 609.000000 2670.000000 --51.500000 -18.000000 743.000000 2670.000000 --51.333333 -18.000000 727.000000 2670.000000 --51.166667 -18.000000 755.000000 2670.000000 --51.000000 -18.000000 710.000000 2670.000000 --50.833333 -18.000000 702.000000 2670.000000 --50.666667 -18.000000 659.000000 2670.000000 --50.500000 -18.000000 580.000000 2670.000000 --50.333333 -18.000000 504.000000 2670.000000 --50.166667 -18.000000 480.000000 2670.000000 --50.000000 -18.000000 588.000000 2670.000000 --49.833333 -18.000000 616.000000 2670.000000 --49.666667 -18.000000 707.000000 2670.000000 --49.500000 -18.000000 531.000000 2670.000000 --49.333333 -18.000000 810.000000 2670.000000 --49.166667 -18.000000 726.000000 2670.000000 --49.000000 -18.000000 635.000000 2670.000000 --48.833333 -18.000000 589.000000 2670.000000 --48.666667 -18.000000 676.000000 2670.000000 --48.500000 -18.000000 737.000000 2670.000000 --48.333333 -18.000000 727.000000 2670.000000 --48.166667 -18.000000 681.000000 2670.000000 --48.000000 -18.000000 784.000000 2670.000000 --47.833333 -18.000000 825.000000 2670.000000 --47.666667 -18.000000 753.000000 2670.000000 --47.500000 -18.000000 849.000000 2670.000000 --47.333333 -18.000000 759.000000 2670.000000 --47.166667 -18.000000 986.000000 2670.000000 --47.000000 -18.000000 730.000000 2670.000000 --46.833333 -18.000000 646.000000 2670.000000 --46.666667 -18.000000 563.000000 2670.000000 --46.500000 -18.000000 806.000000 2670.000000 --46.333333 -18.000000 819.000000 2670.000000 --46.166667 -18.000000 831.000000 2670.000000 --46.000000 -18.000000 797.000000 2670.000000 --45.833333 -18.000000 770.000000 2670.000000 --45.666667 -18.000000 792.000000 2670.000000 --45.500000 -18.000000 762.000000 2670.000000 --45.333333 -18.000000 758.000000 2670.000000 --45.166667 -18.000000 579.000000 2670.000000 --45.000000 -18.000000 706.000000 2670.000000 --44.833333 -18.000000 850.000000 2670.000000 --44.666667 -18.000000 800.000000 2670.000000 --44.500000 -18.000000 657.000000 2670.000000 --44.333333 -18.000000 1047.000000 2670.000000 --44.166667 -18.000000 566.000000 2670.000000 --44.000000 -18.000000 1196.000000 2670.000000 --43.833333 -18.000000 1172.000000 2670.000000 --43.666667 -18.000000 957.000000 2670.000000 --43.500000 -18.000000 968.000000 2670.000000 --43.333333 -18.000000 930.000000 2670.000000 --43.166667 -18.000000 918.000000 2670.000000 --43.000000 -18.000000 1013.000000 2670.000000 --42.833333 -18.000000 917.000000 2670.000000 --42.666667 -18.000000 827.000000 2670.000000 --42.500000 -18.000000 621.000000 2670.000000 --42.333333 -18.000000 482.000000 2670.000000 --42.166667 -18.000000 361.000000 2670.000000 --42.000000 -18.000000 578.000000 2670.000000 --41.833333 -18.000000 619.000000 2670.000000 --41.666667 -18.000000 582.000000 2670.000000 --41.500000 -18.000000 430.000000 2670.000000 --41.333333 -18.000000 645.000000 2670.000000 --41.166667 -18.000000 353.000000 2670.000000 --41.000000 -18.000000 290.000000 2670.000000 --40.833333 -18.000000 295.000000 2670.000000 --40.666667 -18.000000 322.000000 2670.000000 --40.500000 -18.000000 224.000000 2670.000000 --40.333333 -18.000000 167.000000 2670.000000 --40.166667 -18.000000 137.000000 2670.000000 --40.000000 -18.000000 54.000000 2670.000000 --65.000000 -18.166667 2211.000000 2670.000000 --64.833333 -18.166667 1757.000000 2670.000000 --64.666667 -18.166667 1735.000000 2670.000000 --64.500000 -18.166667 1611.000000 2670.000000 --64.333333 -18.166667 2015.000000 2670.000000 --64.166667 -18.166667 1799.000000 2670.000000 --64.000000 -18.166667 1708.000000 2670.000000 --63.833333 -18.166667 1624.000000 2670.000000 --63.666667 -18.166667 1591.000000 2670.000000 --63.500000 -18.166667 641.000000 2670.000000 --63.333333 -18.166667 723.000000 2670.000000 --63.166667 -18.166667 481.000000 2670.000000 --63.000000 -18.166667 375.000000 2670.000000 --62.833333 -18.166667 343.000000 2670.000000 --62.666667 -18.166667 330.000000 2670.000000 --62.500000 -18.166667 324.000000 2670.000000 --62.333333 -18.166667 315.000000 2670.000000 --62.166667 -18.166667 307.000000 2670.000000 --62.000000 -18.166667 303.000000 2670.000000 --61.833333 -18.166667 297.000000 2670.000000 --61.666667 -18.166667 288.000000 2670.000000 --61.500000 -18.166667 281.000000 2670.000000 --61.333333 -18.166667 279.000000 2670.000000 --61.166667 -18.166667 278.000000 2670.000000 --61.000000 -18.166667 279.000000 2670.000000 --60.833333 -18.166667 330.000000 2670.000000 --60.666667 -18.166667 425.000000 2670.000000 --60.500000 -18.166667 418.000000 2670.000000 --60.333333 -18.166667 484.000000 2670.000000 --60.166667 -18.166667 622.000000 2670.000000 --60.000000 -18.166667 391.000000 2670.000000 --59.833333 -18.166667 429.000000 2670.000000 --59.666667 -18.166667 288.000000 2670.000000 --59.500000 -18.166667 220.000000 2670.000000 --59.333333 -18.166667 222.000000 2670.000000 --59.166667 -18.166667 249.000000 2670.000000 --59.000000 -18.166667 356.000000 2670.000000 --58.833333 -18.166667 499.000000 2670.000000 --58.666667 -18.166667 334.000000 2670.000000 --58.500000 -18.166667 519.000000 2670.000000 --58.333333 -18.166667 341.000000 2670.000000 --58.166667 -18.166667 188.000000 2670.000000 --58.000000 -18.166667 218.000000 2670.000000 --57.833333 -18.166667 280.000000 2670.000000 --57.666667 -18.166667 315.000000 2670.000000 --57.500000 -18.166667 92.000000 2670.000000 --57.333333 -18.166667 93.000000 2670.000000 --57.166667 -18.166667 97.000000 2670.000000 --57.000000 -18.166667 102.000000 2670.000000 --56.833333 -18.166667 108.000000 2670.000000 --56.666667 -18.166667 114.000000 2670.000000 --56.500000 -18.166667 118.000000 2670.000000 --56.333333 -18.166667 125.000000 2670.000000 --56.166667 -18.166667 132.000000 2670.000000 --56.000000 -18.166667 139.000000 2670.000000 --55.833333 -18.166667 146.000000 2670.000000 --55.666667 -18.166667 152.000000 2670.000000 --55.500000 -18.166667 158.000000 2670.000000 --55.333333 -18.166667 165.000000 2670.000000 --55.166667 -18.166667 174.000000 2670.000000 --55.000000 -18.166667 180.000000 2670.000000 --54.833333 -18.166667 414.000000 2670.000000 --54.666667 -18.166667 340.000000 2670.000000 --54.500000 -18.166667 258.000000 2670.000000 --54.333333 -18.166667 321.000000 2670.000000 --54.166667 -18.166667 322.000000 2670.000000 --54.000000 -18.166667 316.000000 2670.000000 --53.833333 -18.166667 346.000000 2670.000000 --53.666667 -18.166667 688.000000 2670.000000 --53.500000 -18.166667 424.000000 2670.000000 --53.333333 -18.166667 604.000000 2670.000000 --53.166667 -18.166667 863.000000 2670.000000 --53.000000 -18.166667 809.000000 2670.000000 --52.833333 -18.166667 846.000000 2670.000000 --52.666667 -18.166667 779.000000 2670.000000 --52.500000 -18.166667 654.000000 2670.000000 --52.333333 -18.166667 601.000000 2670.000000 --52.166667 -18.166667 611.000000 2670.000000 --52.000000 -18.166667 852.000000 2670.000000 --51.833333 -18.166667 757.000000 2670.000000 --51.666667 -18.166667 721.000000 2670.000000 --51.500000 -18.166667 648.000000 2670.000000 --51.333333 -18.166667 637.000000 2670.000000 --51.166667 -18.166667 658.000000 2670.000000 --51.000000 -18.166667 761.000000 2670.000000 --50.833333 -18.166667 847.000000 2670.000000 --50.666667 -18.166667 680.000000 2670.000000 --50.500000 -18.166667 641.000000 2670.000000 --50.333333 -18.166667 580.000000 2670.000000 --50.166667 -18.166667 439.000000 2670.000000 --50.000000 -18.166667 517.000000 2670.000000 --49.833333 -18.166667 598.000000 2670.000000 --49.666667 -18.166667 702.000000 2670.000000 --49.500000 -18.166667 498.000000 2670.000000 --49.333333 -18.166667 641.000000 2670.000000 --49.166667 -18.166667 718.000000 2670.000000 --49.000000 -18.166667 756.000000 2670.000000 --48.833333 -18.166667 582.000000 2670.000000 --48.666667 -18.166667 573.000000 2670.000000 --48.500000 -18.166667 685.000000 2670.000000 --48.333333 -18.166667 767.000000 2670.000000 --48.166667 -18.166667 640.000000 2670.000000 --48.000000 -18.166667 824.000000 2670.000000 --47.833333 -18.166667 861.000000 2670.000000 --47.666667 -18.166667 703.000000 2670.000000 --47.500000 -18.166667 738.000000 2670.000000 --47.333333 -18.166667 782.000000 2670.000000 --47.166667 -18.166667 776.000000 2670.000000 --47.000000 -18.166667 848.000000 2670.000000 --46.833333 -18.166667 843.000000 2670.000000 --46.666667 -18.166667 727.000000 2670.000000 --46.500000 -18.166667 1001.000000 2670.000000 --46.333333 -18.166667 774.000000 2670.000000 --46.166667 -18.166667 765.000000 2670.000000 --46.000000 -18.166667 840.000000 2670.000000 --45.833333 -18.166667 834.000000 2670.000000 --45.666667 -18.166667 733.000000 2670.000000 --45.500000 -18.166667 676.000000 2670.000000 --45.333333 -18.166667 709.000000 2670.000000 --45.166667 -18.166667 573.000000 2670.000000 --45.000000 -18.166667 768.000000 2670.000000 --44.833333 -18.166667 863.000000 2670.000000 --44.666667 -18.166667 642.000000 2670.000000 --44.500000 -18.166667 602.000000 2670.000000 --44.333333 -18.166667 573.000000 2670.000000 --44.166667 -18.166667 630.000000 2670.000000 --44.000000 -18.166667 1126.000000 2670.000000 --43.833333 -18.166667 1119.000000 2670.000000 --43.666667 -18.166667 1087.000000 2670.000000 --43.500000 -18.166667 884.000000 2670.000000 --43.333333 -18.166667 1189.000000 2670.000000 --43.166667 -18.166667 1014.000000 2670.000000 --43.000000 -18.166667 770.000000 2670.000000 --42.833333 -18.166667 736.000000 2670.000000 --42.666667 -18.166667 645.000000 2670.000000 --42.500000 -18.166667 520.000000 2670.000000 --42.333333 -18.166667 505.000000 2670.000000 --42.166667 -18.166667 319.000000 2670.000000 --42.000000 -18.166667 380.000000 2670.000000 --41.833333 -18.166667 554.000000 2670.000000 --41.666667 -18.166667 424.000000 2670.000000 --41.500000 -18.166667 400.000000 2670.000000 --41.333333 -18.166667 390.000000 2670.000000 --41.166667 -18.166667 365.000000 2670.000000 --41.000000 -18.166667 248.000000 2670.000000 --40.833333 -18.166667 254.000000 2670.000000 --40.666667 -18.166667 255.000000 2670.000000 --40.500000 -18.166667 255.000000 2670.000000 --40.333333 -18.166667 183.000000 2670.000000 --40.166667 -18.166667 117.000000 2670.000000 --40.000000 -18.166667 76.000000 2670.000000 --65.000000 -18.333333 2450.000000 2670.000000 --64.833333 -18.333333 2577.000000 2670.000000 --64.666667 -18.333333 2094.000000 2670.000000 --64.500000 -18.333333 1691.000000 2670.000000 --64.333333 -18.333333 2410.000000 2670.000000 --64.166667 -18.333333 1656.000000 2670.000000 --64.000000 -18.333333 2061.000000 2670.000000 --63.833333 -18.333333 1653.000000 2670.000000 --63.666667 -18.333333 1255.000000 2670.000000 --63.500000 -18.333333 1098.000000 2670.000000 --63.333333 -18.333333 698.000000 2670.000000 --63.166667 -18.333333 502.000000 2670.000000 --63.000000 -18.333333 396.000000 2670.000000 --62.833333 -18.333333 358.000000 2670.000000 --62.666667 -18.333333 341.000000 2670.000000 --62.500000 -18.333333 328.000000 2670.000000 --62.333333 -18.333333 320.000000 2670.000000 --62.166667 -18.333333 315.000000 2670.000000 --62.000000 -18.333333 305.000000 2670.000000 --61.833333 -18.333333 298.000000 2670.000000 --61.666667 -18.333333 290.000000 2670.000000 --61.500000 -18.333333 287.000000 2670.000000 --61.333333 -18.333333 284.000000 2670.000000 --61.166667 -18.333333 281.000000 2670.000000 --61.000000 -18.333333 280.000000 2670.000000 --60.833333 -18.333333 304.000000 2670.000000 --60.666667 -18.333333 382.000000 2670.000000 --60.500000 -18.333333 450.000000 2670.000000 --60.333333 -18.333333 421.000000 2670.000000 --60.166667 -18.333333 426.000000 2670.000000 --60.000000 -18.333333 414.000000 2670.000000 --59.833333 -18.333333 285.000000 2670.000000 --59.666667 -18.333333 558.000000 2670.000000 --59.500000 -18.333333 286.000000 2670.000000 --59.333333 -18.333333 202.000000 2670.000000 --59.166667 -18.333333 192.000000 2670.000000 --59.000000 -18.333333 217.000000 2670.000000 --58.833333 -18.333333 591.000000 2670.000000 --58.666667 -18.333333 534.000000 2670.000000 --58.500000 -18.333333 383.000000 2670.000000 --58.333333 -18.333333 396.000000 2670.000000 --58.166667 -18.333333 369.000000 2670.000000 --58.000000 -18.333333 333.000000 2670.000000 --57.833333 -18.333333 352.000000 2670.000000 --57.666667 -18.333333 273.000000 2670.000000 --57.500000 -18.333333 90.000000 2670.000000 --57.333333 -18.333333 93.000000 2670.000000 --57.166667 -18.333333 96.000000 2670.000000 --57.000000 -18.333333 103.000000 2670.000000 --56.833333 -18.333333 106.000000 2670.000000 --56.666667 -18.333333 112.000000 2670.000000 --56.500000 -18.333333 119.000000 2670.000000 --56.333333 -18.333333 125.000000 2670.000000 --56.166667 -18.333333 133.000000 2670.000000 --56.000000 -18.333333 137.000000 2670.000000 --55.833333 -18.333333 142.000000 2670.000000 --55.666667 -18.333333 150.000000 2670.000000 --55.500000 -18.333333 157.000000 2670.000000 --55.333333 -18.333333 169.000000 2670.000000 --55.166667 -18.333333 180.000000 2670.000000 --55.000000 -18.333333 187.000000 2670.000000 --54.833333 -18.333333 391.000000 2670.000000 --54.666667 -18.333333 266.000000 2670.000000 --54.500000 -18.333333 262.000000 2670.000000 --54.333333 -18.333333 410.000000 2670.000000 --54.166667 -18.333333 421.000000 2670.000000 --54.000000 -18.333333 434.000000 2670.000000 --53.833333 -18.333333 379.000000 2670.000000 --53.666667 -18.333333 410.000000 2670.000000 --53.500000 -18.333333 446.000000 2670.000000 --53.333333 -18.333333 720.000000 2670.000000 --53.166667 -18.333333 704.000000 2670.000000 --53.000000 -18.333333 832.000000 2670.000000 --52.833333 -18.333333 848.000000 2670.000000 --52.666667 -18.333333 786.000000 2670.000000 --52.500000 -18.333333 743.000000 2670.000000 --52.333333 -18.333333 617.000000 2670.000000 --52.166667 -18.333333 637.000000 2670.000000 --52.000000 -18.333333 652.000000 2670.000000 --51.833333 -18.333333 708.000000 2670.000000 --51.666667 -18.333333 611.000000 2670.000000 --51.500000 -18.333333 622.000000 2670.000000 --51.333333 -18.333333 586.000000 2670.000000 --51.166667 -18.333333 597.000000 2670.000000 --51.000000 -18.333333 678.000000 2670.000000 --50.833333 -18.333333 567.000000 2670.000000 --50.666667 -18.333333 588.000000 2670.000000 --50.500000 -18.333333 763.000000 2670.000000 --50.333333 -18.333333 599.000000 2670.000000 --50.166667 -18.333333 453.000000 2670.000000 --50.000000 -18.333333 461.000000 2670.000000 --49.833333 -18.333333 542.000000 2670.000000 --49.666667 -18.333333 537.000000 2670.000000 --49.500000 -18.333333 606.000000 2670.000000 --49.333333 -18.333333 622.000000 2670.000000 --49.166667 -18.333333 489.000000 2670.000000 --49.000000 -18.333333 522.000000 2670.000000 --48.833333 -18.333333 518.000000 2670.000000 --48.666667 -18.333333 517.000000 2670.000000 --48.500000 -18.333333 573.000000 2670.000000 --48.333333 -18.333333 551.000000 2670.000000 --48.166667 -18.333333 622.000000 2670.000000 --48.000000 -18.333333 738.000000 2670.000000 --47.833333 -18.333333 685.000000 2670.000000 --47.666667 -18.333333 655.000000 2670.000000 --47.500000 -18.333333 770.000000 2670.000000 --47.333333 -18.333333 829.000000 2670.000000 --47.166667 -18.333333 803.000000 2670.000000 --47.000000 -18.333333 769.000000 2670.000000 --46.833333 -18.333333 788.000000 2670.000000 --46.666667 -18.333333 855.000000 2670.000000 --46.500000 -18.333333 925.000000 2670.000000 --46.333333 -18.333333 775.000000 2670.000000 --46.166667 -18.333333 769.000000 2670.000000 --46.000000 -18.333333 909.000000 2670.000000 --45.833333 -18.333333 794.000000 2670.000000 --45.666667 -18.333333 753.000000 2670.000000 --45.500000 -18.333333 745.000000 2670.000000 --45.333333 -18.333333 570.000000 2670.000000 --45.166667 -18.333333 734.000000 2670.000000 --45.000000 -18.333333 764.000000 2670.000000 --44.833333 -18.333333 880.000000 2670.000000 --44.666667 -18.333333 614.000000 2670.000000 --44.500000 -18.333333 652.000000 2670.000000 --44.333333 -18.333333 568.000000 2670.000000 --44.166667 -18.333333 650.000000 2670.000000 --44.000000 -18.333333 972.000000 2670.000000 --43.833333 -18.333333 1160.000000 2670.000000 --43.666667 -18.333333 1294.000000 2670.000000 --43.500000 -18.333333 968.000000 2670.000000 --43.333333 -18.333333 1158.000000 2670.000000 --43.166667 -18.333333 751.000000 2670.000000 --43.000000 -18.333333 757.000000 2670.000000 --42.833333 -18.333333 686.000000 2670.000000 --42.666667 -18.333333 672.000000 2670.000000 --42.500000 -18.333333 594.000000 2670.000000 --42.333333 -18.333333 345.000000 2670.000000 --42.166667 -18.333333 486.000000 2670.000000 --42.000000 -18.333333 286.000000 2670.000000 --41.833333 -18.333333 304.000000 2670.000000 --41.666667 -18.333333 452.000000 2670.000000 --41.500000 -18.333333 342.000000 2670.000000 --41.333333 -18.333333 354.000000 2670.000000 --41.166667 -18.333333 321.000000 2670.000000 --41.000000 -18.333333 292.000000 2670.000000 --40.833333 -18.333333 333.000000 2670.000000 --40.666667 -18.333333 219.000000 2670.000000 --40.500000 -18.333333 188.000000 2670.000000 --40.333333 -18.333333 158.000000 2670.000000 --40.166667 -18.333333 106.000000 2670.000000 --40.000000 -18.333333 62.000000 2670.000000 --65.000000 -18.500000 2215.000000 2670.000000 --64.833333 -18.500000 1515.000000 2670.000000 --64.666667 -18.500000 1553.000000 2670.000000 --64.500000 -18.500000 2147.000000 2670.000000 --64.333333 -18.500000 1148.000000 2670.000000 --64.166667 -18.500000 2011.000000 2670.000000 --64.000000 -18.500000 2016.000000 2670.000000 --63.833333 -18.500000 1865.000000 2670.000000 --63.666667 -18.500000 1495.000000 2670.000000 --63.500000 -18.500000 856.000000 2670.000000 --63.333333 -18.500000 710.000000 2670.000000 --63.166667 -18.500000 467.000000 2670.000000 --63.000000 -18.500000 375.000000 2670.000000 --62.833333 -18.500000 360.000000 2670.000000 --62.666667 -18.500000 348.000000 2670.000000 --62.500000 -18.500000 335.000000 2670.000000 --62.333333 -18.500000 329.000000 2670.000000 --62.166667 -18.500000 321.000000 2670.000000 --62.000000 -18.500000 311.000000 2670.000000 --61.833333 -18.500000 301.000000 2670.000000 --61.666667 -18.500000 298.000000 2670.000000 --61.500000 -18.500000 290.000000 2670.000000 --61.333333 -18.500000 288.000000 2670.000000 --61.166667 -18.500000 287.000000 2670.000000 --61.000000 -18.500000 280.000000 2670.000000 --60.833333 -18.500000 305.000000 2670.000000 --60.666667 -18.500000 307.000000 2670.000000 --60.500000 -18.500000 369.000000 2670.000000 --60.333333 -18.500000 387.000000 2670.000000 --60.166667 -18.500000 346.000000 2670.000000 --60.000000 -18.500000 437.000000 2670.000000 --59.833333 -18.500000 265.000000 2670.000000 --59.666667 -18.500000 224.000000 2670.000000 --59.500000 -18.500000 207.000000 2670.000000 --59.333333 -18.500000 250.000000 2670.000000 --59.166667 -18.500000 454.000000 2670.000000 --59.000000 -18.500000 168.000000 2670.000000 --58.833333 -18.500000 199.000000 2670.000000 --58.666667 -18.500000 235.000000 2670.000000 --58.500000 -18.500000 215.000000 2670.000000 --58.333333 -18.500000 226.000000 2670.000000 --58.166667 -18.500000 331.000000 2670.000000 --58.000000 -18.500000 242.000000 2670.000000 --57.833333 -18.500000 265.000000 2670.000000 --57.666667 -18.500000 211.000000 2670.000000 --57.500000 -18.500000 91.000000 2670.000000 --57.333333 -18.500000 94.000000 2670.000000 --57.166667 -18.500000 98.000000 2670.000000 --57.000000 -18.500000 101.000000 2670.000000 --56.833333 -18.500000 108.000000 2670.000000 --56.666667 -18.500000 111.000000 2670.000000 --56.500000 -18.500000 116.000000 2670.000000 --56.333333 -18.500000 120.000000 2670.000000 --56.166667 -18.500000 125.000000 2670.000000 --56.000000 -18.500000 134.000000 2670.000000 --55.833333 -18.500000 144.000000 2670.000000 --55.666667 -18.500000 151.000000 2670.000000 --55.500000 -18.500000 161.000000 2670.000000 --55.333333 -18.500000 171.000000 2670.000000 --55.166667 -18.500000 180.000000 2670.000000 --55.000000 -18.500000 197.000000 2670.000000 --54.833333 -18.500000 385.000000 2670.000000 --54.666667 -18.500000 211.000000 2670.000000 --54.500000 -18.500000 306.000000 2670.000000 --54.333333 -18.500000 342.000000 2670.000000 --54.166667 -18.500000 348.000000 2670.000000 --54.000000 -18.500000 329.000000 2670.000000 --53.833333 -18.500000 363.000000 2670.000000 --53.666667 -18.500000 343.000000 2670.000000 --53.500000 -18.500000 532.000000 2670.000000 --53.333333 -18.500000 609.000000 2670.000000 --53.166667 -18.500000 712.000000 2670.000000 --53.000000 -18.500000 822.000000 2670.000000 --52.833333 -18.500000 806.000000 2670.000000 --52.666667 -18.500000 826.000000 2670.000000 --52.500000 -18.500000 818.000000 2670.000000 --52.333333 -18.500000 708.000000 2670.000000 --52.166667 -18.500000 680.000000 2670.000000 --52.000000 -18.500000 702.000000 2670.000000 --51.833333 -18.500000 575.000000 2670.000000 --51.666667 -18.500000 516.000000 2670.000000 --51.500000 -18.500000 564.000000 2670.000000 --51.333333 -18.500000 596.000000 2670.000000 --51.166667 -18.500000 481.000000 2670.000000 --51.000000 -18.500000 587.000000 2670.000000 --50.833333 -18.500000 566.000000 2670.000000 --50.666667 -18.500000 553.000000 2670.000000 --50.500000 -18.500000 477.000000 2670.000000 --50.333333 -18.500000 478.000000 2670.000000 --50.166667 -18.500000 462.000000 2670.000000 --50.000000 -18.500000 435.000000 2670.000000 --49.833333 -18.500000 595.000000 2670.000000 --49.666667 -18.500000 510.000000 2670.000000 --49.500000 -18.500000 425.000000 2670.000000 --49.333333 -18.500000 498.000000 2670.000000 --49.166667 -18.500000 498.000000 2670.000000 --49.000000 -18.500000 630.000000 2670.000000 --48.833333 -18.500000 768.000000 2670.000000 --48.666667 -18.500000 656.000000 2670.000000 --48.500000 -18.500000 849.000000 2670.000000 --48.333333 -18.500000 668.000000 2670.000000 --48.166667 -18.500000 813.000000 2670.000000 --48.000000 -18.500000 668.000000 2670.000000 --47.833333 -18.500000 640.000000 2670.000000 --47.666667 -18.500000 712.000000 2670.000000 --47.500000 -18.500000 777.000000 2670.000000 --47.333333 -18.500000 775.000000 2670.000000 --47.166667 -18.500000 947.000000 2670.000000 --47.000000 -18.500000 826.000000 2670.000000 --46.833333 -18.500000 960.000000 2670.000000 --46.666667 -18.500000 934.000000 2670.000000 --46.500000 -18.500000 853.000000 2670.000000 --46.333333 -18.500000 995.000000 2670.000000 --46.166667 -18.500000 917.000000 2670.000000 --46.000000 -18.500000 901.000000 2670.000000 --45.833333 -18.500000 774.000000 2670.000000 --45.666667 -18.500000 753.000000 2670.000000 --45.500000 -18.500000 591.000000 2670.000000 --45.333333 -18.500000 578.000000 2670.000000 --45.166667 -18.500000 715.000000 2670.000000 --45.000000 -18.500000 820.000000 2670.000000 --44.833333 -18.500000 866.000000 2670.000000 --44.666667 -18.500000 633.000000 2670.000000 --44.500000 -18.500000 642.000000 2670.000000 --44.333333 -18.500000 626.000000 2670.000000 --44.166667 -18.500000 570.000000 2670.000000 --44.000000 -18.500000 1015.000000 2670.000000 --43.833333 -18.500000 1111.000000 2670.000000 --43.666667 -18.500000 1166.000000 2670.000000 --43.500000 -18.500000 976.000000 2670.000000 --43.333333 -18.500000 805.000000 2670.000000 --43.166667 -18.500000 833.000000 2670.000000 --43.000000 -18.500000 774.000000 2670.000000 --42.833333 -18.500000 768.000000 2670.000000 --42.666667 -18.500000 669.000000 2670.000000 --42.500000 -18.500000 675.000000 2670.000000 --42.333333 -18.500000 671.000000 2670.000000 --42.166667 -18.500000 391.000000 2670.000000 --42.000000 -18.500000 251.000000 2670.000000 --41.833333 -18.500000 358.000000 2670.000000 --41.666667 -18.500000 306.000000 2670.000000 --41.500000 -18.500000 537.000000 2670.000000 --41.333333 -18.500000 485.000000 2670.000000 --41.166667 -18.500000 851.000000 2670.000000 --41.000000 -18.500000 341.000000 2670.000000 --40.833333 -18.500000 518.000000 2670.000000 --40.666667 -18.500000 195.000000 2670.000000 --40.500000 -18.500000 168.000000 2670.000000 --40.333333 -18.500000 134.000000 2670.000000 --40.166667 -18.500000 93.000000 2670.000000 --40.000000 -18.500000 83.000000 2670.000000 --65.000000 -18.666667 2264.000000 2670.000000 --64.833333 -18.666667 1928.000000 2670.000000 --64.666667 -18.666667 1696.000000 2670.000000 --64.500000 -18.666667 1106.000000 2670.000000 --64.333333 -18.666667 1025.000000 2670.000000 --64.166667 -18.666667 2231.000000 2670.000000 --64.000000 -18.666667 1740.000000 2670.000000 --63.833333 -18.666667 1628.000000 2670.000000 --63.666667 -18.666667 765.000000 2670.000000 --63.500000 -18.666667 697.000000 2670.000000 --63.333333 -18.666667 566.000000 2670.000000 --63.166667 -18.666667 451.000000 2670.000000 --63.000000 -18.666667 390.000000 2670.000000 --62.833333 -18.666667 367.000000 2670.000000 --62.666667 -18.666667 351.000000 2670.000000 --62.500000 -18.666667 346.000000 2670.000000 --62.333333 -18.666667 333.000000 2670.000000 --62.166667 -18.666667 327.000000 2670.000000 --62.000000 -18.666667 318.000000 2670.000000 --61.833333 -18.666667 310.000000 2670.000000 --61.666667 -18.666667 302.000000 2670.000000 --61.500000 -18.666667 297.000000 2670.000000 --61.333333 -18.666667 292.000000 2670.000000 --61.166667 -18.666667 287.000000 2670.000000 --61.000000 -18.666667 360.000000 2670.000000 --60.833333 -18.666667 312.000000 2670.000000 --60.666667 -18.666667 403.000000 2670.000000 --60.500000 -18.666667 373.000000 2670.000000 --60.333333 -18.666667 353.000000 2670.000000 --60.166667 -18.666667 314.000000 2670.000000 --60.000000 -18.666667 365.000000 2670.000000 --59.833333 -18.666667 331.000000 2670.000000 --59.666667 -18.666667 241.000000 2670.000000 --59.500000 -18.666667 201.000000 2670.000000 --59.333333 -18.666667 179.000000 2670.000000 --59.166667 -18.666667 167.000000 2670.000000 --59.000000 -18.666667 151.000000 2670.000000 --58.833333 -18.666667 201.000000 2670.000000 --58.666667 -18.666667 161.000000 2670.000000 --58.500000 -18.666667 165.000000 2670.000000 --58.333333 -18.666667 152.000000 2670.000000 --58.166667 -18.666667 139.000000 2670.000000 --58.000000 -18.666667 137.000000 2670.000000 --57.833333 -18.666667 139.000000 2670.000000 --57.666667 -18.666667 128.000000 2670.000000 --57.500000 -18.666667 89.000000 2670.000000 --57.333333 -18.666667 90.000000 2670.000000 --57.166667 -18.666667 98.000000 2670.000000 --57.000000 -18.666667 102.000000 2670.000000 --56.833333 -18.666667 104.000000 2670.000000 --56.666667 -18.666667 108.000000 2670.000000 --56.500000 -18.666667 111.000000 2670.000000 --56.333333 -18.666667 117.000000 2670.000000 --56.166667 -18.666667 126.000000 2670.000000 --56.000000 -18.666667 133.000000 2670.000000 --55.833333 -18.666667 140.000000 2670.000000 --55.666667 -18.666667 152.000000 2670.000000 --55.500000 -18.666667 159.000000 2670.000000 --55.333333 -18.666667 166.000000 2670.000000 --55.166667 -18.666667 170.000000 2670.000000 --55.000000 -18.666667 210.000000 2670.000000 --54.833333 -18.666667 465.000000 2670.000000 --54.666667 -18.666667 285.000000 2670.000000 --54.500000 -18.666667 279.000000 2670.000000 --54.333333 -18.666667 312.000000 2670.000000 --54.166667 -18.666667 391.000000 2670.000000 --54.000000 -18.666667 411.000000 2670.000000 --53.833333 -18.666667 346.000000 2670.000000 --53.666667 -18.666667 395.000000 2670.000000 --53.500000 -18.666667 562.000000 2670.000000 --53.333333 -18.666667 607.000000 2670.000000 --53.166667 -18.666667 708.000000 2670.000000 --53.000000 -18.666667 711.000000 2670.000000 --52.833333 -18.666667 826.000000 2670.000000 --52.666667 -18.666667 824.000000 2670.000000 --52.500000 -18.666667 698.000000 2670.000000 --52.333333 -18.666667 692.000000 2670.000000 --52.166667 -18.666667 681.000000 2670.000000 --52.000000 -18.666667 699.000000 2670.000000 --51.833333 -18.666667 582.000000 2670.000000 --51.666667 -18.666667 572.000000 2670.000000 --51.500000 -18.666667 579.000000 2670.000000 --51.333333 -18.666667 454.000000 2670.000000 --51.166667 -18.666667 571.000000 2670.000000 --51.000000 -18.666667 510.000000 2670.000000 --50.833333 -18.666667 522.000000 2670.000000 --50.666667 -18.666667 551.000000 2670.000000 --50.500000 -18.666667 530.000000 2670.000000 --50.333333 -18.666667 427.000000 2670.000000 --50.166667 -18.666667 399.000000 2670.000000 --50.000000 -18.666667 422.000000 2670.000000 --49.833333 -18.666667 435.000000 2670.000000 --49.666667 -18.666667 494.000000 2670.000000 --49.500000 -18.666667 567.000000 2670.000000 --49.333333 -18.666667 473.000000 2670.000000 --49.166667 -18.666667 706.000000 2670.000000 --49.000000 -18.666667 751.000000 2670.000000 --48.833333 -18.666667 767.000000 2670.000000 --48.666667 -18.666667 896.000000 2670.000000 --48.500000 -18.666667 657.000000 2670.000000 --48.333333 -18.666667 575.000000 2670.000000 --48.166667 -18.666667 944.000000 2670.000000 --48.000000 -18.666667 915.000000 2670.000000 --47.833333 -18.666667 933.000000 2670.000000 --47.666667 -18.666667 820.000000 2670.000000 --47.500000 -18.666667 845.000000 2670.000000 --47.333333 -18.666667 787.000000 2670.000000 --47.166667 -18.666667 921.000000 2670.000000 --47.000000 -18.666667 998.000000 2670.000000 --46.833333 -18.666667 1163.000000 2670.000000 --46.666667 -18.666667 903.000000 2670.000000 --46.500000 -18.666667 841.000000 2670.000000 --46.333333 -18.666667 957.000000 2670.000000 --46.166667 -18.666667 813.000000 2670.000000 --46.000000 -18.666667 804.000000 2670.000000 --45.833333 -18.666667 810.000000 2670.000000 --45.666667 -18.666667 835.000000 2670.000000 --45.500000 -18.666667 704.000000 2670.000000 --45.333333 -18.666667 583.000000 2670.000000 --45.166667 -18.666667 570.000000 2670.000000 --45.000000 -18.666667 599.000000 2670.000000 --44.833333 -18.666667 732.000000 2670.000000 --44.666667 -18.666667 716.000000 2670.000000 --44.500000 -18.666667 635.000000 2670.000000 --44.333333 -18.666667 603.000000 2670.000000 --44.166667 -18.666667 570.000000 2670.000000 --44.000000 -18.666667 586.000000 2670.000000 --43.833333 -18.666667 990.000000 2670.000000 --43.666667 -18.666667 1021.000000 2670.000000 --43.500000 -18.666667 1239.000000 2670.000000 --43.333333 -18.666667 761.000000 2670.000000 --43.166667 -18.666667 789.000000 2670.000000 --43.000000 -18.666667 888.000000 2670.000000 --42.833333 -18.666667 833.000000 2670.000000 --42.666667 -18.666667 898.000000 2670.000000 --42.500000 -18.666667 846.000000 2670.000000 --42.333333 -18.666667 871.000000 2670.000000 --42.166667 -18.666667 396.000000 2670.000000 --42.000000 -18.666667 377.000000 2670.000000 --41.833333 -18.666667 192.000000 2670.000000 --41.666667 -18.666667 279.000000 2670.000000 --41.500000 -18.666667 409.000000 2670.000000 --41.333333 -18.666667 315.000000 2670.000000 --41.166667 -18.666667 242.000000 2670.000000 --41.000000 -18.666667 202.000000 2670.000000 --40.833333 -18.666667 200.000000 2670.000000 --40.666667 -18.666667 201.000000 2670.000000 --40.500000 -18.666667 121.000000 2670.000000 --40.333333 -18.666667 175.000000 2670.000000 --40.166667 -18.666667 30.000000 2670.000000 --40.000000 -18.666667 21.000000 2670.000000 --65.000000 -18.833333 2211.000000 2670.000000 --64.833333 -18.833333 2342.000000 2670.000000 --64.666667 -18.833333 2599.000000 2670.000000 --64.500000 -18.833333 1519.000000 2670.000000 --64.333333 -18.833333 2040.000000 2670.000000 --64.166667 -18.833333 2257.000000 2670.000000 --64.000000 -18.833333 2008.000000 2670.000000 --63.833333 -18.833333 1125.000000 2670.000000 --63.666667 -18.833333 763.000000 2670.000000 --63.500000 -18.833333 723.000000 2670.000000 --63.333333 -18.833333 429.000000 2670.000000 --63.166667 -18.833333 421.000000 2670.000000 --63.000000 -18.833333 392.000000 2670.000000 --62.833333 -18.833333 376.000000 2670.000000 --62.666667 -18.833333 360.000000 2670.000000 --62.500000 -18.833333 345.000000 2670.000000 --62.333333 -18.833333 337.000000 2670.000000 --62.166667 -18.833333 334.000000 2670.000000 --62.000000 -18.833333 329.000000 2670.000000 --61.833333 -18.833333 312.000000 2670.000000 --61.666667 -18.833333 343.000000 2670.000000 --61.500000 -18.833333 335.000000 2670.000000 --61.333333 -18.833333 356.000000 2670.000000 --61.166667 -18.833333 338.000000 2670.000000 --61.000000 -18.833333 351.000000 2670.000000 --60.833333 -18.833333 416.000000 2670.000000 --60.666667 -18.833333 406.000000 2670.000000 --60.500000 -18.833333 425.000000 2670.000000 --60.333333 -18.833333 310.000000 2670.000000 --60.166667 -18.833333 310.000000 2670.000000 --60.000000 -18.833333 271.000000 2670.000000 --59.833333 -18.833333 336.000000 2670.000000 --59.666667 -18.833333 335.000000 2670.000000 --59.500000 -18.833333 240.000000 2670.000000 --59.333333 -18.833333 208.000000 2670.000000 --59.166667 -18.833333 167.000000 2670.000000 --59.000000 -18.833333 170.000000 2670.000000 --58.833333 -18.833333 136.000000 2670.000000 --58.666667 -18.833333 129.000000 2670.000000 --58.500000 -18.833333 121.000000 2670.000000 --58.333333 -18.833333 109.000000 2670.000000 --58.166667 -18.833333 104.000000 2670.000000 --58.000000 -18.833333 90.000000 2670.000000 --57.833333 -18.833333 87.000000 2670.000000 --57.666667 -18.833333 87.000000 2670.000000 --57.500000 -18.833333 90.000000 2670.000000 --57.333333 -18.833333 88.000000 2670.000000 --57.166667 -18.833333 92.000000 2670.000000 --57.000000 -18.833333 95.000000 2670.000000 --56.833333 -18.833333 101.000000 2670.000000 --56.666667 -18.833333 103.000000 2670.000000 --56.500000 -18.833333 109.000000 2670.000000 --56.333333 -18.833333 116.000000 2670.000000 --56.166667 -18.833333 125.000000 2670.000000 --56.000000 -18.833333 130.000000 2670.000000 --55.833333 -18.833333 140.000000 2670.000000 --55.666667 -18.833333 145.000000 2670.000000 --55.500000 -18.833333 154.000000 2670.000000 --55.333333 -18.833333 157.000000 2670.000000 --55.166667 -18.833333 159.000000 2670.000000 --55.000000 -18.833333 255.000000 2670.000000 --54.833333 -18.833333 324.000000 2670.000000 --54.666667 -18.833333 382.000000 2670.000000 --54.500000 -18.833333 342.000000 2670.000000 --54.333333 -18.833333 347.000000 2670.000000 --54.166667 -18.833333 406.000000 2670.000000 --54.000000 -18.833333 451.000000 2670.000000 --53.833333 -18.833333 537.000000 2670.000000 --53.666667 -18.833333 607.000000 2670.000000 --53.500000 -18.833333 709.000000 2670.000000 --53.333333 -18.833333 527.000000 2670.000000 --53.166667 -18.833333 710.000000 2670.000000 --53.000000 -18.833333 688.000000 2670.000000 --52.833333 -18.833333 736.000000 2670.000000 --52.666667 -18.833333 827.000000 2670.000000 --52.500000 -18.833333 822.000000 2670.000000 --52.333333 -18.833333 563.000000 2670.000000 --52.166667 -18.833333 571.000000 2670.000000 --52.000000 -18.833333 619.000000 2670.000000 --51.833333 -18.833333 578.000000 2670.000000 --51.666667 -18.833333 509.000000 2670.000000 --51.500000 -18.833333 485.000000 2670.000000 --51.333333 -18.833333 619.000000 2670.000000 --51.166667 -18.833333 466.000000 2670.000000 --51.000000 -18.833333 486.000000 2670.000000 --50.833333 -18.833333 524.000000 2670.000000 --50.666667 -18.833333 525.000000 2670.000000 --50.500000 -18.833333 481.000000 2670.000000 --50.333333 -18.833333 444.000000 2670.000000 --50.166667 -18.833333 507.000000 2670.000000 --50.000000 -18.833333 422.000000 2670.000000 --49.833333 -18.833333 454.000000 2670.000000 --49.666667 -18.833333 563.000000 2670.000000 --49.500000 -18.833333 610.000000 2670.000000 --49.333333 -18.833333 630.000000 2670.000000 --49.166667 -18.833333 668.000000 2670.000000 --49.000000 -18.833333 687.000000 2670.000000 --48.833333 -18.833333 821.000000 2670.000000 --48.666667 -18.833333 822.000000 2670.000000 --48.500000 -18.833333 809.000000 2670.000000 --48.333333 -18.833333 872.000000 2670.000000 --48.166667 -18.833333 733.000000 2670.000000 --48.000000 -18.833333 903.000000 2670.000000 --47.833333 -18.833333 992.000000 2670.000000 --47.666667 -18.833333 891.000000 2670.000000 --47.500000 -18.833333 1030.000000 2670.000000 --47.333333 -18.833333 999.000000 2670.000000 --47.166667 -18.833333 944.000000 2670.000000 --47.000000 -18.833333 1016.000000 2670.000000 --46.833333 -18.833333 903.000000 2670.000000 --46.666667 -18.833333 858.000000 2670.000000 --46.500000 -18.833333 850.000000 2670.000000 --46.333333 -18.833333 869.000000 2670.000000 --46.166667 -18.833333 853.000000 2670.000000 --46.000000 -18.833333 860.000000 2670.000000 --45.833333 -18.833333 1015.000000 2670.000000 --45.666667 -18.833333 696.000000 2670.000000 --45.500000 -18.833333 633.000000 2670.000000 --45.333333 -18.833333 579.000000 2670.000000 --45.166667 -18.833333 574.000000 2670.000000 --45.000000 -18.833333 581.000000 2670.000000 --44.833333 -18.833333 612.000000 2670.000000 --44.666667 -18.833333 694.000000 2670.000000 --44.500000 -18.833333 727.000000 2670.000000 --44.333333 -18.833333 687.000000 2670.000000 --44.166667 -18.833333 630.000000 2670.000000 --44.000000 -18.833333 701.000000 2670.000000 --43.833333 -18.833333 1322.000000 2670.000000 --43.666667 -18.833333 1090.000000 2670.000000 --43.500000 -18.833333 719.000000 2670.000000 --43.333333 -18.833333 669.000000 2670.000000 --43.166667 -18.833333 745.000000 2670.000000 --43.000000 -18.833333 822.000000 2670.000000 --42.833333 -18.833333 933.000000 2670.000000 --42.666667 -18.833333 866.000000 2670.000000 --42.500000 -18.833333 803.000000 2670.000000 --42.333333 -18.833333 764.000000 2670.000000 --42.166667 -18.833333 420.000000 2670.000000 --42.000000 -18.833333 231.000000 2670.000000 --41.833333 -18.833333 232.000000 2670.000000 --41.666667 -18.833333 257.000000 2670.000000 --41.500000 -18.833333 290.000000 2670.000000 --41.333333 -18.833333 514.000000 2670.000000 --41.166667 -18.833333 485.000000 2670.000000 --41.000000 -18.833333 467.000000 2670.000000 --40.833333 -18.833333 308.000000 2670.000000 --40.666667 -18.833333 407.000000 2670.000000 --40.500000 -18.833333 162.000000 2670.000000 --40.333333 -18.833333 150.000000 2670.000000 --40.166667 -18.833333 92.000000 2670.000000 --40.000000 -18.833333 65.000000 2670.000000 --65.000000 -19.000000 2682.000000 2670.000000 --64.833333 -19.000000 2802.000000 2670.000000 --64.666667 -19.000000 2641.000000 2670.000000 --64.500000 -19.000000 1791.000000 2670.000000 --64.333333 -19.000000 2621.000000 2670.000000 --64.166667 -19.000000 1560.000000 2670.000000 --64.000000 -19.000000 1408.000000 2670.000000 --63.833333 -19.000000 1086.000000 2670.000000 --63.666667 -19.000000 744.000000 2670.000000 --63.500000 -19.000000 1049.000000 2670.000000 --63.333333 -19.000000 517.000000 2670.000000 --63.166667 -19.000000 498.000000 2670.000000 --63.000000 -19.000000 408.000000 2670.000000 --62.833333 -19.000000 378.000000 2670.000000 --62.666667 -19.000000 363.000000 2670.000000 --62.500000 -19.000000 353.000000 2670.000000 --62.333333 -19.000000 343.000000 2670.000000 --62.166667 -19.000000 343.000000 2670.000000 --62.000000 -19.000000 357.000000 2670.000000 --61.833333 -19.000000 368.000000 2670.000000 --61.666667 -19.000000 388.000000 2670.000000 --61.500000 -19.000000 391.000000 2670.000000 --61.333333 -19.000000 369.000000 2670.000000 --61.166667 -19.000000 363.000000 2670.000000 --61.000000 -19.000000 414.000000 2670.000000 --60.833333 -19.000000 394.000000 2670.000000 --60.666667 -19.000000 377.000000 2670.000000 --60.500000 -19.000000 360.000000 2670.000000 --60.333333 -19.000000 291.000000 2670.000000 --60.166667 -19.000000 285.000000 2670.000000 --60.000000 -19.000000 241.000000 2670.000000 --59.833333 -19.000000 244.000000 2670.000000 --59.666667 -19.000000 292.000000 2670.000000 --59.500000 -19.000000 378.000000 2670.000000 --59.333333 -19.000000 334.000000 2670.000000 --59.166667 -19.000000 229.000000 2670.000000 --59.000000 -19.000000 172.000000 2670.000000 --58.833333 -19.000000 133.000000 2670.000000 --58.666667 -19.000000 122.000000 2670.000000 --58.500000 -19.000000 110.000000 2670.000000 --58.333333 -19.000000 102.000000 2670.000000 --58.166667 -19.000000 100.000000 2670.000000 --58.000000 -19.000000 110.000000 2670.000000 --57.833333 -19.000000 158.000000 2670.000000 --57.666667 -19.000000 107.000000 2670.000000 --57.500000 -19.000000 87.000000 2670.000000 --57.333333 -19.000000 89.000000 2670.000000 --57.166667 -19.000000 89.000000 2670.000000 --57.000000 -19.000000 93.000000 2670.000000 --56.833333 -19.000000 95.000000 2670.000000 --56.666667 -19.000000 102.000000 2670.000000 --56.500000 -19.000000 109.000000 2670.000000 --56.333333 -19.000000 117.000000 2670.000000 --56.166667 -19.000000 121.000000 2670.000000 --56.000000 -19.000000 130.000000 2670.000000 --55.833333 -19.000000 134.000000 2670.000000 --55.666667 -19.000000 138.000000 2670.000000 --55.500000 -19.000000 143.000000 2670.000000 --55.333333 -19.000000 149.000000 2670.000000 --55.166667 -19.000000 158.000000 2670.000000 --55.000000 -19.000000 616.000000 2670.000000 --54.833333 -19.000000 504.000000 2670.000000 --54.666667 -19.000000 544.000000 2670.000000 --54.500000 -19.000000 456.000000 2670.000000 --54.333333 -19.000000 316.000000 2670.000000 --54.166667 -19.000000 337.000000 2670.000000 --54.000000 -19.000000 446.000000 2670.000000 --53.833333 -19.000000 423.000000 2670.000000 --53.666667 -19.000000 539.000000 2670.000000 --53.500000 -19.000000 554.000000 2670.000000 --53.333333 -19.000000 658.000000 2670.000000 --53.166667 -19.000000 544.000000 2670.000000 --53.000000 -19.000000 604.000000 2670.000000 --52.833333 -19.000000 690.000000 2670.000000 --52.666667 -19.000000 670.000000 2670.000000 --52.500000 -19.000000 537.000000 2670.000000 --52.333333 -19.000000 578.000000 2670.000000 --52.166667 -19.000000 599.000000 2670.000000 --52.000000 -19.000000 555.000000 2670.000000 --51.833333 -19.000000 587.000000 2670.000000 --51.666667 -19.000000 646.000000 2670.000000 --51.500000 -19.000000 530.000000 2670.000000 --51.333333 -19.000000 457.000000 2670.000000 --51.166667 -19.000000 454.000000 2670.000000 --51.000000 -19.000000 477.000000 2670.000000 --50.833333 -19.000000 450.000000 2670.000000 --50.666667 -19.000000 418.000000 2670.000000 --50.500000 -19.000000 399.000000 2670.000000 --50.333333 -19.000000 405.000000 2670.000000 --50.166667 -19.000000 621.000000 2670.000000 --50.000000 -19.000000 536.000000 2670.000000 --49.833333 -19.000000 523.000000 2670.000000 --49.666667 -19.000000 548.000000 2670.000000 --49.500000 -19.000000 584.000000 2670.000000 --49.333333 -19.000000 638.000000 2670.000000 --49.166667 -19.000000 637.000000 2670.000000 --49.000000 -19.000000 687.000000 2670.000000 --48.833333 -19.000000 725.000000 2670.000000 --48.666667 -19.000000 768.000000 2670.000000 --48.500000 -19.000000 796.000000 2670.000000 --48.333333 -19.000000 875.000000 2670.000000 --48.166667 -19.000000 871.000000 2670.000000 --48.000000 -19.000000 727.000000 2670.000000 --47.833333 -19.000000 930.000000 2670.000000 --47.666667 -19.000000 1008.000000 2670.000000 --47.500000 -19.000000 1001.000000 2670.000000 --47.333333 -19.000000 944.000000 2670.000000 --47.166667 -19.000000 905.000000 2670.000000 --47.000000 -19.000000 980.000000 2670.000000 --46.833333 -19.000000 972.000000 2670.000000 --46.666667 -19.000000 903.000000 2670.000000 --46.500000 -19.000000 881.000000 2670.000000 --46.333333 -19.000000 1038.000000 2670.000000 --46.166667 -19.000000 1078.000000 2670.000000 --46.000000 -19.000000 923.000000 2670.000000 --45.833333 -19.000000 925.000000 2670.000000 --45.666667 -19.000000 838.000000 2670.000000 --45.500000 -19.000000 593.000000 2670.000000 --45.333333 -19.000000 600.000000 2670.000000 --45.166667 -19.000000 674.000000 2670.000000 --45.000000 -19.000000 678.000000 2670.000000 --44.833333 -19.000000 733.000000 2670.000000 --44.666667 -19.000000 766.000000 2670.000000 --44.500000 -19.000000 792.000000 2670.000000 --44.333333 -19.000000 725.000000 2670.000000 --44.166667 -19.000000 667.000000 2670.000000 --44.000000 -19.000000 654.000000 2670.000000 --43.833333 -19.000000 742.000000 2670.000000 --43.666667 -19.000000 1399.000000 2670.000000 --43.500000 -19.000000 754.000000 2670.000000 --43.333333 -19.000000 688.000000 2670.000000 --43.166667 -19.000000 825.000000 2670.000000 --43.000000 -19.000000 592.000000 2670.000000 --42.833333 -19.000000 728.000000 2670.000000 --42.666667 -19.000000 780.000000 2670.000000 --42.500000 -19.000000 626.000000 2670.000000 --42.333333 -19.000000 301.000000 2670.000000 --42.166667 -19.000000 207.000000 2670.000000 --42.000000 -19.000000 240.000000 2670.000000 --41.833333 -19.000000 254.000000 2670.000000 --41.666667 -19.000000 220.000000 2670.000000 --41.500000 -19.000000 280.000000 2670.000000 --41.333333 -19.000000 431.000000 2670.000000 --41.166667 -19.000000 264.000000 2670.000000 --41.000000 -19.000000 765.000000 2670.000000 --40.833333 -19.000000 231.000000 2670.000000 --40.666667 -19.000000 227.000000 2670.000000 --40.500000 -19.000000 155.000000 2670.000000 --40.333333 -19.000000 134.000000 2670.000000 --40.166667 -19.000000 91.000000 2670.000000 --40.000000 -19.000000 34.000000 2670.000000 --65.000000 -19.166667 3130.000000 2670.000000 --64.833333 -19.166667 3160.000000 2670.000000 --64.666667 -19.166667 2620.000000 2670.000000 --64.500000 -19.166667 2213.000000 2670.000000 --64.333333 -19.166667 2274.000000 2670.000000 --64.166667 -19.166667 2025.000000 2670.000000 --64.000000 -19.166667 1173.000000 2670.000000 --63.833333 -19.166667 1560.000000 2670.000000 --63.666667 -19.166667 586.000000 2670.000000 --63.500000 -19.166667 810.000000 2670.000000 --63.333333 -19.166667 749.000000 2670.000000 --63.166667 -19.166667 594.000000 2670.000000 --63.000000 -19.166667 514.000000 2670.000000 --62.833333 -19.166667 428.000000 2670.000000 --62.666667 -19.166667 375.000000 2670.000000 --62.500000 -19.166667 374.000000 2670.000000 --62.333333 -19.166667 367.000000 2670.000000 --62.166667 -19.166667 356.000000 2670.000000 --62.000000 -19.166667 346.000000 2670.000000 --61.833333 -19.166667 352.000000 2670.000000 --61.666667 -19.166667 326.000000 2670.000000 --61.500000 -19.166667 364.000000 2670.000000 --61.333333 -19.166667 314.000000 2670.000000 --61.166667 -19.166667 314.000000 2670.000000 --61.000000 -19.166667 272.000000 2670.000000 --60.833333 -19.166667 300.000000 2670.000000 --60.666667 -19.166667 323.000000 2670.000000 --60.500000 -19.166667 312.000000 2670.000000 --60.333333 -19.166667 284.000000 2670.000000 --60.166667 -19.166667 227.000000 2670.000000 --60.000000 -19.166667 200.000000 2670.000000 --59.833333 -19.166667 236.000000 2670.000000 --59.666667 -19.166667 258.000000 2670.000000 --59.500000 -19.166667 271.000000 2670.000000 --59.333333 -19.166667 290.000000 2670.000000 --59.166667 -19.166667 330.000000 2670.000000 --59.000000 -19.166667 218.000000 2670.000000 --58.833333 -19.166667 164.000000 2670.000000 --58.666667 -19.166667 123.000000 2670.000000 --58.500000 -19.166667 112.000000 2670.000000 --58.333333 -19.166667 102.000000 2670.000000 --58.166667 -19.166667 96.000000 2670.000000 --58.000000 -19.166667 103.000000 2670.000000 --57.833333 -19.166667 108.000000 2670.000000 --57.666667 -19.166667 149.000000 2670.000000 --57.500000 -19.166667 561.000000 2670.000000 --57.333333 -19.166667 87.000000 2670.000000 --57.166667 -19.166667 85.000000 2670.000000 --57.000000 -19.166667 90.000000 2670.000000 --56.833333 -19.166667 95.000000 2670.000000 --56.666667 -19.166667 101.000000 2670.000000 --56.500000 -19.166667 106.000000 2670.000000 --56.333333 -19.166667 113.000000 2670.000000 --56.166667 -19.166667 118.000000 2670.000000 --56.000000 -19.166667 126.000000 2670.000000 --55.833333 -19.166667 128.000000 2670.000000 --55.666667 -19.166667 135.000000 2670.000000 --55.500000 -19.166667 138.000000 2670.000000 --55.333333 -19.166667 139.000000 2670.000000 --55.166667 -19.166667 155.000000 2670.000000 --55.000000 -19.166667 429.000000 2670.000000 --54.833333 -19.166667 523.000000 2670.000000 --54.666667 -19.166667 699.000000 2670.000000 --54.500000 -19.166667 657.000000 2670.000000 --54.333333 -19.166667 418.000000 2670.000000 --54.166667 -19.166667 356.000000 2670.000000 --54.000000 -19.166667 401.000000 2670.000000 --53.833333 -19.166667 583.000000 2670.000000 --53.666667 -19.166667 578.000000 2670.000000 --53.500000 -19.166667 564.000000 2670.000000 --53.333333 -19.166667 641.000000 2670.000000 --53.166667 -19.166667 623.000000 2670.000000 --53.000000 -19.166667 575.000000 2670.000000 --52.833333 -19.166667 599.000000 2670.000000 --52.666667 -19.166667 584.000000 2670.000000 --52.500000 -19.166667 566.000000 2670.000000 --52.333333 -19.166667 504.000000 2670.000000 --52.166667 -19.166667 524.000000 2670.000000 --52.000000 -19.166667 581.000000 2670.000000 --51.833333 -19.166667 697.000000 2670.000000 --51.666667 -19.166667 445.000000 2670.000000 --51.500000 -19.166667 417.000000 2670.000000 --51.333333 -19.166667 428.000000 2670.000000 --51.166667 -19.166667 433.000000 2670.000000 --51.000000 -19.166667 358.000000 2670.000000 --50.833333 -19.166667 455.000000 2670.000000 --50.666667 -19.166667 345.000000 2670.000000 --50.500000 -19.166667 449.000000 2670.000000 --50.333333 -19.166667 446.000000 2670.000000 --50.166667 -19.166667 478.000000 2670.000000 --50.000000 -19.166667 477.000000 2670.000000 --49.833333 -19.166667 529.000000 2670.000000 --49.666667 -19.166667 552.000000 2670.000000 --49.500000 -19.166667 566.000000 2670.000000 --49.333333 -19.166667 624.000000 2670.000000 --49.166667 -19.166667 649.000000 2670.000000 --49.000000 -19.166667 696.000000 2670.000000 --48.833333 -19.166667 706.000000 2670.000000 --48.666667 -19.166667 710.000000 2670.000000 --48.500000 -19.166667 774.000000 2670.000000 --48.333333 -19.166667 826.000000 2670.000000 --48.166667 -19.166667 885.000000 2670.000000 --48.000000 -19.166667 929.000000 2670.000000 --47.833333 -19.166667 849.000000 2670.000000 --47.666667 -19.166667 891.000000 2670.000000 --47.500000 -19.166667 938.000000 2670.000000 --47.333333 -19.166667 832.000000 2670.000000 --47.166667 -19.166667 809.000000 2670.000000 --47.000000 -19.166667 962.000000 2670.000000 --46.833333 -19.166667 904.000000 2670.000000 --46.666667 -19.166667 1012.000000 2670.000000 --46.500000 -19.166667 1023.000000 2670.000000 --46.333333 -19.166667 890.000000 2670.000000 --46.166667 -19.166667 1014.000000 2670.000000 --46.000000 -19.166667 1054.000000 2670.000000 --45.833333 -19.166667 831.000000 2670.000000 --45.666667 -19.166667 709.000000 2670.000000 --45.500000 -19.166667 627.000000 2670.000000 --45.333333 -19.166667 668.000000 2670.000000 --45.166667 -19.166667 669.000000 2670.000000 --45.000000 -19.166667 669.000000 2670.000000 --44.833333 -19.166667 696.000000 2670.000000 --44.666667 -19.166667 675.000000 2670.000000 --44.500000 -19.166667 732.000000 2670.000000 --44.333333 -19.166667 807.000000 2670.000000 --44.166667 -19.166667 704.000000 2670.000000 --44.000000 -19.166667 720.000000 2670.000000 --43.833333 -19.166667 1022.000000 2670.000000 --43.666667 -19.166667 1119.000000 2670.000000 --43.500000 -19.166667 1240.000000 2670.000000 --43.333333 -19.166667 561.000000 2670.000000 --43.166667 -19.166667 749.000000 2670.000000 --43.000000 -19.166667 731.000000 2670.000000 --42.833333 -19.166667 464.000000 2670.000000 --42.666667 -19.166667 418.000000 2670.000000 --42.500000 -19.166667 286.000000 2670.000000 --42.333333 -19.166667 266.000000 2670.000000 --42.166667 -19.166667 239.000000 2670.000000 --42.000000 -19.166667 407.000000 2670.000000 --41.833333 -19.166667 386.000000 2670.000000 --41.666667 -19.166667 331.000000 2670.000000 --41.500000 -19.166667 185.000000 2670.000000 --41.333333 -19.166667 387.000000 2670.000000 --41.166667 -19.166667 214.000000 2670.000000 --41.000000 -19.166667 268.000000 2670.000000 --40.833333 -19.166667 402.000000 2670.000000 --40.666667 -19.166667 179.000000 2670.000000 --40.500000 -19.166667 149.000000 2670.000000 --40.333333 -19.166667 142.000000 2670.000000 --40.166667 -19.166667 80.000000 2670.000000 --40.000000 -19.166667 48.000000 2670.000000 --65.000000 -19.333333 2222.000000 2670.000000 --64.833333 -19.333333 2792.000000 2670.000000 --64.666667 -19.333333 3224.000000 2670.000000 --64.500000 -19.333333 2332.000000 2670.000000 --64.333333 -19.333333 2112.000000 2670.000000 --64.166667 -19.333333 1769.000000 2670.000000 --64.000000 -19.333333 920.000000 2670.000000 --63.833333 -19.333333 1550.000000 2670.000000 --63.666667 -19.333333 845.000000 2670.000000 --63.500000 -19.333333 1062.000000 2670.000000 --63.333333 -19.333333 1364.000000 2670.000000 --63.166667 -19.333333 673.000000 2670.000000 --63.000000 -19.333333 571.000000 2670.000000 --62.833333 -19.333333 491.000000 2670.000000 --62.666667 -19.333333 400.000000 2670.000000 --62.500000 -19.333333 394.000000 2670.000000 --62.333333 -19.333333 383.000000 2670.000000 --62.166667 -19.333333 372.000000 2670.000000 --62.000000 -19.333333 353.000000 2670.000000 --61.833333 -19.333333 339.000000 2670.000000 --61.666667 -19.333333 331.000000 2670.000000 --61.500000 -19.333333 338.000000 2670.000000 --61.333333 -19.333333 321.000000 2670.000000 --61.166667 -19.333333 296.000000 2670.000000 --61.000000 -19.333333 269.000000 2670.000000 --60.833333 -19.333333 269.000000 2670.000000 --60.666667 -19.333333 246.000000 2670.000000 --60.500000 -19.333333 283.000000 2670.000000 --60.333333 -19.333333 272.000000 2670.000000 --60.166667 -19.333333 207.000000 2670.000000 --60.000000 -19.333333 176.000000 2670.000000 --59.833333 -19.333333 180.000000 2670.000000 --59.666667 -19.333333 203.000000 2670.000000 --59.500000 -19.333333 186.000000 2670.000000 --59.333333 -19.333333 245.000000 2670.000000 --59.166667 -19.333333 271.000000 2670.000000 --59.000000 -19.333333 311.000000 2670.000000 --58.833333 -19.333333 205.000000 2670.000000 --58.666667 -19.333333 135.000000 2670.000000 --58.500000 -19.333333 107.000000 2670.000000 --58.333333 -19.333333 100.000000 2670.000000 --58.166667 -19.333333 100.000000 2670.000000 --58.000000 -19.333333 84.000000 2670.000000 --57.833333 -19.333333 83.000000 2670.000000 --57.666667 -19.333333 83.000000 2670.000000 --57.500000 -19.333333 288.000000 2670.000000 --57.333333 -19.333333 86.000000 2670.000000 --57.166667 -19.333333 84.000000 2670.000000 --57.000000 -19.333333 90.000000 2670.000000 --56.833333 -19.333333 95.000000 2670.000000 --56.666667 -19.333333 99.000000 2670.000000 --56.500000 -19.333333 104.000000 2670.000000 --56.333333 -19.333333 108.000000 2670.000000 --56.166667 -19.333333 115.000000 2670.000000 --56.000000 -19.333333 118.000000 2670.000000 --55.833333 -19.333333 124.000000 2670.000000 --55.666667 -19.333333 127.000000 2670.000000 --55.500000 -19.333333 133.000000 2670.000000 --55.333333 -19.333333 145.000000 2670.000000 --55.166667 -19.333333 166.000000 2670.000000 --55.000000 -19.333333 255.000000 2670.000000 --54.833333 -19.333333 393.000000 2670.000000 --54.666667 -19.333333 638.000000 2670.000000 --54.500000 -19.333333 707.000000 2670.000000 --54.333333 -19.333333 390.000000 2670.000000 --54.166667 -19.333333 344.000000 2670.000000 --54.000000 -19.333333 398.000000 2670.000000 --53.833333 -19.333333 585.000000 2670.000000 --53.666667 -19.333333 490.000000 2670.000000 --53.500000 -19.333333 561.000000 2670.000000 --53.333333 -19.333333 562.000000 2670.000000 --53.166667 -19.333333 669.000000 2670.000000 --53.000000 -19.333333 605.000000 2670.000000 --52.833333 -19.333333 576.000000 2670.000000 --52.666667 -19.333333 441.000000 2670.000000 --52.500000 -19.333333 518.000000 2670.000000 --52.333333 -19.333333 507.000000 2670.000000 --52.166667 -19.333333 531.000000 2670.000000 --52.000000 -19.333333 500.000000 2670.000000 --51.833333 -19.333333 676.000000 2670.000000 --51.666667 -19.333333 486.000000 2670.000000 --51.500000 -19.333333 587.000000 2670.000000 --51.333333 -19.333333 477.000000 2670.000000 --51.166667 -19.333333 390.000000 2670.000000 --51.000000 -19.333333 388.000000 2670.000000 --50.833333 -19.333333 325.000000 2670.000000 --50.666667 -19.333333 447.000000 2670.000000 --50.500000 -19.333333 418.000000 2670.000000 --50.333333 -19.333333 463.000000 2670.000000 --50.166667 -19.333333 450.000000 2670.000000 --50.000000 -19.333333 470.000000 2670.000000 --49.833333 -19.333333 513.000000 2670.000000 --49.666667 -19.333333 662.000000 2670.000000 --49.500000 -19.333333 562.000000 2670.000000 --49.333333 -19.333333 544.000000 2670.000000 --49.166667 -19.333333 583.000000 2670.000000 --49.000000 -19.333333 609.000000 2670.000000 --48.833333 -19.333333 652.000000 2670.000000 --48.666667 -19.333333 715.000000 2670.000000 --48.500000 -19.333333 747.000000 2670.000000 --48.333333 -19.333333 749.000000 2670.000000 --48.166667 -19.333333 791.000000 2670.000000 --48.000000 -19.333333 971.000000 2670.000000 --47.833333 -19.333333 978.000000 2670.000000 --47.666667 -19.333333 907.000000 2670.000000 --47.500000 -19.333333 999.000000 2670.000000 --47.333333 -19.333333 994.000000 2670.000000 --47.166667 -19.333333 875.000000 2670.000000 --47.000000 -19.333333 884.000000 2670.000000 --46.833333 -19.333333 868.000000 2670.000000 --46.666667 -19.333333 874.000000 2670.000000 --46.500000 -19.333333 924.000000 2670.000000 --46.333333 -19.333333 998.000000 2670.000000 --46.166667 -19.333333 1145.000000 2670.000000 --46.000000 -19.333333 1107.000000 2670.000000 --45.833333 -19.333333 816.000000 2670.000000 --45.666667 -19.333333 674.000000 2670.000000 --45.500000 -19.333333 648.000000 2670.000000 --45.333333 -19.333333 623.000000 2670.000000 --45.166667 -19.333333 658.000000 2670.000000 --45.000000 -19.333333 657.000000 2670.000000 --44.833333 -19.333333 689.000000 2670.000000 --44.666667 -19.333333 716.000000 2670.000000 --44.500000 -19.333333 689.000000 2670.000000 --44.333333 -19.333333 819.000000 2670.000000 --44.166667 -19.333333 679.000000 2670.000000 --44.000000 -19.333333 641.000000 2670.000000 --43.833333 -19.333333 777.000000 2670.000000 --43.666667 -19.333333 784.000000 2670.000000 --43.500000 -19.333333 1039.000000 2670.000000 --43.333333 -19.333333 727.000000 2670.000000 --43.166667 -19.333333 661.000000 2670.000000 --43.000000 -19.333333 571.000000 2670.000000 --42.833333 -19.333333 829.000000 2670.000000 --42.666667 -19.333333 848.000000 2670.000000 --42.500000 -19.333333 288.000000 2670.000000 --42.333333 -19.333333 255.000000 2670.000000 --42.166667 -19.333333 233.000000 2670.000000 --42.000000 -19.333333 282.000000 2670.000000 --41.833333 -19.333333 320.000000 2670.000000 --41.666667 -19.333333 661.000000 2670.000000 --41.500000 -19.333333 761.000000 2670.000000 --41.333333 -19.333333 500.000000 2670.000000 --41.166667 -19.333333 230.000000 2670.000000 --41.000000 -19.333333 252.000000 2670.000000 --40.833333 -19.333333 560.000000 2670.000000 --40.666667 -19.333333 146.000000 2670.000000 --40.500000 -19.333333 509.000000 2670.000000 --40.333333 -19.333333 152.000000 2670.000000 --40.166667 -19.333333 46.000000 2670.000000 --40.000000 -19.333333 21.000000 2670.000000 --65.000000 -19.500000 2720.000000 2670.000000 --64.833333 -19.500000 2525.000000 2670.000000 --64.666667 -19.500000 3614.000000 2670.000000 --64.500000 -19.500000 2307.000000 2670.000000 --64.333333 -19.500000 2252.000000 2670.000000 --64.166667 -19.500000 2187.000000 2670.000000 --64.000000 -19.500000 1181.000000 2670.000000 --63.833333 -19.500000 1194.000000 2670.000000 --63.666667 -19.500000 841.000000 2670.000000 --63.500000 -19.500000 901.000000 2670.000000 --63.333333 -19.500000 1056.000000 2670.000000 --63.166667 -19.500000 748.000000 2670.000000 --63.000000 -19.500000 597.000000 2670.000000 --62.833333 -19.500000 505.000000 2670.000000 --62.666667 -19.500000 444.000000 2670.000000 --62.500000 -19.500000 417.000000 2670.000000 --62.333333 -19.500000 403.000000 2670.000000 --62.166667 -19.500000 384.000000 2670.000000 --62.000000 -19.500000 366.000000 2670.000000 --61.833333 -19.500000 344.000000 2670.000000 --61.666667 -19.500000 327.000000 2670.000000 --61.500000 -19.500000 309.000000 2670.000000 --61.333333 -19.500000 302.000000 2670.000000 --61.166667 -19.500000 303.000000 2670.000000 --61.000000 -19.500000 296.000000 2670.000000 --60.833333 -19.500000 257.000000 2670.000000 --60.666667 -19.500000 218.000000 2670.000000 --60.500000 -19.500000 217.000000 2670.000000 --60.333333 -19.500000 240.000000 2670.000000 --60.166667 -19.500000 228.000000 2670.000000 --60.000000 -19.500000 157.000000 2670.000000 --59.833333 -19.500000 155.000000 2670.000000 --59.666667 -19.500000 142.000000 2670.000000 --59.500000 -19.500000 139.000000 2670.000000 --59.333333 -19.500000 186.000000 2670.000000 --59.166667 -19.500000 224.000000 2670.000000 --59.000000 -19.500000 304.000000 2670.000000 --58.833333 -19.500000 193.000000 2670.000000 --58.666667 -19.500000 122.000000 2670.000000 --58.500000 -19.500000 96.000000 2670.000000 --58.333333 -19.500000 94.000000 2670.000000 --58.166667 -19.500000 85.000000 2670.000000 --58.000000 -19.500000 83.000000 2670.000000 --57.833333 -19.500000 83.000000 2670.000000 --57.666667 -19.500000 81.000000 2670.000000 --57.500000 -19.500000 83.000000 2670.000000 --57.333333 -19.500000 85.000000 2670.000000 --57.166667 -19.500000 89.000000 2670.000000 --57.000000 -19.500000 90.000000 2670.000000 --56.833333 -19.500000 93.000000 2670.000000 --56.666667 -19.500000 98.000000 2670.000000 --56.500000 -19.500000 102.000000 2670.000000 --56.333333 -19.500000 106.000000 2670.000000 --56.166667 -19.500000 112.000000 2670.000000 --56.000000 -19.500000 115.000000 2670.000000 --55.833333 -19.500000 118.000000 2670.000000 --55.666667 -19.500000 121.000000 2670.000000 --55.500000 -19.500000 125.000000 2670.000000 --55.333333 -19.500000 142.000000 2670.000000 --55.166667 -19.500000 451.000000 2670.000000 --55.000000 -19.500000 291.000000 2670.000000 --54.833333 -19.500000 469.000000 2670.000000 --54.666667 -19.500000 459.000000 2670.000000 --54.500000 -19.500000 692.000000 2670.000000 --54.333333 -19.500000 584.000000 2670.000000 --54.166667 -19.500000 388.000000 2670.000000 --54.000000 -19.500000 508.000000 2670.000000 --53.833333 -19.500000 654.000000 2670.000000 --53.666667 -19.500000 558.000000 2670.000000 --53.500000 -19.500000 522.000000 2670.000000 --53.333333 -19.500000 573.000000 2670.000000 --53.166667 -19.500000 515.000000 2670.000000 --53.000000 -19.500000 554.000000 2670.000000 --52.833333 -19.500000 488.000000 2670.000000 --52.666667 -19.500000 454.000000 2670.000000 --52.500000 -19.500000 431.000000 2670.000000 --52.333333 -19.500000 445.000000 2670.000000 --52.166667 -19.500000 436.000000 2670.000000 --52.000000 -19.500000 479.000000 2670.000000 --51.833333 -19.500000 717.000000 2670.000000 --51.666667 -19.500000 513.000000 2670.000000 --51.500000 -19.500000 438.000000 2670.000000 --51.333333 -19.500000 409.000000 2670.000000 --51.166667 -19.500000 426.000000 2670.000000 --51.000000 -19.500000 378.000000 2670.000000 --50.833333 -19.500000 341.000000 2670.000000 --50.666667 -19.500000 385.000000 2670.000000 --50.500000 -19.500000 464.000000 2670.000000 --50.333333 -19.500000 463.000000 2670.000000 --50.166667 -19.500000 451.000000 2670.000000 --50.000000 -19.500000 492.000000 2670.000000 --49.833333 -19.500000 606.000000 2670.000000 --49.666667 -19.500000 507.000000 2670.000000 --49.500000 -19.500000 520.000000 2670.000000 --49.333333 -19.500000 549.000000 2670.000000 --49.166667 -19.500000 665.000000 2670.000000 --49.000000 -19.500000 620.000000 2670.000000 --48.833333 -19.500000 675.000000 2670.000000 --48.666667 -19.500000 676.000000 2670.000000 --48.500000 -19.500000 752.000000 2670.000000 --48.333333 -19.500000 834.000000 2670.000000 --48.166667 -19.500000 819.000000 2670.000000 --48.000000 -19.500000 876.000000 2670.000000 --47.833333 -19.500000 985.000000 2670.000000 --47.666667 -19.500000 1010.000000 2670.000000 --47.500000 -19.500000 921.000000 2670.000000 --47.333333 -19.500000 1088.000000 2670.000000 --47.166667 -19.500000 907.000000 2670.000000 --47.000000 -19.500000 877.000000 2670.000000 --46.833333 -19.500000 986.000000 2670.000000 --46.666667 -19.500000 958.000000 2670.000000 --46.500000 -19.500000 908.000000 2670.000000 --46.333333 -19.500000 1007.000000 2670.000000 --46.166667 -19.500000 1071.000000 2670.000000 --46.000000 -19.500000 905.000000 2670.000000 --45.833333 -19.500000 693.000000 2670.000000 --45.666667 -19.500000 652.000000 2670.000000 --45.500000 -19.500000 696.000000 2670.000000 --45.333333 -19.500000 712.000000 2670.000000 --45.166667 -19.500000 693.000000 2670.000000 --45.000000 -19.500000 639.000000 2670.000000 --44.833333 -19.500000 666.000000 2670.000000 --44.666667 -19.500000 772.000000 2670.000000 --44.500000 -19.500000 702.000000 2670.000000 --44.333333 -19.500000 762.000000 2670.000000 --44.166667 -19.500000 783.000000 2670.000000 --44.000000 -19.500000 681.000000 2670.000000 --43.833333 -19.500000 706.000000 2670.000000 --43.666667 -19.500000 855.000000 2670.000000 --43.500000 -19.500000 1471.000000 2670.000000 --43.333333 -19.500000 630.000000 2670.000000 --43.166667 -19.500000 701.000000 2670.000000 --43.000000 -19.500000 861.000000 2670.000000 --42.833333 -19.500000 929.000000 2670.000000 --42.666667 -19.500000 587.000000 2670.000000 --42.500000 -19.500000 247.000000 2670.000000 --42.333333 -19.500000 479.000000 2670.000000 --42.166667 -19.500000 467.000000 2670.000000 --42.000000 -19.500000 726.000000 2670.000000 --41.833333 -19.500000 522.000000 2670.000000 --41.666667 -19.500000 336.000000 2670.000000 --41.500000 -19.500000 277.000000 2670.000000 --41.333333 -19.500000 199.000000 2670.000000 --41.166667 -19.500000 156.000000 2670.000000 --41.000000 -19.500000 67.000000 2670.000000 --40.833333 -19.500000 451.000000 2670.000000 --40.666667 -19.500000 152.000000 2670.000000 --40.500000 -19.500000 126.000000 2670.000000 --40.333333 -19.500000 32.000000 2670.000000 --40.166667 -19.500000 30.000000 2670.000000 --40.000000 -19.500000 17.000000 2670.000000 --65.000000 -19.666667 3089.000000 2670.000000 --64.833333 -19.666667 2206.000000 2670.000000 --64.666667 -19.666667 3192.000000 2670.000000 --64.500000 -19.666667 2169.000000 2670.000000 --64.333333 -19.666667 1820.000000 2670.000000 --64.166667 -19.666667 2088.000000 2670.000000 --64.000000 -19.666667 1807.000000 2670.000000 --63.833333 -19.666667 1043.000000 2670.000000 --63.666667 -19.666667 927.000000 2670.000000 --63.500000 -19.666667 1012.000000 2670.000000 --63.333333 -19.666667 1411.000000 2670.000000 --63.166667 -19.666667 772.000000 2670.000000 --63.000000 -19.666667 616.000000 2670.000000 --62.833333 -19.666667 529.000000 2670.000000 --62.666667 -19.666667 467.000000 2670.000000 --62.500000 -19.666667 444.000000 2670.000000 --62.333333 -19.666667 420.000000 2670.000000 --62.166667 -19.666667 396.000000 2670.000000 --62.000000 -19.666667 371.000000 2670.000000 --61.833333 -19.666667 425.000000 2670.000000 --61.666667 -19.666667 393.000000 2670.000000 --61.500000 -19.666667 346.000000 2670.000000 --61.333333 -19.666667 290.000000 2670.000000 --61.166667 -19.666667 273.000000 2670.000000 --61.000000 -19.666667 269.000000 2670.000000 --60.833333 -19.666667 237.000000 2670.000000 --60.666667 -19.666667 221.000000 2670.000000 --60.500000 -19.666667 207.000000 2670.000000 --60.333333 -19.666667 189.000000 2670.000000 --60.166667 -19.666667 209.000000 2670.000000 --60.000000 -19.666667 164.000000 2670.000000 --59.833333 -19.666667 137.000000 2670.000000 --59.666667 -19.666667 129.000000 2670.000000 --59.500000 -19.666667 119.000000 2670.000000 --59.333333 -19.666667 136.000000 2670.000000 --59.166667 -19.666667 168.000000 2670.000000 --59.000000 -19.666667 203.000000 2670.000000 --58.833333 -19.666667 176.000000 2670.000000 --58.666667 -19.666667 111.000000 2670.000000 --58.500000 -19.666667 84.000000 2670.000000 --58.333333 -19.666667 82.000000 2670.000000 --58.166667 -19.666667 81.000000 2670.000000 --58.000000 -19.666667 82.000000 2670.000000 --57.833333 -19.666667 81.000000 2670.000000 --57.666667 -19.666667 83.000000 2670.000000 --57.500000 -19.666667 84.000000 2670.000000 --57.333333 -19.666667 87.000000 2670.000000 --57.166667 -19.666667 89.000000 2670.000000 --57.000000 -19.666667 99.000000 2670.000000 --56.833333 -19.666667 93.000000 2670.000000 --56.666667 -19.666667 96.000000 2670.000000 --56.500000 -19.666667 101.000000 2670.000000 --56.333333 -19.666667 106.000000 2670.000000 --56.166667 -19.666667 109.000000 2670.000000 --56.000000 -19.666667 111.000000 2670.000000 --55.833333 -19.666667 117.000000 2670.000000 --55.666667 -19.666667 117.000000 2670.000000 --55.500000 -19.666667 119.000000 2670.000000 --55.333333 -19.666667 230.000000 2670.000000 --55.166667 -19.666667 354.000000 2670.000000 --55.000000 -19.666667 388.000000 2670.000000 --54.833333 -19.666667 535.000000 2670.000000 --54.666667 -19.666667 367.000000 2670.000000 --54.500000 -19.666667 472.000000 2670.000000 --54.333333 -19.666667 679.000000 2670.000000 --54.166667 -19.666667 600.000000 2670.000000 --54.000000 -19.666667 536.000000 2670.000000 --53.833333 -19.666667 632.000000 2670.000000 --53.666667 -19.666667 554.000000 2670.000000 --53.500000 -19.666667 442.000000 2670.000000 --53.333333 -19.666667 556.000000 2670.000000 --53.166667 -19.666667 475.000000 2670.000000 --53.000000 -19.666667 521.000000 2670.000000 --52.833333 -19.666667 424.000000 2670.000000 --52.666667 -19.666667 406.000000 2670.000000 --52.500000 -19.666667 428.000000 2670.000000 --52.333333 -19.666667 358.000000 2670.000000 --52.166667 -19.666667 407.000000 2670.000000 --52.000000 -19.666667 532.000000 2670.000000 --51.833333 -19.666667 497.000000 2670.000000 --51.666667 -19.666667 493.000000 2670.000000 --51.500000 -19.666667 471.000000 2670.000000 --51.333333 -19.666667 402.000000 2670.000000 --51.166667 -19.666667 390.000000 2670.000000 --51.000000 -19.666667 379.000000 2670.000000 --50.833333 -19.666667 446.000000 2670.000000 --50.666667 -19.666667 467.000000 2670.000000 --50.500000 -19.666667 450.000000 2670.000000 --50.333333 -19.666667 437.000000 2670.000000 --50.166667 -19.666667 447.000000 2670.000000 --50.000000 -19.666667 465.000000 2670.000000 --49.833333 -19.666667 510.000000 2670.000000 --49.666667 -19.666667 492.000000 2670.000000 --49.500000 -19.666667 481.000000 2670.000000 --49.333333 -19.666667 539.000000 2670.000000 --49.166667 -19.666667 588.000000 2670.000000 --49.000000 -19.666667 698.000000 2670.000000 --48.833333 -19.666667 734.000000 2670.000000 --48.666667 -19.666667 629.000000 2670.000000 --48.500000 -19.666667 683.000000 2670.000000 --48.333333 -19.666667 704.000000 2670.000000 --48.166667 -19.666667 716.000000 2670.000000 --48.000000 -19.666667 768.000000 2670.000000 --47.833333 -19.666667 833.000000 2670.000000 --47.666667 -19.666667 1021.000000 2670.000000 --47.500000 -19.666667 1045.000000 2670.000000 --47.333333 -19.666667 1070.000000 2670.000000 --47.166667 -19.666667 1169.000000 2670.000000 --47.000000 -19.666667 982.000000 2670.000000 --46.833333 -19.666667 1042.000000 2670.000000 --46.666667 -19.666667 937.000000 2670.000000 --46.500000 -19.666667 993.000000 2670.000000 --46.333333 -19.666667 1013.000000 2670.000000 --46.166667 -19.666667 1101.000000 2670.000000 --46.000000 -19.666667 1049.000000 2670.000000 --45.833333 -19.666667 688.000000 2670.000000 --45.666667 -19.666667 648.000000 2670.000000 --45.500000 -19.666667 632.000000 2670.000000 --45.333333 -19.666667 667.000000 2670.000000 --45.166667 -19.666667 760.000000 2670.000000 --45.000000 -19.666667 766.000000 2670.000000 --44.833333 -19.666667 878.000000 2670.000000 --44.666667 -19.666667 989.000000 2670.000000 --44.500000 -19.666667 703.000000 2670.000000 --44.333333 -19.666667 793.000000 2670.000000 --44.166667 -19.666667 878.000000 2670.000000 --44.000000 -19.666667 727.000000 2670.000000 --43.833333 -19.666667 840.000000 2670.000000 --43.666667 -19.666667 766.000000 2670.000000 --43.500000 -19.666667 742.000000 2670.000000 --43.333333 -19.666667 946.000000 2670.000000 --43.166667 -19.666667 863.000000 2670.000000 --43.000000 -19.666667 689.000000 2670.000000 --42.833333 -19.666667 520.000000 2670.000000 --42.666667 -19.666667 437.000000 2670.000000 --42.500000 -19.666667 262.000000 2670.000000 --42.333333 -19.666667 511.000000 2670.000000 --42.166667 -19.666667 689.000000 2670.000000 --42.000000 -19.666667 704.000000 2670.000000 --41.833333 -19.666667 384.000000 2670.000000 --41.666667 -19.666667 596.000000 2670.000000 --41.500000 -19.666667 233.000000 2670.000000 --41.333333 -19.666667 304.000000 2670.000000 --41.166667 -19.666667 425.000000 2670.000000 --41.000000 -19.666667 354.000000 2670.000000 --40.833333 -19.666667 172.000000 2670.000000 --40.666667 -19.666667 144.000000 2670.000000 --40.500000 -19.666667 317.000000 2670.000000 --40.333333 -19.666667 144.000000 2670.000000 --40.166667 -19.666667 47.000000 2670.000000 --40.000000 -19.666667 1.000000 2670.000000 --65.000000 -19.833333 3042.000000 2670.000000 --64.833333 -19.833333 3440.000000 2670.000000 --64.666667 -19.833333 2244.000000 2670.000000 --64.500000 -19.833333 2388.000000 2670.000000 --64.333333 -19.833333 2023.000000 2670.000000 --64.166667 -19.833333 2005.000000 2670.000000 --64.000000 -19.833333 1204.000000 2670.000000 --63.833333 -19.833333 1341.000000 2670.000000 --63.666667 -19.833333 1169.000000 2670.000000 --63.500000 -19.833333 1308.000000 2670.000000 --63.333333 -19.833333 1239.000000 2670.000000 --63.166667 -19.833333 769.000000 2670.000000 --63.000000 -19.833333 620.000000 2670.000000 --62.833333 -19.833333 538.000000 2670.000000 --62.666667 -19.833333 490.000000 2670.000000 --62.500000 -19.833333 456.000000 2670.000000 --62.333333 -19.833333 427.000000 2670.000000 --62.166667 -19.833333 400.000000 2670.000000 --62.000000 -19.833333 375.000000 2670.000000 --61.833333 -19.833333 360.000000 2670.000000 --61.666667 -19.833333 388.000000 2670.000000 --61.500000 -19.833333 343.000000 2670.000000 --61.333333 -19.833333 308.000000 2670.000000 --61.166667 -19.833333 263.000000 2670.000000 --61.000000 -19.833333 231.000000 2670.000000 --60.833333 -19.833333 216.000000 2670.000000 --60.666667 -19.833333 212.000000 2670.000000 --60.500000 -19.833333 199.000000 2670.000000 --60.333333 -19.833333 187.000000 2670.000000 --60.166667 -19.833333 174.000000 2670.000000 --60.000000 -19.833333 163.000000 2670.000000 --59.833333 -19.833333 138.000000 2670.000000 --59.666667 -19.833333 127.000000 2670.000000 --59.500000 -19.833333 118.000000 2670.000000 --59.333333 -19.833333 111.000000 2670.000000 --59.166667 -19.833333 112.000000 2670.000000 --59.000000 -19.833333 122.000000 2670.000000 --58.833333 -19.833333 118.000000 2670.000000 --58.666667 -19.833333 95.000000 2670.000000 --58.500000 -19.833333 91.000000 2670.000000 --58.333333 -19.833333 81.000000 2670.000000 --58.166667 -19.833333 79.000000 2670.000000 --58.000000 -19.833333 80.000000 2670.000000 --57.833333 -19.833333 101.000000 2670.000000 --57.666667 -19.833333 84.000000 2670.000000 --57.500000 -19.833333 84.000000 2670.000000 --57.333333 -19.833333 88.000000 2670.000000 --57.166667 -19.833333 96.000000 2670.000000 --57.000000 -19.833333 108.000000 2670.000000 --56.833333 -19.833333 95.000000 2670.000000 --56.666667 -19.833333 99.000000 2670.000000 --56.500000 -19.833333 103.000000 2670.000000 --56.333333 -19.833333 111.000000 2670.000000 --56.166667 -19.833333 115.000000 2670.000000 --56.000000 -19.833333 118.000000 2670.000000 --55.833333 -19.833333 123.000000 2670.000000 --55.666667 -19.833333 129.000000 2670.000000 --55.500000 -19.833333 144.000000 2670.000000 --55.333333 -19.833333 338.000000 2670.000000 --55.166667 -19.833333 357.000000 2670.000000 --55.000000 -19.833333 362.000000 2670.000000 --54.833333 -19.833333 294.000000 2670.000000 --54.666667 -19.833333 326.000000 2670.000000 --54.500000 -19.833333 350.000000 2670.000000 --54.333333 -19.833333 652.000000 2670.000000 --54.166667 -19.833333 637.000000 2670.000000 --54.000000 -19.833333 526.000000 2670.000000 --53.833333 -19.833333 598.000000 2670.000000 --53.666667 -19.833333 573.000000 2670.000000 --53.500000 -19.833333 488.000000 2670.000000 --53.333333 -19.833333 487.000000 2670.000000 --53.166667 -19.833333 402.000000 2670.000000 --53.000000 -19.833333 457.000000 2670.000000 --52.833333 -19.833333 483.000000 2670.000000 --52.666667 -19.833333 439.000000 2670.000000 --52.500000 -19.833333 475.000000 2670.000000 --52.333333 -19.833333 417.000000 2670.000000 --52.166667 -19.833333 413.000000 2670.000000 --52.000000 -19.833333 442.000000 2670.000000 --51.833333 -19.833333 493.000000 2670.000000 --51.666667 -19.833333 520.000000 2670.000000 --51.500000 -19.833333 447.000000 2670.000000 --51.333333 -19.833333 446.000000 2670.000000 --51.166667 -19.833333 430.000000 2670.000000 --51.000000 -19.833333 344.000000 2670.000000 --50.833333 -19.833333 386.000000 2670.000000 --50.666667 -19.833333 387.000000 2670.000000 --50.500000 -19.833333 415.000000 2670.000000 --50.333333 -19.833333 420.000000 2670.000000 --50.166667 -19.833333 423.000000 2670.000000 --50.000000 -19.833333 426.000000 2670.000000 --49.833333 -19.833333 477.000000 2670.000000 --49.666667 -19.833333 419.000000 2670.000000 --49.500000 -19.833333 461.000000 2670.000000 --49.333333 -19.833333 523.000000 2670.000000 --49.166667 -19.833333 536.000000 2670.000000 --49.000000 -19.833333 576.000000 2670.000000 --48.833333 -19.833333 585.000000 2670.000000 --48.666667 -19.833333 569.000000 2670.000000 --48.500000 -19.833333 638.000000 2670.000000 --48.333333 -19.833333 559.000000 2670.000000 --48.166667 -19.833333 669.000000 2670.000000 --48.000000 -19.833333 756.000000 2670.000000 --47.833333 -19.833333 694.000000 2670.000000 --47.666667 -19.833333 735.000000 2670.000000 --47.500000 -19.833333 959.000000 2670.000000 --47.333333 -19.833333 1104.000000 2670.000000 --47.166667 -19.833333 1040.000000 2670.000000 --47.000000 -19.833333 1142.000000 2670.000000 --46.833333 -19.833333 1184.000000 2670.000000 --46.666667 -19.833333 1202.000000 2670.000000 --46.500000 -19.833333 1062.000000 2670.000000 --46.333333 -19.833333 1182.000000 2670.000000 --46.166667 -19.833333 986.000000 2670.000000 --46.000000 -19.833333 693.000000 2670.000000 --45.833333 -19.833333 675.000000 2670.000000 --45.666667 -19.833333 694.000000 2670.000000 --45.500000 -19.833333 624.000000 2670.000000 --45.333333 -19.833333 736.000000 2670.000000 --45.166667 -19.833333 777.000000 2670.000000 --45.000000 -19.833333 804.000000 2670.000000 --44.833333 -19.833333 699.000000 2670.000000 --44.666667 -19.833333 848.000000 2670.000000 --44.500000 -19.833333 832.000000 2670.000000 --44.333333 -19.833333 752.000000 2670.000000 --44.166667 -19.833333 917.000000 2670.000000 --44.000000 -19.833333 836.000000 2670.000000 --43.833333 -19.833333 795.000000 2670.000000 --43.666667 -19.833333 1185.000000 2670.000000 --43.500000 -19.833333 812.000000 2670.000000 --43.333333 -19.833333 710.000000 2670.000000 --43.166667 -19.833333 873.000000 2670.000000 --43.000000 -19.833333 654.000000 2670.000000 --42.833333 -19.833333 799.000000 2670.000000 --42.666667 -19.833333 333.000000 2670.000000 --42.500000 -19.833333 276.000000 2670.000000 --42.333333 -19.833333 576.000000 2670.000000 --42.166667 -19.833333 799.000000 2670.000000 --42.000000 -19.833333 931.000000 2670.000000 --41.833333 -19.833333 583.000000 2670.000000 --41.666667 -19.833333 481.000000 2670.000000 --41.500000 -19.833333 275.000000 2670.000000 --41.333333 -19.833333 649.000000 2670.000000 --41.166667 -19.833333 376.000000 2670.000000 --41.000000 -19.833333 361.000000 2670.000000 --40.833333 -19.833333 270.000000 2670.000000 --40.666667 -19.833333 177.000000 2670.000000 --40.500000 -19.833333 674.000000 2670.000000 --40.333333 -19.833333 65.000000 2670.000000 --40.166667 -19.833333 45.000000 2670.000000 --40.000000 -19.833333 -19.000000 1670.000000 --65.000000 -20.000000 3229.000000 2670.000000 --64.833333 -20.000000 3833.000000 2670.000000 --64.666667 -20.000000 2391.000000 2670.000000 --64.500000 -20.000000 2972.000000 2670.000000 --64.333333 -20.000000 2600.000000 2670.000000 --64.166667 -20.000000 1973.000000 2670.000000 --64.000000 -20.000000 1261.000000 2670.000000 --63.833333 -20.000000 1532.000000 2670.000000 --63.666667 -20.000000 1013.000000 2670.000000 --63.500000 -20.000000 914.000000 2670.000000 --63.333333 -20.000000 844.000000 2670.000000 --63.166667 -20.000000 616.000000 2670.000000 --63.000000 -20.000000 572.000000 2670.000000 --62.833333 -20.000000 534.000000 2670.000000 --62.666667 -20.000000 493.000000 2670.000000 --62.500000 -20.000000 457.000000 2670.000000 --62.333333 -20.000000 427.000000 2670.000000 --62.166667 -20.000000 395.000000 2670.000000 --62.000000 -20.000000 370.000000 2670.000000 --61.833333 -20.000000 368.000000 2670.000000 --61.666667 -20.000000 356.000000 2670.000000 --61.500000 -20.000000 358.000000 2670.000000 --61.333333 -20.000000 326.000000 2670.000000 --61.166667 -20.000000 257.000000 2670.000000 --61.000000 -20.000000 250.000000 2670.000000 --60.833333 -20.000000 218.000000 2670.000000 --60.666667 -20.000000 198.000000 2670.000000 --60.500000 -20.000000 189.000000 2670.000000 --60.333333 -20.000000 181.000000 2670.000000 --60.166667 -20.000000 168.000000 2670.000000 --60.000000 -20.000000 155.000000 2670.000000 --59.833333 -20.000000 143.000000 2670.000000 --59.666667 -20.000000 132.000000 2670.000000 --59.500000 -20.000000 117.000000 2670.000000 --59.333333 -20.000000 114.000000 2670.000000 --59.166667 -20.000000 106.000000 2670.000000 --59.000000 -20.000000 101.000000 2670.000000 --58.833333 -20.000000 93.000000 2670.000000 --58.666667 -20.000000 92.000000 2670.000000 --58.500000 -20.000000 92.000000 2670.000000 --58.333333 -20.000000 85.000000 2670.000000 --58.166667 -20.000000 80.000000 2670.000000 --58.000000 -20.000000 83.000000 2670.000000 --57.833333 -20.000000 81.000000 2670.000000 --57.666667 -20.000000 81.000000 2670.000000 --57.500000 -20.000000 84.000000 2670.000000 --57.333333 -20.000000 87.000000 2670.000000 --57.166667 -20.000000 156.000000 2670.000000 --57.000000 -20.000000 273.000000 2670.000000 --56.833333 -20.000000 149.000000 2670.000000 --56.666667 -20.000000 105.000000 2670.000000 --56.500000 -20.000000 106.000000 2670.000000 --56.333333 -20.000000 160.000000 2670.000000 --56.166667 -20.000000 121.000000 2670.000000 --56.000000 -20.000000 125.000000 2670.000000 --55.833333 -20.000000 133.000000 2670.000000 --55.666667 -20.000000 141.000000 2670.000000 --55.500000 -20.000000 434.000000 2670.000000 --55.333333 -20.000000 211.000000 2670.000000 --55.166667 -20.000000 290.000000 2670.000000 --55.000000 -20.000000 310.000000 2670.000000 --54.833333 -20.000000 325.000000 2670.000000 --54.666667 -20.000000 290.000000 2670.000000 --54.500000 -20.000000 434.000000 2670.000000 --54.333333 -20.000000 631.000000 2670.000000 --54.166667 -20.000000 578.000000 2670.000000 --54.000000 -20.000000 504.000000 2670.000000 --53.833333 -20.000000 533.000000 2670.000000 --53.666667 -20.000000 556.000000 2670.000000 --53.500000 -20.000000 489.000000 2670.000000 --53.333333 -20.000000 457.000000 2670.000000 --53.166667 -20.000000 388.000000 2670.000000 --53.000000 -20.000000 421.000000 2670.000000 --52.833333 -20.000000 432.000000 2670.000000 --52.666667 -20.000000 417.000000 2670.000000 --52.500000 -20.000000 419.000000 2670.000000 --52.333333 -20.000000 407.000000 2670.000000 --52.166667 -20.000000 339.000000 2670.000000 --52.000000 -20.000000 408.000000 2670.000000 --51.833333 -20.000000 497.000000 2670.000000 --51.666667 -20.000000 415.000000 2670.000000 --51.500000 -20.000000 429.000000 2670.000000 --51.333333 -20.000000 400.000000 2670.000000 --51.166667 -20.000000 379.000000 2670.000000 --51.000000 -20.000000 323.000000 2670.000000 --50.833333 -20.000000 370.000000 2670.000000 --50.666667 -20.000000 386.000000 2670.000000 --50.500000 -20.000000 420.000000 2670.000000 --50.333333 -20.000000 473.000000 2670.000000 --50.166667 -20.000000 415.000000 2670.000000 --50.000000 -20.000000 389.000000 2670.000000 --49.833333 -20.000000 450.000000 2670.000000 --49.666667 -20.000000 445.000000 2670.000000 --49.500000 -20.000000 417.000000 2670.000000 --49.333333 -20.000000 444.000000 2670.000000 --49.166667 -20.000000 467.000000 2670.000000 --49.000000 -20.000000 524.000000 2670.000000 --48.833333 -20.000000 581.000000 2670.000000 --48.666667 -20.000000 487.000000 2670.000000 --48.500000 -20.000000 505.000000 2670.000000 --48.333333 -20.000000 553.000000 2670.000000 --48.166667 -20.000000 561.000000 2670.000000 --48.000000 -20.000000 534.000000 2670.000000 --47.833333 -20.000000 533.000000 2670.000000 --47.666667 -20.000000 549.000000 2670.000000 --47.500000 -20.000000 547.000000 2670.000000 --47.333333 -20.000000 946.000000 2670.000000 --47.166667 -20.000000 1150.000000 2670.000000 --47.000000 -20.000000 1065.000000 2670.000000 --46.833333 -20.000000 1173.000000 2670.000000 --46.666667 -20.000000 1139.000000 2670.000000 --46.500000 -20.000000 988.000000 2670.000000 --46.333333 -20.000000 981.000000 2670.000000 --46.166667 -20.000000 815.000000 2670.000000 --46.000000 -20.000000 677.000000 2670.000000 --45.833333 -20.000000 694.000000 2670.000000 --45.666667 -20.000000 667.000000 2670.000000 --45.500000 -20.000000 672.000000 2670.000000 --45.333333 -20.000000 844.000000 2670.000000 --45.166667 -20.000000 790.000000 2670.000000 --45.000000 -20.000000 768.000000 2670.000000 --44.833333 -20.000000 754.000000 2670.000000 --44.666667 -20.000000 772.000000 2670.000000 --44.500000 -20.000000 907.000000 2670.000000 --44.333333 -20.000000 800.000000 2670.000000 --44.166667 -20.000000 783.000000 2670.000000 --44.000000 -20.000000 1013.000000 2670.000000 --43.833333 -20.000000 799.000000 2670.000000 --43.666667 -20.000000 1334.000000 2670.000000 --43.500000 -20.000000 858.000000 2670.000000 --43.333333 -20.000000 730.000000 2670.000000 --43.166667 -20.000000 700.000000 2670.000000 --43.000000 -20.000000 855.000000 2670.000000 --42.833333 -20.000000 613.000000 2670.000000 --42.666667 -20.000000 276.000000 2670.000000 --42.500000 -20.000000 289.000000 2670.000000 --42.333333 -20.000000 520.000000 2670.000000 --42.166667 -20.000000 918.000000 2670.000000 --42.000000 -20.000000 793.000000 2670.000000 --41.833333 -20.000000 656.000000 2670.000000 --41.666667 -20.000000 494.000000 2670.000000 --41.500000 -20.000000 418.000000 2670.000000 --41.333333 -20.000000 665.000000 2670.000000 --41.166667 -20.000000 507.000000 2670.000000 --41.000000 -20.000000 396.000000 2670.000000 --40.833333 -20.000000 895.000000 2670.000000 --40.666667 -20.000000 750.000000 2670.000000 --40.500000 -20.000000 482.000000 2670.000000 --40.333333 -20.000000 17.000000 2670.000000 --40.166667 -20.000000 22.000000 2670.000000 --40.000000 -20.000000 -32.000000 1670.000000 --65.000000 -20.166667 3270.000000 2670.000000 --64.833333 -20.166667 4052.000000 2670.000000 --64.666667 -20.166667 2538.000000 2670.000000 --64.500000 -20.166667 2521.000000 2670.000000 --64.333333 -20.166667 2269.000000 2670.000000 --64.166667 -20.166667 1632.000000 2670.000000 --64.000000 -20.166667 1188.000000 2670.000000 --63.833333 -20.166667 989.000000 2670.000000 --63.666667 -20.166667 970.000000 2670.000000 --63.500000 -20.166667 886.000000 2670.000000 --63.333333 -20.166667 942.000000 2670.000000 --63.166667 -20.166667 838.000000 2670.000000 --63.000000 -20.166667 601.000000 2670.000000 --62.833333 -20.166667 523.000000 2670.000000 --62.666667 -20.166667 485.000000 2670.000000 --62.500000 -20.166667 450.000000 2670.000000 --62.333333 -20.166667 420.000000 2670.000000 --62.166667 -20.166667 393.000000 2670.000000 --62.000000 -20.166667 367.000000 2670.000000 --61.833333 -20.166667 347.000000 2670.000000 --61.666667 -20.166667 316.000000 2670.000000 --61.500000 -20.166667 293.000000 2670.000000 --61.333333 -20.166667 283.000000 2670.000000 --61.166667 -20.166667 252.000000 2670.000000 --61.000000 -20.166667 232.000000 2670.000000 --60.833333 -20.166667 215.000000 2670.000000 --60.666667 -20.166667 198.000000 2670.000000 --60.500000 -20.166667 184.000000 2670.000000 --60.333333 -20.166667 172.000000 2670.000000 --60.166667 -20.166667 160.000000 2670.000000 --60.000000 -20.166667 150.000000 2670.000000 --59.833333 -20.166667 139.000000 2670.000000 --59.666667 -20.166667 128.000000 2670.000000 --59.500000 -20.166667 121.000000 2670.000000 --59.333333 -20.166667 111.000000 2670.000000 --59.166667 -20.166667 106.000000 2670.000000 --59.000000 -20.166667 102.000000 2670.000000 --58.833333 -20.166667 97.000000 2670.000000 --58.666667 -20.166667 90.000000 2670.000000 --58.500000 -20.166667 90.000000 2670.000000 --58.333333 -20.166667 87.000000 2670.000000 --58.166667 -20.166667 80.000000 2670.000000 --58.000000 -20.166667 81.000000 2670.000000 --57.833333 -20.166667 80.000000 2670.000000 --57.666667 -20.166667 82.000000 2670.000000 --57.500000 -20.166667 85.000000 2670.000000 --57.333333 -20.166667 84.000000 2670.000000 --57.166667 -20.166667 123.000000 2670.000000 --57.000000 -20.166667 542.000000 2670.000000 --56.833333 -20.166667 304.000000 2670.000000 --56.666667 -20.166667 115.000000 2670.000000 --56.500000 -20.166667 114.000000 2670.000000 --56.333333 -20.166667 156.000000 2670.000000 --56.166667 -20.166667 157.000000 2670.000000 --56.000000 -20.166667 131.000000 2670.000000 --55.833333 -20.166667 141.000000 2670.000000 --55.666667 -20.166667 213.000000 2670.000000 --55.500000 -20.166667 212.000000 2670.000000 --55.333333 -20.166667 457.000000 2670.000000 --55.166667 -20.166667 221.000000 2670.000000 --55.000000 -20.166667 237.000000 2670.000000 --54.833333 -20.166667 273.000000 2670.000000 --54.666667 -20.166667 435.000000 2670.000000 --54.500000 -20.166667 615.000000 2670.000000 --54.333333 -20.166667 616.000000 2670.000000 --54.166667 -20.166667 573.000000 2670.000000 --54.000000 -20.166667 546.000000 2670.000000 --53.833333 -20.166667 461.000000 2670.000000 --53.666667 -20.166667 439.000000 2670.000000 --53.500000 -20.166667 516.000000 2670.000000 --53.333333 -20.166667 493.000000 2670.000000 --53.166667 -20.166667 398.000000 2670.000000 --53.000000 -20.166667 360.000000 2670.000000 --52.833333 -20.166667 426.000000 2670.000000 --52.666667 -20.166667 439.000000 2670.000000 --52.500000 -20.166667 367.000000 2670.000000 --52.333333 -20.166667 401.000000 2670.000000 --52.166667 -20.166667 362.000000 2670.000000 --52.000000 -20.166667 399.000000 2670.000000 --51.833333 -20.166667 444.000000 2670.000000 --51.666667 -20.166667 368.000000 2670.000000 --51.500000 -20.166667 396.000000 2670.000000 --51.333333 -20.166667 427.000000 2670.000000 --51.166667 -20.166667 336.000000 2670.000000 --51.000000 -20.166667 343.000000 2670.000000 --50.833333 -20.166667 425.000000 2670.000000 --50.666667 -20.166667 429.000000 2670.000000 --50.500000 -20.166667 460.000000 2670.000000 --50.333333 -20.166667 475.000000 2670.000000 --50.166667 -20.166667 469.000000 2670.000000 --50.000000 -20.166667 460.000000 2670.000000 --49.833333 -20.166667 476.000000 2670.000000 --49.666667 -20.166667 420.000000 2670.000000 --49.500000 -20.166667 472.000000 2670.000000 --49.333333 -20.166667 446.000000 2670.000000 --49.166667 -20.166667 458.000000 2670.000000 --49.000000 -20.166667 455.000000 2670.000000 --48.833333 -20.166667 446.000000 2670.000000 --48.666667 -20.166667 442.000000 2670.000000 --48.500000 -20.166667 499.000000 2670.000000 --48.333333 -20.166667 492.000000 2670.000000 --48.166667 -20.166667 542.000000 2670.000000 --48.000000 -20.166667 542.000000 2670.000000 --47.833333 -20.166667 570.000000 2670.000000 --47.666667 -20.166667 726.000000 2670.000000 --47.500000 -20.166667 690.000000 2670.000000 --47.333333 -20.166667 670.000000 2670.000000 --47.166667 -20.166667 903.000000 2670.000000 --47.000000 -20.166667 1017.000000 2670.000000 --46.833333 -20.166667 1208.000000 2670.000000 --46.666667 -20.166667 1303.000000 2670.000000 --46.500000 -20.166667 1046.000000 2670.000000 --46.333333 -20.166667 780.000000 2670.000000 --46.166667 -20.166667 798.000000 2670.000000 --46.000000 -20.166667 774.000000 2670.000000 --45.833333 -20.166667 671.000000 2670.000000 --45.666667 -20.166667 665.000000 2670.000000 --45.500000 -20.166667 744.000000 2670.000000 --45.333333 -20.166667 1003.000000 2670.000000 --45.166667 -20.166667 844.000000 2670.000000 --45.000000 -20.166667 843.000000 2670.000000 --44.833333 -20.166667 779.000000 2670.000000 --44.666667 -20.166667 880.000000 2670.000000 --44.500000 -20.166667 995.000000 2670.000000 --44.333333 -20.166667 841.000000 2670.000000 --44.166667 -20.166667 783.000000 2670.000000 --44.000000 -20.166667 1030.000000 2670.000000 --43.833333 -20.166667 965.000000 2670.000000 --43.666667 -20.166667 1139.000000 2670.000000 --43.500000 -20.166667 1032.000000 2670.000000 --43.333333 -20.166667 832.000000 2670.000000 --43.166667 -20.166667 798.000000 2670.000000 --43.000000 -20.166667 571.000000 2670.000000 --42.833333 -20.166667 357.000000 2670.000000 --42.666667 -20.166667 419.000000 2670.000000 --42.500000 -20.166667 425.000000 2670.000000 --42.333333 -20.166667 612.000000 2670.000000 --42.166667 -20.166667 1071.000000 2670.000000 --42.000000 -20.166667 667.000000 2670.000000 --41.833333 -20.166667 716.000000 2670.000000 --41.666667 -20.166667 616.000000 2670.000000 --41.500000 -20.166667 825.000000 2670.000000 --41.333333 -20.166667 1046.000000 2670.000000 --41.166667 -20.166667 584.000000 2670.000000 --41.000000 -20.166667 1113.000000 2670.000000 --40.833333 -20.166667 955.000000 2670.000000 --40.666667 -20.166667 763.000000 2670.000000 --40.500000 -20.166667 106.000000 2670.000000 --40.333333 -20.166667 186.000000 2670.000000 --40.166667 -20.166667 -10.000000 1670.000000 --40.000000 -20.166667 -38.000000 1670.000000 --65.000000 -20.333333 3307.000000 2670.000000 --64.833333 -20.333333 2577.000000 2670.000000 --64.666667 -20.333333 2513.000000 2670.000000 --64.500000 -20.333333 1672.000000 2670.000000 --64.333333 -20.333333 2138.000000 2670.000000 --64.166667 -20.333333 1365.000000 2670.000000 --64.000000 -20.333333 1213.000000 2670.000000 --63.833333 -20.333333 1210.000000 2670.000000 --63.666667 -20.333333 1305.000000 2670.000000 --63.500000 -20.333333 1128.000000 2670.000000 --63.333333 -20.333333 914.000000 2670.000000 --63.166667 -20.333333 756.000000 2670.000000 --63.000000 -20.333333 610.000000 2670.000000 --62.833333 -20.333333 545.000000 2670.000000 --62.666667 -20.333333 488.000000 2670.000000 --62.500000 -20.333333 446.000000 2670.000000 --62.333333 -20.333333 414.000000 2670.000000 --62.166667 -20.333333 380.000000 2670.000000 --62.000000 -20.333333 364.000000 2670.000000 --61.833333 -20.333333 336.000000 2670.000000 --61.666667 -20.333333 313.000000 2670.000000 --61.500000 -20.333333 290.000000 2670.000000 --61.333333 -20.333333 272.000000 2670.000000 --61.166667 -20.333333 248.000000 2670.000000 --61.000000 -20.333333 228.000000 2670.000000 --60.833333 -20.333333 211.000000 2670.000000 --60.666667 -20.333333 196.000000 2670.000000 --60.500000 -20.333333 181.000000 2670.000000 --60.333333 -20.333333 550.000000 2670.000000 --60.166667 -20.333333 153.000000 2670.000000 --60.000000 -20.333333 145.000000 2670.000000 --59.833333 -20.333333 137.000000 2670.000000 --59.666667 -20.333333 126.000000 2670.000000 --59.500000 -20.333333 121.000000 2670.000000 --59.333333 -20.333333 111.000000 2670.000000 --59.166667 -20.333333 108.000000 2670.000000 --59.000000 -20.333333 101.000000 2670.000000 --58.833333 -20.333333 98.000000 2670.000000 --58.666667 -20.333333 96.000000 2670.000000 --58.500000 -20.333333 89.000000 2670.000000 --58.333333 -20.333333 91.000000 2670.000000 --58.166667 -20.333333 88.000000 2670.000000 --58.000000 -20.333333 80.000000 2670.000000 --57.833333 -20.333333 80.000000 2670.000000 --57.666667 -20.333333 82.000000 2670.000000 --57.500000 -20.333333 82.000000 2670.000000 --57.333333 -20.333333 84.000000 2670.000000 --57.166667 -20.333333 158.000000 2670.000000 --57.000000 -20.333333 263.000000 2670.000000 --56.833333 -20.333333 157.000000 2670.000000 --56.666667 -20.333333 125.000000 2670.000000 --56.500000 -20.333333 138.000000 2670.000000 --56.333333 -20.333333 141.000000 2670.000000 --56.166667 -20.333333 198.000000 2670.000000 --56.000000 -20.333333 146.000000 2670.000000 --55.833333 -20.333333 144.000000 2670.000000 --55.666667 -20.333333 398.000000 2670.000000 --55.500000 -20.333333 237.000000 2670.000000 --55.333333 -20.333333 213.000000 2670.000000 --55.166667 -20.333333 222.000000 2670.000000 --55.000000 -20.333333 269.000000 2670.000000 --54.833333 -20.333333 346.000000 2670.000000 --54.666667 -20.333333 524.000000 2670.000000 --54.500000 -20.333333 603.000000 2670.000000 --54.333333 -20.333333 618.000000 2670.000000 --54.166667 -20.333333 560.000000 2670.000000 --54.000000 -20.333333 497.000000 2670.000000 --53.833333 -20.333333 446.000000 2670.000000 --53.666667 -20.333333 481.000000 2670.000000 --53.500000 -20.333333 504.000000 2670.000000 --53.333333 -20.333333 437.000000 2670.000000 --53.166667 -20.333333 411.000000 2670.000000 --53.000000 -20.333333 356.000000 2670.000000 --52.833333 -20.333333 362.000000 2670.000000 --52.666667 -20.333333 442.000000 2670.000000 --52.500000 -20.333333 416.000000 2670.000000 --52.333333 -20.333333 404.000000 2670.000000 --52.166667 -20.333333 315.000000 2670.000000 --52.000000 -20.333333 402.000000 2670.000000 --51.833333 -20.333333 402.000000 2670.000000 --51.666667 -20.333333 379.000000 2670.000000 --51.500000 -20.333333 360.000000 2670.000000 --51.333333 -20.333333 325.000000 2670.000000 --51.166667 -20.333333 323.000000 2670.000000 --51.000000 -20.333333 359.000000 2670.000000 --50.833333 -20.333333 351.000000 2670.000000 --50.666667 -20.333333 433.000000 2670.000000 --50.500000 -20.333333 446.000000 2670.000000 --50.333333 -20.333333 442.000000 2670.000000 --50.166667 -20.333333 483.000000 2670.000000 --50.000000 -20.333333 496.000000 2670.000000 --49.833333 -20.333333 526.000000 2670.000000 --49.666667 -20.333333 481.000000 2670.000000 --49.500000 -20.333333 517.000000 2670.000000 --49.333333 -20.333333 484.000000 2670.000000 --49.166667 -20.333333 462.000000 2670.000000 --49.000000 -20.333333 494.000000 2670.000000 --48.833333 -20.333333 490.000000 2670.000000 --48.666667 -20.333333 517.000000 2670.000000 --48.500000 -20.333333 459.000000 2670.000000 --48.333333 -20.333333 512.000000 2670.000000 --48.166667 -20.333333 551.000000 2670.000000 --48.000000 -20.333333 535.000000 2670.000000 --47.833333 -20.333333 623.000000 2670.000000 --47.666667 -20.333333 769.000000 2670.000000 --47.500000 -20.333333 943.000000 2670.000000 --47.333333 -20.333333 753.000000 2670.000000 --47.166667 -20.333333 845.000000 2670.000000 --47.000000 -20.333333 669.000000 2670.000000 --46.833333 -20.333333 717.000000 2670.000000 --46.666667 -20.333333 915.000000 2670.000000 --46.500000 -20.333333 869.000000 2670.000000 --46.333333 -20.333333 851.000000 2670.000000 --46.166667 -20.333333 809.000000 2670.000000 --46.000000 -20.333333 715.000000 2670.000000 --45.833333 -20.333333 710.000000 2670.000000 --45.666667 -20.333333 689.000000 2670.000000 --45.500000 -20.333333 818.000000 2670.000000 --45.333333 -20.333333 1062.000000 2670.000000 --45.166667 -20.333333 905.000000 2670.000000 --45.000000 -20.333333 800.000000 2670.000000 --44.833333 -20.333333 795.000000 2670.000000 --44.666667 -20.333333 778.000000 2670.000000 --44.500000 -20.333333 1068.000000 2670.000000 --44.333333 -20.333333 845.000000 2670.000000 --44.166667 -20.333333 919.000000 2670.000000 --44.000000 -20.333333 1125.000000 2670.000000 --43.833333 -20.333333 1033.000000 2670.000000 --43.666667 -20.333333 1069.000000 2670.000000 --43.500000 -20.333333 1200.000000 2670.000000 --43.333333 -20.333333 790.000000 2670.000000 --43.166667 -20.333333 600.000000 2670.000000 --43.000000 -20.333333 574.000000 2670.000000 --42.833333 -20.333333 502.000000 2670.000000 --42.666667 -20.333333 414.000000 2670.000000 --42.500000 -20.333333 719.000000 2670.000000 --42.333333 -20.333333 695.000000 2670.000000 --42.166667 -20.333333 841.000000 2670.000000 --42.000000 -20.333333 949.000000 2670.000000 --41.833333 -20.333333 798.000000 2670.000000 --41.666667 -20.333333 926.000000 2670.000000 --41.500000 -20.333333 896.000000 2670.000000 --41.333333 -20.333333 1155.000000 2670.000000 --41.166667 -20.333333 863.000000 2670.000000 --41.000000 -20.333333 1038.000000 2670.000000 --40.833333 -20.333333 896.000000 2670.000000 --40.666667 -20.333333 659.000000 2670.000000 --40.500000 -20.333333 450.000000 2670.000000 --40.333333 -20.333333 15.000000 2670.000000 --40.166667 -20.333333 -27.000000 1670.000000 --40.000000 -20.333333 -43.000000 1670.000000 --65.000000 -20.500000 3395.000000 2670.000000 --64.833333 -20.500000 3448.000000 2670.000000 --64.666667 -20.500000 1533.000000 2670.000000 --64.500000 -20.500000 1812.000000 2670.000000 --64.333333 -20.500000 1735.000000 2670.000000 --64.166667 -20.500000 1089.000000 2670.000000 --64.000000 -20.500000 1263.000000 2670.000000 --63.833333 -20.500000 1221.000000 2670.000000 --63.666667 -20.500000 1513.000000 2670.000000 --63.500000 -20.500000 1058.000000 2670.000000 --63.333333 -20.500000 973.000000 2670.000000 --63.166667 -20.500000 778.000000 2670.000000 --63.000000 -20.500000 651.000000 2670.000000 --62.833333 -20.500000 524.000000 2670.000000 --62.666667 -20.500000 482.000000 2670.000000 --62.500000 -20.500000 437.000000 2670.000000 --62.333333 -20.500000 402.000000 2670.000000 --62.166667 -20.500000 369.000000 2670.000000 --62.000000 -20.500000 348.000000 2670.000000 --61.833333 -20.500000 324.000000 2670.000000 --61.666667 -20.500000 301.000000 2670.000000 --61.500000 -20.500000 276.000000 2670.000000 --61.333333 -20.500000 254.000000 2670.000000 --61.166667 -20.500000 229.000000 2670.000000 --61.000000 -20.500000 220.000000 2670.000000 --60.833333 -20.500000 201.000000 2670.000000 --60.666667 -20.500000 189.000000 2670.000000 --60.500000 -20.500000 174.000000 2670.000000 --60.333333 -20.500000 162.000000 2670.000000 --60.166667 -20.500000 151.000000 2670.000000 --60.000000 -20.500000 138.000000 2670.000000 --59.833333 -20.500000 132.000000 2670.000000 --59.666667 -20.500000 126.000000 2670.000000 --59.500000 -20.500000 119.000000 2670.000000 --59.333333 -20.500000 111.000000 2670.000000 --59.166667 -20.500000 107.000000 2670.000000 --59.000000 -20.500000 103.000000 2670.000000 --58.833333 -20.500000 98.000000 2670.000000 --58.666667 -20.500000 95.000000 2670.000000 --58.500000 -20.500000 93.000000 2670.000000 --58.333333 -20.500000 94.000000 2670.000000 --58.166667 -20.500000 89.000000 2670.000000 --58.000000 -20.500000 79.000000 2670.000000 --57.833333 -20.500000 80.000000 2670.000000 --57.666667 -20.500000 79.000000 2670.000000 --57.500000 -20.500000 83.000000 2670.000000 --57.333333 -20.500000 96.000000 2670.000000 --57.166667 -20.500000 210.000000 2670.000000 --57.000000 -20.500000 159.000000 2670.000000 --56.833333 -20.500000 323.000000 2670.000000 --56.666667 -20.500000 200.000000 2670.000000 --56.500000 -20.500000 183.000000 2670.000000 --56.333333 -20.500000 128.000000 2670.000000 --56.166667 -20.500000 215.000000 2670.000000 --56.000000 -20.500000 212.000000 2670.000000 --55.833333 -20.500000 158.000000 2670.000000 --55.666667 -20.500000 185.000000 2670.000000 --55.500000 -20.500000 281.000000 2670.000000 --55.333333 -20.500000 302.000000 2670.000000 --55.166667 -20.500000 248.000000 2670.000000 --55.000000 -20.500000 283.000000 2670.000000 --54.833333 -20.500000 493.000000 2670.000000 --54.666667 -20.500000 527.000000 2670.000000 --54.500000 -20.500000 632.000000 2670.000000 --54.333333 -20.500000 499.000000 2670.000000 --54.166667 -20.500000 490.000000 2670.000000 --54.000000 -20.500000 551.000000 2670.000000 --53.833333 -20.500000 453.000000 2670.000000 --53.666667 -20.500000 414.000000 2670.000000 --53.500000 -20.500000 426.000000 2670.000000 --53.333333 -20.500000 459.000000 2670.000000 --53.166667 -20.500000 370.000000 2670.000000 --53.000000 -20.500000 370.000000 2670.000000 --52.833333 -20.500000 315.000000 2670.000000 --52.666667 -20.500000 399.000000 2670.000000 --52.500000 -20.500000 400.000000 2670.000000 --52.333333 -20.500000 402.000000 2670.000000 --52.166667 -20.500000 387.000000 2670.000000 --52.000000 -20.500000 369.000000 2670.000000 --51.833333 -20.500000 382.000000 2670.000000 --51.666667 -20.500000 321.000000 2670.000000 --51.500000 -20.500000 311.000000 2670.000000 --51.333333 -20.500000 361.000000 2670.000000 --51.166667 -20.500000 326.000000 2670.000000 --51.000000 -20.500000 365.000000 2670.000000 --50.833333 -20.500000 375.000000 2670.000000 --50.666667 -20.500000 359.000000 2670.000000 --50.500000 -20.500000 352.000000 2670.000000 --50.333333 -20.500000 408.000000 2670.000000 --50.166667 -20.500000 396.000000 2670.000000 --50.000000 -20.500000 458.000000 2670.000000 --49.833333 -20.500000 499.000000 2670.000000 --49.666667 -20.500000 489.000000 2670.000000 --49.500000 -20.500000 452.000000 2670.000000 --49.333333 -20.500000 538.000000 2670.000000 --49.166667 -20.500000 482.000000 2670.000000 --49.000000 -20.500000 508.000000 2670.000000 --48.833333 -20.500000 493.000000 2670.000000 --48.666667 -20.500000 568.000000 2670.000000 --48.500000 -20.500000 513.000000 2670.000000 --48.333333 -20.500000 493.000000 2670.000000 --48.166667 -20.500000 566.000000 2670.000000 --48.000000 -20.500000 602.000000 2670.000000 --47.833333 -20.500000 573.000000 2670.000000 --47.666667 -20.500000 794.000000 2670.000000 --47.500000 -20.500000 924.000000 2670.000000 --47.333333 -20.500000 826.000000 2670.000000 --47.166667 -20.500000 1100.000000 2670.000000 --47.000000 -20.500000 1066.000000 2670.000000 --46.833333 -20.500000 740.000000 2670.000000 --46.666667 -20.500000 709.000000 2670.000000 --46.500000 -20.500000 1044.000000 2670.000000 --46.333333 -20.500000 945.000000 2670.000000 --46.166667 -20.500000 822.000000 2670.000000 --46.000000 -20.500000 814.000000 2670.000000 --45.833333 -20.500000 795.000000 2670.000000 --45.666667 -20.500000 853.000000 2670.000000 --45.500000 -20.500000 811.000000 2670.000000 --45.333333 -20.500000 936.000000 2670.000000 --45.166667 -20.500000 870.000000 2670.000000 --45.000000 -20.500000 806.000000 2670.000000 --44.833333 -20.500000 841.000000 2670.000000 --44.666667 -20.500000 898.000000 2670.000000 --44.500000 -20.500000 803.000000 2670.000000 --44.333333 -20.500000 1094.000000 2670.000000 --44.166667 -20.500000 1045.000000 2670.000000 --44.000000 -20.500000 858.000000 2670.000000 --43.833333 -20.500000 944.000000 2670.000000 --43.666667 -20.500000 1300.000000 2670.000000 --43.500000 -20.500000 1015.000000 2670.000000 --43.333333 -20.500000 750.000000 2670.000000 --43.166667 -20.500000 734.000000 2670.000000 --43.000000 -20.500000 540.000000 2670.000000 --42.833333 -20.500000 668.000000 2670.000000 --42.666667 -20.500000 480.000000 2670.000000 --42.500000 -20.500000 839.000000 2670.000000 --42.333333 -20.500000 1033.000000 2670.000000 --42.166667 -20.500000 1105.000000 2670.000000 --42.000000 -20.500000 1056.000000 2670.000000 --41.833333 -20.500000 1750.000000 2670.000000 --41.666667 -20.500000 854.000000 2670.000000 --41.500000 -20.500000 423.000000 2670.000000 --41.333333 -20.500000 473.000000 2670.000000 --41.166667 -20.500000 555.000000 2670.000000 --41.000000 -20.500000 1089.000000 2670.000000 --40.833333 -20.500000 662.000000 2670.000000 --40.666667 -20.500000 673.000000 2670.000000 --40.500000 -20.500000 21.000000 2670.000000 --40.333333 -20.500000 -8.000000 1670.000000 --40.166667 -20.500000 -32.000000 1670.000000 --40.000000 -20.500000 -60.000000 1670.000000 --65.000000 -20.666667 3663.000000 2670.000000 --64.833333 -20.666667 3133.000000 2670.000000 --64.666667 -20.666667 3147.000000 2670.000000 --64.500000 -20.666667 2796.000000 2670.000000 --64.333333 -20.666667 1655.000000 2670.000000 --64.166667 -20.666667 1054.000000 2670.000000 --64.000000 -20.666667 1024.000000 2670.000000 --63.833333 -20.666667 1425.000000 2670.000000 --63.666667 -20.666667 1098.000000 2670.000000 --63.500000 -20.666667 1017.000000 2670.000000 --63.333333 -20.666667 840.000000 2670.000000 --63.166667 -20.666667 732.000000 2670.000000 --63.000000 -20.666667 587.000000 2670.000000 --62.833333 -20.666667 510.000000 2670.000000 --62.666667 -20.666667 454.000000 2670.000000 --62.500000 -20.666667 421.000000 2670.000000 --62.333333 -20.666667 389.000000 2670.000000 --62.166667 -20.666667 353.000000 2670.000000 --62.000000 -20.666667 334.000000 2670.000000 --61.833333 -20.666667 315.000000 2670.000000 --61.666667 -20.666667 285.000000 2670.000000 --61.500000 -20.666667 265.000000 2670.000000 --61.333333 -20.666667 246.000000 2670.000000 --61.166667 -20.666667 227.000000 2670.000000 --61.000000 -20.666667 211.000000 2670.000000 --60.833333 -20.666667 195.000000 2670.000000 --60.666667 -20.666667 178.000000 2670.000000 --60.500000 -20.666667 170.000000 2670.000000 --60.333333 -20.666667 156.000000 2670.000000 --60.166667 -20.666667 146.000000 2670.000000 --60.000000 -20.666667 136.000000 2670.000000 --59.833333 -20.666667 128.000000 2670.000000 --59.666667 -20.666667 123.000000 2670.000000 --59.500000 -20.666667 116.000000 2670.000000 --59.333333 -20.666667 113.000000 2670.000000 --59.166667 -20.666667 106.000000 2670.000000 --59.000000 -20.666667 104.000000 2670.000000 --58.833333 -20.666667 101.000000 2670.000000 --58.666667 -20.666667 99.000000 2670.000000 --58.500000 -20.666667 95.000000 2670.000000 --58.333333 -20.666667 90.000000 2670.000000 --58.166667 -20.666667 91.000000 2670.000000 --58.000000 -20.666667 81.000000 2670.000000 --57.833333 -20.666667 80.000000 2670.000000 --57.666667 -20.666667 81.000000 2670.000000 --57.500000 -20.666667 195.000000 2670.000000 --57.333333 -20.666667 131.000000 2670.000000 --57.166667 -20.666667 158.000000 2670.000000 --57.000000 -20.666667 351.000000 2670.000000 --56.833333 -20.666667 536.000000 2670.000000 --56.666667 -20.666667 347.000000 2670.000000 --56.500000 -20.666667 166.000000 2670.000000 --56.333333 -20.666667 200.000000 2670.000000 --56.166667 -20.666667 153.000000 2670.000000 --56.000000 -20.666667 205.000000 2670.000000 --55.833333 -20.666667 187.000000 2670.000000 --55.666667 -20.666667 286.000000 2670.000000 --55.500000 -20.666667 286.000000 2670.000000 --55.333333 -20.666667 247.000000 2670.000000 --55.166667 -20.666667 291.000000 2670.000000 --55.000000 -20.666667 305.000000 2670.000000 --54.833333 -20.666667 506.000000 2670.000000 --54.666667 -20.666667 482.000000 2670.000000 --54.500000 -20.666667 560.000000 2670.000000 --54.333333 -20.666667 595.000000 2670.000000 --54.166667 -20.666667 567.000000 2670.000000 --54.000000 -20.666667 471.000000 2670.000000 --53.833333 -20.666667 445.000000 2670.000000 --53.666667 -20.666667 370.000000 2670.000000 --53.500000 -20.666667 388.000000 2670.000000 --53.333333 -20.666667 433.000000 2670.000000 --53.166667 -20.666667 442.000000 2670.000000 --53.000000 -20.666667 404.000000 2670.000000 --52.833333 -20.666667 431.000000 2670.000000 --52.666667 -20.666667 296.000000 2670.000000 --52.500000 -20.666667 392.000000 2670.000000 --52.333333 -20.666667 351.000000 2670.000000 --52.166667 -20.666667 386.000000 2670.000000 --52.000000 -20.666667 308.000000 2670.000000 --51.833333 -20.666667 299.000000 2670.000000 --51.666667 -20.666667 315.000000 2670.000000 --51.500000 -20.666667 278.000000 2670.000000 --51.333333 -20.666667 310.000000 2670.000000 --51.166667 -20.666667 324.000000 2670.000000 --51.000000 -20.666667 344.000000 2670.000000 --50.833333 -20.666667 375.000000 2670.000000 --50.666667 -20.666667 435.000000 2670.000000 --50.500000 -20.666667 422.000000 2670.000000 --50.333333 -20.666667 435.000000 2670.000000 --50.166667 -20.666667 498.000000 2670.000000 --50.000000 -20.666667 454.000000 2670.000000 --49.833333 -20.666667 458.000000 2670.000000 --49.666667 -20.666667 528.000000 2670.000000 --49.500000 -20.666667 521.000000 2670.000000 --49.333333 -20.666667 511.000000 2670.000000 --49.166667 -20.666667 513.000000 2670.000000 --49.000000 -20.666667 518.000000 2670.000000 --48.833333 -20.666667 558.000000 2670.000000 --48.666667 -20.666667 566.000000 2670.000000 --48.500000 -20.666667 541.000000 2670.000000 --48.333333 -20.666667 470.000000 2670.000000 --48.166667 -20.666667 532.000000 2670.000000 --48.000000 -20.666667 649.000000 2670.000000 --47.833333 -20.666667 757.000000 2670.000000 --47.666667 -20.666667 666.000000 2670.000000 --47.500000 -20.666667 752.000000 2670.000000 --47.333333 -20.666667 719.000000 2670.000000 --47.166667 -20.666667 881.000000 2670.000000 --47.000000 -20.666667 796.000000 2670.000000 --46.833333 -20.666667 707.000000 2670.000000 --46.666667 -20.666667 787.000000 2670.000000 --46.500000 -20.666667 673.000000 2670.000000 --46.333333 -20.666667 689.000000 2670.000000 --46.166667 -20.666667 912.000000 2670.000000 --46.000000 -20.666667 781.000000 2670.000000 --45.833333 -20.666667 770.000000 2670.000000 --45.666667 -20.666667 809.000000 2670.000000 --45.500000 -20.666667 809.000000 2670.000000 --45.333333 -20.666667 829.000000 2670.000000 --45.166667 -20.666667 1024.000000 2670.000000 --45.000000 -20.666667 983.000000 2670.000000 --44.833333 -20.666667 959.000000 2670.000000 --44.666667 -20.666667 953.000000 2670.000000 --44.500000 -20.666667 1005.000000 2670.000000 --44.333333 -20.666667 1057.000000 2670.000000 --44.166667 -20.666667 1014.000000 2670.000000 --44.000000 -20.666667 972.000000 2670.000000 --43.833333 -20.666667 996.000000 2670.000000 --43.666667 -20.666667 860.000000 2670.000000 --43.500000 -20.666667 804.000000 2670.000000 --43.333333 -20.666667 745.000000 2670.000000 --43.166667 -20.666667 728.000000 2670.000000 --43.000000 -20.666667 642.000000 2670.000000 --42.833333 -20.666667 714.000000 2670.000000 --42.666667 -20.666667 654.000000 2670.000000 --42.500000 -20.666667 1189.000000 2670.000000 --42.333333 -20.666667 863.000000 2670.000000 --42.166667 -20.666667 758.000000 2670.000000 --42.000000 -20.666667 834.000000 2670.000000 --41.833333 -20.666667 819.000000 2670.000000 --41.666667 -20.666667 761.000000 2670.000000 --41.500000 -20.666667 264.000000 2670.000000 --41.333333 -20.666667 421.000000 2670.000000 --41.166667 -20.666667 125.000000 2670.000000 --41.000000 -20.666667 664.000000 2670.000000 --40.833333 -20.666667 648.000000 2670.000000 --40.666667 -20.666667 43.000000 2670.000000 --40.500000 -20.666667 2.000000 2670.000000 --40.333333 -20.666667 -16.000000 1670.000000 --40.166667 -20.666667 -39.000000 1670.000000 --40.000000 -20.666667 -61.000000 1670.000000 --65.000000 -20.833333 2933.000000 2670.000000 --64.833333 -20.833333 2787.000000 2670.000000 --64.666667 -20.833333 2036.000000 2670.000000 --64.500000 -20.833333 2620.000000 2670.000000 --64.333333 -20.833333 1310.000000 2670.000000 --64.166667 -20.833333 927.000000 2670.000000 --64.000000 -20.833333 1071.000000 2670.000000 --63.833333 -20.833333 1135.000000 2670.000000 --63.666667 -20.833333 840.000000 2670.000000 --63.500000 -20.833333 1145.000000 2670.000000 --63.333333 -20.833333 634.000000 2670.000000 --63.166667 -20.833333 647.000000 2670.000000 --63.000000 -20.833333 558.000000 2670.000000 --62.833333 -20.833333 475.000000 2670.000000 --62.666667 -20.833333 430.000000 2670.000000 --62.500000 -20.833333 390.000000 2670.000000 --62.333333 -20.833333 373.000000 2670.000000 --62.166667 -20.833333 354.000000 2670.000000 --62.000000 -20.833333 323.000000 2670.000000 --61.833333 -20.833333 302.000000 2670.000000 --61.666667 -20.833333 280.000000 2670.000000 --61.500000 -20.833333 257.000000 2670.000000 --61.333333 -20.833333 240.000000 2670.000000 --61.166667 -20.833333 220.000000 2670.000000 --61.000000 -20.833333 202.000000 2670.000000 --60.833333 -20.833333 190.000000 2670.000000 --60.666667 -20.833333 173.000000 2670.000000 --60.500000 -20.833333 161.000000 2670.000000 --60.333333 -20.833333 149.000000 2670.000000 --60.166667 -20.833333 142.000000 2670.000000 --60.000000 -20.833333 135.000000 2670.000000 --59.833333 -20.833333 128.000000 2670.000000 --59.666667 -20.833333 122.000000 2670.000000 --59.500000 -20.833333 117.000000 2670.000000 --59.333333 -20.833333 112.000000 2670.000000 --59.166667 -20.833333 106.000000 2670.000000 --59.000000 -20.833333 101.000000 2670.000000 --58.833333 -20.833333 98.000000 2670.000000 --58.666667 -20.833333 96.000000 2670.000000 --58.500000 -20.833333 91.000000 2670.000000 --58.333333 -20.833333 89.000000 2670.000000 --58.166667 -20.833333 87.000000 2670.000000 --58.000000 -20.833333 84.000000 2670.000000 --57.833333 -20.833333 80.000000 2670.000000 --57.666667 -20.833333 86.000000 2670.000000 --57.500000 -20.833333 104.000000 2670.000000 --57.333333 -20.833333 114.000000 2670.000000 --57.166667 -20.833333 137.000000 2670.000000 --57.000000 -20.833333 214.000000 2670.000000 --56.833333 -20.833333 607.000000 2670.000000 --56.666667 -20.833333 529.000000 2670.000000 --56.500000 -20.833333 257.000000 2670.000000 --56.333333 -20.833333 331.000000 2670.000000 --56.166667 -20.833333 187.000000 2670.000000 --56.000000 -20.833333 157.000000 2670.000000 --55.833333 -20.833333 236.000000 2670.000000 --55.666667 -20.833333 211.000000 2670.000000 --55.500000 -20.833333 307.000000 2670.000000 --55.333333 -20.833333 308.000000 2670.000000 --55.166667 -20.833333 257.000000 2670.000000 --55.000000 -20.833333 319.000000 2670.000000 --54.833333 -20.833333 510.000000 2670.000000 --54.666667 -20.833333 463.000000 2670.000000 --54.500000 -20.833333 504.000000 2670.000000 --54.333333 -20.833333 514.000000 2670.000000 --54.166667 -20.833333 526.000000 2670.000000 --54.000000 -20.833333 460.000000 2670.000000 --53.833333 -20.833333 439.000000 2670.000000 --53.666667 -20.833333 450.000000 2670.000000 --53.500000 -20.833333 372.000000 2670.000000 --53.333333 -20.833333 412.000000 2670.000000 --53.166667 -20.833333 393.000000 2670.000000 --53.000000 -20.833333 421.000000 2670.000000 --52.833333 -20.833333 408.000000 2670.000000 --52.666667 -20.833333 378.000000 2670.000000 --52.500000 -20.833333 328.000000 2670.000000 --52.333333 -20.833333 339.000000 2670.000000 --52.166667 -20.833333 335.000000 2670.000000 --52.000000 -20.833333 395.000000 2670.000000 --51.833333 -20.833333 323.000000 2670.000000 --51.666667 -20.833333 273.000000 2670.000000 --51.500000 -20.833333 363.000000 2670.000000 --51.333333 -20.833333 356.000000 2670.000000 --51.166667 -20.833333 396.000000 2670.000000 --51.000000 -20.833333 341.000000 2670.000000 --50.833333 -20.833333 321.000000 2670.000000 --50.666667 -20.833333 339.000000 2670.000000 --50.500000 -20.833333 390.000000 2670.000000 --50.333333 -20.833333 378.000000 2670.000000 --50.166667 -20.833333 420.000000 2670.000000 --50.000000 -20.833333 443.000000 2670.000000 --49.833333 -20.833333 474.000000 2670.000000 --49.666667 -20.833333 504.000000 2670.000000 --49.500000 -20.833333 542.000000 2670.000000 --49.333333 -20.833333 501.000000 2670.000000 --49.166667 -20.833333 507.000000 2670.000000 --49.000000 -20.833333 506.000000 2670.000000 --48.833333 -20.833333 525.000000 2670.000000 --48.666667 -20.833333 543.000000 2670.000000 --48.500000 -20.833333 573.000000 2670.000000 --48.333333 -20.833333 539.000000 2670.000000 --48.166667 -20.833333 522.000000 2670.000000 --48.000000 -20.833333 569.000000 2670.000000 --47.833333 -20.833333 642.000000 2670.000000 --47.666667 -20.833333 830.000000 2670.000000 --47.500000 -20.833333 794.000000 2670.000000 --47.333333 -20.833333 762.000000 2670.000000 --47.166667 -20.833333 814.000000 2670.000000 --47.000000 -20.833333 848.000000 2670.000000 --46.833333 -20.833333 816.000000 2670.000000 --46.666667 -20.833333 907.000000 2670.000000 --46.500000 -20.833333 853.000000 2670.000000 --46.333333 -20.833333 832.000000 2670.000000 --46.166667 -20.833333 766.000000 2670.000000 --46.000000 -20.833333 958.000000 2670.000000 --45.833333 -20.833333 840.000000 2670.000000 --45.666667 -20.833333 789.000000 2670.000000 --45.500000 -20.833333 834.000000 2670.000000 --45.333333 -20.833333 890.000000 2670.000000 --45.166667 -20.833333 888.000000 2670.000000 --45.000000 -20.833333 966.000000 2670.000000 --44.833333 -20.833333 1072.000000 2670.000000 --44.666667 -20.833333 1056.000000 2670.000000 --44.500000 -20.833333 1103.000000 2670.000000 --44.333333 -20.833333 1116.000000 2670.000000 --44.166667 -20.833333 1052.000000 2670.000000 --44.000000 -20.833333 951.000000 2670.000000 --43.833333 -20.833333 1026.000000 2670.000000 --43.666667 -20.833333 760.000000 2670.000000 --43.500000 -20.833333 805.000000 2670.000000 --43.333333 -20.833333 750.000000 2670.000000 --43.166667 -20.833333 656.000000 2670.000000 --43.000000 -20.833333 759.000000 2670.000000 --42.833333 -20.833333 759.000000 2670.000000 --42.666667 -20.833333 788.000000 2670.000000 --42.500000 -20.833333 1201.000000 2670.000000 --42.333333 -20.833333 615.000000 2670.000000 --42.166667 -20.833333 725.000000 2670.000000 --42.000000 -20.833333 366.000000 2670.000000 --41.833333 -20.833333 699.000000 2670.000000 --41.666667 -20.833333 672.000000 2670.000000 --41.500000 -20.833333 619.000000 2670.000000 --41.333333 -20.833333 207.000000 2670.000000 --41.166667 -20.833333 79.000000 2670.000000 --41.000000 -20.833333 94.000000 2670.000000 --40.833333 -20.833333 49.000000 2670.000000 --40.666667 -20.833333 -1.000000 1670.000000 --40.500000 -20.833333 -19.000000 1670.000000 --40.333333 -20.833333 -30.000000 1670.000000 --40.166667 -20.833333 -47.000000 1670.000000 --40.000000 -20.833333 -969.000000 1670.000000 --65.000000 -21.000000 2325.000000 2670.000000 --64.833333 -21.000000 3578.000000 2670.000000 --64.666667 -21.000000 2465.000000 2670.000000 --64.500000 -21.000000 2479.000000 2670.000000 --64.333333 -21.000000 1388.000000 2670.000000 --64.166667 -21.000000 1020.000000 2670.000000 --64.000000 -21.000000 623.000000 2670.000000 --63.833333 -21.000000 763.000000 2670.000000 --63.666667 -21.000000 700.000000 2670.000000 --63.500000 -21.000000 941.000000 2670.000000 --63.333333 -21.000000 550.000000 2670.000000 --63.166667 -21.000000 565.000000 2670.000000 --63.000000 -21.000000 552.000000 2670.000000 --62.833333 -21.000000 438.000000 2670.000000 --62.666667 -21.000000 393.000000 2670.000000 --62.500000 -21.000000 365.000000 2670.000000 --62.333333 -21.000000 348.000000 2670.000000 --62.166667 -21.000000 330.000000 2670.000000 --62.000000 -21.000000 313.000000 2670.000000 --61.833333 -21.000000 291.000000 2670.000000 --61.666667 -21.000000 266.000000 2670.000000 --61.500000 -21.000000 249.000000 2670.000000 --61.333333 -21.000000 228.000000 2670.000000 --61.166667 -21.000000 211.000000 2670.000000 --61.000000 -21.000000 194.000000 2670.000000 --60.833333 -21.000000 179.000000 2670.000000 --60.666667 -21.000000 168.000000 2670.000000 --60.500000 -21.000000 157.000000 2670.000000 --60.333333 -21.000000 148.000000 2670.000000 --60.166667 -21.000000 142.000000 2670.000000 --60.000000 -21.000000 134.000000 2670.000000 --59.833333 -21.000000 128.000000 2670.000000 --59.666667 -21.000000 124.000000 2670.000000 --59.500000 -21.000000 120.000000 2670.000000 --59.333333 -21.000000 112.000000 2670.000000 --59.166667 -21.000000 106.000000 2670.000000 --59.000000 -21.000000 104.000000 2670.000000 --58.833333 -21.000000 98.000000 2670.000000 --58.666667 -21.000000 97.000000 2670.000000 --58.500000 -21.000000 95.000000 2670.000000 --58.333333 -21.000000 90.000000 2670.000000 --58.166667 -21.000000 85.000000 2670.000000 --58.000000 -21.000000 84.000000 2670.000000 --57.833333 -21.000000 78.000000 2670.000000 --57.666667 -21.000000 91.000000 2670.000000 --57.500000 -21.000000 101.000000 2670.000000 --57.333333 -21.000000 340.000000 2670.000000 --57.166667 -21.000000 154.000000 2670.000000 --57.000000 -21.000000 211.000000 2670.000000 --56.833333 -21.000000 602.000000 2670.000000 --56.666667 -21.000000 647.000000 2670.000000 --56.500000 -21.000000 368.000000 2670.000000 --56.333333 -21.000000 273.000000 2670.000000 --56.166667 -21.000000 218.000000 2670.000000 --56.000000 -21.000000 191.000000 2670.000000 --55.833333 -21.000000 280.000000 2670.000000 --55.666667 -21.000000 290.000000 2670.000000 --55.500000 -21.000000 250.000000 2670.000000 --55.333333 -21.000000 442.000000 2670.000000 --55.166667 -21.000000 534.000000 2670.000000 --55.000000 -21.000000 452.000000 2670.000000 --54.833333 -21.000000 489.000000 2670.000000 --54.666667 -21.000000 493.000000 2670.000000 --54.500000 -21.000000 402.000000 2670.000000 --54.333333 -21.000000 472.000000 2670.000000 --54.166667 -21.000000 446.000000 2670.000000 --54.000000 -21.000000 443.000000 2670.000000 --53.833333 -21.000000 416.000000 2670.000000 --53.666667 -21.000000 429.000000 2670.000000 --53.500000 -21.000000 434.000000 2670.000000 --53.333333 -21.000000 373.000000 2670.000000 --53.166667 -21.000000 359.000000 2670.000000 --53.000000 -21.000000 435.000000 2670.000000 --52.833333 -21.000000 428.000000 2670.000000 --52.666667 -21.000000 405.000000 2670.000000 --52.500000 -21.000000 357.000000 2670.000000 --52.333333 -21.000000 363.000000 2670.000000 --52.166667 -21.000000 295.000000 2670.000000 --52.000000 -21.000000 310.000000 2670.000000 --51.833333 -21.000000 381.000000 2670.000000 --51.666667 -21.000000 273.000000 2670.000000 --51.500000 -21.000000 348.000000 2670.000000 --51.333333 -21.000000 380.000000 2670.000000 --51.166667 -21.000000 441.000000 2670.000000 --51.000000 -21.000000 349.000000 2670.000000 --50.833333 -21.000000 346.000000 2670.000000 --50.666667 -21.000000 387.000000 2670.000000 --50.500000 -21.000000 360.000000 2670.000000 --50.333333 -21.000000 367.000000 2670.000000 --50.166667 -21.000000 428.000000 2670.000000 --50.000000 -21.000000 451.000000 2670.000000 --49.833333 -21.000000 428.000000 2670.000000 --49.666667 -21.000000 468.000000 2670.000000 --49.500000 -21.000000 478.000000 2670.000000 --49.333333 -21.000000 471.000000 2670.000000 --49.166667 -21.000000 522.000000 2670.000000 --49.000000 -21.000000 557.000000 2670.000000 --48.833333 -21.000000 526.000000 2670.000000 --48.666667 -21.000000 539.000000 2670.000000 --48.500000 -21.000000 581.000000 2670.000000 --48.333333 -21.000000 619.000000 2670.000000 --48.166667 -21.000000 506.000000 2670.000000 --48.000000 -21.000000 510.000000 2670.000000 --47.833333 -21.000000 534.000000 2670.000000 --47.666667 -21.000000 828.000000 2670.000000 --47.500000 -21.000000 786.000000 2670.000000 --47.333333 -21.000000 770.000000 2670.000000 --47.166667 -21.000000 827.000000 2670.000000 --47.000000 -21.000000 1105.000000 2670.000000 --46.833333 -21.000000 1045.000000 2670.000000 --46.666667 -21.000000 958.000000 2670.000000 --46.500000 -21.000000 1031.000000 2670.000000 --46.333333 -21.000000 1110.000000 2670.000000 --46.166667 -21.000000 838.000000 2670.000000 --46.000000 -21.000000 768.000000 2670.000000 --45.833333 -21.000000 946.000000 2670.000000 --45.666667 -21.000000 1138.000000 2670.000000 --45.500000 -21.000000 775.000000 2670.000000 --45.333333 -21.000000 893.000000 2670.000000 --45.166667 -21.000000 850.000000 2670.000000 --45.000000 -21.000000 923.000000 2670.000000 --44.833333 -21.000000 943.000000 2670.000000 --44.666667 -21.000000 911.000000 2670.000000 --44.500000 -21.000000 963.000000 2670.000000 --44.333333 -21.000000 1094.000000 2670.000000 --44.166667 -21.000000 1055.000000 2670.000000 --44.000000 -21.000000 1038.000000 2670.000000 --43.833333 -21.000000 1126.000000 2670.000000 --43.666667 -21.000000 885.000000 2670.000000 --43.500000 -21.000000 736.000000 2670.000000 --43.333333 -21.000000 845.000000 2670.000000 --43.166667 -21.000000 760.000000 2670.000000 --43.000000 -21.000000 816.000000 2670.000000 --42.833333 -21.000000 382.000000 2670.000000 --42.666667 -21.000000 407.000000 2670.000000 --42.500000 -21.000000 706.000000 2670.000000 --42.333333 -21.000000 410.000000 2670.000000 --42.166667 -21.000000 445.000000 2670.000000 --42.000000 -21.000000 237.000000 2670.000000 --41.833333 -21.000000 266.000000 2670.000000 --41.666667 -21.000000 422.000000 2670.000000 --41.500000 -21.000000 555.000000 2670.000000 --41.333333 -21.000000 599.000000 2670.000000 --41.166667 -21.000000 176.000000 2670.000000 --41.000000 -21.000000 7.000000 2670.000000 --40.833333 -21.000000 5.000000 2670.000000 --40.666667 -21.000000 -9.000000 1670.000000 --40.500000 -21.000000 -20.000000 1670.000000 --40.333333 -21.000000 -34.000000 1670.000000 --40.166667 -21.000000 -498.000000 1670.000000 --40.000000 -21.000000 -1446.000000 1670.000000 --65.000000 -21.166667 2972.000000 2670.000000 --64.833333 -21.166667 2756.000000 2670.000000 --64.666667 -21.166667 3049.000000 2670.000000 --64.500000 -21.166667 1738.000000 2670.000000 --64.333333 -21.166667 1164.000000 2670.000000 --64.166667 -21.166667 1512.000000 2670.000000 --64.000000 -21.166667 728.000000 2670.000000 --63.833333 -21.166667 821.000000 2670.000000 --63.666667 -21.166667 569.000000 2670.000000 --63.500000 -21.166667 898.000000 2670.000000 --63.333333 -21.166667 435.000000 2670.000000 --63.166667 -21.166667 472.000000 2670.000000 --63.000000 -21.166667 572.000000 2670.000000 --62.833333 -21.166667 403.000000 2670.000000 --62.666667 -21.166667 361.000000 2670.000000 --62.500000 -21.166667 333.000000 2670.000000 --62.333333 -21.166667 320.000000 2670.000000 --62.166667 -21.166667 306.000000 2670.000000 --62.000000 -21.166667 294.000000 2670.000000 --61.833333 -21.166667 277.000000 2670.000000 --61.666667 -21.166667 259.000000 2670.000000 --61.500000 -21.166667 238.000000 2670.000000 --61.333333 -21.166667 219.000000 2670.000000 --61.166667 -21.166667 202.000000 2670.000000 --61.000000 -21.166667 188.000000 2670.000000 --60.833333 -21.166667 175.000000 2670.000000 --60.666667 -21.166667 164.000000 2670.000000 --60.500000 -21.166667 154.000000 2670.000000 --60.333333 -21.166667 147.000000 2670.000000 --60.166667 -21.166667 141.000000 2670.000000 --60.000000 -21.166667 139.000000 2670.000000 --59.833333 -21.166667 134.000000 2670.000000 --59.666667 -21.166667 126.000000 2670.000000 --59.500000 -21.166667 118.000000 2670.000000 --59.333333 -21.166667 113.000000 2670.000000 --59.166667 -21.166667 111.000000 2670.000000 --59.000000 -21.166667 106.000000 2670.000000 --58.833333 -21.166667 100.000000 2670.000000 --58.666667 -21.166667 99.000000 2670.000000 --58.500000 -21.166667 95.000000 2670.000000 --58.333333 -21.166667 89.000000 2670.000000 --58.166667 -21.166667 86.000000 2670.000000 --58.000000 -21.166667 84.000000 2670.000000 --57.833333 -21.166667 84.000000 2670.000000 --57.666667 -21.166667 97.000000 2670.000000 --57.500000 -21.166667 118.000000 2670.000000 --57.333333 -21.166667 160.000000 2670.000000 --57.166667 -21.166667 176.000000 2670.000000 --57.000000 -21.166667 252.000000 2670.000000 --56.833333 -21.166667 628.000000 2670.000000 --56.666667 -21.166667 589.000000 2670.000000 --56.500000 -21.166667 332.000000 2670.000000 --56.333333 -21.166667 274.000000 2670.000000 --56.166667 -21.166667 234.000000 2670.000000 --56.000000 -21.166667 301.000000 2670.000000 --55.833333 -21.166667 195.000000 2670.000000 --55.666667 -21.166667 262.000000 2670.000000 --55.500000 -21.166667 470.000000 2670.000000 --55.333333 -21.166667 487.000000 2670.000000 --55.166667 -21.166667 548.000000 2670.000000 --55.000000 -21.166667 442.000000 2670.000000 --54.833333 -21.166667 422.000000 2670.000000 --54.666667 -21.166667 468.000000 2670.000000 --54.500000 -21.166667 522.000000 2670.000000 --54.333333 -21.166667 445.000000 2670.000000 --54.166667 -21.166667 447.000000 2670.000000 --54.000000 -21.166667 367.000000 2670.000000 --53.833333 -21.166667 441.000000 2670.000000 --53.666667 -21.166667 388.000000 2670.000000 --53.500000 -21.166667 383.000000 2670.000000 --53.333333 -21.166667 422.000000 2670.000000 --53.166667 -21.166667 331.000000 2670.000000 --53.000000 -21.166667 401.000000 2670.000000 --52.833333 -21.166667 437.000000 2670.000000 --52.666667 -21.166667 398.000000 2670.000000 --52.500000 -21.166667 398.000000 2670.000000 --52.333333 -21.166667 355.000000 2670.000000 --52.166667 -21.166667 364.000000 2670.000000 --52.000000 -21.166667 316.000000 2670.000000 --51.833333 -21.166667 273.000000 2670.000000 --51.666667 -21.166667 271.000000 2670.000000 --51.500000 -21.166667 322.000000 2670.000000 --51.333333 -21.166667 365.000000 2670.000000 --51.166667 -21.166667 400.000000 2670.000000 --51.000000 -21.166667 425.000000 2670.000000 --50.833333 -21.166667 406.000000 2670.000000 --50.666667 -21.166667 387.000000 2670.000000 --50.500000 -21.166667 382.000000 2670.000000 --50.333333 -21.166667 380.000000 2670.000000 --50.166667 -21.166667 376.000000 2670.000000 --50.000000 -21.166667 408.000000 2670.000000 --49.833333 -21.166667 397.000000 2670.000000 --49.666667 -21.166667 391.000000 2670.000000 --49.500000 -21.166667 416.000000 2670.000000 --49.333333 -21.166667 417.000000 2670.000000 --49.166667 -21.166667 459.000000 2670.000000 --49.000000 -21.166667 548.000000 2670.000000 --48.833333 -21.166667 562.000000 2670.000000 --48.666667 -21.166667 587.000000 2670.000000 --48.500000 -21.166667 595.000000 2670.000000 --48.333333 -21.166667 566.000000 2670.000000 --48.166667 -21.166667 499.000000 2670.000000 --48.000000 -21.166667 582.000000 2670.000000 --47.833333 -21.166667 561.000000 2670.000000 --47.666667 -21.166667 529.000000 2670.000000 --47.500000 -21.166667 600.000000 2670.000000 --47.333333 -21.166667 714.000000 2670.000000 --47.166667 -21.166667 926.000000 2670.000000 --47.000000 -21.166667 935.000000 2670.000000 --46.833333 -21.166667 987.000000 2670.000000 --46.666667 -21.166667 1107.000000 2670.000000 --46.500000 -21.166667 1100.000000 2670.000000 --46.333333 -21.166667 994.000000 2670.000000 --46.166667 -21.166667 918.000000 2670.000000 --46.000000 -21.166667 780.000000 2670.000000 --45.833333 -21.166667 843.000000 2670.000000 --45.666667 -21.166667 849.000000 2670.000000 --45.500000 -21.166667 851.000000 2670.000000 --45.333333 -21.166667 897.000000 2670.000000 --45.166667 -21.166667 828.000000 2670.000000 --45.000000 -21.166667 886.000000 2670.000000 --44.833333 -21.166667 901.000000 2670.000000 --44.666667 -21.166667 933.000000 2670.000000 --44.500000 -21.166667 919.000000 2670.000000 --44.333333 -21.166667 997.000000 2670.000000 --44.166667 -21.166667 956.000000 2670.000000 --44.000000 -21.166667 943.000000 2670.000000 --43.833333 -21.166667 1110.000000 2670.000000 --43.666667 -21.166667 1186.000000 2670.000000 --43.500000 -21.166667 836.000000 2670.000000 --43.333333 -21.166667 747.000000 2670.000000 --43.166667 -21.166667 605.000000 2670.000000 --43.000000 -21.166667 388.000000 2670.000000 --42.833333 -21.166667 327.000000 2670.000000 --42.666667 -21.166667 684.000000 2670.000000 --42.500000 -21.166667 265.000000 2670.000000 --42.333333 -21.166667 272.000000 2670.000000 --42.166667 -21.166667 196.000000 2670.000000 --42.000000 -21.166667 260.000000 2670.000000 --41.833333 -21.166667 158.000000 2670.000000 --41.666667 -21.166667 104.000000 2670.000000 --41.500000 -21.166667 149.000000 2670.000000 --41.333333 -21.166667 46.000000 2670.000000 --41.166667 -21.166667 58.000000 2670.000000 --41.000000 -21.166667 21.000000 2670.000000 --40.833333 -21.166667 -4.000000 1670.000000 --40.666667 -21.166667 -14.000000 1670.000000 --40.500000 -21.166667 -18.000000 1670.000000 --40.333333 -21.166667 -41.000000 1670.000000 --40.166667 -21.166667 -883.000000 1670.000000 --40.000000 -21.166667 -1379.000000 1670.000000 --65.000000 -21.333333 3301.000000 2670.000000 --64.833333 -21.333333 2623.000000 2670.000000 --64.666667 -21.333333 2455.000000 2670.000000 --64.500000 -21.333333 2577.000000 2670.000000 --64.333333 -21.333333 2549.000000 2670.000000 --64.166667 -21.333333 1074.000000 2670.000000 --64.000000 -21.333333 842.000000 2670.000000 --63.833333 -21.333333 767.000000 2670.000000 --63.666667 -21.333333 1088.000000 2670.000000 --63.500000 -21.333333 591.000000 2670.000000 --63.333333 -21.333333 355.000000 2670.000000 --63.166667 -21.333333 377.000000 2670.000000 --63.000000 -21.333333 532.000000 2670.000000 --62.833333 -21.333333 370.000000 2670.000000 --62.666667 -21.333333 322.000000 2670.000000 --62.500000 -21.333333 308.000000 2670.000000 --62.333333 -21.333333 293.000000 2670.000000 --62.166667 -21.333333 285.000000 2670.000000 --62.000000 -21.333333 273.000000 2670.000000 --61.833333 -21.333333 260.000000 2670.000000 --61.666667 -21.333333 244.000000 2670.000000 --61.500000 -21.333333 229.000000 2670.000000 --61.333333 -21.333333 213.000000 2670.000000 --61.166667 -21.333333 193.000000 2670.000000 --61.000000 -21.333333 185.000000 2670.000000 --60.833333 -21.333333 176.000000 2670.000000 --60.666667 -21.333333 163.000000 2670.000000 --60.500000 -21.333333 157.000000 2670.000000 --60.333333 -21.333333 152.000000 2670.000000 --60.166667 -21.333333 145.000000 2670.000000 --60.000000 -21.333333 139.000000 2670.000000 --59.833333 -21.333333 131.000000 2670.000000 --59.666667 -21.333333 127.000000 2670.000000 --59.500000 -21.333333 121.000000 2670.000000 --59.333333 -21.333333 111.000000 2670.000000 --59.166667 -21.333333 110.000000 2670.000000 --59.000000 -21.333333 107.000000 2670.000000 --58.833333 -21.333333 100.000000 2670.000000 --58.666667 -21.333333 99.000000 2670.000000 --58.500000 -21.333333 93.000000 2670.000000 --58.333333 -21.333333 94.000000 2670.000000 --58.166667 -21.333333 86.000000 2670.000000 --58.000000 -21.333333 82.000000 2670.000000 --57.833333 -21.333333 82.000000 2670.000000 --57.666667 -21.333333 95.000000 2670.000000 --57.500000 -21.333333 115.000000 2670.000000 --57.333333 -21.333333 167.000000 2670.000000 --57.166667 -21.333333 226.000000 2670.000000 --57.000000 -21.333333 258.000000 2670.000000 --56.833333 -21.333333 414.000000 2670.000000 --56.666667 -21.333333 417.000000 2670.000000 --56.500000 -21.333333 314.000000 2670.000000 --56.333333 -21.333333 266.000000 2670.000000 --56.166667 -21.333333 235.000000 2670.000000 --56.000000 -21.333333 326.000000 2670.000000 --55.833333 -21.333333 277.000000 2670.000000 --55.666667 -21.333333 423.000000 2670.000000 --55.500000 -21.333333 538.000000 2670.000000 --55.333333 -21.333333 479.000000 2670.000000 --55.166667 -21.333333 445.000000 2670.000000 --55.000000 -21.333333 420.000000 2670.000000 --54.833333 -21.333333 369.000000 2670.000000 --54.666667 -21.333333 368.000000 2670.000000 --54.500000 -21.333333 485.000000 2670.000000 --54.333333 -21.333333 472.000000 2670.000000 --54.166667 -21.333333 373.000000 2670.000000 --54.000000 -21.333333 390.000000 2670.000000 --53.833333 -21.333333 386.000000 2670.000000 --53.666667 -21.333333 383.000000 2670.000000 --53.500000 -21.333333 393.000000 2670.000000 --53.333333 -21.333333 353.000000 2670.000000 --53.166667 -21.333333 367.000000 2670.000000 --53.000000 -21.333333 390.000000 2670.000000 --52.833333 -21.333333 393.000000 2670.000000 --52.666667 -21.333333 411.000000 2670.000000 --52.500000 -21.333333 309.000000 2670.000000 --52.333333 -21.333333 326.000000 2670.000000 --52.166667 -21.333333 333.000000 2670.000000 --52.000000 -21.333333 317.000000 2670.000000 --51.833333 -21.333333 333.000000 2670.000000 --51.666667 -21.333333 375.000000 2670.000000 --51.500000 -21.333333 311.000000 2670.000000 --51.333333 -21.333333 346.000000 2670.000000 --51.166667 -21.333333 353.000000 2670.000000 --51.000000 -21.333333 363.000000 2670.000000 --50.833333 -21.333333 377.000000 2670.000000 --50.666667 -21.333333 428.000000 2670.000000 --50.500000 -21.333333 425.000000 2670.000000 --50.333333 -21.333333 404.000000 2670.000000 --50.166667 -21.333333 369.000000 2670.000000 --50.000000 -21.333333 403.000000 2670.000000 --49.833333 -21.333333 383.000000 2670.000000 --49.666667 -21.333333 381.000000 2670.000000 --49.500000 -21.333333 429.000000 2670.000000 --49.333333 -21.333333 437.000000 2670.000000 --49.166667 -21.333333 493.000000 2670.000000 --49.000000 -21.333333 510.000000 2670.000000 --48.833333 -21.333333 492.000000 2670.000000 --48.666667 -21.333333 568.000000 2670.000000 --48.500000 -21.333333 633.000000 2670.000000 --48.333333 -21.333333 591.000000 2670.000000 --48.166667 -21.333333 603.000000 2670.000000 --48.000000 -21.333333 572.000000 2670.000000 --47.833333 -21.333333 633.000000 2670.000000 --47.666667 -21.333333 625.000000 2670.000000 --47.500000 -21.333333 650.000000 2670.000000 --47.333333 -21.333333 778.000000 2670.000000 --47.166667 -21.333333 678.000000 2670.000000 --47.000000 -21.333333 635.000000 2670.000000 --46.833333 -21.333333 760.000000 2670.000000 --46.666667 -21.333333 980.000000 2670.000000 --46.500000 -21.333333 941.000000 2670.000000 --46.333333 -21.333333 842.000000 2670.000000 --46.166667 -21.333333 837.000000 2670.000000 --46.000000 -21.333333 772.000000 2670.000000 --45.833333 -21.333333 774.000000 2670.000000 --45.666667 -21.333333 865.000000 2670.000000 --45.500000 -21.333333 968.000000 2670.000000 --45.333333 -21.333333 952.000000 2670.000000 --45.166667 -21.333333 846.000000 2670.000000 --45.000000 -21.333333 1153.000000 2670.000000 --44.833333 -21.333333 915.000000 2670.000000 --44.666667 -21.333333 958.000000 2670.000000 --44.500000 -21.333333 951.000000 2670.000000 --44.333333 -21.333333 1015.000000 2670.000000 --44.166667 -21.333333 1052.000000 2670.000000 --44.000000 -21.333333 1054.000000 2670.000000 --43.833333 -21.333333 1113.000000 2670.000000 --43.666667 -21.333333 1164.000000 2670.000000 --43.500000 -21.333333 886.000000 2670.000000 --43.333333 -21.333333 646.000000 2670.000000 --43.166667 -21.333333 487.000000 2670.000000 --43.000000 -21.333333 380.000000 2670.000000 --42.833333 -21.333333 299.000000 2670.000000 --42.666667 -21.333333 234.000000 2670.000000 --42.500000 -21.333333 261.000000 2670.000000 --42.333333 -21.333333 362.000000 2670.000000 --42.166667 -21.333333 482.000000 2670.000000 --42.000000 -21.333333 179.000000 2670.000000 --41.833333 -21.333333 330.000000 2670.000000 --41.666667 -21.333333 126.000000 2670.000000 --41.500000 -21.333333 126.000000 2670.000000 --41.333333 -21.333333 71.000000 2670.000000 --41.166667 -21.333333 59.000000 2670.000000 --41.000000 -21.333333 16.000000 2670.000000 --40.833333 -21.333333 -12.000000 1670.000000 --40.666667 -21.333333 -21.000000 1670.000000 --40.500000 -21.333333 -20.000000 1670.000000 --40.333333 -21.333333 -42.000000 1670.000000 --40.166667 -21.333333 -758.000000 1670.000000 --40.000000 -21.333333 -1286.000000 1670.000000 --65.000000 -21.500000 3822.000000 2670.000000 --64.833333 -21.500000 2663.000000 2670.000000 --64.666667 -21.500000 2197.000000 2670.000000 --64.500000 -21.500000 2204.000000 2670.000000 --64.333333 -21.500000 2177.000000 2670.000000 --64.166667 -21.500000 1296.000000 2670.000000 --64.000000 -21.500000 1159.000000 2670.000000 --63.833333 -21.500000 936.000000 2670.000000 --63.666667 -21.500000 868.000000 2670.000000 --63.500000 -21.500000 552.000000 2670.000000 --63.333333 -21.500000 393.000000 2670.000000 --63.166667 -21.500000 455.000000 2670.000000 --63.000000 -21.500000 425.000000 2670.000000 --62.833333 -21.500000 310.000000 2670.000000 --62.666667 -21.500000 300.000000 2670.000000 --62.500000 -21.500000 288.000000 2670.000000 --62.333333 -21.500000 274.000000 2670.000000 --62.166667 -21.500000 267.000000 2670.000000 --62.000000 -21.500000 252.000000 2670.000000 --61.833333 -21.500000 242.000000 2670.000000 --61.666667 -21.500000 231.000000 2670.000000 --61.500000 -21.500000 222.000000 2670.000000 --61.333333 -21.500000 211.000000 2670.000000 --61.166667 -21.500000 197.000000 2670.000000 --61.000000 -21.500000 183.000000 2670.000000 --60.833333 -21.500000 175.000000 2670.000000 --60.666667 -21.500000 167.000000 2670.000000 --60.500000 -21.500000 162.000000 2670.000000 --60.333333 -21.500000 155.000000 2670.000000 --60.166667 -21.500000 147.000000 2670.000000 --60.000000 -21.500000 139.000000 2670.000000 --59.833333 -21.500000 130.000000 2670.000000 --59.666667 -21.500000 126.000000 2670.000000 --59.500000 -21.500000 123.000000 2670.000000 --59.333333 -21.500000 117.000000 2670.000000 --59.166667 -21.500000 108.000000 2670.000000 --59.000000 -21.500000 107.000000 2670.000000 --58.833333 -21.500000 101.000000 2670.000000 --58.666667 -21.500000 101.000000 2670.000000 --58.500000 -21.500000 99.000000 2670.000000 --58.333333 -21.500000 92.000000 2670.000000 --58.166667 -21.500000 90.000000 2670.000000 --58.000000 -21.500000 83.000000 2670.000000 --57.833333 -21.500000 81.000000 2670.000000 --57.666667 -21.500000 99.000000 2670.000000 --57.500000 -21.500000 145.000000 2670.000000 --57.333333 -21.500000 218.000000 2670.000000 --57.166667 -21.500000 321.000000 2670.000000 --57.000000 -21.500000 507.000000 2670.000000 --56.833333 -21.500000 384.000000 2670.000000 --56.666667 -21.500000 408.000000 2670.000000 --56.500000 -21.500000 340.000000 2670.000000 --56.333333 -21.500000 251.000000 2670.000000 --56.166667 -21.500000 284.000000 2670.000000 --56.000000 -21.500000 249.000000 2670.000000 --55.833333 -21.500000 381.000000 2670.000000 --55.666667 -21.500000 457.000000 2670.000000 --55.500000 -21.500000 546.000000 2670.000000 --55.333333 -21.500000 476.000000 2670.000000 --55.166667 -21.500000 363.000000 2670.000000 --55.000000 -21.500000 376.000000 2670.000000 --54.833333 -21.500000 351.000000 2670.000000 --54.666667 -21.500000 338.000000 2670.000000 --54.500000 -21.500000 342.000000 2670.000000 --54.333333 -21.500000 350.000000 2670.000000 --54.166667 -21.500000 395.000000 2670.000000 --54.000000 -21.500000 342.000000 2670.000000 --53.833333 -21.500000 342.000000 2670.000000 --53.666667 -21.500000 393.000000 2670.000000 --53.500000 -21.500000 378.000000 2670.000000 --53.333333 -21.500000 312.000000 2670.000000 --53.166667 -21.500000 406.000000 2670.000000 --53.000000 -21.500000 342.000000 2670.000000 --52.833333 -21.500000 371.000000 2670.000000 --52.666667 -21.500000 395.000000 2670.000000 --52.500000 -21.500000 367.000000 2670.000000 --52.333333 -21.500000 333.000000 2670.000000 --52.166667 -21.500000 377.000000 2670.000000 --52.000000 -21.500000 255.000000 2670.000000 --51.833333 -21.500000 365.000000 2670.000000 --51.666667 -21.500000 384.000000 2670.000000 --51.500000 -21.500000 405.000000 2670.000000 --51.333333 -21.500000 367.000000 2670.000000 --51.166667 -21.500000 397.000000 2670.000000 --51.000000 -21.500000 353.000000 2670.000000 --50.833333 -21.500000 407.000000 2670.000000 --50.666667 -21.500000 364.000000 2670.000000 --50.500000 -21.500000 423.000000 2670.000000 --50.333333 -21.500000 478.000000 2670.000000 --50.166667 -21.500000 423.000000 2670.000000 --50.000000 -21.500000 480.000000 2670.000000 --49.833333 -21.500000 422.000000 2670.000000 --49.666667 -21.500000 419.000000 2670.000000 --49.500000 -21.500000 411.000000 2670.000000 --49.333333 -21.500000 442.000000 2670.000000 --49.166667 -21.500000 434.000000 2670.000000 --49.000000 -21.500000 486.000000 2670.000000 --48.833333 -21.500000 533.000000 2670.000000 --48.666667 -21.500000 534.000000 2670.000000 --48.500000 -21.500000 575.000000 2670.000000 --48.333333 -21.500000 629.000000 2670.000000 --48.166667 -21.500000 601.000000 2670.000000 --48.000000 -21.500000 535.000000 2670.000000 --47.833333 -21.500000 650.000000 2670.000000 --47.666667 -21.500000 853.000000 2670.000000 --47.500000 -21.500000 730.000000 2670.000000 --47.333333 -21.500000 661.000000 2670.000000 --47.166667 -21.500000 585.000000 2670.000000 --47.000000 -21.500000 649.000000 2670.000000 --46.833333 -21.500000 928.000000 2670.000000 --46.666667 -21.500000 886.000000 2670.000000 --46.500000 -21.500000 940.000000 2670.000000 --46.333333 -21.500000 815.000000 2670.000000 --46.166667 -21.500000 849.000000 2670.000000 --46.000000 -21.500000 806.000000 2670.000000 --45.833333 -21.500000 832.000000 2670.000000 --45.666667 -21.500000 796.000000 2670.000000 --45.500000 -21.500000 836.000000 2670.000000 --45.333333 -21.500000 969.000000 2670.000000 --45.166667 -21.500000 967.000000 2670.000000 --45.000000 -21.500000 983.000000 2670.000000 --44.833333 -21.500000 1035.000000 2670.000000 --44.666667 -21.500000 1006.000000 2670.000000 --44.500000 -21.500000 1003.000000 2670.000000 --44.333333 -21.500000 951.000000 2670.000000 --44.166667 -21.500000 983.000000 2670.000000 --44.000000 -21.500000 1107.000000 2670.000000 --43.833333 -21.500000 1179.000000 2670.000000 --43.666667 -21.500000 809.000000 2670.000000 --43.500000 -21.500000 848.000000 2670.000000 --43.333333 -21.500000 542.000000 2670.000000 --43.166667 -21.500000 410.000000 2670.000000 --43.000000 -21.500000 388.000000 2670.000000 --42.833333 -21.500000 291.000000 2670.000000 --42.666667 -21.500000 238.000000 2670.000000 --42.500000 -21.500000 304.000000 2670.000000 --42.333333 -21.500000 188.000000 2670.000000 --42.166667 -21.500000 139.000000 2670.000000 --42.000000 -21.500000 354.000000 2670.000000 --41.833333 -21.500000 150.000000 2670.000000 --41.666667 -21.500000 100.000000 2670.000000 --41.500000 -21.500000 83.000000 2670.000000 --41.333333 -21.500000 54.000000 2670.000000 --41.166667 -21.500000 18.000000 2670.000000 --41.000000 -21.500000 -3.000000 1670.000000 --40.833333 -21.500000 -15.000000 1670.000000 --40.666667 -21.500000 -22.000000 1670.000000 --40.500000 -21.500000 -31.000000 1670.000000 --40.333333 -21.500000 -34.000000 1670.000000 --40.166667 -21.500000 -531.000000 1670.000000 --40.000000 -21.500000 -1048.000000 1670.000000 --65.000000 -21.666667 4023.000000 2670.000000 --64.833333 -21.666667 2083.000000 2670.000000 --64.666667 -21.666667 1750.000000 2670.000000 --64.500000 -21.666667 2185.000000 2670.000000 --64.333333 -21.666667 1433.000000 2670.000000 --64.166667 -21.666667 1207.000000 2670.000000 --64.000000 -21.666667 1480.000000 2670.000000 --63.833333 -21.666667 1177.000000 2670.000000 --63.666667 -21.666667 1138.000000 2670.000000 --63.500000 -21.666667 591.000000 2670.000000 --63.333333 -21.666667 438.000000 2670.000000 --63.166667 -21.666667 489.000000 2670.000000 --63.000000 -21.666667 317.000000 2670.000000 --62.833333 -21.666667 308.000000 2670.000000 --62.666667 -21.666667 294.000000 2670.000000 --62.500000 -21.666667 284.000000 2670.000000 --62.333333 -21.666667 274.000000 2670.000000 --62.166667 -21.666667 257.000000 2670.000000 --62.000000 -21.666667 248.000000 2670.000000 --61.833333 -21.666667 240.000000 2670.000000 --61.666667 -21.666667 226.000000 2670.000000 --61.500000 -21.666667 218.000000 2670.000000 --61.333333 -21.666667 206.000000 2670.000000 --61.166667 -21.666667 198.000000 2670.000000 --61.000000 -21.666667 191.000000 2670.000000 --60.833333 -21.666667 179.000000 2670.000000 --60.666667 -21.666667 171.000000 2670.000000 --60.500000 -21.666667 163.000000 2670.000000 --60.333333 -21.666667 155.000000 2670.000000 --60.166667 -21.666667 148.000000 2670.000000 --60.000000 -21.666667 143.000000 2670.000000 --59.833333 -21.666667 136.000000 2670.000000 --59.666667 -21.666667 129.000000 2670.000000 --59.500000 -21.666667 123.000000 2670.000000 --59.333333 -21.666667 118.000000 2670.000000 --59.166667 -21.666667 114.000000 2670.000000 --59.000000 -21.666667 109.000000 2670.000000 --58.833333 -21.666667 107.000000 2670.000000 --58.666667 -21.666667 105.000000 2670.000000 --58.500000 -21.666667 99.000000 2670.000000 --58.333333 -21.666667 95.000000 2670.000000 --58.166667 -21.666667 92.000000 2670.000000 --58.000000 -21.666667 85.000000 2670.000000 --57.833333 -21.666667 84.000000 2670.000000 --57.666667 -21.666667 105.000000 2670.000000 --57.500000 -21.666667 128.000000 2670.000000 --57.333333 -21.666667 205.000000 2670.000000 --57.166667 -21.666667 246.000000 2670.000000 --57.000000 -21.666667 332.000000 2670.000000 --56.833333 -21.666667 439.000000 2670.000000 --56.666667 -21.666667 408.000000 2670.000000 --56.500000 -21.666667 314.000000 2670.000000 --56.333333 -21.666667 316.000000 2670.000000 --56.166667 -21.666667 295.000000 2670.000000 --56.000000 -21.666667 320.000000 2670.000000 --55.833333 -21.666667 432.000000 2670.000000 --55.666667 -21.666667 571.000000 2670.000000 --55.500000 -21.666667 495.000000 2670.000000 --55.333333 -21.666667 461.000000 2670.000000 --55.166667 -21.666667 380.000000 2670.000000 --55.000000 -21.666667 338.000000 2670.000000 --54.833333 -21.666667 391.000000 2670.000000 --54.666667 -21.666667 354.000000 2670.000000 --54.500000 -21.666667 321.000000 2670.000000 --54.333333 -21.666667 306.000000 2670.000000 --54.166667 -21.666667 336.000000 2670.000000 --54.000000 -21.666667 366.000000 2670.000000 --53.833333 -21.666667 338.000000 2670.000000 --53.666667 -21.666667 363.000000 2670.000000 --53.500000 -21.666667 375.000000 2670.000000 --53.333333 -21.666667 332.000000 2670.000000 --53.166667 -21.666667 362.000000 2670.000000 --53.000000 -21.666667 348.000000 2670.000000 --52.833333 -21.666667 275.000000 2670.000000 --52.666667 -21.666667 341.000000 2670.000000 --52.500000 -21.666667 334.000000 2670.000000 --52.333333 -21.666667 279.000000 2670.000000 --52.166667 -21.666667 257.000000 2670.000000 --52.000000 -21.666667 267.000000 2670.000000 --51.833333 -21.666667 338.000000 2670.000000 --51.666667 -21.666667 306.000000 2670.000000 --51.500000 -21.666667 337.000000 2670.000000 --51.333333 -21.666667 391.000000 2670.000000 --51.166667 -21.666667 363.000000 2670.000000 --51.000000 -21.666667 401.000000 2670.000000 --50.833333 -21.666667 402.000000 2670.000000 --50.666667 -21.666667 411.000000 2670.000000 --50.500000 -21.666667 402.000000 2670.000000 --50.333333 -21.666667 397.000000 2670.000000 --50.166667 -21.666667 422.000000 2670.000000 --50.000000 -21.666667 435.000000 2670.000000 --49.833333 -21.666667 464.000000 2670.000000 --49.666667 -21.666667 459.000000 2670.000000 --49.500000 -21.666667 445.000000 2670.000000 --49.333333 -21.666667 456.000000 2670.000000 --49.166667 -21.666667 401.000000 2670.000000 --49.000000 -21.666667 447.000000 2670.000000 --48.833333 -21.666667 496.000000 2670.000000 --48.666667 -21.666667 539.000000 2670.000000 --48.500000 -21.666667 546.000000 2670.000000 --48.333333 -21.666667 603.000000 2670.000000 --48.166667 -21.666667 640.000000 2670.000000 --48.000000 -21.666667 570.000000 2670.000000 --47.833333 -21.666667 542.000000 2670.000000 --47.666667 -21.666667 664.000000 2670.000000 --47.500000 -21.666667 648.000000 2670.000000 --47.333333 -21.666667 798.000000 2670.000000 --47.166667 -21.666667 593.000000 2670.000000 --47.000000 -21.666667 594.000000 2670.000000 --46.833333 -21.666667 983.000000 2670.000000 --46.666667 -21.666667 1229.000000 2670.000000 --46.500000 -21.666667 906.000000 2670.000000 --46.333333 -21.666667 1092.000000 2670.000000 --46.166667 -21.666667 1029.000000 2670.000000 --46.000000 -21.666667 960.000000 2670.000000 --45.833333 -21.666667 876.000000 2670.000000 --45.666667 -21.666667 864.000000 2670.000000 --45.500000 -21.666667 963.000000 2670.000000 --45.333333 -21.666667 852.000000 2670.000000 --45.166667 -21.666667 900.000000 2670.000000 --45.000000 -21.666667 934.000000 2670.000000 --44.833333 -21.666667 1064.000000 2670.000000 --44.666667 -21.666667 1050.000000 2670.000000 --44.500000 -21.666667 982.000000 2670.000000 --44.333333 -21.666667 995.000000 2670.000000 --44.166667 -21.666667 1107.000000 2670.000000 --44.000000 -21.666667 1093.000000 2670.000000 --43.833333 -21.666667 936.000000 2670.000000 --43.666667 -21.666667 770.000000 2670.000000 --43.500000 -21.666667 752.000000 2670.000000 --43.333333 -21.666667 853.000000 2670.000000 --43.166667 -21.666667 775.000000 2670.000000 --43.000000 -21.666667 583.000000 2670.000000 --42.833333 -21.666667 578.000000 2670.000000 --42.666667 -21.666667 422.000000 2670.000000 --42.500000 -21.666667 260.000000 2670.000000 --42.333333 -21.666667 174.000000 2670.000000 --42.166667 -21.666667 101.000000 2670.000000 --42.000000 -21.666667 120.000000 2670.000000 --41.833333 -21.666667 164.000000 2670.000000 --41.666667 -21.666667 197.000000 2670.000000 --41.500000 -21.666667 30.000000 2670.000000 --41.333333 -21.666667 15.000000 2670.000000 --41.166667 -21.666667 3.000000 2670.000000 --41.000000 -21.666667 -2.000000 1670.000000 --40.833333 -21.666667 -14.000000 1670.000000 --40.666667 -21.666667 -19.000000 1670.000000 --40.500000 -21.666667 -31.000000 1670.000000 --40.333333 -21.666667 -38.000000 1670.000000 --40.166667 -21.666667 -139.000000 1670.000000 --40.000000 -21.666667 -709.000000 1670.000000 --65.000000 -21.833333 4029.000000 2670.000000 --64.833333 -21.833333 2192.000000 2670.000000 --64.666667 -21.833333 2099.000000 2670.000000 --64.500000 -21.833333 1503.000000 2670.000000 --64.333333 -21.833333 1092.000000 2670.000000 --64.166667 -21.833333 1257.000000 2670.000000 --64.000000 -21.833333 1790.000000 2670.000000 --63.833333 -21.833333 1293.000000 2670.000000 --63.666667 -21.833333 903.000000 2670.000000 --63.500000 -21.833333 562.000000 2670.000000 --63.333333 -21.833333 446.000000 2670.000000 --63.166667 -21.833333 365.000000 2670.000000 --63.000000 -21.833333 308.000000 2670.000000 --62.833333 -21.833333 302.000000 2670.000000 --62.666667 -21.833333 290.000000 2670.000000 --62.500000 -21.833333 279.000000 2670.000000 --62.333333 -21.833333 264.000000 2670.000000 --62.166667 -21.833333 255.000000 2670.000000 --62.000000 -21.833333 249.000000 2670.000000 --61.833333 -21.833333 235.000000 2670.000000 --61.666667 -21.833333 225.000000 2670.000000 --61.500000 -21.833333 213.000000 2670.000000 --61.333333 -21.833333 204.000000 2670.000000 --61.166667 -21.833333 198.000000 2670.000000 --61.000000 -21.833333 189.000000 2670.000000 --60.833333 -21.833333 180.000000 2670.000000 --60.666667 -21.833333 174.000000 2670.000000 --60.500000 -21.833333 163.000000 2670.000000 --60.333333 -21.833333 153.000000 2670.000000 --60.166667 -21.833333 151.000000 2670.000000 --60.000000 -21.833333 144.000000 2670.000000 --59.833333 -21.833333 134.000000 2670.000000 --59.666667 -21.833333 130.000000 2670.000000 --59.500000 -21.833333 124.000000 2670.000000 --59.333333 -21.833333 117.000000 2670.000000 --59.166667 -21.833333 112.000000 2670.000000 --59.000000 -21.833333 110.000000 2670.000000 --58.833333 -21.833333 109.000000 2670.000000 --58.666667 -21.833333 99.000000 2670.000000 --58.500000 -21.833333 98.000000 2670.000000 --58.333333 -21.833333 94.000000 2670.000000 --58.166667 -21.833333 89.000000 2670.000000 --58.000000 -21.833333 83.000000 2670.000000 --57.833333 -21.833333 78.000000 2670.000000 --57.666667 -21.833333 96.000000 2670.000000 --57.500000 -21.833333 153.000000 2670.000000 --57.333333 -21.833333 261.000000 2670.000000 --57.166667 -21.833333 182.000000 2670.000000 --57.000000 -21.833333 384.000000 2670.000000 --56.833333 -21.833333 387.000000 2670.000000 --56.666667 -21.833333 272.000000 2670.000000 --56.500000 -21.833333 283.000000 2670.000000 --56.333333 -21.833333 288.000000 2670.000000 --56.166667 -21.833333 374.000000 2670.000000 --56.000000 -21.833333 457.000000 2670.000000 --55.833333 -21.833333 579.000000 2670.000000 --55.666667 -21.833333 612.000000 2670.000000 --55.500000 -21.833333 465.000000 2670.000000 --55.333333 -21.833333 435.000000 2670.000000 --55.166667 -21.833333 408.000000 2670.000000 --55.000000 -21.833333 324.000000 2670.000000 --54.833333 -21.833333 302.000000 2670.000000 --54.666667 -21.833333 316.000000 2670.000000 --54.500000 -21.833333 293.000000 2670.000000 --54.333333 -21.833333 380.000000 2670.000000 --54.166667 -21.833333 381.000000 2670.000000 --54.000000 -21.833333 301.000000 2670.000000 --53.833333 -21.833333 301.000000 2670.000000 --53.666667 -21.833333 334.000000 2670.000000 --53.500000 -21.833333 297.000000 2670.000000 --53.333333 -21.833333 368.000000 2670.000000 --53.166667 -21.833333 401.000000 2670.000000 --53.000000 -21.833333 435.000000 2670.000000 --52.833333 -21.833333 424.000000 2670.000000 --52.666667 -21.833333 377.000000 2670.000000 --52.500000 -21.833333 380.000000 2670.000000 --52.333333 -21.833333 254.000000 2670.000000 --52.166667 -21.833333 276.000000 2670.000000 --52.000000 -21.833333 350.000000 2670.000000 --51.833333 -21.833333 353.000000 2670.000000 --51.666667 -21.833333 334.000000 2670.000000 --51.500000 -21.833333 323.000000 2670.000000 --51.333333 -21.833333 332.000000 2670.000000 --51.166667 -21.833333 341.000000 2670.000000 --51.000000 -21.833333 411.000000 2670.000000 --50.833333 -21.833333 443.000000 2670.000000 --50.666667 -21.833333 440.000000 2670.000000 --50.500000 -21.833333 463.000000 2670.000000 --50.333333 -21.833333 438.000000 2670.000000 --50.166667 -21.833333 437.000000 2670.000000 --50.000000 -21.833333 454.000000 2670.000000 --49.833333 -21.833333 494.000000 2670.000000 --49.666667 -21.833333 497.000000 2670.000000 --49.500000 -21.833333 456.000000 2670.000000 --49.333333 -21.833333 448.000000 2670.000000 --49.166667 -21.833333 461.000000 2670.000000 --49.000000 -21.833333 427.000000 2670.000000 --48.833333 -21.833333 422.000000 2670.000000 --48.666667 -21.833333 420.000000 2670.000000 --48.500000 -21.833333 533.000000 2670.000000 --48.333333 -21.833333 573.000000 2670.000000 --48.166667 -21.833333 666.000000 2670.000000 --48.000000 -21.833333 713.000000 2670.000000 --47.833333 -21.833333 688.000000 2670.000000 --47.666667 -21.833333 670.000000 2670.000000 --47.500000 -21.833333 544.000000 2670.000000 --47.333333 -21.833333 621.000000 2670.000000 --47.166667 -21.833333 625.000000 2670.000000 --47.000000 -21.833333 744.000000 2670.000000 --46.833333 -21.833333 857.000000 2670.000000 --46.666667 -21.833333 1294.000000 2670.000000 --46.500000 -21.833333 1355.000000 2670.000000 --46.333333 -21.833333 1115.000000 2670.000000 --46.166667 -21.833333 1221.000000 2670.000000 --46.000000 -21.833333 1038.000000 2670.000000 --45.833333 -21.833333 891.000000 2670.000000 --45.666667 -21.833333 859.000000 2670.000000 --45.500000 -21.833333 889.000000 2670.000000 --45.333333 -21.833333 930.000000 2670.000000 --45.166667 -21.833333 908.000000 2670.000000 --45.000000 -21.833333 978.000000 2670.000000 --44.833333 -21.833333 1089.000000 2670.000000 --44.666667 -21.833333 1124.000000 2670.000000 --44.500000 -21.833333 998.000000 2670.000000 --44.333333 -21.833333 1108.000000 2670.000000 --44.166667 -21.833333 1217.000000 2670.000000 --44.000000 -21.833333 982.000000 2670.000000 --43.833333 -21.833333 828.000000 2670.000000 --43.666667 -21.833333 892.000000 2670.000000 --43.500000 -21.833333 707.000000 2670.000000 --43.333333 -21.833333 592.000000 2670.000000 --43.166667 -21.833333 653.000000 2670.000000 --43.000000 -21.833333 526.000000 2670.000000 --42.833333 -21.833333 569.000000 2670.000000 --42.666667 -21.833333 282.000000 2670.000000 --42.500000 -21.833333 282.000000 2670.000000 --42.333333 -21.833333 342.000000 2670.000000 --42.166667 -21.833333 155.000000 2670.000000 --42.000000 -21.833333 110.000000 2670.000000 --41.833333 -21.833333 1066.000000 2670.000000 --41.666667 -21.833333 67.000000 2670.000000 --41.500000 -21.833333 38.000000 2670.000000 --41.333333 -21.833333 6.000000 2670.000000 --41.166667 -21.833333 2.000000 2670.000000 --41.000000 -21.833333 0.000000 2670.000000 --40.833333 -21.833333 -21.000000 1670.000000 --40.666667 -21.833333 -20.000000 1670.000000 --40.500000 -21.833333 -31.000000 1670.000000 --40.333333 -21.833333 -51.000000 1670.000000 --40.166667 -21.833333 -83.000000 1670.000000 --40.000000 -21.833333 -473.000000 1670.000000 --65.000000 -22.000000 3194.000000 2670.000000 --64.833333 -22.000000 2374.000000 2670.000000 --64.666667 -22.000000 1968.000000 2670.000000 --64.500000 -22.000000 1344.000000 2670.000000 --64.333333 -22.000000 1166.000000 2670.000000 --64.166667 -22.000000 862.000000 2670.000000 --64.000000 -22.000000 835.000000 2670.000000 --63.833333 -22.000000 750.000000 2670.000000 --63.666667 -22.000000 636.000000 2670.000000 --63.500000 -22.000000 521.000000 2670.000000 --63.333333 -22.000000 405.000000 2670.000000 --63.166667 -22.000000 349.000000 2670.000000 --63.000000 -22.000000 303.000000 2670.000000 --62.833333 -22.000000 288.000000 2670.000000 --62.666667 -22.000000 281.000000 2670.000000 --62.500000 -22.000000 274.000000 2670.000000 --62.333333 -22.000000 261.000000 2670.000000 --62.166667 -22.000000 254.000000 2670.000000 --62.000000 -22.000000 244.000000 2670.000000 --61.833333 -22.000000 234.000000 2670.000000 --61.666667 -22.000000 224.000000 2670.000000 --61.500000 -22.000000 212.000000 2670.000000 --61.333333 -22.000000 204.000000 2670.000000 --61.166667 -22.000000 195.000000 2670.000000 --61.000000 -22.000000 187.000000 2670.000000 --60.833333 -22.000000 177.000000 2670.000000 --60.666667 -22.000000 168.000000 2670.000000 --60.500000 -22.000000 163.000000 2670.000000 --60.333333 -22.000000 157.000000 2670.000000 --60.166667 -22.000000 147.000000 2670.000000 --60.000000 -22.000000 140.000000 2670.000000 --59.833333 -22.000000 134.000000 2670.000000 --59.666667 -22.000000 130.000000 2670.000000 --59.500000 -22.000000 123.000000 2670.000000 --59.333333 -22.000000 115.000000 2670.000000 --59.166667 -22.000000 112.000000 2670.000000 --59.000000 -22.000000 109.000000 2670.000000 --58.833333 -22.000000 102.000000 2670.000000 --58.666667 -22.000000 100.000000 2670.000000 --58.500000 -22.000000 97.000000 2670.000000 --58.333333 -22.000000 92.000000 2670.000000 --58.166667 -22.000000 87.000000 2670.000000 --58.000000 -22.000000 74.000000 2670.000000 --57.833333 -22.000000 84.000000 2670.000000 --57.666667 -22.000000 93.000000 2670.000000 --57.500000 -22.000000 150.000000 2670.000000 --57.333333 -22.000000 143.000000 2670.000000 --57.166667 -22.000000 193.000000 2670.000000 --57.000000 -22.000000 263.000000 2670.000000 --56.833333 -22.000000 332.000000 2670.000000 --56.666667 -22.000000 213.000000 2670.000000 --56.500000 -22.000000 207.000000 2670.000000 --56.333333 -22.000000 225.000000 2670.000000 --56.166667 -22.000000 286.000000 2670.000000 --56.000000 -22.000000 487.000000 2670.000000 --55.833333 -22.000000 648.000000 2670.000000 --55.666667 -22.000000 615.000000 2670.000000 --55.500000 -22.000000 572.000000 2670.000000 --55.333333 -22.000000 425.000000 2670.000000 --55.166667 -22.000000 386.000000 2670.000000 --55.000000 -22.000000 406.000000 2670.000000 --54.833333 -22.000000 313.000000 2670.000000 --54.666667 -22.000000 305.000000 2670.000000 --54.500000 -22.000000 291.000000 2670.000000 --54.333333 -22.000000 290.000000 2670.000000 --54.166667 -22.000000 291.000000 2670.000000 --54.000000 -22.000000 338.000000 2670.000000 --53.833333 -22.000000 337.000000 2670.000000 --53.666667 -22.000000 313.000000 2670.000000 --53.500000 -22.000000 309.000000 2670.000000 --53.333333 -22.000000 395.000000 2670.000000 --53.166667 -22.000000 375.000000 2670.000000 --53.000000 -22.000000 346.000000 2670.000000 --52.833333 -22.000000 425.000000 2670.000000 --52.666667 -22.000000 399.000000 2670.000000 --52.500000 -22.000000 293.000000 2670.000000 --52.333333 -22.000000 252.000000 2670.000000 --52.166667 -22.000000 345.000000 2670.000000 --52.000000 -22.000000 349.000000 2670.000000 --51.833333 -22.000000 388.000000 2670.000000 --51.666667 -22.000000 394.000000 2670.000000 --51.500000 -22.000000 384.000000 2670.000000 --51.333333 -22.000000 389.000000 2670.000000 --51.166667 -22.000000 410.000000 2670.000000 --51.000000 -22.000000 407.000000 2670.000000 --50.833333 -22.000000 386.000000 2670.000000 --50.666667 -22.000000 447.000000 2670.000000 --50.500000 -22.000000 430.000000 2670.000000 --50.333333 -22.000000 488.000000 2670.000000 --50.166667 -22.000000 471.000000 2670.000000 --50.000000 -22.000000 460.000000 2670.000000 --49.833333 -22.000000 467.000000 2670.000000 --49.666667 -22.000000 467.000000 2670.000000 --49.500000 -22.000000 550.000000 2670.000000 --49.333333 -22.000000 530.000000 2670.000000 --49.166667 -22.000000 476.000000 2670.000000 --49.000000 -22.000000 505.000000 2670.000000 --48.833333 -22.000000 480.000000 2670.000000 --48.666667 -22.000000 478.000000 2670.000000 --48.500000 -22.000000 525.000000 2670.000000 --48.333333 -22.000000 511.000000 2670.000000 --48.166667 -22.000000 583.000000 2670.000000 --48.000000 -22.000000 790.000000 2670.000000 --47.833333 -22.000000 879.000000 2670.000000 --47.666667 -22.000000 745.000000 2670.000000 --47.500000 -22.000000 746.000000 2670.000000 --47.333333 -22.000000 600.000000 2670.000000 --47.166667 -22.000000 594.000000 2670.000000 --47.000000 -22.000000 612.000000 2670.000000 --46.833333 -22.000000 726.000000 2670.000000 --46.666667 -22.000000 1250.000000 2670.000000 --46.500000 -22.000000 1323.000000 2670.000000 --46.333333 -22.000000 1174.000000 2670.000000 --46.166667 -22.000000 1278.000000 2670.000000 --46.000000 -22.000000 1343.000000 2670.000000 --45.833333 -22.000000 853.000000 2670.000000 --45.666667 -22.000000 867.000000 2670.000000 --45.500000 -22.000000 1157.000000 2670.000000 --45.333333 -22.000000 914.000000 2670.000000 --45.166667 -22.000000 921.000000 2670.000000 --45.000000 -22.000000 908.000000 2670.000000 --44.833333 -22.000000 956.000000 2670.000000 --44.666667 -22.000000 1537.000000 2670.000000 --44.500000 -22.000000 1135.000000 2670.000000 --44.333333 -22.000000 1158.000000 2670.000000 --44.166667 -22.000000 1239.000000 2670.000000 --44.000000 -22.000000 1172.000000 2670.000000 --43.833333 -22.000000 821.000000 2670.000000 --43.666667 -22.000000 847.000000 2670.000000 --43.500000 -22.000000 533.000000 2670.000000 --43.333333 -22.000000 392.000000 2670.000000 --43.166667 -22.000000 381.000000 2670.000000 --43.000000 -22.000000 362.000000 2670.000000 --42.833333 -22.000000 560.000000 2670.000000 --42.666667 -22.000000 329.000000 2670.000000 --42.500000 -22.000000 663.000000 2670.000000 --42.333333 -22.000000 510.000000 2670.000000 --42.166667 -22.000000 347.000000 2670.000000 --42.000000 -22.000000 601.000000 2670.000000 --41.833333 -22.000000 101.000000 2670.000000 --41.666667 -22.000000 77.000000 2670.000000 --41.500000 -22.000000 2.000000 2670.000000 --41.333333 -22.000000 1.000000 2670.000000 --41.166667 -22.000000 3.000000 2670.000000 --41.000000 -22.000000 4.000000 2670.000000 --40.833333 -22.000000 -16.000000 1670.000000 --40.666667 -22.000000 -29.000000 1670.000000 --40.500000 -22.000000 -47.000000 1670.000000 --40.333333 -22.000000 -53.000000 1670.000000 --40.166667 -22.000000 -62.000000 1670.000000 --40.000000 -22.000000 -443.000000 1670.000000 --65.000000 -22.166667 2897.000000 2670.000000 --64.833333 -22.166667 2755.000000 2670.000000 --64.666667 -22.166667 1310.000000 2670.000000 --64.500000 -22.166667 1199.000000 2670.000000 --64.333333 -22.166667 873.000000 2670.000000 --64.166667 -22.166667 691.000000 2670.000000 --64.000000 -22.166667 615.000000 2670.000000 --63.833333 -22.166667 740.000000 2670.000000 --63.666667 -22.166667 587.000000 2670.000000 --63.500000 -22.166667 429.000000 2670.000000 --63.333333 -22.166667 379.000000 2670.000000 --63.166667 -22.166667 336.000000 2670.000000 --63.000000 -22.166667 296.000000 2670.000000 --62.833333 -22.166667 275.000000 2670.000000 --62.666667 -22.166667 269.000000 2670.000000 --62.500000 -22.166667 264.000000 2670.000000 --62.333333 -22.166667 258.000000 2670.000000 --62.166667 -22.166667 248.000000 2670.000000 --62.000000 -22.166667 237.000000 2670.000000 --61.833333 -22.166667 229.000000 2670.000000 --61.666667 -22.166667 217.000000 2670.000000 --61.500000 -22.166667 210.000000 2670.000000 --61.333333 -22.166667 202.000000 2670.000000 --61.166667 -22.166667 192.000000 2670.000000 --61.000000 -22.166667 185.000000 2670.000000 --60.833333 -22.166667 173.000000 2670.000000 --60.666667 -22.166667 168.000000 2670.000000 --60.500000 -22.166667 160.000000 2670.000000 --60.333333 -22.166667 153.000000 2670.000000 --60.166667 -22.166667 145.000000 2670.000000 --60.000000 -22.166667 137.000000 2670.000000 --59.833333 -22.166667 131.000000 2670.000000 --59.666667 -22.166667 124.000000 2670.000000 --59.500000 -22.166667 122.000000 2670.000000 --59.333333 -22.166667 117.000000 2670.000000 --59.166667 -22.166667 113.000000 2670.000000 --59.000000 -22.166667 108.000000 2670.000000 --58.833333 -22.166667 104.000000 2670.000000 --58.666667 -22.166667 104.000000 2670.000000 --58.500000 -22.166667 96.000000 2670.000000 --58.333333 -22.166667 94.000000 2670.000000 --58.166667 -22.166667 86.000000 2670.000000 --58.000000 -22.166667 80.000000 2670.000000 --57.833333 -22.166667 86.000000 2670.000000 --57.666667 -22.166667 95.000000 2670.000000 --57.500000 -22.166667 108.000000 2670.000000 --57.333333 -22.166667 126.000000 2670.000000 --57.166667 -22.166667 157.000000 2670.000000 --57.000000 -22.166667 221.000000 2670.000000 --56.833333 -22.166667 260.000000 2670.000000 --56.666667 -22.166667 195.000000 2670.000000 --56.500000 -22.166667 198.000000 2670.000000 --56.333333 -22.166667 249.000000 2670.000000 --56.166667 -22.166667 325.000000 2670.000000 --56.000000 -22.166667 537.000000 2670.000000 --55.833333 -22.166667 635.000000 2670.000000 --55.666667 -22.166667 494.000000 2670.000000 --55.500000 -22.166667 480.000000 2670.000000 --55.333333 -22.166667 435.000000 2670.000000 --55.166667 -22.166667 412.000000 2670.000000 --55.000000 -22.166667 455.000000 2670.000000 --54.833333 -22.166667 424.000000 2670.000000 --54.666667 -22.166667 354.000000 2670.000000 --54.500000 -22.166667 354.000000 2670.000000 --54.333333 -22.166667 315.000000 2670.000000 --54.166667 -22.166667 325.000000 2670.000000 --54.000000 -22.166667 372.000000 2670.000000 --53.833333 -22.166667 360.000000 2670.000000 --53.666667 -22.166667 285.000000 2670.000000 --53.500000 -22.166667 388.000000 2670.000000 --53.333333 -22.166667 397.000000 2670.000000 --53.166667 -22.166667 344.000000 2670.000000 --53.000000 -22.166667 337.000000 2670.000000 --52.833333 -22.166667 371.000000 2670.000000 --52.666667 -22.166667 284.000000 2670.000000 --52.500000 -22.166667 258.000000 2670.000000 --52.333333 -22.166667 392.000000 2670.000000 --52.166667 -22.166667 335.000000 2670.000000 --52.000000 -22.166667 412.000000 2670.000000 --51.833333 -22.166667 369.000000 2670.000000 --51.666667 -22.166667 398.000000 2670.000000 --51.500000 -22.166667 356.000000 2670.000000 --51.333333 -22.166667 418.000000 2670.000000 --51.166667 -22.166667 479.000000 2670.000000 --51.000000 -22.166667 445.000000 2670.000000 --50.833333 -22.166667 474.000000 2670.000000 --50.666667 -22.166667 477.000000 2670.000000 --50.500000 -22.166667 408.000000 2670.000000 --50.333333 -22.166667 409.000000 2670.000000 --50.166667 -22.166667 486.000000 2670.000000 --50.000000 -22.166667 612.000000 2670.000000 --49.833333 -22.166667 536.000000 2670.000000 --49.666667 -22.166667 622.000000 2670.000000 --49.500000 -22.166667 568.000000 2670.000000 --49.333333 -22.166667 477.000000 2670.000000 --49.166667 -22.166667 499.000000 2670.000000 --49.000000 -22.166667 553.000000 2670.000000 --48.833333 -22.166667 497.000000 2670.000000 --48.666667 -22.166667 531.000000 2670.000000 --48.500000 -22.166667 640.000000 2670.000000 --48.333333 -22.166667 507.000000 2670.000000 --48.166667 -22.166667 676.000000 2670.000000 --48.000000 -22.166667 789.000000 2670.000000 --47.833333 -22.166667 775.000000 2670.000000 --47.666667 -22.166667 676.000000 2670.000000 --47.500000 -22.166667 662.000000 2670.000000 --47.333333 -22.166667 617.000000 2670.000000 --47.166667 -22.166667 639.000000 2670.000000 --47.000000 -22.166667 667.000000 2670.000000 --46.833333 -22.166667 720.000000 2670.000000 --46.666667 -22.166667 1032.000000 2670.000000 --46.500000 -22.166667 1131.000000 2670.000000 --46.333333 -22.166667 1363.000000 2670.000000 --46.166667 -22.166667 874.000000 2670.000000 --46.000000 -22.166667 874.000000 2670.000000 --45.833333 -22.166667 828.000000 2670.000000 --45.666667 -22.166667 920.000000 2670.000000 --45.500000 -22.166667 1072.000000 2670.000000 --45.333333 -22.166667 974.000000 2670.000000 --45.166667 -22.166667 1035.000000 2670.000000 --45.000000 -22.166667 992.000000 2670.000000 --44.833333 -22.166667 1497.000000 2670.000000 --44.666667 -22.166667 1236.000000 2670.000000 --44.500000 -22.166667 1228.000000 2670.000000 --44.333333 -22.166667 1407.000000 2670.000000 --44.166667 -22.166667 703.000000 2670.000000 --44.000000 -22.166667 515.000000 2670.000000 --43.833333 -22.166667 739.000000 2670.000000 --43.666667 -22.166667 491.000000 2670.000000 --43.500000 -22.166667 676.000000 2670.000000 --43.333333 -22.166667 361.000000 2670.000000 --43.166667 -22.166667 301.000000 2670.000000 --43.000000 -22.166667 743.000000 2670.000000 --42.833333 -22.166667 888.000000 2670.000000 --42.666667 -22.166667 960.000000 2670.000000 --42.500000 -22.166667 859.000000 2670.000000 --42.333333 -22.166667 735.000000 2670.000000 --42.166667 -22.166667 1055.000000 2670.000000 --42.000000 -22.166667 150.000000 2670.000000 --41.833333 -22.166667 133.000000 2670.000000 --41.666667 -22.166667 43.000000 2670.000000 --41.500000 -22.166667 8.000000 2670.000000 --41.333333 -22.166667 5.000000 2670.000000 --41.166667 -22.166667 -8.000000 1670.000000 --41.000000 -22.166667 -25.000000 1670.000000 --40.833333 -22.166667 -48.000000 1670.000000 --40.666667 -22.166667 -57.000000 1670.000000 --40.500000 -22.166667 -83.000000 1670.000000 --40.333333 -22.166667 -44.000000 1670.000000 --40.166667 -22.166667 -129.000000 1670.000000 --40.000000 -22.166667 -284.000000 1670.000000 --65.000000 -22.333333 3308.000000 2670.000000 --64.833333 -22.333333 2855.000000 2670.000000 --64.666667 -22.333333 1509.000000 2670.000000 --64.500000 -22.333333 840.000000 2670.000000 --64.333333 -22.333333 1268.000000 2670.000000 --64.166667 -22.333333 827.000000 2670.000000 --64.000000 -22.333333 836.000000 2670.000000 --63.833333 -22.333333 898.000000 2670.000000 --63.666667 -22.333333 463.000000 2670.000000 --63.500000 -22.333333 410.000000 2670.000000 --63.333333 -22.333333 362.000000 2670.000000 --63.166667 -22.333333 320.000000 2670.000000 --63.000000 -22.333333 290.000000 2670.000000 --62.833333 -22.333333 266.000000 2670.000000 --62.666667 -22.333333 262.000000 2670.000000 --62.500000 -22.333333 255.000000 2670.000000 --62.333333 -22.333333 247.000000 2670.000000 --62.166667 -22.333333 240.000000 2670.000000 --62.000000 -22.333333 233.000000 2670.000000 --61.833333 -22.333333 227.000000 2670.000000 --61.666667 -22.333333 214.000000 2670.000000 --61.500000 -22.333333 206.000000 2670.000000 --61.333333 -22.333333 199.000000 2670.000000 --61.166667 -22.333333 190.000000 2670.000000 --61.000000 -22.333333 184.000000 2670.000000 --60.833333 -22.333333 174.000000 2670.000000 --60.666667 -22.333333 166.000000 2670.000000 --60.500000 -22.333333 157.000000 2670.000000 --60.333333 -22.333333 150.000000 2670.000000 --60.166667 -22.333333 142.000000 2670.000000 --60.000000 -22.333333 135.000000 2670.000000 --59.833333 -22.333333 130.000000 2670.000000 --59.666667 -22.333333 124.000000 2670.000000 --59.500000 -22.333333 122.000000 2670.000000 --59.333333 -22.333333 115.000000 2670.000000 --59.166667 -22.333333 108.000000 2670.000000 --59.000000 -22.333333 103.000000 2670.000000 --58.833333 -22.333333 104.000000 2670.000000 --58.666667 -22.333333 102.000000 2670.000000 --58.500000 -22.333333 97.000000 2670.000000 --58.333333 -22.333333 94.000000 2670.000000 --58.166667 -22.333333 86.000000 2670.000000 --58.000000 -22.333333 81.000000 2670.000000 --57.833333 -22.333333 88.000000 2670.000000 --57.666667 -22.333333 99.000000 2670.000000 --57.500000 -22.333333 265.000000 2670.000000 --57.333333 -22.333333 140.000000 2670.000000 --57.166667 -22.333333 168.000000 2670.000000 --57.000000 -22.333333 182.000000 2670.000000 --56.833333 -22.333333 170.000000 2670.000000 --56.666667 -22.333333 209.000000 2670.000000 --56.500000 -22.333333 226.000000 2670.000000 --56.333333 -22.333333 300.000000 2670.000000 --56.166667 -22.333333 358.000000 2670.000000 --56.000000 -22.333333 357.000000 2670.000000 --55.833333 -22.333333 686.000000 2670.000000 --55.666667 -22.333333 635.000000 2670.000000 --55.500000 -22.333333 518.000000 2670.000000 --55.333333 -22.333333 479.000000 2670.000000 --55.166667 -22.333333 413.000000 2670.000000 --55.000000 -22.333333 353.000000 2670.000000 --54.833333 -22.333333 388.000000 2670.000000 --54.666667 -22.333333 351.000000 2670.000000 --54.500000 -22.333333 324.000000 2670.000000 --54.333333 -22.333333 327.000000 2670.000000 --54.166667 -22.333333 411.000000 2670.000000 --54.000000 -22.333333 410.000000 2670.000000 --53.833333 -22.333333 380.000000 2670.000000 --53.666667 -22.333333 376.000000 2670.000000 --53.500000 -22.333333 262.000000 2670.000000 --53.333333 -22.333333 309.000000 2670.000000 --53.166667 -22.333333 276.000000 2670.000000 --53.000000 -22.333333 273.000000 2670.000000 --52.833333 -22.333333 252.000000 2670.000000 --52.666667 -22.333333 332.000000 2670.000000 --52.500000 -22.333333 369.000000 2670.000000 --52.333333 -22.333333 428.000000 2670.000000 --52.166667 -22.333333 390.000000 2670.000000 --52.000000 -22.333333 388.000000 2670.000000 --51.833333 -22.333333 337.000000 2670.000000 --51.666667 -22.333333 391.000000 2670.000000 --51.500000 -22.333333 453.000000 2670.000000 --51.333333 -22.333333 457.000000 2670.000000 --51.166667 -22.333333 441.000000 2670.000000 --51.000000 -22.333333 411.000000 2670.000000 --50.833333 -22.333333 481.000000 2670.000000 --50.666667 -22.333333 519.000000 2670.000000 --50.500000 -22.333333 530.000000 2670.000000 --50.333333 -22.333333 498.000000 2670.000000 --50.166667 -22.333333 458.000000 2670.000000 --50.000000 -22.333333 468.000000 2670.000000 --49.833333 -22.333333 612.000000 2670.000000 --49.666667 -22.333333 667.000000 2670.000000 --49.500000 -22.333333 554.000000 2670.000000 --49.333333 -22.333333 516.000000 2670.000000 --49.166667 -22.333333 517.000000 2670.000000 --49.000000 -22.333333 579.000000 2670.000000 --48.833333 -22.333333 558.000000 2670.000000 --48.666667 -22.333333 471.000000 2670.000000 --48.500000 -22.333333 559.000000 2670.000000 --48.333333 -22.333333 728.000000 2670.000000 --48.166667 -22.333333 567.000000 2670.000000 --48.000000 -22.333333 685.000000 2670.000000 --47.833333 -22.333333 721.000000 2670.000000 --47.666667 -22.333333 604.000000 2670.000000 --47.500000 -22.333333 622.000000 2670.000000 --47.333333 -22.333333 627.000000 2670.000000 --47.166667 -22.333333 602.000000 2670.000000 --47.000000 -22.333333 596.000000 2670.000000 --46.833333 -22.333333 635.000000 2670.000000 --46.666667 -22.333333 798.000000 2670.000000 --46.500000 -22.333333 1003.000000 2670.000000 --46.333333 -22.333333 941.000000 2670.000000 --46.166667 -22.333333 1030.000000 2670.000000 --46.000000 -22.333333 871.000000 2670.000000 --45.833333 -22.333333 854.000000 2670.000000 --45.666667 -22.333333 862.000000 2670.000000 --45.500000 -22.333333 881.000000 2670.000000 --45.333333 -22.333333 1180.000000 2670.000000 --45.166667 -22.333333 1574.000000 2670.000000 --45.000000 -22.333333 1063.000000 2670.000000 --44.833333 -22.333333 1078.000000 2670.000000 --44.666667 -22.333333 2252.000000 2670.000000 --44.500000 -22.333333 1095.000000 2670.000000 --44.333333 -22.333333 673.000000 2670.000000 --44.166667 -22.333333 652.000000 2670.000000 --44.000000 -22.333333 598.000000 2670.000000 --43.833333 -22.333333 686.000000 2670.000000 --43.666667 -22.333333 369.000000 2670.000000 --43.500000 -22.333333 582.000000 2670.000000 --43.333333 -22.333333 715.000000 2670.000000 --43.166667 -22.333333 680.000000 2670.000000 --43.000000 -22.333333 1039.000000 2670.000000 --42.833333 -22.333333 1046.000000 2670.000000 --42.666667 -22.333333 1101.000000 2670.000000 --42.500000 -22.333333 1135.000000 2670.000000 --42.333333 -22.333333 818.000000 2670.000000 --42.166667 -22.333333 642.000000 2670.000000 --42.000000 -22.333333 36.000000 2670.000000 --41.833333 -22.333333 26.000000 2670.000000 --41.666667 -22.333333 -4.000000 1670.000000 --41.500000 -22.333333 -19.000000 1670.000000 --41.333333 -22.333333 -23.000000 1670.000000 --41.166667 -22.333333 -34.000000 1670.000000 --41.000000 -22.333333 -48.000000 1670.000000 --40.833333 -22.333333 -59.000000 1670.000000 --40.666667 -22.333333 -64.000000 1670.000000 --40.500000 -22.333333 -109.000000 1670.000000 --40.333333 -22.333333 -126.000000 1670.000000 --40.166667 -22.333333 -443.000000 1670.000000 --40.000000 -22.333333 -877.000000 1670.000000 --65.000000 -22.500000 2806.000000 2670.000000 --64.833333 -22.500000 1843.000000 2670.000000 --64.666667 -22.500000 1036.000000 2670.000000 --64.500000 -22.500000 946.000000 2670.000000 --64.333333 -22.500000 778.000000 2670.000000 --64.166667 -22.500000 489.000000 2670.000000 --64.000000 -22.500000 577.000000 2670.000000 --63.833333 -22.500000 659.000000 2670.000000 --63.666667 -22.500000 400.000000 2670.000000 --63.500000 -22.500000 359.000000 2670.000000 --63.333333 -22.500000 330.000000 2670.000000 --63.166667 -22.500000 304.000000 2670.000000 --63.000000 -22.500000 275.000000 2670.000000 --62.833333 -22.500000 257.000000 2670.000000 --62.666667 -22.500000 253.000000 2670.000000 --62.500000 -22.500000 247.000000 2670.000000 --62.333333 -22.500000 243.000000 2670.000000 --62.166667 -22.500000 234.000000 2670.000000 --62.000000 -22.500000 226.000000 2670.000000 --61.833333 -22.500000 220.000000 2670.000000 --61.666667 -22.500000 211.000000 2670.000000 --61.500000 -22.500000 204.000000 2670.000000 --61.333333 -22.500000 195.000000 2670.000000 --61.166667 -22.500000 188.000000 2670.000000 --61.000000 -22.500000 180.000000 2670.000000 --60.833333 -22.500000 170.000000 2670.000000 --60.666667 -22.500000 163.000000 2670.000000 --60.500000 -22.500000 155.000000 2670.000000 --60.333333 -22.500000 148.000000 2670.000000 --60.166667 -22.500000 141.000000 2670.000000 --60.000000 -22.500000 133.000000 2670.000000 --59.833333 -22.500000 125.000000 2670.000000 --59.666667 -22.500000 122.000000 2670.000000 --59.500000 -22.500000 116.000000 2670.000000 --59.333333 -22.500000 116.000000 2670.000000 --59.166667 -22.500000 109.000000 2670.000000 --59.000000 -22.500000 107.000000 2670.000000 --58.833333 -22.500000 103.000000 2670.000000 --58.666667 -22.500000 97.000000 2670.000000 --58.500000 -22.500000 94.000000 2670.000000 --58.333333 -22.500000 92.000000 2670.000000 --58.166667 -22.500000 87.000000 2670.000000 --58.000000 -22.500000 84.000000 2670.000000 --57.833333 -22.500000 79.000000 2670.000000 --57.666667 -22.500000 103.000000 2670.000000 --57.500000 -22.500000 183.000000 2670.000000 --57.333333 -22.500000 196.000000 2670.000000 --57.166667 -22.500000 234.000000 2670.000000 --57.000000 -22.500000 239.000000 2670.000000 --56.833333 -22.500000 191.000000 2670.000000 --56.666667 -22.500000 180.000000 2670.000000 --56.500000 -22.500000 207.000000 2670.000000 --56.333333 -22.500000 387.000000 2670.000000 --56.166667 -22.500000 314.000000 2670.000000 --56.000000 -22.500000 385.000000 2670.000000 --55.833333 -22.500000 422.000000 2670.000000 --55.666667 -22.500000 607.000000 2670.000000 --55.500000 -22.500000 557.000000 2670.000000 --55.333333 -22.500000 486.000000 2670.000000 --55.166667 -22.500000 451.000000 2670.000000 --55.000000 -22.500000 397.000000 2670.000000 --54.833333 -22.500000 395.000000 2670.000000 --54.666667 -22.500000 353.000000 2670.000000 --54.500000 -22.500000 412.000000 2670.000000 --54.333333 -22.500000 430.000000 2670.000000 --54.166667 -22.500000 382.000000 2670.000000 --54.000000 -22.500000 355.000000 2670.000000 --53.833333 -22.500000 344.000000 2670.000000 --53.666667 -22.500000 312.000000 2670.000000 --53.500000 -22.500000 248.000000 2670.000000 --53.333333 -22.500000 267.000000 2670.000000 --53.166667 -22.500000 250.000000 2670.000000 --53.000000 -22.500000 240.000000 2670.000000 --52.833333 -22.500000 325.000000 2670.000000 --52.666667 -22.500000 390.000000 2670.000000 --52.500000 -22.500000 396.000000 2670.000000 --52.333333 -22.500000 354.000000 2670.000000 --52.166667 -22.500000 285.000000 2670.000000 --52.000000 -22.500000 289.000000 2670.000000 --51.833333 -22.500000 382.000000 2670.000000 --51.666667 -22.500000 367.000000 2670.000000 --51.500000 -22.500000 394.000000 2670.000000 --51.333333 -22.500000 457.000000 2670.000000 --51.166667 -22.500000 425.000000 2670.000000 --51.000000 -22.500000 443.000000 2670.000000 --50.833333 -22.500000 465.000000 2670.000000 --50.666667 -22.500000 506.000000 2670.000000 --50.500000 -22.500000 450.000000 2670.000000 --50.333333 -22.500000 499.000000 2670.000000 --50.166667 -22.500000 535.000000 2670.000000 --50.000000 -22.500000 515.000000 2670.000000 --49.833333 -22.500000 516.000000 2670.000000 --49.666667 -22.500000 501.000000 2670.000000 --49.500000 -22.500000 528.000000 2670.000000 --49.333333 -22.500000 559.000000 2670.000000 --49.166667 -22.500000 595.000000 2670.000000 --49.000000 -22.500000 613.000000 2670.000000 --48.833333 -22.500000 562.000000 2670.000000 --48.666667 -22.500000 544.000000 2670.000000 --48.500000 -22.500000 508.000000 2670.000000 --48.333333 -22.500000 544.000000 2670.000000 --48.166667 -22.500000 614.000000 2670.000000 --48.000000 -22.500000 882.000000 2670.000000 --47.833333 -22.500000 514.000000 2670.000000 --47.666667 -22.500000 534.000000 2670.000000 --47.500000 -22.500000 691.000000 2670.000000 --47.333333 -22.500000 657.000000 2670.000000 --47.166667 -22.500000 668.000000 2670.000000 --47.000000 -22.500000 648.000000 2670.000000 --46.833333 -22.500000 681.000000 2670.000000 --46.666667 -22.500000 740.000000 2670.000000 --46.500000 -22.500000 798.000000 2670.000000 --46.333333 -22.500000 1327.000000 2670.000000 --46.166667 -22.500000 1407.000000 2670.000000 --46.000000 -22.500000 884.000000 2670.000000 --45.833333 -22.500000 926.000000 2670.000000 --45.666667 -22.500000 1097.000000 2670.000000 --45.500000 -22.500000 897.000000 2670.000000 --45.333333 -22.500000 1251.000000 2670.000000 --45.166667 -22.500000 1733.000000 2670.000000 --45.000000 -22.500000 963.000000 2670.000000 --44.833333 -22.500000 814.000000 2670.000000 --44.666667 -22.500000 487.000000 2670.000000 --44.500000 -22.500000 445.000000 2670.000000 --44.333333 -22.500000 629.000000 2670.000000 --44.166667 -22.500000 500.000000 2670.000000 --44.000000 -22.500000 386.000000 2670.000000 --43.833333 -22.500000 466.000000 2670.000000 --43.666667 -22.500000 519.000000 2670.000000 --43.500000 -22.500000 378.000000 2670.000000 --43.333333 -22.500000 1034.000000 2670.000000 --43.166667 -22.500000 907.000000 2670.000000 --43.000000 -22.500000 401.000000 2670.000000 --42.833333 -22.500000 33.000000 2670.000000 --42.666667 -22.500000 65.000000 2670.000000 --42.500000 -22.500000 147.000000 2670.000000 --42.333333 -22.500000 154.000000 2670.000000 --42.166667 -22.500000 26.000000 2670.000000 --42.000000 -22.500000 18.000000 2670.000000 --41.833333 -22.500000 -17.000000 1670.000000 --41.666667 -22.500000 -32.000000 1670.000000 --41.500000 -22.500000 -37.000000 1670.000000 --41.333333 -22.500000 -43.000000 1670.000000 --41.166667 -22.500000 -55.000000 1670.000000 --41.000000 -22.500000 -50.000000 1670.000000 --40.833333 -22.500000 -65.000000 1670.000000 --40.666667 -22.500000 -96.000000 1670.000000 --40.500000 -22.500000 -277.000000 1670.000000 --40.333333 -22.500000 -712.000000 1670.000000 --40.166667 -22.500000 -896.000000 1670.000000 --40.000000 -22.500000 -1179.000000 1670.000000 --65.000000 -22.666667 2700.000000 2670.000000 --64.833333 -22.666667 1502.000000 2670.000000 --64.666667 -22.666667 832.000000 2670.000000 --64.500000 -22.666667 717.000000 2670.000000 --64.333333 -22.666667 596.000000 2670.000000 --64.166667 -22.666667 554.000000 2670.000000 --64.000000 -22.666667 499.000000 2670.000000 --63.833333 -22.666667 455.000000 2670.000000 --63.666667 -22.666667 356.000000 2670.000000 --63.500000 -22.666667 309.000000 2670.000000 --63.333333 -22.666667 297.000000 2670.000000 --63.166667 -22.666667 277.000000 2670.000000 --63.000000 -22.666667 259.000000 2670.000000 --62.833333 -22.666667 245.000000 2670.000000 --62.666667 -22.666667 239.000000 2670.000000 --62.500000 -22.666667 238.000000 2670.000000 --62.333333 -22.666667 233.000000 2670.000000 --62.166667 -22.666667 229.000000 2670.000000 --62.000000 -22.666667 221.000000 2670.000000 --61.833333 -22.666667 214.000000 2670.000000 --61.666667 -22.666667 206.000000 2670.000000 --61.500000 -22.666667 201.000000 2670.000000 --61.333333 -22.666667 193.000000 2670.000000 --61.166667 -22.666667 185.000000 2670.000000 --61.000000 -22.666667 176.000000 2670.000000 --60.833333 -22.666667 168.000000 2670.000000 --60.666667 -22.666667 160.000000 2670.000000 --60.500000 -22.666667 156.000000 2670.000000 --60.333333 -22.666667 148.000000 2670.000000 --60.166667 -22.666667 139.000000 2670.000000 --60.000000 -22.666667 132.000000 2670.000000 --59.833333 -22.666667 127.000000 2670.000000 --59.666667 -22.666667 121.000000 2670.000000 --59.500000 -22.666667 117.000000 2670.000000 --59.333333 -22.666667 114.000000 2670.000000 --59.166667 -22.666667 110.000000 2670.000000 --59.000000 -22.666667 106.000000 2670.000000 --58.833333 -22.666667 102.000000 2670.000000 --58.666667 -22.666667 100.000000 2670.000000 --58.500000 -22.666667 96.000000 2670.000000 --58.333333 -22.666667 91.000000 2670.000000 --58.166667 -22.666667 89.000000 2670.000000 --58.000000 -22.666667 78.000000 2670.000000 --57.833333 -22.666667 72.000000 2670.000000 --57.666667 -22.666667 127.000000 2670.000000 --57.500000 -22.666667 180.000000 2670.000000 --57.333333 -22.666667 215.000000 2670.000000 --57.166667 -22.666667 238.000000 2670.000000 --57.000000 -22.666667 175.000000 2670.000000 --56.833333 -22.666667 148.000000 2670.000000 --56.666667 -22.666667 167.000000 2670.000000 --56.500000 -22.666667 217.000000 2670.000000 --56.333333 -22.666667 218.000000 2670.000000 --56.166667 -22.666667 235.000000 2670.000000 --56.000000 -22.666667 293.000000 2670.000000 --55.833333 -22.666667 549.000000 2670.000000 --55.666667 -22.666667 524.000000 2670.000000 --55.500000 -22.666667 572.000000 2670.000000 --55.333333 -22.666667 495.000000 2670.000000 --55.166667 -22.666667 522.000000 2670.000000 --55.000000 -22.666667 422.000000 2670.000000 --54.833333 -22.666667 422.000000 2670.000000 --54.666667 -22.666667 425.000000 2670.000000 --54.500000 -22.666667 434.000000 2670.000000 --54.333333 -22.666667 434.000000 2670.000000 --54.166667 -22.666667 393.000000 2670.000000 --54.000000 -22.666667 358.000000 2670.000000 --53.833333 -22.666667 347.000000 2670.000000 --53.666667 -22.666667 261.000000 2670.000000 --53.500000 -22.666667 248.000000 2670.000000 --53.333333 -22.666667 243.000000 2670.000000 --53.166667 -22.666667 238.000000 2670.000000 --53.000000 -22.666667 331.000000 2670.000000 --52.833333 -22.666667 375.000000 2670.000000 --52.666667 -22.666667 325.000000 2670.000000 --52.500000 -22.666667 360.000000 2670.000000 --52.333333 -22.666667 301.000000 2670.000000 --52.166667 -22.666667 277.000000 2670.000000 --52.000000 -22.666667 325.000000 2670.000000 --51.833333 -22.666667 334.000000 2670.000000 --51.666667 -22.666667 298.000000 2670.000000 --51.500000 -22.666667 324.000000 2670.000000 --51.333333 -22.666667 325.000000 2670.000000 --51.166667 -22.666667 334.000000 2670.000000 --51.000000 -22.666667 386.000000 2670.000000 --50.833333 -22.666667 372.000000 2670.000000 --50.666667 -22.666667 495.000000 2670.000000 --50.500000 -22.666667 506.000000 2670.000000 --50.333333 -22.666667 498.000000 2670.000000 --50.166667 -22.666667 528.000000 2670.000000 --50.000000 -22.666667 494.000000 2670.000000 --49.833333 -22.666667 555.000000 2670.000000 --49.666667 -22.666667 552.000000 2670.000000 --49.500000 -22.666667 566.000000 2670.000000 --49.333333 -22.666667 527.000000 2670.000000 --49.166667 -22.666667 648.000000 2670.000000 --49.000000 -22.666667 646.000000 2670.000000 --48.833333 -22.666667 624.000000 2670.000000 --48.666667 -22.666667 640.000000 2670.000000 --48.500000 -22.666667 569.000000 2670.000000 --48.333333 -22.666667 458.000000 2670.000000 --48.166667 -22.666667 542.000000 2670.000000 --48.000000 -22.666667 454.000000 2670.000000 --47.833333 -22.666667 472.000000 2670.000000 --47.666667 -22.666667 492.000000 2670.000000 --47.500000 -22.666667 539.000000 2670.000000 --47.333333 -22.666667 583.000000 2670.000000 --47.166667 -22.666667 580.000000 2670.000000 --47.000000 -22.666667 582.000000 2670.000000 --46.833333 -22.666667 688.000000 2670.000000 --46.666667 -22.666667 907.000000 2670.000000 --46.500000 -22.666667 1061.000000 2670.000000 --46.333333 -22.666667 1396.000000 2670.000000 --46.166667 -22.666667 1132.000000 2670.000000 --46.000000 -22.666667 1252.000000 2670.000000 --45.833333 -22.666667 1342.000000 2670.000000 --45.666667 -22.666667 1195.000000 2670.000000 --45.500000 -22.666667 1493.000000 2670.000000 --45.333333 -22.666667 1128.000000 2670.000000 --45.166667 -22.666667 592.000000 2670.000000 --45.000000 -22.666667 552.000000 2670.000000 --44.833333 -22.666667 668.000000 2670.000000 --44.666667 -22.666667 607.000000 2670.000000 --44.500000 -22.666667 856.000000 2670.000000 --44.333333 -22.666667 532.000000 2670.000000 --44.166667 -22.666667 547.000000 2670.000000 --44.000000 -22.666667 475.000000 2670.000000 --43.833333 -22.666667 316.000000 2670.000000 --43.666667 -22.666667 66.000000 2670.000000 --43.500000 -22.666667 71.000000 2670.000000 --43.333333 -22.666667 15.000000 2670.000000 --43.166667 -22.666667 32.000000 2670.000000 --43.000000 -22.666667 5.000000 2670.000000 --42.833333 -22.666667 17.000000 2670.000000 --42.666667 -22.666667 181.000000 2670.000000 --42.500000 -22.666667 60.000000 2670.000000 --42.333333 -22.666667 28.000000 2670.000000 --42.166667 -22.666667 23.000000 2670.000000 --42.000000 -22.666667 5.000000 2670.000000 --41.833333 -22.666667 -24.000000 1670.000000 --41.666667 -22.666667 -47.000000 1670.000000 --41.500000 -22.666667 -51.000000 1670.000000 --41.333333 -22.666667 -54.000000 1670.000000 --41.166667 -22.666667 -60.000000 1670.000000 --41.000000 -22.666667 -64.000000 1670.000000 --40.833333 -22.666667 -77.000000 1670.000000 --40.666667 -22.666667 -131.000000 1670.000000 --40.500000 -22.666667 -778.000000 1670.000000 --40.333333 -22.666667 -945.000000 1670.000000 --40.166667 -22.666667 -1210.000000 1670.000000 --40.000000 -22.666667 -1910.000000 1670.000000 --65.000000 -22.833333 1771.000000 2670.000000 --64.833333 -22.833333 1471.000000 2670.000000 --64.666667 -22.833333 928.000000 2670.000000 --64.500000 -22.833333 669.000000 2670.000000 --64.333333 -22.833333 363.000000 2670.000000 --64.166667 -22.833333 788.000000 2670.000000 --64.000000 -22.833333 426.000000 2670.000000 --63.833333 -22.833333 369.000000 2670.000000 --63.666667 -22.833333 303.000000 2670.000000 --63.500000 -22.833333 270.000000 2670.000000 --63.333333 -22.833333 262.000000 2670.000000 --63.166667 -22.833333 252.000000 2670.000000 --63.000000 -22.833333 237.000000 2670.000000 --62.833333 -22.833333 237.000000 2670.000000 --62.666667 -22.833333 232.000000 2670.000000 --62.500000 -22.833333 227.000000 2670.000000 --62.333333 -22.833333 229.000000 2670.000000 --62.166667 -22.833333 222.000000 2670.000000 --62.000000 -22.833333 218.000000 2670.000000 --61.833333 -22.833333 207.000000 2670.000000 --61.666667 -22.833333 201.000000 2670.000000 --61.500000 -22.833333 196.000000 2670.000000 --61.333333 -22.833333 186.000000 2670.000000 --61.166667 -22.833333 182.000000 2670.000000 --61.000000 -22.833333 175.000000 2670.000000 --60.833333 -22.833333 166.000000 2670.000000 --60.666667 -22.833333 160.000000 2670.000000 --60.500000 -22.833333 155.000000 2670.000000 --60.333333 -22.833333 147.000000 2670.000000 --60.166667 -22.833333 142.000000 2670.000000 --60.000000 -22.833333 132.000000 2670.000000 --59.833333 -22.833333 126.000000 2670.000000 --59.666667 -22.833333 122.000000 2670.000000 --59.500000 -22.833333 118.000000 2670.000000 --59.333333 -22.833333 112.000000 2670.000000 --59.166667 -22.833333 107.000000 2670.000000 --59.000000 -22.833333 104.000000 2670.000000 --58.833333 -22.833333 102.000000 2670.000000 --58.666667 -22.833333 102.000000 2670.000000 --58.500000 -22.833333 99.000000 2670.000000 --58.333333 -22.833333 90.000000 2670.000000 --58.166667 -22.833333 87.000000 2670.000000 --58.000000 -22.833333 82.000000 2670.000000 --57.833333 -22.833333 70.000000 2670.000000 --57.666667 -22.833333 91.000000 2670.000000 --57.500000 -22.833333 113.000000 2670.000000 --57.333333 -22.833333 124.000000 2670.000000 --57.166667 -22.833333 137.000000 2670.000000 --57.000000 -22.833333 129.000000 2670.000000 --56.833333 -22.833333 132.000000 2670.000000 --56.666667 -22.833333 135.000000 2670.000000 --56.500000 -22.833333 164.000000 2670.000000 --56.333333 -22.833333 234.000000 2670.000000 --56.166667 -22.833333 468.000000 2670.000000 --56.000000 -22.833333 313.000000 2670.000000 --55.833333 -22.833333 396.000000 2670.000000 --55.666667 -22.833333 596.000000 2670.000000 --55.500000 -22.833333 496.000000 2670.000000 --55.333333 -22.833333 470.000000 2670.000000 --55.166667 -22.833333 415.000000 2670.000000 --55.000000 -22.833333 402.000000 2670.000000 --54.833333 -22.833333 321.000000 2670.000000 --54.666667 -22.833333 369.000000 2670.000000 --54.500000 -22.833333 361.000000 2670.000000 --54.333333 -22.833333 363.000000 2670.000000 --54.166667 -22.833333 381.000000 2670.000000 --54.000000 -22.833333 308.000000 2670.000000 --53.833333 -22.833333 354.000000 2670.000000 --53.666667 -22.833333 241.000000 2670.000000 --53.500000 -22.833333 238.000000 2670.000000 --53.333333 -22.833333 288.000000 2670.000000 --53.166667 -22.833333 384.000000 2670.000000 --53.000000 -22.833333 346.000000 2670.000000 --52.833333 -22.833333 407.000000 2670.000000 --52.666667 -22.833333 471.000000 2670.000000 --52.500000 -22.833333 437.000000 2670.000000 --52.333333 -22.833333 394.000000 2670.000000 --52.166667 -22.833333 427.000000 2670.000000 --52.000000 -22.833333 394.000000 2670.000000 --51.833333 -22.833333 385.000000 2670.000000 --51.666667 -22.833333 454.000000 2670.000000 --51.500000 -22.833333 435.000000 2670.000000 --51.333333 -22.833333 330.000000 2670.000000 --51.166667 -22.833333 333.000000 2670.000000 --51.000000 -22.833333 333.000000 2670.000000 --50.833333 -22.833333 334.000000 2670.000000 --50.666667 -22.833333 411.000000 2670.000000 --50.500000 -22.833333 429.000000 2670.000000 --50.333333 -22.833333 444.000000 2670.000000 --50.166667 -22.833333 467.000000 2670.000000 --50.000000 -22.833333 428.000000 2670.000000 --49.833333 -22.833333 466.000000 2670.000000 --49.666667 -22.833333 587.000000 2670.000000 --49.500000 -22.833333 611.000000 2670.000000 --49.333333 -22.833333 643.000000 2670.000000 --49.166667 -22.833333 627.000000 2670.000000 --49.000000 -22.833333 680.000000 2670.000000 --48.833333 -22.833333 737.000000 2670.000000 --48.666667 -22.833333 718.000000 2670.000000 --48.500000 -22.833333 779.000000 2670.000000 --48.333333 -22.833333 588.000000 2670.000000 --48.166667 -22.833333 504.000000 2670.000000 --48.000000 -22.833333 486.000000 2670.000000 --47.833333 -22.833333 531.000000 2670.000000 --47.666667 -22.833333 588.000000 2670.000000 --47.500000 -22.833333 621.000000 2670.000000 --47.333333 -22.833333 598.000000 2670.000000 --47.166667 -22.833333 611.000000 2670.000000 --47.000000 -22.833333 684.000000 2670.000000 --46.833333 -22.833333 831.000000 2670.000000 --46.666667 -22.833333 852.000000 2670.000000 --46.500000 -22.833333 990.000000 2670.000000 --46.333333 -22.833333 937.000000 2670.000000 --46.166667 -22.833333 1207.000000 2670.000000 --46.000000 -22.833333 1501.000000 2670.000000 --45.833333 -22.833333 1538.000000 2670.000000 --45.666667 -22.833333 1160.000000 2670.000000 --45.500000 -22.833333 733.000000 2670.000000 --45.333333 -22.833333 553.000000 2670.000000 --45.166667 -22.833333 599.000000 2670.000000 --45.000000 -22.833333 1082.000000 2670.000000 --44.833333 -22.833333 1094.000000 2670.000000 --44.666667 -22.833333 1594.000000 2670.000000 --44.500000 -22.833333 1449.000000 2670.000000 --44.333333 -22.833333 1093.000000 2670.000000 --44.166667 -22.833333 720.000000 2670.000000 --44.000000 -22.833333 482.000000 2670.000000 --43.833333 -22.833333 23.000000 2670.000000 --43.666667 -22.833333 9.000000 2670.000000 --43.500000 -22.833333 180.000000 2670.000000 --43.333333 -22.833333 17.000000 2670.000000 --43.166667 -22.833333 0.000000 2670.000000 --43.000000 -22.833333 30.000000 2670.000000 --42.833333 -22.833333 63.000000 2670.000000 --42.666667 -22.833333 253.000000 2670.000000 --42.500000 -22.833333 194.000000 2670.000000 --42.333333 -22.833333 24.000000 2670.000000 --42.166667 -22.833333 53.000000 2670.000000 --42.000000 -22.833333 17.000000 2670.000000 --41.833333 -22.833333 -39.000000 1670.000000 --41.666667 -22.833333 -54.000000 1670.000000 --41.500000 -22.833333 -67.000000 1670.000000 --41.333333 -22.833333 -67.000000 1670.000000 --41.166667 -22.833333 -75.000000 1670.000000 --41.000000 -22.833333 -100.000000 1670.000000 --40.833333 -22.833333 -100.000000 1670.000000 --40.666667 -22.833333 -736.000000 1670.000000 --40.500000 -22.833333 -1232.000000 1670.000000 --40.333333 -22.833333 -1394.000000 1670.000000 --40.166667 -22.833333 -2080.000000 1670.000000 --40.000000 -22.833333 -2607.000000 1670.000000 --65.000000 -23.000000 4207.000000 2670.000000 --64.833333 -23.000000 1785.000000 2670.000000 --64.666667 -23.000000 1216.000000 2670.000000 --64.500000 -23.000000 703.000000 2670.000000 --64.333333 -23.000000 336.000000 2670.000000 --64.166667 -23.000000 519.000000 2670.000000 --64.000000 -23.000000 385.000000 2670.000000 --63.833333 -23.000000 322.000000 2670.000000 --63.666667 -23.000000 273.000000 2670.000000 --63.500000 -23.000000 253.000000 2670.000000 --63.333333 -23.000000 243.000000 2670.000000 --63.166667 -23.000000 237.000000 2670.000000 --63.000000 -23.000000 229.000000 2670.000000 --62.833333 -23.000000 228.000000 2670.000000 --62.666667 -23.000000 225.000000 2670.000000 --62.500000 -23.000000 221.000000 2670.000000 --62.333333 -23.000000 220.000000 2670.000000 --62.166667 -23.000000 214.000000 2670.000000 --62.000000 -23.000000 211.000000 2670.000000 --61.833333 -23.000000 207.000000 2670.000000 --61.666667 -23.000000 196.000000 2670.000000 --61.500000 -23.000000 193.000000 2670.000000 --61.333333 -23.000000 183.000000 2670.000000 --61.166667 -23.000000 181.000000 2670.000000 --61.000000 -23.000000 171.000000 2670.000000 --60.833333 -23.000000 164.000000 2670.000000 --60.666667 -23.000000 158.000000 2670.000000 --60.500000 -23.000000 153.000000 2670.000000 --60.333333 -23.000000 147.000000 2670.000000 --60.166667 -23.000000 139.000000 2670.000000 --60.000000 -23.000000 133.000000 2670.000000 --59.833333 -23.000000 127.000000 2670.000000 --59.666667 -23.000000 120.000000 2670.000000 --59.500000 -23.000000 117.000000 2670.000000 --59.333333 -23.000000 113.000000 2670.000000 --59.166667 -23.000000 108.000000 2670.000000 --59.000000 -23.000000 106.000000 2670.000000 --58.833333 -23.000000 103.000000 2670.000000 --58.666667 -23.000000 99.000000 2670.000000 --58.500000 -23.000000 96.000000 2670.000000 --58.333333 -23.000000 92.000000 2670.000000 --58.166667 -23.000000 91.000000 2670.000000 --58.000000 -23.000000 86.000000 2670.000000 --57.833333 -23.000000 77.000000 2670.000000 --57.666667 -23.000000 79.000000 2670.000000 --57.500000 -23.000000 101.000000 2670.000000 --57.333333 -23.000000 91.000000 2670.000000 --57.166667 -23.000000 141.000000 2670.000000 --57.000000 -23.000000 119.000000 2670.000000 --56.833333 -23.000000 129.000000 2670.000000 --56.666667 -23.000000 134.000000 2670.000000 --56.500000 -23.000000 237.000000 2670.000000 --56.333333 -23.000000 351.000000 2670.000000 --56.166667 -23.000000 278.000000 2670.000000 --56.000000 -23.000000 241.000000 2670.000000 --55.833333 -23.000000 339.000000 2670.000000 --55.666667 -23.000000 306.000000 2670.000000 --55.500000 -23.000000 482.000000 2670.000000 --55.333333 -23.000000 410.000000 2670.000000 --55.166667 -23.000000 402.000000 2670.000000 --55.000000 -23.000000 385.000000 2670.000000 --54.833333 -23.000000 429.000000 2670.000000 --54.666667 -23.000000 296.000000 2670.000000 --54.500000 -23.000000 285.000000 2670.000000 --54.333333 -23.000000 328.000000 2670.000000 --54.166667 -23.000000 339.000000 2670.000000 --54.000000 -23.000000 295.000000 2670.000000 --53.833333 -23.000000 309.000000 2670.000000 --53.666667 -23.000000 235.000000 2670.000000 --53.500000 -23.000000 332.000000 2670.000000 --53.333333 -23.000000 344.000000 2670.000000 --53.166667 -23.000000 419.000000 2670.000000 --53.000000 -23.000000 383.000000 2670.000000 --52.833333 -23.000000 429.000000 2670.000000 --52.666667 -23.000000 453.000000 2670.000000 --52.500000 -23.000000 466.000000 2670.000000 --52.333333 -23.000000 425.000000 2670.000000 --52.166667 -23.000000 462.000000 2670.000000 --52.000000 -23.000000 383.000000 2670.000000 --51.833333 -23.000000 422.000000 2670.000000 --51.666667 -23.000000 499.000000 2670.000000 --51.500000 -23.000000 586.000000 2670.000000 --51.333333 -23.000000 404.000000 2670.000000 --51.166667 -23.000000 573.000000 2670.000000 --51.000000 -23.000000 366.000000 2670.000000 --50.833333 -23.000000 428.000000 2670.000000 --50.666667 -23.000000 378.000000 2670.000000 --50.500000 -23.000000 390.000000 2670.000000 --50.333333 -23.000000 428.000000 2670.000000 --50.166667 -23.000000 438.000000 2670.000000 --50.000000 -23.000000 471.000000 2670.000000 --49.833333 -23.000000 500.000000 2670.000000 --49.666667 -23.000000 507.000000 2670.000000 --49.500000 -23.000000 670.000000 2670.000000 --49.333333 -23.000000 717.000000 2670.000000 --49.166667 -23.000000 691.000000 2670.000000 --49.000000 -23.000000 709.000000 2670.000000 --48.833333 -23.000000 723.000000 2670.000000 --48.666667 -23.000000 758.000000 2670.000000 --48.500000 -23.000000 859.000000 2670.000000 --48.333333 -23.000000 800.000000 2670.000000 --48.166667 -23.000000 571.000000 2670.000000 --48.000000 -23.000000 501.000000 2670.000000 --47.833333 -23.000000 528.000000 2670.000000 --47.666667 -23.000000 515.000000 2670.000000 --47.500000 -23.000000 519.000000 2670.000000 --47.333333 -23.000000 604.000000 2670.000000 --47.166667 -23.000000 622.000000 2670.000000 --47.000000 -23.000000 719.000000 2670.000000 --46.833333 -23.000000 772.000000 2670.000000 --46.666667 -23.000000 778.000000 2670.000000 --46.500000 -23.000000 888.000000 2670.000000 --46.333333 -23.000000 878.000000 2670.000000 --46.166667 -23.000000 1193.000000 2670.000000 --46.000000 -23.000000 727.000000 2670.000000 --45.833333 -23.000000 671.000000 2670.000000 --45.666667 -23.000000 550.000000 2670.000000 --45.500000 -23.000000 562.000000 2670.000000 --45.333333 -23.000000 827.000000 2670.000000 --45.166667 -23.000000 975.000000 2670.000000 --45.000000 -23.000000 937.000000 2670.000000 --44.833333 -23.000000 1173.000000 2670.000000 --44.666667 -23.000000 893.000000 2670.000000 --44.500000 -23.000000 352.000000 2670.000000 --44.333333 -23.000000 165.000000 2670.000000 --44.166667 -23.000000 496.000000 2670.000000 --44.000000 -23.000000 -1.000000 1670.000000 --43.833333 -23.000000 -5.000000 1670.000000 --43.666667 -23.000000 -1.000000 1670.000000 --43.500000 -23.000000 5.000000 2670.000000 --43.333333 -23.000000 8.000000 2670.000000 --43.166667 -23.000000 -23.000000 1670.000000 --43.000000 -23.000000 -21.000000 1670.000000 --42.833333 -23.000000 -24.000000 1670.000000 --42.666667 -23.000000 -40.000000 1670.000000 --42.500000 -23.000000 -58.000000 1670.000000 --42.333333 -23.000000 -61.000000 1670.000000 --42.166667 -23.000000 -65.000000 1670.000000 --42.000000 -23.000000 88.000000 2670.000000 --41.833333 -23.000000 -67.000000 1670.000000 --41.666667 -23.000000 -89.000000 1670.000000 --41.500000 -23.000000 -74.000000 1670.000000 --41.333333 -23.000000 -78.000000 1670.000000 --41.166667 -23.000000 -91.000000 1670.000000 --41.000000 -23.000000 -85.000000 1670.000000 --40.833333 -23.000000 -603.000000 1670.000000 --40.666667 -23.000000 -1279.000000 1670.000000 --40.500000 -23.000000 -1783.000000 1670.000000 --40.333333 -23.000000 -2338.000000 1670.000000 --40.166667 -23.000000 -2476.000000 1670.000000 --40.000000 -23.000000 -2713.000000 1670.000000 --65.000000 -23.166667 3467.000000 2670.000000 --64.833333 -23.166667 2763.000000 2670.000000 --64.666667 -23.166667 718.000000 2670.000000 --64.500000 -23.166667 613.000000 2670.000000 --64.333333 -23.166667 364.000000 2670.000000 --64.166667 -23.166667 412.000000 2670.000000 --64.000000 -23.166667 280.000000 2670.000000 --63.833333 -23.166667 276.000000 2670.000000 --63.666667 -23.166667 265.000000 2670.000000 --63.500000 -23.166667 254.000000 2670.000000 --63.333333 -23.166667 245.000000 2670.000000 --63.166667 -23.166667 241.000000 2670.000000 --63.000000 -23.166667 230.000000 2670.000000 --62.833333 -23.166667 223.000000 2670.000000 --62.666667 -23.166667 220.000000 2670.000000 --62.500000 -23.166667 216.000000 2670.000000 --62.333333 -23.166667 213.000000 2670.000000 --62.166667 -23.166667 209.000000 2670.000000 --62.000000 -23.166667 206.000000 2670.000000 --61.833333 -23.166667 199.000000 2670.000000 --61.666667 -23.166667 192.000000 2670.000000 --61.500000 -23.166667 187.000000 2670.000000 --61.333333 -23.166667 185.000000 2670.000000 --61.166667 -23.166667 177.000000 2670.000000 --61.000000 -23.166667 166.000000 2670.000000 --60.833333 -23.166667 161.000000 2670.000000 --60.666667 -23.166667 158.000000 2670.000000 --60.500000 -23.166667 150.000000 2670.000000 --60.333333 -23.166667 148.000000 2670.000000 --60.166667 -23.166667 141.000000 2670.000000 --60.000000 -23.166667 133.000000 2670.000000 --59.833333 -23.166667 128.000000 2670.000000 --59.666667 -23.166667 121.000000 2670.000000 --59.500000 -23.166667 117.000000 2670.000000 --59.333333 -23.166667 115.000000 2670.000000 --59.166667 -23.166667 111.000000 2670.000000 --59.000000 -23.166667 110.000000 2670.000000 --58.833333 -23.166667 104.000000 2670.000000 --58.666667 -23.166667 101.000000 2670.000000 --58.500000 -23.166667 96.000000 2670.000000 --58.333333 -23.166667 94.000000 2670.000000 --58.166667 -23.166667 90.000000 2670.000000 --58.000000 -23.166667 85.000000 2670.000000 --57.833333 -23.166667 81.000000 2670.000000 --57.666667 -23.166667 76.000000 2670.000000 --57.500000 -23.166667 121.000000 2670.000000 --57.333333 -23.166667 137.000000 2670.000000 --57.166667 -23.166667 101.000000 2670.000000 --57.000000 -23.166667 107.000000 2670.000000 --56.833333 -23.166667 157.000000 2670.000000 --56.666667 -23.166667 268.000000 2670.000000 --56.500000 -23.166667 305.000000 2670.000000 --56.333333 -23.166667 211.000000 2670.000000 --56.166667 -23.166667 229.000000 2670.000000 --56.000000 -23.166667 369.000000 2670.000000 --55.833333 -23.166667 230.000000 2670.000000 --55.666667 -23.166667 402.000000 2670.000000 --55.500000 -23.166667 466.000000 2670.000000 --55.333333 -23.166667 470.000000 2670.000000 --55.166667 -23.166667 451.000000 2670.000000 --55.000000 -23.166667 442.000000 2670.000000 --54.833333 -23.166667 377.000000 2670.000000 --54.666667 -23.166667 376.000000 2670.000000 --54.500000 -23.166667 344.000000 2670.000000 --54.333333 -23.166667 351.000000 2670.000000 --54.166667 -23.166667 252.000000 2670.000000 --54.000000 -23.166667 240.000000 2670.000000 --53.833333 -23.166667 272.000000 2670.000000 --53.666667 -23.166667 235.000000 2670.000000 --53.500000 -23.166667 240.000000 2670.000000 --53.333333 -23.166667 267.000000 2670.000000 --53.166667 -23.166667 323.000000 2670.000000 --53.000000 -23.166667 331.000000 2670.000000 --52.833333 -23.166667 377.000000 2670.000000 --52.666667 -23.166667 314.000000 2670.000000 --52.500000 -23.166667 399.000000 2670.000000 --52.333333 -23.166667 442.000000 2670.000000 --52.166667 -23.166667 492.000000 2670.000000 --52.000000 -23.166667 420.000000 2670.000000 --51.833333 -23.166667 565.000000 2670.000000 --51.666667 -23.166667 575.000000 2670.000000 --51.500000 -23.166667 580.000000 2670.000000 --51.333333 -23.166667 521.000000 2670.000000 --51.166667 -23.166667 568.000000 2670.000000 --51.000000 -23.166667 377.000000 2670.000000 --50.833333 -23.166667 427.000000 2670.000000 --50.666667 -23.166667 589.000000 2670.000000 --50.500000 -23.166667 428.000000 2670.000000 --50.333333 -23.166667 507.000000 2670.000000 --50.166667 -23.166667 442.000000 2670.000000 --50.000000 -23.166667 532.000000 2670.000000 --49.833333 -23.166667 518.000000 2670.000000 --49.666667 -23.166667 607.000000 2670.000000 --49.500000 -23.166667 581.000000 2670.000000 --49.333333 -23.166667 539.000000 2670.000000 --49.166667 -23.166667 624.000000 2670.000000 --49.000000 -23.166667 613.000000 2670.000000 --48.833333 -23.166667 744.000000 2670.000000 --48.666667 -23.166667 673.000000 2670.000000 --48.500000 -23.166667 676.000000 2670.000000 --48.333333 -23.166667 651.000000 2670.000000 --48.166667 -23.166667 546.000000 2670.000000 --48.000000 -23.166667 533.000000 2670.000000 --47.833333 -23.166667 532.000000 2670.000000 --47.666667 -23.166667 543.000000 2670.000000 --47.500000 -23.166667 520.000000 2670.000000 --47.333333 -23.166667 541.000000 2670.000000 --47.166667 -23.166667 684.000000 2670.000000 --47.000000 -23.166667 733.000000 2670.000000 --46.833333 -23.166667 779.000000 2670.000000 --46.666667 -23.166667 867.000000 2670.000000 --46.500000 -23.166667 1087.000000 2670.000000 --46.333333 -23.166667 889.000000 2670.000000 --46.166667 -23.166667 770.000000 2670.000000 --46.000000 -23.166667 642.000000 2670.000000 --45.833333 -23.166667 573.000000 2670.000000 --45.666667 -23.166667 628.000000 2670.000000 --45.500000 -23.166667 680.000000 2670.000000 --45.333333 -23.166667 866.000000 2670.000000 --45.166667 -23.166667 893.000000 2670.000000 --45.000000 -23.166667 1211.000000 2670.000000 --44.833333 -23.166667 1465.000000 2670.000000 --44.666667 -23.166667 0.000000 2670.000000 --44.500000 -23.166667 -24.000000 1670.000000 --44.333333 -23.166667 217.000000 2670.000000 --44.166667 -23.166667 323.000000 2670.000000 --44.000000 -23.166667 -28.000000 1670.000000 --43.833333 -23.166667 -36.000000 1670.000000 --43.666667 -23.166667 -42.000000 1670.000000 --43.500000 -23.166667 -46.000000 1670.000000 --43.333333 -23.166667 -57.000000 1670.000000 --43.166667 -23.166667 -63.000000 1670.000000 --43.000000 -23.166667 -74.000000 1670.000000 --42.833333 -23.166667 -78.000000 1670.000000 --42.666667 -23.166667 -92.000000 1670.000000 --42.500000 -23.166667 -103.000000 1670.000000 --42.333333 -23.166667 -109.000000 1670.000000 --42.166667 -23.166667 -115.000000 1670.000000 --42.000000 -23.166667 -123.000000 1670.000000 --41.833333 -23.166667 -111.000000 1670.000000 --41.666667 -23.166667 -106.000000 1670.000000 --41.500000 -23.166667 -92.000000 1670.000000 --41.333333 -23.166667 -92.000000 1670.000000 --41.166667 -23.166667 -110.000000 1670.000000 --41.000000 -23.166667 -198.000000 1670.000000 --40.833333 -23.166667 -1362.000000 1670.000000 --40.666667 -23.166667 -1951.000000 1670.000000 --40.500000 -23.166667 -2195.000000 1670.000000 --40.333333 -23.166667 -2486.000000 1670.000000 --40.166667 -23.166667 -2661.000000 1670.000000 --40.000000 -23.166667 -2769.000000 1670.000000 --65.000000 -23.333333 3771.000000 2670.000000 --64.833333 -23.333333 2319.000000 2670.000000 --64.666667 -23.333333 726.000000 2670.000000 --64.500000 -23.333333 472.000000 2670.000000 --64.333333 -23.333333 330.000000 2670.000000 --64.166667 -23.333333 300.000000 2670.000000 --64.000000 -23.333333 284.000000 2670.000000 --63.833333 -23.333333 275.000000 2670.000000 --63.666667 -23.333333 266.000000 2670.000000 --63.500000 -23.333333 254.000000 2670.000000 --63.333333 -23.333333 246.000000 2670.000000 --63.166667 -23.333333 236.000000 2670.000000 --63.000000 -23.333333 228.000000 2670.000000 --62.833333 -23.333333 222.000000 2670.000000 --62.666667 -23.333333 216.000000 2670.000000 --62.500000 -23.333333 211.000000 2670.000000 --62.333333 -23.333333 210.000000 2670.000000 --62.166667 -23.333333 205.000000 2670.000000 --62.000000 -23.333333 198.000000 2670.000000 --61.833333 -23.333333 197.000000 2670.000000 --61.666667 -23.333333 190.000000 2670.000000 --61.500000 -23.333333 187.000000 2670.000000 --61.333333 -23.333333 177.000000 2670.000000 --61.166667 -23.333333 170.000000 2670.000000 --61.000000 -23.333333 165.000000 2670.000000 --60.833333 -23.333333 160.000000 2670.000000 --60.666667 -23.333333 154.000000 2670.000000 --60.500000 -23.333333 150.000000 2670.000000 --60.333333 -23.333333 144.000000 2670.000000 --60.166667 -23.333333 139.000000 2670.000000 --60.000000 -23.333333 134.000000 2670.000000 --59.833333 -23.333333 129.000000 2670.000000 --59.666667 -23.333333 121.000000 2670.000000 --59.500000 -23.333333 121.000000 2670.000000 --59.333333 -23.333333 115.000000 2670.000000 --59.166667 -23.333333 110.000000 2670.000000 --59.000000 -23.333333 107.000000 2670.000000 --58.833333 -23.333333 104.000000 2670.000000 --58.666667 -23.333333 99.000000 2670.000000 --58.500000 -23.333333 99.000000 2670.000000 --58.333333 -23.333333 95.000000 2670.000000 --58.166667 -23.333333 92.000000 2670.000000 --58.000000 -23.333333 85.000000 2670.000000 --57.833333 -23.333333 80.000000 2670.000000 --57.666667 -23.333333 76.000000 2670.000000 --57.500000 -23.333333 71.000000 2670.000000 --57.333333 -23.333333 126.000000 2670.000000 --57.166667 -23.333333 173.000000 2670.000000 --57.000000 -23.333333 168.000000 2670.000000 --56.833333 -23.333333 208.000000 2670.000000 --56.666667 -23.333333 206.000000 2670.000000 --56.500000 -23.333333 242.000000 2670.000000 --56.333333 -23.333333 184.000000 2670.000000 --56.166667 -23.333333 200.000000 2670.000000 --56.000000 -23.333333 332.000000 2670.000000 --55.833333 -23.333333 280.000000 2670.000000 --55.666667 -23.333333 416.000000 2670.000000 --55.500000 -23.333333 492.000000 2670.000000 --55.333333 -23.333333 440.000000 2670.000000 --55.166667 -23.333333 360.000000 2670.000000 --55.000000 -23.333333 337.000000 2670.000000 --54.833333 -23.333333 357.000000 2670.000000 --54.666667 -23.333333 355.000000 2670.000000 --54.500000 -23.333333 382.000000 2670.000000 --54.333333 -23.333333 289.000000 2670.000000 --54.166667 -23.333333 315.000000 2670.000000 --54.000000 -23.333333 271.000000 2670.000000 --53.833333 -23.333333 230.000000 2670.000000 --53.666667 -23.333333 285.000000 2670.000000 --53.500000 -23.333333 327.000000 2670.000000 --53.333333 -23.333333 373.000000 2670.000000 --53.166667 -23.333333 360.000000 2670.000000 --53.000000 -23.333333 347.000000 2670.000000 --52.833333 -23.333333 367.000000 2670.000000 --52.666667 -23.333333 273.000000 2670.000000 --52.500000 -23.333333 340.000000 2670.000000 --52.333333 -23.333333 424.000000 2670.000000 --52.166667 -23.333333 513.000000 2670.000000 --52.000000 -23.333333 463.000000 2670.000000 --51.833333 -23.333333 432.000000 2670.000000 --51.666667 -23.333333 600.000000 2670.000000 --51.500000 -23.333333 743.000000 2670.000000 --51.333333 -23.333333 635.000000 2670.000000 --51.166667 -23.333333 547.000000 2670.000000 --51.000000 -23.333333 408.000000 2670.000000 --50.833333 -23.333333 526.000000 2670.000000 --50.666667 -23.333333 487.000000 2670.000000 --50.500000 -23.333333 515.000000 2670.000000 --50.333333 -23.333333 593.000000 2670.000000 --50.166667 -23.333333 491.000000 2670.000000 --50.000000 -23.333333 525.000000 2670.000000 --49.833333 -23.333333 574.000000 2670.000000 --49.666667 -23.333333 481.000000 2670.000000 --49.500000 -23.333333 822.000000 2670.000000 --49.333333 -23.333333 676.000000 2670.000000 --49.166667 -23.333333 580.000000 2670.000000 --49.000000 -23.333333 570.000000 2670.000000 --48.833333 -23.333333 640.000000 2670.000000 --48.666667 -23.333333 563.000000 2670.000000 --48.500000 -23.333333 624.000000 2670.000000 --48.333333 -23.333333 633.000000 2670.000000 --48.166667 -23.333333 698.000000 2670.000000 --48.000000 -23.333333 612.000000 2670.000000 --47.833333 -23.333333 609.000000 2670.000000 --47.666667 -23.333333 565.000000 2670.000000 --47.500000 -23.333333 567.000000 2670.000000 --47.333333 -23.333333 626.000000 2670.000000 --47.166667 -23.333333 675.000000 2670.000000 --47.000000 -23.333333 734.000000 2670.000000 --46.833333 -23.333333 763.000000 2670.000000 --46.666667 -23.333333 792.000000 2670.000000 --46.500000 -23.333333 849.000000 2670.000000 --46.333333 -23.333333 715.000000 2670.000000 --46.166667 -23.333333 707.000000 2670.000000 --46.000000 -23.333333 619.000000 2670.000000 --45.833333 -23.333333 644.000000 2670.000000 --45.666667 -23.333333 688.000000 2670.000000 --45.500000 -23.333333 793.000000 2670.000000 --45.333333 -23.333333 932.000000 2670.000000 --45.166667 -23.333333 1023.000000 2670.000000 --45.000000 -23.333333 300.000000 2670.000000 --44.833333 -23.333333 174.000000 2670.000000 --44.666667 -23.333333 65.000000 2670.000000 --44.500000 -23.333333 -23.000000 1670.000000 --44.333333 -23.333333 -32.000000 1670.000000 --44.166667 -23.333333 -43.000000 1670.000000 --44.000000 -23.333333 -58.000000 1670.000000 --43.833333 -23.333333 -60.000000 1670.000000 --43.666667 -23.333333 -66.000000 1670.000000 --43.500000 -23.333333 -78.000000 1670.000000 --43.333333 -23.333333 -87.000000 1670.000000 --43.166667 -23.333333 -108.000000 1670.000000 --43.000000 -23.333333 -104.000000 1670.000000 --42.833333 -23.333333 -106.000000 1670.000000 --42.666667 -23.333333 -106.000000 1670.000000 --42.500000 -23.333333 -117.000000 1670.000000 --42.333333 -23.333333 -127.000000 1670.000000 --42.166667 -23.333333 -131.000000 1670.000000 --42.000000 -23.333333 -133.000000 1670.000000 --41.833333 -23.333333 -133.000000 1670.000000 --41.666667 -23.333333 -128.000000 1670.000000 --41.500000 -23.333333 -113.000000 1670.000000 --41.333333 -23.333333 -98.000000 1670.000000 --41.166667 -23.333333 -125.000000 1670.000000 --41.000000 -23.333333 -757.000000 1670.000000 --40.833333 -23.333333 -1859.000000 1670.000000 --40.666667 -23.333333 -2259.000000 1670.000000 --40.500000 -23.333333 -2516.000000 1670.000000 --40.333333 -23.333333 -2610.000000 1670.000000 --40.166667 -23.333333 -2743.000000 1670.000000 --40.000000 -23.333333 -2832.000000 1670.000000 --65.000000 -23.500000 2130.000000 2670.000000 --64.833333 -23.500000 2474.000000 2670.000000 --64.666667 -23.500000 885.000000 2670.000000 --64.500000 -23.500000 541.000000 2670.000000 --64.333333 -23.500000 323.000000 2670.000000 --64.166667 -23.500000 311.000000 2670.000000 --64.000000 -23.500000 336.000000 2670.000000 --63.833333 -23.500000 349.000000 2670.000000 --63.666667 -23.500000 282.000000 2670.000000 --63.500000 -23.500000 252.000000 2670.000000 --63.333333 -23.500000 244.000000 2670.000000 --63.166667 -23.500000 235.000000 2670.000000 --63.000000 -23.500000 228.000000 2670.000000 --62.833333 -23.500000 220.000000 2670.000000 --62.666667 -23.500000 214.000000 2670.000000 --62.500000 -23.500000 210.000000 2670.000000 --62.333333 -23.500000 203.000000 2670.000000 --62.166667 -23.500000 197.000000 2670.000000 --62.000000 -23.500000 195.000000 2670.000000 --61.833333 -23.500000 194.000000 2670.000000 --61.666667 -23.500000 187.000000 2670.000000 --61.500000 -23.500000 177.000000 2670.000000 --61.333333 -23.500000 174.000000 2670.000000 --61.166667 -23.500000 171.000000 2670.000000 --61.000000 -23.500000 164.000000 2670.000000 --60.833333 -23.500000 156.000000 2670.000000 --60.666667 -23.500000 155.000000 2670.000000 --60.500000 -23.500000 143.000000 2670.000000 --60.333333 -23.500000 140.000000 2670.000000 --60.166667 -23.500000 137.000000 2670.000000 --60.000000 -23.500000 130.000000 2670.000000 --59.833333 -23.500000 128.000000 2670.000000 --59.666667 -23.500000 120.000000 2670.000000 --59.500000 -23.500000 117.000000 2670.000000 --59.333333 -23.500000 113.000000 2670.000000 --59.166667 -23.500000 110.000000 2670.000000 --59.000000 -23.500000 108.000000 2670.000000 --58.833333 -23.500000 101.000000 2670.000000 --58.666667 -23.500000 97.000000 2670.000000 --58.500000 -23.500000 94.000000 2670.000000 --58.333333 -23.500000 90.000000 2670.000000 --58.166667 -23.500000 88.000000 2670.000000 --58.000000 -23.500000 83.000000 2670.000000 --57.833333 -23.500000 78.000000 2670.000000 --57.666667 -23.500000 78.000000 2670.000000 --57.500000 -23.500000 69.000000 2670.000000 --57.333333 -23.500000 82.000000 2670.000000 --57.166667 -23.500000 94.000000 2670.000000 --57.000000 -23.500000 145.000000 2670.000000 --56.833333 -23.500000 224.000000 2670.000000 --56.666667 -23.500000 199.000000 2670.000000 --56.500000 -23.500000 192.000000 2670.000000 --56.333333 -23.500000 334.000000 2670.000000 --56.166667 -23.500000 373.000000 2670.000000 --56.000000 -23.500000 311.000000 2670.000000 --55.833333 -23.500000 269.000000 2670.000000 --55.666667 -23.500000 425.000000 2670.000000 --55.500000 -23.500000 390.000000 2670.000000 --55.333333 -23.500000 376.000000 2670.000000 --55.166667 -23.500000 377.000000 2670.000000 --55.000000 -23.500000 318.000000 2670.000000 --54.833333 -23.500000 297.000000 2670.000000 --54.666667 -23.500000 367.000000 2670.000000 --54.500000 -23.500000 392.000000 2670.000000 --54.333333 -23.500000 341.000000 2670.000000 --54.166667 -23.500000 317.000000 2670.000000 --54.000000 -23.500000 228.000000 2670.000000 --53.833333 -23.500000 315.000000 2670.000000 --53.666667 -23.500000 365.000000 2670.000000 --53.500000 -23.500000 398.000000 2670.000000 --53.333333 -23.500000 406.000000 2670.000000 --53.166667 -23.500000 366.000000 2670.000000 --53.000000 -23.500000 322.000000 2670.000000 --52.833333 -23.500000 441.000000 2670.000000 --52.666667 -23.500000 413.000000 2670.000000 --52.500000 -23.500000 319.000000 2670.000000 --52.333333 -23.500000 356.000000 2670.000000 --52.166667 -23.500000 345.000000 2670.000000 --52.000000 -23.500000 452.000000 2670.000000 --51.833333 -23.500000 519.000000 2670.000000 --51.666667 -23.500000 641.000000 2670.000000 --51.500000 -23.500000 626.000000 2670.000000 --51.333333 -23.500000 732.000000 2670.000000 --51.166667 -23.500000 530.000000 2670.000000 --51.000000 -23.500000 483.000000 2670.000000 --50.833333 -23.500000 571.000000 2670.000000 --50.666667 -23.500000 710.000000 2670.000000 --50.500000 -23.500000 759.000000 2670.000000 --50.333333 -23.500000 655.000000 2670.000000 --50.166667 -23.500000 493.000000 2670.000000 --50.000000 -23.500000 517.000000 2670.000000 --49.833333 -23.500000 648.000000 2670.000000 --49.666667 -23.500000 489.000000 2670.000000 --49.500000 -23.500000 493.000000 2670.000000 --49.333333 -23.500000 654.000000 2670.000000 --49.166667 -23.500000 589.000000 2670.000000 --49.000000 -23.500000 664.000000 2670.000000 --48.833333 -23.500000 648.000000 2670.000000 --48.666667 -23.500000 614.000000 2670.000000 --48.500000 -23.500000 608.000000 2670.000000 --48.333333 -23.500000 741.000000 2670.000000 --48.166667 -23.500000 715.000000 2670.000000 --48.000000 -23.500000 741.000000 2670.000000 --47.833333 -23.500000 555.000000 2670.000000 --47.666667 -23.500000 600.000000 2670.000000 --47.500000 -23.500000 605.000000 2670.000000 --47.333333 -23.500000 702.000000 2670.000000 --47.166667 -23.500000 791.000000 2670.000000 --47.000000 -23.500000 878.000000 2670.000000 --46.833333 -23.500000 760.000000 2670.000000 --46.666667 -23.500000 744.000000 2670.000000 --46.500000 -23.500000 768.000000 2670.000000 --46.333333 -23.500000 739.000000 2670.000000 --46.166667 -23.500000 753.000000 2670.000000 --46.000000 -23.500000 732.000000 2670.000000 --45.833333 -23.500000 889.000000 2670.000000 --45.666667 -23.500000 1058.000000 2670.000000 --45.500000 -23.500000 746.000000 2670.000000 --45.333333 -23.500000 818.000000 2670.000000 --45.166667 -23.500000 20.000000 2670.000000 --45.000000 -23.500000 -22.000000 1670.000000 --44.833333 -23.500000 -28.000000 1670.000000 --44.666667 -23.500000 -36.000000 1670.000000 --44.500000 -23.500000 -49.000000 1670.000000 --44.333333 -23.500000 -51.000000 1670.000000 --44.166667 -23.500000 -26.000000 1670.000000 --44.000000 -23.500000 -76.000000 1670.000000 --43.833333 -23.500000 -92.000000 1670.000000 --43.666667 -23.500000 -92.000000 1670.000000 --43.500000 -23.500000 -117.000000 1670.000000 --43.333333 -23.500000 -119.000000 1670.000000 --43.166667 -23.500000 -119.000000 1670.000000 --43.000000 -23.500000 -113.000000 1670.000000 --42.833333 -23.500000 -124.000000 1670.000000 --42.666667 -23.500000 -127.000000 1670.000000 --42.500000 -23.500000 -129.000000 1670.000000 --42.333333 -23.500000 -137.000000 1670.000000 --42.166667 -23.500000 -163.000000 1670.000000 --42.000000 -23.500000 -212.000000 1670.000000 --41.833333 -23.500000 -142.000000 1670.000000 --41.666667 -23.500000 -141.000000 1670.000000 --41.500000 -23.500000 -135.000000 1670.000000 --41.333333 -23.500000 -113.000000 1670.000000 --41.166667 -23.500000 -486.000000 1670.000000 --41.000000 -23.500000 -1556.000000 1670.000000 --40.833333 -23.500000 -2064.000000 1670.000000 --40.666667 -23.500000 -2472.000000 1670.000000 --40.500000 -23.500000 -2691.000000 1670.000000 --40.333333 -23.500000 -2784.000000 1670.000000 --40.166667 -23.500000 -2833.000000 1670.000000 --40.000000 -23.500000 -2901.000000 1670.000000 --65.000000 -23.666667 1912.000000 2670.000000 --64.833333 -23.666667 1336.000000 2670.000000 --64.666667 -23.666667 902.000000 2670.000000 --64.500000 -23.666667 367.000000 2670.000000 --64.333333 -23.666667 352.000000 2670.000000 --64.166667 -23.666667 357.000000 2670.000000 --64.000000 -23.666667 438.000000 2670.000000 --63.833333 -23.666667 506.000000 2670.000000 --63.666667 -23.666667 294.000000 2670.000000 --63.500000 -23.666667 246.000000 2670.000000 --63.333333 -23.666667 241.000000 2670.000000 --63.166667 -23.666667 232.000000 2670.000000 --63.000000 -23.666667 224.000000 2670.000000 --62.833333 -23.666667 216.000000 2670.000000 --62.666667 -23.666667 213.000000 2670.000000 --62.500000 -23.666667 207.000000 2670.000000 --62.333333 -23.666667 204.000000 2670.000000 --62.166667 -23.666667 198.000000 2670.000000 --62.000000 -23.666667 192.000000 2670.000000 --61.833333 -23.666667 187.000000 2670.000000 --61.666667 -23.666667 181.000000 2670.000000 --61.500000 -23.666667 179.000000 2670.000000 --61.333333 -23.666667 170.000000 2670.000000 --61.166667 -23.666667 169.000000 2670.000000 --61.000000 -23.666667 164.000000 2670.000000 --60.833333 -23.666667 156.000000 2670.000000 --60.666667 -23.666667 152.000000 2670.000000 --60.500000 -23.666667 146.000000 2670.000000 --60.333333 -23.666667 138.000000 2670.000000 --60.166667 -23.666667 136.000000 2670.000000 --60.000000 -23.666667 131.000000 2670.000000 --59.833333 -23.666667 124.000000 2670.000000 --59.666667 -23.666667 118.000000 2670.000000 --59.500000 -23.666667 116.000000 2670.000000 --59.333333 -23.666667 114.000000 2670.000000 --59.166667 -23.666667 109.000000 2670.000000 --59.000000 -23.666667 105.000000 2670.000000 --58.833333 -23.666667 101.000000 2670.000000 --58.666667 -23.666667 98.000000 2670.000000 --58.500000 -23.666667 94.000000 2670.000000 --58.333333 -23.666667 94.000000 2670.000000 --58.166667 -23.666667 87.000000 2670.000000 --58.000000 -23.666667 88.000000 2670.000000 --57.833333 -23.666667 78.000000 2670.000000 --57.666667 -23.666667 78.000000 2670.000000 --57.500000 -23.666667 70.000000 2670.000000 --57.333333 -23.666667 78.000000 2670.000000 --57.166667 -23.666667 97.000000 2670.000000 --57.000000 -23.666667 161.000000 2670.000000 --56.833333 -23.666667 216.000000 2670.000000 --56.666667 -23.666667 137.000000 2670.000000 --56.500000 -23.666667 159.000000 2670.000000 --56.333333 -23.666667 251.000000 2670.000000 --56.166667 -23.666667 264.000000 2670.000000 --56.000000 -23.666667 187.000000 2670.000000 --55.833333 -23.666667 228.000000 2670.000000 --55.666667 -23.666667 239.000000 2670.000000 --55.500000 -23.666667 389.000000 2670.000000 --55.333333 -23.666667 365.000000 2670.000000 --55.166667 -23.666667 377.000000 2670.000000 --55.000000 -23.666667 376.000000 2670.000000 --54.833333 -23.666667 381.000000 2670.000000 --54.666667 -23.666667 251.000000 2670.000000 --54.500000 -23.666667 308.000000 2670.000000 --54.333333 -23.666667 373.000000 2670.000000 --54.166667 -23.666667 294.000000 2670.000000 --54.000000 -23.666667 228.000000 2670.000000 --53.833333 -23.666667 262.000000 2670.000000 --53.666667 -23.666667 312.000000 2670.000000 --53.500000 -23.666667 408.000000 2670.000000 --53.333333 -23.666667 450.000000 2670.000000 --53.166667 -23.666667 345.000000 2670.000000 --53.000000 -23.666667 432.000000 2670.000000 --52.833333 -23.666667 494.000000 2670.000000 --52.666667 -23.666667 469.000000 2670.000000 --52.500000 -23.666667 427.000000 2670.000000 --52.333333 -23.666667 364.000000 2670.000000 --52.166667 -23.666667 316.000000 2670.000000 --52.000000 -23.666667 384.000000 2670.000000 --51.833333 -23.666667 481.000000 2670.000000 --51.666667 -23.666667 588.000000 2670.000000 --51.500000 -23.666667 578.000000 2670.000000 --51.333333 -23.666667 727.000000 2670.000000 --51.166667 -23.666667 642.000000 2670.000000 --51.000000 -23.666667 660.000000 2670.000000 --50.833333 -23.666667 773.000000 2670.000000 --50.666667 -23.666667 857.000000 2670.000000 --50.500000 -23.666667 764.000000 2670.000000 --50.333333 -23.666667 567.000000 2670.000000 --50.166667 -23.666667 527.000000 2670.000000 --50.000000 -23.666667 566.000000 2670.000000 --49.833333 -23.666667 662.000000 2670.000000 --49.666667 -23.666667 576.000000 2670.000000 --49.500000 -23.666667 525.000000 2670.000000 --49.333333 -23.666667 602.000000 2670.000000 --49.166667 -23.666667 652.000000 2670.000000 --49.000000 -23.666667 648.000000 2670.000000 --48.833333 -23.666667 755.000000 2670.000000 --48.666667 -23.666667 632.000000 2670.000000 --48.500000 -23.666667 631.000000 2670.000000 --48.333333 -23.666667 712.000000 2670.000000 --48.166667 -23.666667 673.000000 2670.000000 --48.000000 -23.666667 644.000000 2670.000000 --47.833333 -23.666667 659.000000 2670.000000 --47.666667 -23.666667 608.000000 2670.000000 --47.500000 -23.666667 748.000000 2670.000000 --47.333333 -23.666667 920.000000 2670.000000 --47.166667 -23.666667 892.000000 2670.000000 --47.000000 -23.666667 927.000000 2670.000000 --46.833333 -23.666667 790.000000 2670.000000 --46.666667 -23.666667 780.000000 2670.000000 --46.500000 -23.666667 769.000000 2670.000000 --46.333333 -23.666667 800.000000 2670.000000 --46.166667 -23.666667 788.000000 2670.000000 --46.000000 -23.666667 802.000000 2670.000000 --45.833333 -23.666667 931.000000 2670.000000 --45.666667 -23.666667 802.000000 2670.000000 --45.500000 -23.666667 64.000000 2670.000000 --45.333333 -23.666667 -1.000000 1670.000000 --45.166667 -23.666667 -21.000000 1670.000000 --45.000000 -23.666667 -34.000000 1670.000000 --44.833333 -23.666667 -46.000000 1670.000000 --44.666667 -23.666667 -36.000000 1670.000000 --44.500000 -23.666667 -60.000000 1670.000000 --44.333333 -23.666667 -76.000000 1670.000000 --44.166667 -23.666667 -85.000000 1670.000000 --44.000000 -23.666667 -99.000000 1670.000000 --43.833333 -23.666667 -106.000000 1670.000000 --43.666667 -23.666667 -116.000000 1670.000000 --43.500000 -23.666667 -115.000000 1670.000000 --43.333333 -23.666667 -121.000000 1670.000000 --43.166667 -23.666667 -117.000000 1670.000000 --43.000000 -23.666667 -122.000000 1670.000000 --42.833333 -23.666667 -124.000000 1670.000000 --42.666667 -23.666667 -151.000000 1670.000000 --42.500000 -23.666667 -202.000000 1670.000000 --42.333333 -23.666667 -352.000000 1670.000000 --42.166667 -23.666667 -414.000000 1670.000000 --42.000000 -23.666667 -408.000000 1670.000000 --41.833333 -23.666667 -241.000000 1670.000000 --41.666667 -23.666667 -151.000000 1670.000000 --41.500000 -23.666667 -294.000000 1670.000000 --41.333333 -23.666667 -652.000000 1670.000000 --41.166667 -23.666667 -1257.000000 1670.000000 --41.000000 -23.666667 -1869.000000 1670.000000 --40.833333 -23.666667 -2198.000000 1670.000000 --40.666667 -23.666667 -2537.000000 1670.000000 --40.500000 -23.666667 -2722.000000 1670.000000 --40.333333 -23.666667 -2851.000000 1670.000000 --40.166667 -23.666667 -3020.000000 1670.000000 --40.000000 -23.666667 -2977.000000 1670.000000 --65.000000 -23.833333 1195.000000 2670.000000 --64.833333 -23.833333 637.000000 2670.000000 --64.666667 -23.833333 377.000000 2670.000000 --64.500000 -23.833333 532.000000 2670.000000 --64.333333 -23.833333 523.000000 2670.000000 --64.166667 -23.833333 427.000000 2670.000000 --64.000000 -23.833333 481.000000 2670.000000 --63.833333 -23.833333 348.000000 2670.000000 --63.666667 -23.833333 266.000000 2670.000000 --63.500000 -23.833333 235.000000 2670.000000 --63.333333 -23.833333 233.000000 2670.000000 --63.166667 -23.833333 228.000000 2670.000000 --63.000000 -23.833333 221.000000 2670.000000 --62.833333 -23.833333 214.000000 2670.000000 --62.666667 -23.833333 209.000000 2670.000000 --62.500000 -23.833333 203.000000 2670.000000 --62.333333 -23.833333 202.000000 2670.000000 --62.166667 -23.833333 195.000000 2670.000000 --62.000000 -23.833333 189.000000 2670.000000 --61.833333 -23.833333 184.000000 2670.000000 --61.666667 -23.833333 181.000000 2670.000000 --61.500000 -23.833333 174.000000 2670.000000 --61.333333 -23.833333 169.000000 2670.000000 --61.166667 -23.833333 165.000000 2670.000000 --61.000000 -23.833333 158.000000 2670.000000 --60.833333 -23.833333 157.000000 2670.000000 --60.666667 -23.833333 155.000000 2670.000000 --60.500000 -23.833333 148.000000 2670.000000 --60.333333 -23.833333 140.000000 2670.000000 --60.166667 -23.833333 137.000000 2670.000000 --60.000000 -23.833333 130.000000 2670.000000 --59.833333 -23.833333 122.000000 2670.000000 --59.666667 -23.833333 118.000000 2670.000000 --59.500000 -23.833333 117.000000 2670.000000 --59.333333 -23.833333 114.000000 2670.000000 --59.166667 -23.833333 110.000000 2670.000000 --59.000000 -23.833333 103.000000 2670.000000 --58.833333 -23.833333 102.000000 2670.000000 --58.666667 -23.833333 101.000000 2670.000000 --58.500000 -23.833333 96.000000 2670.000000 --58.333333 -23.833333 91.000000 2670.000000 --58.166667 -23.833333 88.000000 2670.000000 --58.000000 -23.833333 85.000000 2670.000000 --57.833333 -23.833333 82.000000 2670.000000 --57.666667 -23.833333 79.000000 2670.000000 --57.500000 -23.833333 71.000000 2670.000000 --57.333333 -23.833333 68.000000 2670.000000 --57.166667 -23.833333 77.000000 2670.000000 --57.000000 -23.833333 123.000000 2670.000000 --56.833333 -23.833333 171.000000 2670.000000 --56.666667 -23.833333 176.000000 2670.000000 --56.500000 -23.833333 154.000000 2670.000000 --56.333333 -23.833333 176.000000 2670.000000 --56.166667 -23.833333 219.000000 2670.000000 --56.000000 -23.833333 153.000000 2670.000000 --55.833333 -23.833333 216.000000 2670.000000 --55.666667 -23.833333 232.000000 2670.000000 --55.500000 -23.833333 372.000000 2670.000000 --55.333333 -23.833333 387.000000 2670.000000 --55.166667 -23.833333 377.000000 2670.000000 --55.000000 -23.833333 342.000000 2670.000000 --54.833333 -23.833333 300.000000 2670.000000 --54.666667 -23.833333 358.000000 2670.000000 --54.500000 -23.833333 302.000000 2670.000000 --54.333333 -23.833333 237.000000 2670.000000 --54.166667 -23.833333 262.000000 2670.000000 --54.000000 -23.833333 226.000000 2670.000000 --53.833333 -23.833333 365.000000 2670.000000 --53.666667 -23.833333 335.000000 2670.000000 --53.500000 -23.833333 311.000000 2670.000000 --53.333333 -23.833333 449.000000 2670.000000 --53.166667 -23.833333 411.000000 2670.000000 --53.000000 -23.833333 387.000000 2670.000000 --52.833333 -23.833333 491.000000 2670.000000 --52.666667 -23.833333 548.000000 2670.000000 --52.500000 -23.833333 521.000000 2670.000000 --52.333333 -23.833333 425.000000 2670.000000 --52.166667 -23.833333 371.000000 2670.000000 --52.000000 -23.833333 337.000000 2670.000000 --51.833333 -23.833333 440.000000 2670.000000 --51.666667 -23.833333 487.000000 2670.000000 --51.500000 -23.833333 455.000000 2670.000000 --51.333333 -23.833333 779.000000 2670.000000 --51.166667 -23.833333 884.000000 2670.000000 --51.000000 -23.833333 746.000000 2670.000000 --50.833333 -23.833333 666.000000 2670.000000 --50.666667 -23.833333 921.000000 2670.000000 --50.500000 -23.833333 617.000000 2670.000000 --50.333333 -23.833333 607.000000 2670.000000 --50.166667 -23.833333 713.000000 2670.000000 --50.000000 -23.833333 647.000000 2670.000000 --49.833333 -23.833333 624.000000 2670.000000 --49.666667 -23.833333 595.000000 2670.000000 --49.500000 -23.833333 566.000000 2670.000000 --49.333333 -23.833333 589.000000 2670.000000 --49.166667 -23.833333 630.000000 2670.000000 --49.000000 -23.833333 622.000000 2670.000000 --48.833333 -23.833333 697.000000 2670.000000 --48.666667 -23.833333 678.000000 2670.000000 --48.500000 -23.833333 681.000000 2670.000000 --48.333333 -23.833333 632.000000 2670.000000 --48.166667 -23.833333 656.000000 2670.000000 --48.000000 -23.833333 713.000000 2670.000000 --47.833333 -23.833333 726.000000 2670.000000 --47.666667 -23.833333 740.000000 2670.000000 --47.500000 -23.833333 997.000000 2670.000000 --47.333333 -23.833333 1013.000000 2670.000000 --47.166667 -23.833333 899.000000 2670.000000 --47.000000 -23.833333 869.000000 2670.000000 --46.833333 -23.833333 769.000000 2670.000000 --46.666667 -23.833333 785.000000 2670.000000 --46.500000 -23.833333 751.000000 2670.000000 --46.333333 -23.833333 267.000000 2670.000000 --46.166667 -23.833333 14.000000 2670.000000 --46.000000 -23.833333 -2.000000 1670.000000 --45.833333 -23.833333 -3.000000 1670.000000 --45.666667 -23.833333 -9.000000 1670.000000 --45.500000 -23.833333 129.000000 2670.000000 --45.333333 -23.833333 504.000000 2670.000000 --45.166667 -23.833333 -5.000000 1670.000000 --45.000000 -23.833333 -45.000000 1670.000000 --44.833333 -23.833333 -74.000000 1670.000000 --44.666667 -23.833333 -93.000000 1670.000000 --44.500000 -23.833333 -83.000000 1670.000000 --44.333333 -23.833333 -96.000000 1670.000000 --44.166667 -23.833333 -112.000000 1670.000000 --44.000000 -23.833333 -114.000000 1670.000000 --43.833333 -23.833333 -124.000000 1670.000000 --43.666667 -23.833333 -129.000000 1670.000000 --43.500000 -23.833333 -137.000000 1670.000000 --43.333333 -23.833333 -132.000000 1670.000000 --43.166667 -23.833333 -161.000000 1670.000000 --43.000000 -23.833333 -185.000000 1670.000000 --42.833333 -23.833333 -324.000000 1670.000000 --42.666667 -23.833333 -510.000000 1670.000000 --42.500000 -23.833333 -591.000000 1670.000000 --42.333333 -23.833333 -688.000000 1670.000000 --42.166667 -23.833333 -688.000000 1670.000000 --42.000000 -23.833333 -732.000000 1670.000000 --41.833333 -23.833333 -783.000000 1670.000000 --41.666667 -23.833333 -897.000000 1670.000000 --41.500000 -23.833333 -954.000000 1670.000000 --41.333333 -23.833333 -1230.000000 1670.000000 --41.166667 -23.833333 -1623.000000 1670.000000 --41.000000 -23.833333 -2013.000000 1670.000000 --40.833333 -23.833333 -2357.000000 1670.000000 --40.666667 -23.833333 -2497.000000 1670.000000 --40.500000 -23.833333 -2765.000000 1670.000000 --40.333333 -23.833333 -2848.000000 1670.000000 --40.166667 -23.833333 -2928.000000 1670.000000 --40.000000 -23.833333 -2999.000000 1670.000000 --65.000000 -24.000000 823.000000 2670.000000 --64.833333 -24.000000 578.000000 2670.000000 --64.666667 -24.000000 391.000000 2670.000000 --64.500000 -24.000000 978.000000 2670.000000 --64.333333 -24.000000 762.000000 2670.000000 --64.166667 -24.000000 572.000000 2670.000000 --64.000000 -24.000000 392.000000 2670.000000 --63.833333 -24.000000 317.000000 2670.000000 --63.666667 -24.000000 262.000000 2670.000000 --63.500000 -24.000000 230.000000 2670.000000 --63.333333 -24.000000 224.000000 2670.000000 --63.166667 -24.000000 221.000000 2670.000000 --63.000000 -24.000000 216.000000 2670.000000 --62.833333 -24.000000 212.000000 2670.000000 --62.666667 -24.000000 206.000000 2670.000000 --62.500000 -24.000000 200.000000 2670.000000 --62.333333 -24.000000 194.000000 2670.000000 --62.166667 -24.000000 192.000000 2670.000000 --62.000000 -24.000000 187.000000 2670.000000 --61.833333 -24.000000 183.000000 2670.000000 --61.666667 -24.000000 178.000000 2670.000000 --61.500000 -24.000000 172.000000 2670.000000 --61.333333 -24.000000 166.000000 2670.000000 --61.166667 -24.000000 162.000000 2670.000000 --61.000000 -24.000000 156.000000 2670.000000 --60.833333 -24.000000 153.000000 2670.000000 --60.666667 -24.000000 149.000000 2670.000000 --60.500000 -24.000000 145.000000 2670.000000 --60.333333 -24.000000 140.000000 2670.000000 --60.166667 -24.000000 134.000000 2670.000000 --60.000000 -24.000000 129.000000 2670.000000 --59.833333 -24.000000 125.000000 2670.000000 --59.666667 -24.000000 117.000000 2670.000000 --59.500000 -24.000000 113.000000 2670.000000 --59.333333 -24.000000 114.000000 2670.000000 --59.166667 -24.000000 110.000000 2670.000000 --59.000000 -24.000000 104.000000 2670.000000 --58.833333 -24.000000 101.000000 2670.000000 --58.666667 -24.000000 99.000000 2670.000000 --58.500000 -24.000000 95.000000 2670.000000 --58.333333 -24.000000 91.000000 2670.000000 --58.166667 -24.000000 91.000000 2670.000000 --58.000000 -24.000000 82.000000 2670.000000 --57.833333 -24.000000 81.000000 2670.000000 --57.666667 -24.000000 73.000000 2670.000000 --57.500000 -24.000000 70.000000 2670.000000 --57.333333 -24.000000 68.000000 2670.000000 --57.166667 -24.000000 70.000000 2670.000000 --57.000000 -24.000000 112.000000 2670.000000 --56.833333 -24.000000 97.000000 2670.000000 --56.666667 -24.000000 91.000000 2670.000000 --56.500000 -24.000000 170.000000 2670.000000 --56.333333 -24.000000 184.000000 2670.000000 --56.166667 -24.000000 241.000000 2670.000000 --56.000000 -24.000000 191.000000 2670.000000 --55.833333 -24.000000 172.000000 2670.000000 --55.666667 -24.000000 211.000000 2670.000000 --55.500000 -24.000000 227.000000 2670.000000 --55.333333 -24.000000 439.000000 2670.000000 --55.166667 -24.000000 403.000000 2670.000000 --55.000000 -24.000000 364.000000 2670.000000 --54.833333 -24.000000 326.000000 2670.000000 --54.666667 -24.000000 313.000000 2670.000000 --54.500000 -24.000000 279.000000 2670.000000 --54.333333 -24.000000 301.000000 2670.000000 --54.166667 -24.000000 220.000000 2670.000000 --54.000000 -24.000000 228.000000 2670.000000 --53.833333 -24.000000 275.000000 2670.000000 --53.666667 -24.000000 349.000000 2670.000000 --53.500000 -24.000000 361.000000 2670.000000 --53.333333 -24.000000 369.000000 2670.000000 --53.166667 -24.000000 408.000000 2670.000000 --53.000000 -24.000000 424.000000 2670.000000 --52.833333 -24.000000 402.000000 2670.000000 --52.666667 -24.000000 535.000000 2670.000000 --52.500000 -24.000000 587.000000 2670.000000 --52.333333 -24.000000 540.000000 2670.000000 --52.166667 -24.000000 427.000000 2670.000000 --52.000000 -24.000000 358.000000 2670.000000 --51.833333 -24.000000 459.000000 2670.000000 --51.666667 -24.000000 374.000000 2670.000000 --51.500000 -24.000000 595.000000 2670.000000 --51.333333 -24.000000 798.000000 2670.000000 --51.166667 -24.000000 865.000000 2670.000000 --51.000000 -24.000000 747.000000 2670.000000 --50.833333 -24.000000 686.000000 2670.000000 --50.666667 -24.000000 590.000000 2670.000000 --50.500000 -24.000000 768.000000 2670.000000 --50.333333 -24.000000 692.000000 2670.000000 --50.166667 -24.000000 728.000000 2670.000000 --50.000000 -24.000000 610.000000 2670.000000 --49.833333 -24.000000 834.000000 2670.000000 --49.666667 -24.000000 655.000000 2670.000000 --49.500000 -24.000000 564.000000 2670.000000 --49.333333 -24.000000 624.000000 2670.000000 --49.166667 -24.000000 635.000000 2670.000000 --49.000000 -24.000000 703.000000 2670.000000 --48.833333 -24.000000 683.000000 2670.000000 --48.666667 -24.000000 682.000000 2670.000000 --48.500000 -24.000000 722.000000 2670.000000 --48.333333 -24.000000 707.000000 2670.000000 --48.166667 -24.000000 637.000000 2670.000000 --48.000000 -24.000000 721.000000 2670.000000 --47.833333 -24.000000 758.000000 2670.000000 --47.666667 -24.000000 752.000000 2670.000000 --47.500000 -24.000000 791.000000 2670.000000 --47.333333 -24.000000 637.000000 2670.000000 --47.166667 -24.000000 691.000000 2670.000000 --47.000000 -24.000000 750.000000 2670.000000 --46.833333 -24.000000 662.000000 2670.000000 --46.666667 -24.000000 219.000000 2670.000000 --46.500000 -24.000000 9.000000 2670.000000 --46.333333 -24.000000 -1.000000 1670.000000 --46.166667 -24.000000 -5.000000 1670.000000 --46.000000 -24.000000 -22.000000 1670.000000 --45.833333 -24.000000 -25.000000 1670.000000 --45.666667 -24.000000 -29.000000 1670.000000 --45.500000 -24.000000 -27.000000 1670.000000 --45.333333 -24.000000 -33.000000 1670.000000 --45.166667 -24.000000 -74.000000 1670.000000 --45.000000 -24.000000 -77.000000 1670.000000 --44.833333 -24.000000 -80.000000 1670.000000 --44.666667 -24.000000 -95.000000 1670.000000 --44.500000 -24.000000 -131.000000 1670.000000 --44.333333 -24.000000 -135.000000 1670.000000 --44.166667 -24.000000 -134.000000 1670.000000 --44.000000 -24.000000 -127.000000 1670.000000 --43.833333 -24.000000 -136.000000 1670.000000 --43.666667 -24.000000 -158.000000 1670.000000 --43.500000 -24.000000 -151.000000 1670.000000 --43.333333 -24.000000 -160.000000 1670.000000 --43.166667 -24.000000 -309.000000 1670.000000 --43.000000 -24.000000 -504.000000 1670.000000 --42.833333 -24.000000 -606.000000 1670.000000 --42.666667 -24.000000 -711.000000 1670.000000 --42.500000 -24.000000 -839.000000 1670.000000 --42.333333 -24.000000 -946.000000 1670.000000 --42.166667 -24.000000 -1085.000000 1670.000000 --42.000000 -24.000000 -1164.000000 1670.000000 --41.833333 -24.000000 -1306.000000 1670.000000 --41.666667 -24.000000 -1453.000000 1670.000000 --41.500000 -24.000000 -1447.000000 1670.000000 --41.333333 -24.000000 -1776.000000 1670.000000 --41.166667 -24.000000 -2155.000000 1670.000000 --41.000000 -24.000000 -2373.000000 1670.000000 --40.833333 -24.000000 -2460.000000 1670.000000 --40.666667 -24.000000 -2721.000000 1670.000000 --40.500000 -24.000000 -2856.000000 1670.000000 --40.333333 -24.000000 -2938.000000 1670.000000 --40.166667 -24.000000 -2961.000000 1670.000000 --40.000000 -24.000000 -2997.000000 1670.000000 --65.000000 -24.166667 1170.000000 2670.000000 --64.833333 -24.166667 487.000000 2670.000000 --64.666667 -24.166667 449.000000 2670.000000 --64.500000 -24.166667 2346.000000 2670.000000 --64.333333 -24.166667 1639.000000 2670.000000 --64.166667 -24.166667 883.000000 2670.000000 --64.000000 -24.166667 373.000000 2670.000000 --63.833333 -24.166667 289.000000 2670.000000 --63.666667 -24.166667 261.000000 2670.000000 --63.500000 -24.166667 244.000000 2670.000000 --63.333333 -24.166667 227.000000 2670.000000 --63.166667 -24.166667 219.000000 2670.000000 --63.000000 -24.166667 213.000000 2670.000000 --62.833333 -24.166667 208.000000 2670.000000 --62.666667 -24.166667 204.000000 2670.000000 --62.500000 -24.166667 198.000000 2670.000000 --62.333333 -24.166667 191.000000 2670.000000 --62.166667 -24.166667 187.000000 2670.000000 --62.000000 -24.166667 182.000000 2670.000000 --61.833333 -24.166667 179.000000 2670.000000 --61.666667 -24.166667 174.000000 2670.000000 --61.500000 -24.166667 169.000000 2670.000000 --61.333333 -24.166667 164.000000 2670.000000 --61.166667 -24.166667 161.000000 2670.000000 --61.000000 -24.166667 155.000000 2670.000000 --60.833333 -24.166667 150.000000 2670.000000 --60.666667 -24.166667 144.000000 2670.000000 --60.500000 -24.166667 145.000000 2670.000000 --60.333333 -24.166667 141.000000 2670.000000 --60.166667 -24.166667 136.000000 2670.000000 --60.000000 -24.166667 132.000000 2670.000000 --59.833333 -24.166667 123.000000 2670.000000 --59.666667 -24.166667 121.000000 2670.000000 --59.500000 -24.166667 114.000000 2670.000000 --59.333333 -24.166667 111.000000 2670.000000 --59.166667 -24.166667 108.000000 2670.000000 --59.000000 -24.166667 105.000000 2670.000000 --58.833333 -24.166667 102.000000 2670.000000 --58.666667 -24.166667 99.000000 2670.000000 --58.500000 -24.166667 95.000000 2670.000000 --58.333333 -24.166667 90.000000 2670.000000 --58.166667 -24.166667 87.000000 2670.000000 --58.000000 -24.166667 82.000000 2670.000000 --57.833333 -24.166667 77.000000 2670.000000 --57.666667 -24.166667 74.000000 2670.000000 --57.500000 -24.166667 73.000000 2670.000000 --57.333333 -24.166667 69.000000 2670.000000 --57.166667 -24.166667 75.000000 2670.000000 --57.000000 -24.166667 76.000000 2670.000000 --56.833333 -24.166667 89.000000 2670.000000 --56.666667 -24.166667 195.000000 2670.000000 --56.500000 -24.166667 171.000000 2670.000000 --56.333333 -24.166667 150.000000 2670.000000 --56.166667 -24.166667 139.000000 2670.000000 --56.000000 -24.166667 223.000000 2670.000000 --55.833333 -24.166667 176.000000 2670.000000 --55.666667 -24.166667 175.000000 2670.000000 --55.500000 -24.166667 173.000000 2670.000000 --55.333333 -24.166667 193.000000 2670.000000 --55.166667 -24.166667 295.000000 2670.000000 --55.000000 -24.166667 347.000000 2670.000000 --54.833333 -24.166667 356.000000 2670.000000 --54.666667 -24.166667 347.000000 2670.000000 --54.500000 -24.166667 291.000000 2670.000000 --54.333333 -24.166667 235.000000 2670.000000 --54.166667 -24.166667 321.000000 2670.000000 --54.000000 -24.166667 263.000000 2670.000000 --53.833333 -24.166667 249.000000 2670.000000 --53.666667 -24.166667 274.000000 2670.000000 --53.500000 -24.166667 350.000000 2670.000000 --53.333333 -24.166667 350.000000 2670.000000 --53.166667 -24.166667 425.000000 2670.000000 --53.000000 -24.166667 444.000000 2670.000000 --52.833333 -24.166667 541.000000 2670.000000 --52.666667 -24.166667 541.000000 2670.000000 --52.500000 -24.166667 653.000000 2670.000000 --52.333333 -24.166667 599.000000 2670.000000 --52.166667 -24.166667 532.000000 2670.000000 --52.000000 -24.166667 432.000000 2670.000000 --51.833333 -24.166667 535.000000 2670.000000 --51.666667 -24.166667 617.000000 2670.000000 --51.500000 -24.166667 526.000000 2670.000000 --51.333333 -24.166667 430.000000 2670.000000 --51.166667 -24.166667 661.000000 2670.000000 --51.000000 -24.166667 819.000000 2670.000000 --50.833333 -24.166667 744.000000 2670.000000 --50.666667 -24.166667 691.000000 2670.000000 --50.500000 -24.166667 845.000000 2670.000000 --50.333333 -24.166667 912.000000 2670.000000 --50.166667 -24.166667 806.000000 2670.000000 --50.000000 -24.166667 765.000000 2670.000000 --49.833333 -24.166667 860.000000 2670.000000 --49.666667 -24.166667 813.000000 2670.000000 --49.500000 -24.166667 742.000000 2670.000000 --49.333333 -24.166667 822.000000 2670.000000 --49.166667 -24.166667 881.000000 2670.000000 --49.000000 -24.166667 889.000000 2670.000000 --48.833333 -24.166667 951.000000 2670.000000 --48.666667 -24.166667 865.000000 2670.000000 --48.500000 -24.166667 789.000000 2670.000000 --48.333333 -24.166667 814.000000 2670.000000 --48.166667 -24.166667 840.000000 2670.000000 --48.000000 -24.166667 744.000000 2670.000000 --47.833333 -24.166667 242.000000 2670.000000 --47.666667 -24.166667 128.000000 2670.000000 --47.500000 -24.166667 309.000000 2670.000000 --47.333333 -24.166667 77.000000 2670.000000 --47.166667 -24.166667 331.000000 2670.000000 --47.000000 -24.166667 81.000000 2670.000000 --46.833333 -24.166667 12.000000 2670.000000 --46.666667 -24.166667 -4.000000 1670.000000 --46.500000 -24.166667 -19.000000 1670.000000 --46.333333 -24.166667 -24.000000 1670.000000 --46.166667 -24.166667 -26.000000 1670.000000 --46.000000 -24.166667 -30.000000 1670.000000 --45.833333 -24.166667 -26.000000 1670.000000 --45.666667 -24.166667 -30.000000 1670.000000 --45.500000 -24.166667 -54.000000 1670.000000 --45.333333 -24.166667 -81.000000 1670.000000 --45.166667 -24.166667 -70.000000 1670.000000 --45.000000 -24.166667 -65.000000 1670.000000 --44.833333 -24.166667 -92.000000 1670.000000 --44.666667 -24.166667 -125.000000 1670.000000 --44.500000 -24.166667 -125.000000 1670.000000 --44.333333 -24.166667 -150.000000 1670.000000 --44.166667 -24.166667 -147.000000 1670.000000 --44.000000 -24.166667 -169.000000 1670.000000 --43.833333 -24.166667 -187.000000 1670.000000 --43.666667 -24.166667 -181.000000 1670.000000 --43.500000 -24.166667 -271.000000 1670.000000 --43.333333 -24.166667 -511.000000 1670.000000 --43.166667 -24.166667 -639.000000 1670.000000 --43.000000 -24.166667 -825.000000 1670.000000 --42.833333 -24.166667 -997.000000 1670.000000 --42.666667 -24.166667 -1131.000000 1670.000000 --42.500000 -24.166667 -1241.000000 1670.000000 --42.333333 -24.166667 -1378.000000 1670.000000 --42.166667 -24.166667 -1484.000000 1670.000000 --42.000000 -24.166667 -1499.000000 1670.000000 --41.833333 -24.166667 -1668.000000 1670.000000 --41.666667 -24.166667 -1761.000000 1670.000000 --41.500000 -24.166667 -1861.000000 1670.000000 --41.333333 -24.166667 -2099.000000 1670.000000 --41.166667 -24.166667 -2253.000000 1670.000000 --41.000000 -24.166667 -2486.000000 1670.000000 --40.833333 -24.166667 -2754.000000 1670.000000 --40.666667 -24.166667 -2834.000000 1670.000000 --40.500000 -24.166667 -2888.000000 1670.000000 --40.333333 -24.166667 -2907.000000 1670.000000 --40.166667 -24.166667 -3016.000000 1670.000000 --40.000000 -24.166667 -3053.000000 1670.000000 --65.000000 -24.333333 861.000000 2670.000000 --64.833333 -24.333333 556.000000 2670.000000 --64.666667 -24.333333 579.000000 2670.000000 --64.500000 -24.333333 1292.000000 2670.000000 --64.333333 -24.333333 1278.000000 2670.000000 --64.166667 -24.333333 514.000000 2670.000000 --64.000000 -24.333333 359.000000 2670.000000 --63.833333 -24.333333 313.000000 2670.000000 --63.666667 -24.333333 275.000000 2670.000000 --63.500000 -24.333333 249.000000 2670.000000 --63.333333 -24.333333 235.000000 2670.000000 --63.166667 -24.333333 226.000000 2670.000000 --63.000000 -24.333333 219.000000 2670.000000 --62.833333 -24.333333 209.000000 2670.000000 --62.666667 -24.333333 201.000000 2670.000000 --62.500000 -24.333333 193.000000 2670.000000 --62.333333 -24.333333 189.000000 2670.000000 --62.166667 -24.333333 184.000000 2670.000000 --62.000000 -24.333333 180.000000 2670.000000 --61.833333 -24.333333 177.000000 2670.000000 --61.666667 -24.333333 170.000000 2670.000000 --61.500000 -24.333333 164.000000 2670.000000 --61.333333 -24.333333 154.000000 2670.000000 --61.166667 -24.333333 155.000000 2670.000000 --61.000000 -24.333333 153.000000 2670.000000 --60.833333 -24.333333 146.000000 2670.000000 --60.666667 -24.333333 143.000000 2670.000000 --60.500000 -24.333333 140.000000 2670.000000 --60.333333 -24.333333 135.000000 2670.000000 --60.166667 -24.333333 130.000000 2670.000000 --60.000000 -24.333333 128.000000 2670.000000 --59.833333 -24.333333 125.000000 2670.000000 --59.666667 -24.333333 118.000000 2670.000000 --59.500000 -24.333333 113.000000 2670.000000 --59.333333 -24.333333 109.000000 2670.000000 --59.166667 -24.333333 107.000000 2670.000000 --59.000000 -24.333333 103.000000 2670.000000 --58.833333 -24.333333 99.000000 2670.000000 --58.666667 -24.333333 97.000000 2670.000000 --58.500000 -24.333333 92.000000 2670.000000 --58.333333 -24.333333 88.000000 2670.000000 --58.166667 -24.333333 86.000000 2670.000000 --58.000000 -24.333333 83.000000 2670.000000 --57.833333 -24.333333 78.000000 2670.000000 --57.666667 -24.333333 73.000000 2670.000000 --57.500000 -24.333333 72.000000 2670.000000 --57.333333 -24.333333 69.000000 2670.000000 --57.166667 -24.333333 65.000000 2670.000000 --57.000000 -24.333333 68.000000 2670.000000 --56.833333 -24.333333 121.000000 2670.000000 --56.666667 -24.333333 190.000000 2670.000000 --56.500000 -24.333333 231.000000 2670.000000 --56.333333 -24.333333 199.000000 2670.000000 --56.166667 -24.333333 213.000000 2670.000000 --56.000000 -24.333333 267.000000 2670.000000 --55.833333 -24.333333 221.000000 2670.000000 --55.666667 -24.333333 237.000000 2670.000000 --55.500000 -24.333333 199.000000 2670.000000 --55.333333 -24.333333 233.000000 2670.000000 --55.166667 -24.333333 252.000000 2670.000000 --55.000000 -24.333333 364.000000 2670.000000 --54.833333 -24.333333 328.000000 2670.000000 --54.666667 -24.333333 307.000000 2670.000000 --54.500000 -24.333333 292.000000 2670.000000 --54.333333 -24.333333 313.000000 2670.000000 --54.166667 -24.333333 363.000000 2670.000000 --54.000000 -24.333333 318.000000 2670.000000 --53.833333 -24.333333 351.000000 2670.000000 --53.666667 -24.333333 355.000000 2670.000000 --53.500000 -24.333333 394.000000 2670.000000 --53.333333 -24.333333 334.000000 2670.000000 --53.166667 -24.333333 406.000000 2670.000000 --53.000000 -24.333333 421.000000 2670.000000 --52.833333 -24.333333 551.000000 2670.000000 --52.666667 -24.333333 632.000000 2670.000000 --52.500000 -24.333333 764.000000 2670.000000 --52.333333 -24.333333 687.000000 2670.000000 --52.166667 -24.333333 534.000000 2670.000000 --52.000000 -24.333333 448.000000 2670.000000 --51.833333 -24.333333 575.000000 2670.000000 --51.666667 -24.333333 774.000000 2670.000000 --51.500000 -24.333333 439.000000 2670.000000 --51.333333 -24.333333 704.000000 2670.000000 --51.166667 -24.333333 606.000000 2670.000000 --51.000000 -24.333333 544.000000 2670.000000 --50.833333 -24.333333 823.000000 2670.000000 --50.666667 -24.333333 762.000000 2670.000000 --50.500000 -24.333333 793.000000 2670.000000 --50.333333 -24.333333 978.000000 2670.000000 --50.166667 -24.333333 970.000000 2670.000000 --50.000000 -24.333333 1054.000000 2670.000000 --49.833333 -24.333333 1146.000000 2670.000000 --49.666667 -24.333333 1212.000000 2670.000000 --49.500000 -24.333333 925.000000 2670.000000 --49.333333 -24.333333 902.000000 2670.000000 --49.166667 -24.333333 1002.000000 2670.000000 --49.000000 -24.333333 962.000000 2670.000000 --48.833333 -24.333333 978.000000 2670.000000 --48.666667 -24.333333 934.000000 2670.000000 --48.500000 -24.333333 689.000000 2670.000000 --48.333333 -24.333333 864.000000 2670.000000 --48.166667 -24.333333 161.000000 2670.000000 --48.000000 -24.333333 48.000000 2670.000000 --47.833333 -24.333333 21.000000 2670.000000 --47.666667 -24.333333 27.000000 2670.000000 --47.500000 -24.333333 129.000000 2670.000000 --47.333333 -24.333333 467.000000 2670.000000 --47.166667 -24.333333 198.000000 2670.000000 --47.000000 -24.333333 5.000000 2670.000000 --46.833333 -24.333333 -1.000000 1670.000000 --46.666667 -24.333333 -24.000000 1670.000000 --46.500000 -24.333333 -22.000000 1670.000000 --46.333333 -24.333333 -26.000000 1670.000000 --46.166667 -24.333333 -1.000000 1670.000000 --46.000000 -24.333333 -46.000000 1670.000000 --45.833333 -24.333333 -49.000000 1670.000000 --45.666667 -24.333333 -48.000000 1670.000000 --45.500000 -24.333333 -46.000000 1670.000000 --45.333333 -24.333333 -63.000000 1670.000000 --45.166667 -24.333333 -75.000000 1670.000000 --45.000000 -24.333333 -79.000000 1670.000000 --44.833333 -24.333333 -124.000000 1670.000000 --44.666667 -24.333333 -108.000000 1670.000000 --44.500000 -24.333333 -158.000000 1670.000000 --44.333333 -24.333333 -156.000000 1670.000000 --44.166667 -24.333333 -317.000000 1670.000000 --44.000000 -24.333333 -436.000000 1670.000000 --43.833333 -24.333333 -540.000000 1670.000000 --43.666667 -24.333333 -688.000000 1670.000000 --43.500000 -24.333333 -821.000000 1670.000000 --43.333333 -24.333333 -908.000000 1670.000000 --43.166667 -24.333333 -1065.000000 1670.000000 --43.000000 -24.333333 -1186.000000 1670.000000 --42.833333 -24.333333 -1338.000000 1670.000000 --42.666667 -24.333333 -1475.000000 1670.000000 --42.500000 -24.333333 -1577.000000 1670.000000 --42.333333 -24.333333 -1572.000000 1670.000000 --42.166667 -24.333333 -1548.000000 1670.000000 --42.000000 -24.333333 -1708.000000 1670.000000 --41.833333 -24.333333 -1969.000000 1670.000000 --41.666667 -24.333333 -2045.000000 1670.000000 --41.500000 -24.333333 -2103.000000 1670.000000 --41.333333 -24.333333 -2220.000000 1670.000000 --41.166667 -24.333333 -2410.000000 1670.000000 --41.000000 -24.333333 -2629.000000 1670.000000 --40.833333 -24.333333 -2789.000000 1670.000000 --40.666667 -24.333333 -2847.000000 1670.000000 --40.500000 -24.333333 -2966.000000 1670.000000 --40.333333 -24.333333 -3013.000000 1670.000000 --40.166667 -24.333333 -3029.000000 1670.000000 --40.000000 -24.333333 -3031.000000 1670.000000 --65.000000 -24.500000 712.000000 2670.000000 --64.833333 -24.500000 558.000000 2670.000000 --64.666667 -24.500000 757.000000 2670.000000 --64.500000 -24.500000 1887.000000 2670.000000 --64.333333 -24.500000 810.000000 2670.000000 --64.166667 -24.500000 445.000000 2670.000000 --64.000000 -24.500000 366.000000 2670.000000 --63.833333 -24.500000 325.000000 2670.000000 --63.666667 -24.500000 290.000000 2670.000000 --63.500000 -24.500000 262.000000 2670.000000 --63.333333 -24.500000 245.000000 2670.000000 --63.166667 -24.500000 238.000000 2670.000000 --63.000000 -24.500000 227.000000 2670.000000 --62.833333 -24.500000 214.000000 2670.000000 --62.666667 -24.500000 206.000000 2670.000000 --62.500000 -24.500000 196.000000 2670.000000 --62.333333 -24.500000 189.000000 2670.000000 --62.166667 -24.500000 184.000000 2670.000000 --62.000000 -24.500000 177.000000 2670.000000 --61.833333 -24.500000 169.000000 2670.000000 --61.666667 -24.500000 167.000000 2670.000000 --61.500000 -24.500000 163.000000 2670.000000 --61.333333 -24.500000 158.000000 2670.000000 --61.166667 -24.500000 153.000000 2670.000000 --61.000000 -24.500000 149.000000 2670.000000 --60.833333 -24.500000 146.000000 2670.000000 --60.666667 -24.500000 140.000000 2670.000000 --60.500000 -24.500000 135.000000 2670.000000 --60.333333 -24.500000 132.000000 2670.000000 --60.166667 -24.500000 127.000000 2670.000000 --60.000000 -24.500000 123.000000 2670.000000 --59.833333 -24.500000 120.000000 2670.000000 --59.666667 -24.500000 115.000000 2670.000000 --59.500000 -24.500000 108.000000 2670.000000 --59.333333 -24.500000 109.000000 2670.000000 --59.166667 -24.500000 104.000000 2670.000000 --59.000000 -24.500000 100.000000 2670.000000 --58.833333 -24.500000 98.000000 2670.000000 --58.666667 -24.500000 93.000000 2670.000000 --58.500000 -24.500000 92.000000 2670.000000 --58.333333 -24.500000 87.000000 2670.000000 --58.166667 -24.500000 86.000000 2670.000000 --58.000000 -24.500000 78.000000 2670.000000 --57.833333 -24.500000 76.000000 2670.000000 --57.666667 -24.500000 75.000000 2670.000000 --57.500000 -24.500000 71.000000 2670.000000 --57.333333 -24.500000 68.000000 2670.000000 --57.166667 -24.500000 62.000000 2670.000000 --57.000000 -24.500000 73.000000 2670.000000 --56.833333 -24.500000 99.000000 2670.000000 --56.666667 -24.500000 126.000000 2670.000000 --56.500000 -24.500000 248.000000 2670.000000 --56.333333 -24.500000 232.000000 2670.000000 --56.166667 -24.500000 307.000000 2670.000000 --56.000000 -24.500000 152.000000 2670.000000 --55.833333 -24.500000 217.000000 2670.000000 --55.666667 -24.500000 220.000000 2670.000000 --55.500000 -24.500000 246.000000 2670.000000 --55.333333 -24.500000 293.000000 2670.000000 --55.166667 -24.500000 344.000000 2670.000000 --55.000000 -24.500000 356.000000 2670.000000 --54.833333 -24.500000 387.000000 2670.000000 --54.666667 -24.500000 291.000000 2670.000000 --54.500000 -24.500000 271.000000 2670.000000 --54.333333 -24.500000 217.000000 2670.000000 --54.166667 -24.500000 308.000000 2670.000000 --54.000000 -24.500000 394.000000 2670.000000 --53.833333 -24.500000 435.000000 2670.000000 --53.666667 -24.500000 436.000000 2670.000000 --53.500000 -24.500000 469.000000 2670.000000 --53.333333 -24.500000 440.000000 2670.000000 --53.166667 -24.500000 321.000000 2670.000000 --53.000000 -24.500000 432.000000 2670.000000 --52.833333 -24.500000 415.000000 2670.000000 --52.666667 -24.500000 488.000000 2670.000000 --52.500000 -24.500000 616.000000 2670.000000 --52.333333 -24.500000 813.000000 2670.000000 --52.166667 -24.500000 688.000000 2670.000000 --52.000000 -24.500000 567.000000 2670.000000 --51.833333 -24.500000 604.000000 2670.000000 --51.666667 -24.500000 882.000000 2670.000000 --51.500000 -24.500000 600.000000 2670.000000 --51.333333 -24.500000 701.000000 2670.000000 --51.166667 -24.500000 827.000000 2670.000000 --51.000000 -24.500000 630.000000 2670.000000 --50.833333 -24.500000 912.000000 2670.000000 --50.666667 -24.500000 776.000000 2670.000000 --50.500000 -24.500000 741.000000 2670.000000 --50.333333 -24.500000 772.000000 2670.000000 --50.166667 -24.500000 1128.000000 2670.000000 --50.000000 -24.500000 1083.000000 2670.000000 --49.833333 -24.500000 1041.000000 2670.000000 --49.666667 -24.500000 971.000000 2670.000000 --49.500000 -24.500000 1003.000000 2670.000000 --49.333333 -24.500000 839.000000 2670.000000 --49.166667 -24.500000 729.000000 2670.000000 --49.000000 -24.500000 850.000000 2670.000000 --48.833333 -24.500000 977.000000 2670.000000 --48.666667 -24.500000 667.000000 2670.000000 --48.500000 -24.500000 278.000000 2670.000000 --48.333333 -24.500000 316.000000 2670.000000 --48.166667 -24.500000 104.000000 2670.000000 --48.000000 -24.500000 96.000000 2670.000000 --47.833333 -24.500000 15.000000 2670.000000 --47.666667 -24.500000 12.000000 2670.000000 --47.500000 -24.500000 12.000000 2670.000000 --47.333333 -24.500000 13.000000 2670.000000 --47.166667 -24.500000 13.000000 2670.000000 --47.000000 -24.500000 -12.000000 1670.000000 --46.833333 -24.500000 -24.000000 1670.000000 --46.666667 -24.500000 -9.000000 1670.000000 --46.500000 -24.500000 -31.000000 1670.000000 --46.333333 -24.500000 -36.000000 1670.000000 --46.166667 -24.500000 -44.000000 1670.000000 --46.000000 -24.500000 -56.000000 1670.000000 --45.833333 -24.500000 -58.000000 1670.000000 --45.666667 -24.500000 -58.000000 1670.000000 --45.500000 -24.500000 -58.000000 1670.000000 --45.333333 -24.500000 -63.000000 1670.000000 --45.166667 -24.500000 -43.000000 1670.000000 --45.000000 -24.500000 -137.000000 1670.000000 --44.833333 -24.500000 -133.000000 1670.000000 --44.666667 -24.500000 -157.000000 1670.000000 --44.500000 -24.500000 -196.000000 1670.000000 --44.333333 -24.500000 -437.000000 1670.000000 --44.166667 -24.500000 -537.000000 1670.000000 --44.000000 -24.500000 -670.000000 1670.000000 --43.833333 -24.500000 -841.000000 1670.000000 --43.666667 -24.500000 -906.000000 1670.000000 --43.500000 -24.500000 -1177.000000 1670.000000 --43.333333 -24.500000 -1394.000000 1670.000000 --43.166667 -24.500000 -1445.000000 1670.000000 --43.000000 -24.500000 -1477.000000 1670.000000 --42.833333 -24.500000 -1607.000000 1670.000000 --42.666667 -24.500000 -1640.000000 1670.000000 --42.500000 -24.500000 -1720.000000 1670.000000 --42.333333 -24.500000 -1803.000000 1670.000000 --42.166667 -24.500000 -1850.000000 1670.000000 --42.000000 -24.500000 -2009.000000 1670.000000 --41.833333 -24.500000 -2143.000000 1670.000000 --41.666667 -24.500000 -2277.000000 1670.000000 --41.500000 -24.500000 -2370.000000 1670.000000 --41.333333 -24.500000 -2388.000000 1670.000000 --41.166667 -24.500000 -2639.000000 1670.000000 --41.000000 -24.500000 -2722.000000 1670.000000 --40.833333 -24.500000 -2794.000000 1670.000000 --40.666667 -24.500000 -2848.000000 1670.000000 --40.500000 -24.500000 -2940.000000 1670.000000 --40.333333 -24.500000 -3036.000000 1670.000000 --40.166667 -24.500000 -3061.000000 1670.000000 --40.000000 -24.500000 -3041.000000 1670.000000 --65.000000 -24.666667 678.000000 2670.000000 --64.833333 -24.666667 910.000000 2670.000000 --64.666667 -24.666667 1227.000000 2670.000000 --64.500000 -24.666667 1296.000000 2670.000000 --64.333333 -24.666667 594.000000 2670.000000 --64.166667 -24.666667 451.000000 2670.000000 --64.000000 -24.666667 386.000000 2670.000000 --63.833333 -24.666667 332.000000 2670.000000 --63.666667 -24.666667 293.000000 2670.000000 --63.500000 -24.666667 266.000000 2670.000000 --63.333333 -24.666667 258.000000 2670.000000 --63.166667 -24.666667 245.000000 2670.000000 --63.000000 -24.666667 232.000000 2670.000000 --62.833333 -24.666667 222.000000 2670.000000 --62.666667 -24.666667 212.000000 2670.000000 --62.500000 -24.666667 202.000000 2670.000000 --62.333333 -24.666667 193.000000 2670.000000 --62.166667 -24.666667 184.000000 2670.000000 --62.000000 -24.666667 173.000000 2670.000000 --61.833333 -24.666667 168.000000 2670.000000 --61.666667 -24.666667 161.000000 2670.000000 --61.500000 -24.666667 156.000000 2670.000000 --61.333333 -24.666667 154.000000 2670.000000 --61.166667 -24.666667 150.000000 2670.000000 --61.000000 -24.666667 149.000000 2670.000000 --60.833333 -24.666667 143.000000 2670.000000 --60.666667 -24.666667 137.000000 2670.000000 --60.500000 -24.666667 134.000000 2670.000000 --60.333333 -24.666667 127.000000 2670.000000 --60.166667 -24.666667 124.000000 2670.000000 --60.000000 -24.666667 121.000000 2670.000000 --59.833333 -24.666667 122.000000 2670.000000 --59.666667 -24.666667 115.000000 2670.000000 --59.500000 -24.666667 111.000000 2670.000000 --59.333333 -24.666667 104.000000 2670.000000 --59.166667 -24.666667 103.000000 2670.000000 --59.000000 -24.666667 100.000000 2670.000000 --58.833333 -24.666667 95.000000 2670.000000 --58.666667 -24.666667 90.000000 2670.000000 --58.500000 -24.666667 87.000000 2670.000000 --58.333333 -24.666667 85.000000 2670.000000 --58.166667 -24.666667 84.000000 2670.000000 --58.000000 -24.666667 78.000000 2670.000000 --57.833333 -24.666667 75.000000 2670.000000 --57.666667 -24.666667 72.000000 2670.000000 --57.500000 -24.666667 69.000000 2670.000000 --57.333333 -24.666667 67.000000 2670.000000 --57.166667 -24.666667 61.000000 2670.000000 --57.000000 -24.666667 66.000000 2670.000000 --56.833333 -24.666667 81.000000 2670.000000 --56.666667 -24.666667 101.000000 2670.000000 --56.500000 -24.666667 138.000000 2670.000000 --56.333333 -24.666667 249.000000 2670.000000 --56.166667 -24.666667 217.000000 2670.000000 --56.000000 -24.666667 244.000000 2670.000000 --55.833333 -24.666667 207.000000 2670.000000 --55.666667 -24.666667 290.000000 2670.000000 --55.500000 -24.666667 263.000000 2670.000000 --55.333333 -24.666667 262.000000 2670.000000 --55.166667 -24.666667 349.000000 2670.000000 --55.000000 -24.666667 351.000000 2670.000000 --54.833333 -24.666667 265.000000 2670.000000 --54.666667 -24.666667 252.000000 2670.000000 --54.500000 -24.666667 276.000000 2670.000000 --54.333333 -24.666667 217.000000 2670.000000 --54.166667 -24.666667 271.000000 2670.000000 --54.000000 -24.666667 321.000000 2670.000000 --53.833333 -24.666667 513.000000 2670.000000 --53.666667 -24.666667 506.000000 2670.000000 --53.500000 -24.666667 565.000000 2670.000000 --53.333333 -24.666667 573.000000 2670.000000 --53.166667 -24.666667 457.000000 2670.000000 --53.000000 -24.666667 379.000000 2670.000000 --52.833333 -24.666667 489.000000 2670.000000 --52.666667 -24.666667 438.000000 2670.000000 --52.500000 -24.666667 647.000000 2670.000000 --52.333333 -24.666667 655.000000 2670.000000 --52.166667 -24.666667 830.000000 2670.000000 --52.000000 -24.666667 827.000000 2670.000000 --51.833333 -24.666667 845.000000 2670.000000 --51.666667 -24.666667 814.000000 2670.000000 --51.500000 -24.666667 611.000000 2670.000000 --51.333333 -24.666667 931.000000 2670.000000 --51.166667 -24.666667 776.000000 2670.000000 --51.000000 -24.666667 786.000000 2670.000000 --50.833333 -24.666667 915.000000 2670.000000 --50.666667 -24.666667 893.000000 2670.000000 --50.500000 -24.666667 812.000000 2670.000000 --50.333333 -24.666667 916.000000 2670.000000 --50.166667 -24.666667 1100.000000 2670.000000 --50.000000 -24.666667 1021.000000 2670.000000 --49.833333 -24.666667 1014.000000 2670.000000 --49.666667 -24.666667 1048.000000 2670.000000 --49.500000 -24.666667 901.000000 2670.000000 --49.333333 -24.666667 640.000000 2670.000000 --49.166667 -24.666667 316.000000 2670.000000 --49.000000 -24.666667 409.000000 2670.000000 --48.833333 -24.666667 164.000000 2670.000000 --48.666667 -24.666667 286.000000 2670.000000 --48.500000 -24.666667 704.000000 2670.000000 --48.333333 -24.666667 153.000000 2670.000000 --48.166667 -24.666667 149.000000 2670.000000 --48.000000 -24.666667 49.000000 2670.000000 --47.833333 -24.666667 21.000000 2670.000000 --47.666667 -24.666667 12.000000 2670.000000 --47.500000 -24.666667 124.000000 2670.000000 --47.333333 -24.666667 -3.000000 1670.000000 --47.166667 -24.666667 -15.000000 1670.000000 --47.000000 -24.666667 -25.000000 1670.000000 --46.833333 -24.666667 -30.000000 1670.000000 --46.666667 -24.666667 -35.000000 1670.000000 --46.500000 -24.666667 -43.000000 1670.000000 --46.333333 -24.666667 -49.000000 1670.000000 --46.166667 -24.666667 -63.000000 1670.000000 --46.000000 -24.666667 -55.000000 1670.000000 --45.833333 -24.666667 -60.000000 1670.000000 --45.666667 -24.666667 -60.000000 1670.000000 --45.500000 -24.666667 -140.000000 1670.000000 --45.333333 -24.666667 -69.000000 1670.000000 --45.166667 -24.666667 -84.000000 1670.000000 --45.000000 -24.666667 -121.000000 1670.000000 --44.833333 -24.666667 -132.000000 1670.000000 --44.666667 -24.666667 -140.000000 1670.000000 --44.500000 -24.666667 -369.000000 1670.000000 --44.333333 -24.666667 -548.000000 1670.000000 --44.166667 -24.666667 -664.000000 1670.000000 --44.000000 -24.666667 -1031.000000 1670.000000 --43.833333 -24.666667 -1239.000000 1670.000000 --43.666667 -24.666667 -1464.000000 1670.000000 --43.500000 -24.666667 -1573.000000 1670.000000 --43.333333 -24.666667 -1609.000000 1670.000000 --43.166667 -24.666667 -1717.000000 1670.000000 --43.000000 -24.666667 -1836.000000 1670.000000 --42.833333 -24.666667 -1942.000000 1670.000000 --42.666667 -24.666667 -2102.000000 1670.000000 --42.500000 -24.666667 -2030.000000 1670.000000 --42.333333 -24.666667 -2091.000000 1670.000000 --42.166667 -24.666667 -2119.000000 1670.000000 --42.000000 -24.666667 -2232.000000 1670.000000 --41.833333 -24.666667 -2263.000000 1670.000000 --41.666667 -24.666667 -2241.000000 1670.000000 --41.500000 -24.666667 -2505.000000 1670.000000 --41.333333 -24.666667 -2569.000000 1670.000000 --41.166667 -24.666667 -2652.000000 1670.000000 --41.000000 -24.666667 -2697.000000 1670.000000 --40.833333 -24.666667 -2772.000000 1670.000000 --40.666667 -24.666667 -2846.000000 1670.000000 --40.500000 -24.666667 -2958.000000 1670.000000 --40.333333 -24.666667 -2978.000000 1670.000000 --40.166667 -24.666667 -3071.000000 1670.000000 --40.000000 -24.666667 -3156.000000 1670.000000 --65.000000 -24.833333 804.000000 2670.000000 --64.833333 -24.833333 1283.000000 2670.000000 --64.666667 -24.833333 1553.000000 2670.000000 --64.500000 -24.833333 841.000000 2670.000000 --64.333333 -24.833333 590.000000 2670.000000 --64.166667 -24.833333 444.000000 2670.000000 --64.000000 -24.833333 382.000000 2670.000000 --63.833333 -24.833333 341.000000 2670.000000 --63.666667 -24.833333 299.000000 2670.000000 --63.500000 -24.833333 281.000000 2670.000000 --63.333333 -24.833333 266.000000 2670.000000 --63.166667 -24.833333 252.000000 2670.000000 --63.000000 -24.833333 241.000000 2670.000000 --62.833333 -24.833333 227.000000 2670.000000 --62.666667 -24.833333 217.000000 2670.000000 --62.500000 -24.833333 205.000000 2670.000000 --62.333333 -24.833333 193.000000 2670.000000 --62.166667 -24.833333 183.000000 2670.000000 --62.000000 -24.833333 175.000000 2670.000000 --61.833333 -24.833333 167.000000 2670.000000 --61.666667 -24.833333 161.000000 2670.000000 --61.500000 -24.833333 159.000000 2670.000000 --61.333333 -24.833333 151.000000 2670.000000 --61.166667 -24.833333 146.000000 2670.000000 --61.000000 -24.833333 144.000000 2670.000000 --60.833333 -24.833333 140.000000 2670.000000 --60.666667 -24.833333 133.000000 2670.000000 --60.500000 -24.833333 132.000000 2670.000000 --60.333333 -24.833333 124.000000 2670.000000 --60.166667 -24.833333 122.000000 2670.000000 --60.000000 -24.833333 118.000000 2670.000000 --59.833333 -24.833333 114.000000 2670.000000 --59.666667 -24.833333 115.000000 2670.000000 --59.500000 -24.833333 107.000000 2670.000000 --59.333333 -24.833333 105.000000 2670.000000 --59.166667 -24.833333 98.000000 2670.000000 --59.000000 -24.833333 96.000000 2670.000000 --58.833333 -24.833333 92.000000 2670.000000 --58.666667 -24.833333 90.000000 2670.000000 --58.500000 -24.833333 86.000000 2670.000000 --58.333333 -24.833333 81.000000 2670.000000 --58.166667 -24.833333 78.000000 2670.000000 --58.000000 -24.833333 78.000000 2670.000000 --57.833333 -24.833333 76.000000 2670.000000 --57.666667 -24.833333 72.000000 2670.000000 --57.500000 -24.833333 69.000000 2670.000000 --57.333333 -24.833333 65.000000 2670.000000 --57.166667 -24.833333 67.000000 2670.000000 --57.000000 -24.833333 66.000000 2670.000000 --56.833333 -24.833333 71.000000 2670.000000 --56.666667 -24.833333 82.000000 2670.000000 --56.500000 -24.833333 112.000000 2670.000000 --56.333333 -24.833333 201.000000 2670.000000 --56.166667 -24.833333 309.000000 2670.000000 --56.000000 -24.833333 348.000000 2670.000000 --55.833333 -24.833333 253.000000 2670.000000 --55.666667 -24.833333 292.000000 2670.000000 --55.500000 -24.833333 252.000000 2670.000000 --55.333333 -24.833333 222.000000 2670.000000 --55.166667 -24.833333 295.000000 2670.000000 --55.000000 -24.833333 334.000000 2670.000000 --54.833333 -24.833333 292.000000 2670.000000 --54.666667 -24.833333 234.000000 2670.000000 --54.500000 -24.833333 256.000000 2670.000000 --54.333333 -24.833333 228.000000 2670.000000 --54.166667 -24.833333 350.000000 2670.000000 --54.000000 -24.833333 408.000000 2670.000000 --53.833333 -24.833333 517.000000 2670.000000 --53.666667 -24.833333 564.000000 2670.000000 --53.500000 -24.833333 613.000000 2670.000000 --53.333333 -24.833333 659.000000 2670.000000 --53.166667 -24.833333 624.000000 2670.000000 --53.000000 -24.833333 575.000000 2670.000000 --52.833333 -24.833333 454.000000 2670.000000 --52.666667 -24.833333 491.000000 2670.000000 --52.500000 -24.833333 548.000000 2670.000000 --52.333333 -24.833333 667.000000 2670.000000 --52.166667 -24.833333 806.000000 2670.000000 --52.000000 -24.833333 892.000000 2670.000000 --51.833333 -24.833333 1083.000000 2670.000000 --51.666667 -24.833333 938.000000 2670.000000 --51.500000 -24.833333 927.000000 2670.000000 --51.333333 -24.833333 677.000000 2670.000000 --51.166667 -24.833333 548.000000 2670.000000 --51.000000 -24.833333 882.000000 2670.000000 --50.833333 -24.833333 1002.000000 2670.000000 --50.666667 -24.833333 947.000000 2670.000000 --50.500000 -24.833333 944.000000 2670.000000 --50.333333 -24.833333 802.000000 2670.000000 --50.166667 -24.833333 1126.000000 2670.000000 --50.000000 -24.833333 1021.000000 2670.000000 --49.833333 -24.833333 1041.000000 2670.000000 --49.666667 -24.833333 850.000000 2670.000000 --49.500000 -24.833333 694.000000 2670.000000 --49.333333 -24.833333 411.000000 2670.000000 --49.166667 -24.833333 744.000000 2670.000000 --49.000000 -24.833333 543.000000 2670.000000 --48.833333 -24.833333 569.000000 2670.000000 --48.666667 -24.833333 910.000000 2670.000000 --48.500000 -24.833333 341.000000 2670.000000 --48.333333 -24.833333 760.000000 2670.000000 --48.166667 -24.833333 377.000000 2670.000000 --48.000000 -24.833333 177.000000 2670.000000 --47.833333 -24.833333 218.000000 2670.000000 --47.666667 -24.833333 0.000000 2670.000000 --47.500000 -24.833333 -10.000000 1670.000000 --47.333333 -24.833333 -21.000000 1670.000000 --47.166667 -24.833333 -27.000000 1670.000000 --47.000000 -24.833333 -33.000000 1670.000000 --46.833333 -24.833333 -39.000000 1670.000000 --46.666667 -24.833333 -45.000000 1670.000000 --46.500000 -24.833333 -50.000000 1670.000000 --46.333333 -24.833333 -78.000000 1670.000000 --46.166667 -24.833333 -64.000000 1670.000000 --46.000000 -24.833333 -66.000000 1670.000000 --45.833333 -24.833333 -62.000000 1670.000000 --45.666667 -24.833333 -123.000000 1670.000000 --45.500000 -24.833333 -76.000000 1670.000000 --45.333333 -24.833333 -100.000000 1670.000000 --45.166667 -24.833333 -105.000000 1670.000000 --45.000000 -24.833333 -128.000000 1670.000000 --44.833333 -24.833333 -146.000000 1670.000000 --44.666667 -24.833333 -284.000000 1670.000000 --44.500000 -24.833333 -617.000000 1670.000000 --44.333333 -24.833333 -861.000000 1670.000000 --44.166667 -24.833333 -1090.000000 1670.000000 --44.000000 -24.833333 -1372.000000 1670.000000 --43.833333 -24.833333 -1779.000000 1670.000000 --43.666667 -24.833333 -1638.000000 1670.000000 --43.500000 -24.833333 -1751.000000 1670.000000 --43.333333 -24.833333 -1863.000000 1670.000000 --43.166667 -24.833333 -1923.000000 1670.000000 --43.000000 -24.833333 -2033.000000 1670.000000 --42.833333 -24.833333 -2016.000000 1670.000000 --42.666667 -24.833333 -2013.000000 1670.000000 --42.500000 -24.833333 -2098.000000 1670.000000 --42.333333 -24.833333 -2256.000000 1670.000000 --42.166667 -24.833333 -2267.000000 1670.000000 --42.000000 -24.833333 -2320.000000 1670.000000 --41.833333 -24.833333 -2364.000000 1670.000000 --41.666667 -24.833333 -2391.000000 1670.000000 --41.500000 -24.833333 -2513.000000 1670.000000 --41.333333 -24.833333 -2620.000000 1670.000000 --41.166667 -24.833333 -2588.000000 1670.000000 --41.000000 -24.833333 -2649.000000 1670.000000 --40.833333 -24.833333 -2878.000000 1670.000000 --40.666667 -24.833333 -2869.000000 1670.000000 --40.500000 -24.833333 -2939.000000 1670.000000 --40.333333 -24.833333 -3004.000000 1670.000000 --40.166667 -24.833333 -3138.000000 1670.000000 --40.000000 -24.833333 -3111.000000 1670.000000 --65.000000 -25.000000 965.000000 2670.000000 --64.833333 -25.000000 1297.000000 2670.000000 --64.666667 -25.000000 987.000000 2670.000000 --64.500000 -25.000000 648.000000 2670.000000 --64.333333 -25.000000 499.000000 2670.000000 --64.166667 -25.000000 416.000000 2670.000000 --64.000000 -25.000000 364.000000 2670.000000 --63.833333 -25.000000 330.000000 2670.000000 --63.666667 -25.000000 309.000000 2670.000000 --63.500000 -25.000000 291.000000 2670.000000 --63.333333 -25.000000 273.000000 2670.000000 --63.166667 -25.000000 260.000000 2670.000000 --63.000000 -25.000000 245.000000 2670.000000 --62.833333 -25.000000 233.000000 2670.000000 --62.666667 -25.000000 219.000000 2670.000000 --62.500000 -25.000000 207.000000 2670.000000 --62.333333 -25.000000 197.000000 2670.000000 --62.166667 -25.000000 187.000000 2670.000000 --62.000000 -25.000000 178.000000 2670.000000 --61.833333 -25.000000 168.000000 2670.000000 --61.666667 -25.000000 160.000000 2670.000000 --61.500000 -25.000000 152.000000 2670.000000 --61.333333 -25.000000 149.000000 2670.000000 --61.166667 -25.000000 146.000000 2670.000000 --61.000000 -25.000000 142.000000 2670.000000 --60.833333 -25.000000 132.000000 2670.000000 --60.666667 -25.000000 138.000000 2670.000000 --60.500000 -25.000000 132.000000 2670.000000 --60.333333 -25.000000 127.000000 2670.000000 --60.166667 -25.000000 120.000000 2670.000000 --60.000000 -25.000000 113.000000 2670.000000 --59.833333 -25.000000 112.000000 2670.000000 --59.666667 -25.000000 109.000000 2670.000000 --59.500000 -25.000000 102.000000 2670.000000 --59.333333 -25.000000 100.000000 2670.000000 --59.166667 -25.000000 98.000000 2670.000000 --59.000000 -25.000000 93.000000 2670.000000 --58.833333 -25.000000 90.000000 2670.000000 --58.666667 -25.000000 87.000000 2670.000000 --58.500000 -25.000000 84.000000 2670.000000 --58.333333 -25.000000 82.000000 2670.000000 --58.166667 -25.000000 80.000000 2670.000000 --58.000000 -25.000000 81.000000 2670.000000 --57.833333 -25.000000 71.000000 2670.000000 --57.666667 -25.000000 69.000000 2670.000000 --57.500000 -25.000000 65.000000 2670.000000 --57.333333 -25.000000 60.000000 2670.000000 --57.166667 -25.000000 106.000000 2670.000000 --57.000000 -25.000000 64.000000 2670.000000 --56.833333 -25.000000 69.000000 2670.000000 --56.666667 -25.000000 99.000000 2670.000000 --56.500000 -25.000000 99.000000 2670.000000 --56.333333 -25.000000 135.000000 2670.000000 --56.166667 -25.000000 234.000000 2670.000000 --56.000000 -25.000000 374.000000 2670.000000 --55.833333 -25.000000 296.000000 2670.000000 --55.666667 -25.000000 271.000000 2670.000000 --55.500000 -25.000000 242.000000 2670.000000 --55.333333 -25.000000 233.000000 2670.000000 --55.166667 -25.000000 262.000000 2670.000000 --55.000000 -25.000000 255.000000 2670.000000 --54.833333 -25.000000 317.000000 2670.000000 --54.666667 -25.000000 286.000000 2670.000000 --54.500000 -25.000000 240.000000 2670.000000 --54.333333 -25.000000 261.000000 2670.000000 --54.166667 -25.000000 394.000000 2670.000000 --54.000000 -25.000000 444.000000 2670.000000 --53.833333 -25.000000 560.000000 2670.000000 --53.666667 -25.000000 684.000000 2670.000000 --53.500000 -25.000000 732.000000 2670.000000 --53.333333 -25.000000 756.000000 2670.000000 --53.166667 -25.000000 727.000000 2670.000000 --53.000000 -25.000000 705.000000 2670.000000 --52.833333 -25.000000 570.000000 2670.000000 --52.666667 -25.000000 592.000000 2670.000000 --52.500000 -25.000000 524.000000 2670.000000 --52.333333 -25.000000 643.000000 2670.000000 --52.166667 -25.000000 712.000000 2670.000000 --52.000000 -25.000000 771.000000 2670.000000 --51.833333 -25.000000 899.000000 2670.000000 --51.666667 -25.000000 1056.000000 2670.000000 --51.500000 -25.000000 957.000000 2670.000000 --51.333333 -25.000000 1016.000000 2670.000000 --51.166667 -25.000000 570.000000 2670.000000 --51.000000 -25.000000 551.000000 2670.000000 --50.833333 -25.000000 854.000000 2670.000000 --50.666667 -25.000000 808.000000 2670.000000 --50.500000 -25.000000 799.000000 2670.000000 --50.333333 -25.000000 856.000000 2670.000000 --50.166667 -25.000000 868.000000 2670.000000 --50.000000 -25.000000 936.000000 2670.000000 --49.833333 -25.000000 910.000000 2670.000000 --49.666667 -25.000000 567.000000 2670.000000 --49.500000 -25.000000 513.000000 2670.000000 --49.333333 -25.000000 582.000000 2670.000000 --49.166667 -25.000000 764.000000 2670.000000 --49.000000 -25.000000 963.000000 2670.000000 --48.833333 -25.000000 891.000000 2670.000000 --48.666667 -25.000000 657.000000 2670.000000 --48.500000 -25.000000 875.000000 2670.000000 --48.333333 -25.000000 686.000000 2670.000000 --48.166667 -25.000000 306.000000 2670.000000 --48.000000 -25.000000 8.000000 2670.000000 --47.833333 -25.000000 -1.000000 1670.000000 --47.666667 -25.000000 -11.000000 1670.000000 --47.500000 -25.000000 -21.000000 1670.000000 --47.333333 -25.000000 -29.000000 1670.000000 --47.166667 -25.000000 -36.000000 1670.000000 --47.000000 -25.000000 -42.000000 1670.000000 --46.833333 -25.000000 -47.000000 1670.000000 --46.666667 -25.000000 -53.000000 1670.000000 --46.500000 -25.000000 -66.000000 1670.000000 --46.333333 -25.000000 -67.000000 1670.000000 --46.166667 -25.000000 -74.000000 1670.000000 --46.000000 -25.000000 -60.000000 1670.000000 --45.833333 -25.000000 -104.000000 1670.000000 --45.666667 -25.000000 -103.000000 1670.000000 --45.500000 -25.000000 -89.000000 1670.000000 --45.333333 -25.000000 -85.000000 1670.000000 --45.166667 -25.000000 -118.000000 1670.000000 --45.000000 -25.000000 -146.000000 1670.000000 --44.833333 -25.000000 -187.000000 1670.000000 --44.666667 -25.000000 -671.000000 1670.000000 --44.500000 -25.000000 -1135.000000 1670.000000 --44.333333 -25.000000 -1412.000000 1670.000000 --44.166667 -25.000000 -1616.000000 1670.000000 --44.000000 -25.000000 -1770.000000 1670.000000 --43.833333 -25.000000 -1818.000000 1670.000000 --43.666667 -25.000000 -1957.000000 1670.000000 --43.500000 -25.000000 -1978.000000 1670.000000 --43.333333 -25.000000 -2017.000000 1670.000000 --43.166667 -25.000000 -2096.000000 1670.000000 --43.000000 -25.000000 -2058.000000 1670.000000 --42.833333 -25.000000 -2160.000000 1670.000000 --42.666667 -25.000000 -2259.000000 1670.000000 --42.500000 -25.000000 -2238.000000 1670.000000 --42.333333 -25.000000 -2266.000000 1670.000000 --42.166667 -25.000000 -2246.000000 1670.000000 --42.000000 -25.000000 -2209.000000 1670.000000 --41.833333 -25.000000 -2295.000000 1670.000000 --41.666667 -25.000000 -2547.000000 1670.000000 --41.500000 -25.000000 -2623.000000 1670.000000 --41.333333 -25.000000 -2597.000000 1670.000000 --41.166667 -25.000000 -2613.000000 1670.000000 --41.000000 -25.000000 -2755.000000 1670.000000 --40.833333 -25.000000 -2822.000000 1670.000000 --40.666667 -25.000000 -2994.000000 1670.000000 --40.500000 -25.000000 -2974.000000 1670.000000 --40.333333 -25.000000 -3068.000000 1670.000000 --40.166667 -25.000000 -3034.000000 1670.000000 --40.000000 -25.000000 -3226.000000 1670.000000 --65.000000 -25.166667 817.000000 2670.000000 --64.833333 -25.166667 889.000000 2670.000000 --64.666667 -25.166667 715.000000 2670.000000 --64.500000 -25.166667 590.000000 2670.000000 --64.333333 -25.166667 421.000000 2670.000000 --64.166667 -25.166667 386.000000 2670.000000 --64.000000 -25.166667 357.000000 2670.000000 --63.833333 -25.166667 330.000000 2670.000000 --63.666667 -25.166667 312.000000 2670.000000 --63.500000 -25.166667 291.000000 2670.000000 --63.333333 -25.166667 275.000000 2670.000000 --63.166667 -25.166667 261.000000 2670.000000 --63.000000 -25.166667 245.000000 2670.000000 --62.833333 -25.166667 231.000000 2670.000000 --62.666667 -25.166667 220.000000 2670.000000 --62.500000 -25.166667 209.000000 2670.000000 --62.333333 -25.166667 196.000000 2670.000000 --62.166667 -25.166667 187.000000 2670.000000 --62.000000 -25.166667 177.000000 2670.000000 --61.833333 -25.166667 168.000000 2670.000000 --61.666667 -25.166667 160.000000 2670.000000 --61.500000 -25.166667 151.000000 2670.000000 --61.333333 -25.166667 145.000000 2670.000000 --61.166667 -25.166667 139.000000 2670.000000 --61.000000 -25.166667 139.000000 2670.000000 --60.833333 -25.166667 135.000000 2670.000000 --60.666667 -25.166667 129.000000 2670.000000 --60.500000 -25.166667 126.000000 2670.000000 --60.333333 -25.166667 123.000000 2670.000000 --60.166667 -25.166667 120.000000 2670.000000 --60.000000 -25.166667 117.000000 2670.000000 --59.833333 -25.166667 108.000000 2670.000000 --59.666667 -25.166667 105.000000 2670.000000 --59.500000 -25.166667 102.000000 2670.000000 --59.333333 -25.166667 97.000000 2670.000000 --59.166667 -25.166667 97.000000 2670.000000 --59.000000 -25.166667 92.000000 2670.000000 --58.833333 -25.166667 90.000000 2670.000000 --58.666667 -25.166667 83.000000 2670.000000 --58.500000 -25.166667 83.000000 2670.000000 --58.333333 -25.166667 81.000000 2670.000000 --58.166667 -25.166667 75.000000 2670.000000 --58.000000 -25.166667 70.000000 2670.000000 --57.833333 -25.166667 69.000000 2670.000000 --57.666667 -25.166667 67.000000 2670.000000 --57.500000 -25.166667 65.000000 2670.000000 --57.333333 -25.166667 190.000000 2670.000000 --57.166667 -25.166667 77.000000 2670.000000 --57.000000 -25.166667 91.000000 2670.000000 --56.833333 -25.166667 72.000000 2670.000000 --56.666667 -25.166667 78.000000 2670.000000 --56.500000 -25.166667 90.000000 2670.000000 --56.333333 -25.166667 149.000000 2670.000000 --56.166667 -25.166667 198.000000 2670.000000 --56.000000 -25.166667 283.000000 2670.000000 --55.833333 -25.166667 277.000000 2670.000000 --55.666667 -25.166667 259.000000 2670.000000 --55.500000 -25.166667 283.000000 2670.000000 --55.333333 -25.166667 226.000000 2670.000000 --55.166667 -25.166667 253.000000 2670.000000 --55.000000 -25.166667 230.000000 2670.000000 --54.833333 -25.166667 272.000000 2670.000000 --54.666667 -25.166667 285.000000 2670.000000 --54.500000 -25.166667 239.000000 2670.000000 --54.333333 -25.166667 270.000000 2670.000000 --54.166667 -25.166667 288.000000 2670.000000 --54.000000 -25.166667 567.000000 2670.000000 --53.833333 -25.166667 556.000000 2670.000000 --53.666667 -25.166667 564.000000 2670.000000 --53.500000 -25.166667 637.000000 2670.000000 --53.333333 -25.166667 613.000000 2670.000000 --53.166667 -25.166667 781.000000 2670.000000 --53.000000 -25.166667 685.000000 2670.000000 --52.833333 -25.166667 813.000000 2670.000000 --52.666667 -25.166667 806.000000 2670.000000 --52.500000 -25.166667 638.000000 2670.000000 --52.333333 -25.166667 743.000000 2670.000000 --52.166667 -25.166667 810.000000 2670.000000 --52.000000 -25.166667 986.000000 2670.000000 --51.833333 -25.166667 1027.000000 2670.000000 --51.666667 -25.166667 1125.000000 2670.000000 --51.500000 -25.166667 1135.000000 2670.000000 --51.333333 -25.166667 1156.000000 2670.000000 --51.166667 -25.166667 821.000000 2670.000000 --51.000000 -25.166667 773.000000 2670.000000 --50.833333 -25.166667 794.000000 2670.000000 --50.666667 -25.166667 840.000000 2670.000000 --50.500000 -25.166667 866.000000 2670.000000 --50.333333 -25.166667 861.000000 2670.000000 --50.166667 -25.166667 801.000000 2670.000000 --50.000000 -25.166667 1024.000000 2670.000000 --49.833333 -25.166667 787.000000 2670.000000 --49.666667 -25.166667 842.000000 2670.000000 --49.500000 -25.166667 728.000000 2670.000000 --49.333333 -25.166667 956.000000 2670.000000 --49.166667 -25.166667 1053.000000 2670.000000 --49.000000 -25.166667 938.000000 2670.000000 --48.833333 -25.166667 1008.000000 2670.000000 --48.666667 -25.166667 639.000000 2670.000000 --48.500000 -25.166667 288.000000 2670.000000 --48.333333 -25.166667 413.000000 2670.000000 --48.166667 -25.166667 691.000000 2670.000000 --48.000000 -25.166667 119.000000 2670.000000 --47.833333 -25.166667 -7.000000 1670.000000 --47.666667 -25.166667 -20.000000 1670.000000 --47.500000 -25.166667 -28.000000 1670.000000 --47.333333 -25.166667 -35.000000 1670.000000 --47.166667 -25.166667 -43.000000 1670.000000 --47.000000 -25.166667 -52.000000 1670.000000 --46.833333 -25.166667 -55.000000 1670.000000 --46.666667 -25.166667 -61.000000 1670.000000 --46.500000 -25.166667 -73.000000 1670.000000 --46.333333 -25.166667 -76.000000 1670.000000 --46.166667 -25.166667 -86.000000 1670.000000 --46.000000 -25.166667 -100.000000 1670.000000 --45.833333 -25.166667 -108.000000 1670.000000 --45.666667 -25.166667 -126.000000 1670.000000 --45.500000 -25.166667 -96.000000 1670.000000 --45.333333 -25.166667 -109.000000 1670.000000 --45.166667 -25.166667 -145.000000 1670.000000 --45.000000 -25.166667 -147.000000 1670.000000 --44.833333 -25.166667 -320.000000 1670.000000 --44.666667 -25.166667 -1226.000000 1670.000000 --44.500000 -25.166667 -1624.000000 1670.000000 --44.333333 -25.166667 -1779.000000 1670.000000 --44.166667 -25.166667 -1895.000000 1670.000000 --44.000000 -25.166667 -1950.000000 1670.000000 --43.833333 -25.166667 -2234.000000 1670.000000 --43.666667 -25.166667 -2217.000000 1670.000000 --43.500000 -25.166667 -2143.000000 1670.000000 --43.333333 -25.166667 -2121.000000 1670.000000 --43.166667 -25.166667 -2210.000000 1670.000000 --43.000000 -25.166667 -2206.000000 1670.000000 --42.833333 -25.166667 -2183.000000 1670.000000 --42.666667 -25.166667 -2200.000000 1670.000000 --42.500000 -25.166667 -2136.000000 1670.000000 --42.333333 -25.166667 -2203.000000 1670.000000 --42.166667 -25.166667 -2149.000000 1670.000000 --42.000000 -25.166667 -2253.000000 1670.000000 --41.833333 -25.166667 -2534.000000 1670.000000 --41.666667 -25.166667 -2575.000000 1670.000000 --41.500000 -25.166667 -2595.000000 1670.000000 --41.333333 -25.166667 -2674.000000 1670.000000 --41.166667 -25.166667 -2966.000000 1670.000000 --41.000000 -25.166667 -2725.000000 1670.000000 --40.833333 -25.166667 -2612.000000 1670.000000 --40.666667 -25.166667 -2856.000000 1670.000000 --40.500000 -25.166667 -3080.000000 1670.000000 --40.333333 -25.166667 -2957.000000 1670.000000 --40.166667 -25.166667 -3002.000000 1670.000000 --40.000000 -25.166667 -3045.000000 1670.000000 --65.000000 -25.333333 963.000000 2670.000000 --64.833333 -25.333333 614.000000 2670.000000 --64.666667 -25.333333 546.000000 2670.000000 --64.500000 -25.333333 522.000000 2670.000000 --64.333333 -25.333333 525.000000 2670.000000 --64.166667 -25.333333 385.000000 2670.000000 --64.000000 -25.333333 337.000000 2670.000000 --63.833333 -25.333333 319.000000 2670.000000 --63.666667 -25.333333 307.000000 2670.000000 --63.500000 -25.333333 291.000000 2670.000000 --63.333333 -25.333333 275.000000 2670.000000 --63.166667 -25.333333 259.000000 2670.000000 --63.000000 -25.333333 244.000000 2670.000000 --62.833333 -25.333333 234.000000 2670.000000 --62.666667 -25.333333 220.000000 2670.000000 --62.500000 -25.333333 210.000000 2670.000000 --62.333333 -25.333333 199.000000 2670.000000 --62.166667 -25.333333 188.000000 2670.000000 --62.000000 -25.333333 179.000000 2670.000000 --61.833333 -25.333333 169.000000 2670.000000 --61.666667 -25.333333 160.000000 2670.000000 --61.500000 -25.333333 152.000000 2670.000000 --61.333333 -25.333333 145.000000 2670.000000 --61.166667 -25.333333 139.000000 2670.000000 --61.000000 -25.333333 135.000000 2670.000000 --60.833333 -25.333333 131.000000 2670.000000 --60.666667 -25.333333 127.000000 2670.000000 --60.500000 -25.333333 122.000000 2670.000000 --60.333333 -25.333333 120.000000 2670.000000 --60.166667 -25.333333 116.000000 2670.000000 --60.000000 -25.333333 116.000000 2670.000000 --59.833333 -25.333333 107.000000 2670.000000 --59.666667 -25.333333 102.000000 2670.000000 --59.500000 -25.333333 100.000000 2670.000000 --59.333333 -25.333333 96.000000 2670.000000 --59.166667 -25.333333 97.000000 2670.000000 --59.000000 -25.333333 90.000000 2670.000000 --58.833333 -25.333333 87.000000 2670.000000 --58.666667 -25.333333 86.000000 2670.000000 --58.500000 -25.333333 82.000000 2670.000000 --58.333333 -25.333333 77.000000 2670.000000 --58.166667 -25.333333 74.000000 2670.000000 --58.000000 -25.333333 70.000000 2670.000000 --57.833333 -25.333333 67.000000 2670.000000 --57.666667 -25.333333 53.000000 2670.000000 --57.500000 -25.333333 114.000000 2670.000000 --57.333333 -25.333333 62.000000 2670.000000 --57.166667 -25.333333 214.000000 2670.000000 --57.000000 -25.333333 110.000000 2670.000000 --56.833333 -25.333333 160.000000 2670.000000 --56.666667 -25.333333 82.000000 2670.000000 --56.500000 -25.333333 111.000000 2670.000000 --56.333333 -25.333333 149.000000 2670.000000 --56.166667 -25.333333 150.000000 2670.000000 --56.000000 -25.333333 298.000000 2670.000000 --55.833333 -25.333333 326.000000 2670.000000 --55.666667 -25.333333 269.000000 2670.000000 --55.500000 -25.333333 239.000000 2670.000000 --55.333333 -25.333333 220.000000 2670.000000 --55.166667 -25.333333 220.000000 2670.000000 --55.000000 -25.333333 250.000000 2670.000000 --54.833333 -25.333333 223.000000 2670.000000 --54.666667 -25.333333 239.000000 2670.000000 --54.500000 -25.333333 217.000000 2670.000000 --54.333333 -25.333333 279.000000 2670.000000 --54.166667 -25.333333 387.000000 2670.000000 --54.000000 -25.333333 355.000000 2670.000000 --53.833333 -25.333333 378.000000 2670.000000 --53.666667 -25.333333 393.000000 2670.000000 --53.500000 -25.333333 427.000000 2670.000000 --53.333333 -25.333333 548.000000 2670.000000 --53.166667 -25.333333 589.000000 2670.000000 --53.000000 -25.333333 452.000000 2670.000000 --52.833333 -25.333333 710.000000 2670.000000 --52.666667 -25.333333 693.000000 2670.000000 --52.500000 -25.333333 751.000000 2670.000000 --52.333333 -25.333333 819.000000 2670.000000 --52.166667 -25.333333 817.000000 2670.000000 --52.000000 -25.333333 754.000000 2670.000000 --51.833333 -25.333333 970.000000 2670.000000 --51.666667 -25.333333 1005.000000 2670.000000 --51.500000 -25.333333 1042.000000 2670.000000 --51.333333 -25.333333 1102.000000 2670.000000 --51.166667 -25.333333 958.000000 2670.000000 --51.000000 -25.333333 793.000000 2670.000000 --50.833333 -25.333333 887.000000 2670.000000 --50.666667 -25.333333 850.000000 2670.000000 --50.500000 -25.333333 886.000000 2670.000000 --50.333333 -25.333333 830.000000 2670.000000 --50.166667 -25.333333 924.000000 2670.000000 --50.000000 -25.333333 830.000000 2670.000000 --49.833333 -25.333333 996.000000 2670.000000 --49.666667 -25.333333 775.000000 2670.000000 --49.500000 -25.333333 936.000000 2670.000000 --49.333333 -25.333333 980.000000 2670.000000 --49.166667 -25.333333 927.000000 2670.000000 --49.000000 -25.333333 899.000000 2670.000000 --48.833333 -25.333333 557.000000 2670.000000 --48.666667 -25.333333 59.000000 2670.000000 --48.500000 -25.333333 5.000000 2670.000000 --48.333333 -25.333333 0.000000 2670.000000 --48.166667 -25.333333 19.000000 2670.000000 --48.000000 -25.333333 -5.000000 1670.000000 --47.833333 -25.333333 -21.000000 1670.000000 --47.666667 -25.333333 -26.000000 1670.000000 --47.500000 -25.333333 -34.000000 1670.000000 --47.333333 -25.333333 -42.000000 1670.000000 --47.166667 -25.333333 -49.000000 1670.000000 --47.000000 -25.333333 -59.000000 1670.000000 --46.833333 -25.333333 -64.000000 1670.000000 --46.666667 -25.333333 -70.000000 1670.000000 --46.500000 -25.333333 -77.000000 1670.000000 --46.333333 -25.333333 -89.000000 1670.000000 --46.166667 -25.333333 -106.000000 1670.000000 --46.000000 -25.333333 -117.000000 1670.000000 --45.833333 -25.333333 -124.000000 1670.000000 --45.666667 -25.333333 -128.000000 1670.000000 --45.500000 -25.333333 -162.000000 1670.000000 --45.333333 -25.333333 -94.000000 1670.000000 --45.166667 -25.333333 -136.000000 1670.000000 --45.000000 -25.333333 -162.000000 1670.000000 --44.833333 -25.333333 -1002.000000 1670.000000 --44.666667 -25.333333 -1556.000000 1670.000000 --44.500000 -25.333333 -1768.000000 1670.000000 --44.333333 -25.333333 -1804.000000 1670.000000 --44.166667 -25.333333 -1980.000000 1670.000000 --44.000000 -25.333333 -2044.000000 1670.000000 --43.833333 -25.333333 -2144.000000 1670.000000 --43.666667 -25.333333 -2132.000000 1670.000000 --43.500000 -25.333333 -2120.000000 1670.000000 --43.333333 -25.333333 -2184.000000 1670.000000 --43.166667 -25.333333 -2210.000000 1670.000000 --43.000000 -25.333333 -2220.000000 1670.000000 --42.833333 -25.333333 -2170.000000 1670.000000 --42.666667 -25.333333 -2095.000000 1670.000000 --42.500000 -25.333333 -2234.000000 1670.000000 --42.333333 -25.333333 -2213.000000 1670.000000 --42.166667 -25.333333 -2254.000000 1670.000000 --42.000000 -25.333333 -2438.000000 1670.000000 --41.833333 -25.333333 -2466.000000 1670.000000 --41.666667 -25.333333 -2590.000000 1670.000000 --41.500000 -25.333333 -2658.000000 1670.000000 --41.333333 -25.333333 -2538.000000 1670.000000 --41.166667 -25.333333 -2722.000000 1670.000000 --41.000000 -25.333333 -2640.000000 1670.000000 --40.833333 -25.333333 -2786.000000 1670.000000 --40.666667 -25.333333 -2902.000000 1670.000000 --40.500000 -25.333333 -3196.000000 1670.000000 --40.333333 -25.333333 -3223.000000 1670.000000 --40.166667 -25.333333 -3137.000000 1670.000000 --40.000000 -25.333333 -3150.000000 1670.000000 --65.000000 -25.500000 983.000000 2670.000000 --64.833333 -25.500000 685.000000 2670.000000 --64.666667 -25.500000 568.000000 2670.000000 --64.500000 -25.500000 667.000000 2670.000000 --64.333333 -25.500000 553.000000 2670.000000 --64.166667 -25.500000 390.000000 2670.000000 --64.000000 -25.500000 318.000000 2670.000000 --63.833333 -25.500000 308.000000 2670.000000 --63.666667 -25.500000 291.000000 2670.000000 --63.500000 -25.500000 282.000000 2670.000000 --63.333333 -25.500000 270.000000 2670.000000 --63.166667 -25.500000 254.000000 2670.000000 --63.000000 -25.500000 243.000000 2670.000000 --62.833333 -25.500000 230.000000 2670.000000 --62.666667 -25.500000 220.000000 2670.000000 --62.500000 -25.500000 208.000000 2670.000000 --62.333333 -25.500000 198.000000 2670.000000 --62.166667 -25.500000 188.000000 2670.000000 --62.000000 -25.500000 178.000000 2670.000000 --61.833333 -25.500000 167.000000 2670.000000 --61.666667 -25.500000 160.000000 2670.000000 --61.500000 -25.500000 152.000000 2670.000000 --61.333333 -25.500000 146.000000 2670.000000 --61.166667 -25.500000 138.000000 2670.000000 --61.000000 -25.500000 131.000000 2670.000000 --60.833333 -25.500000 128.000000 2670.000000 --60.666667 -25.500000 124.000000 2670.000000 --60.500000 -25.500000 119.000000 2670.000000 --60.333333 -25.500000 114.000000 2670.000000 --60.166667 -25.500000 113.000000 2670.000000 --60.000000 -25.500000 109.000000 2670.000000 --59.833333 -25.500000 103.000000 2670.000000 --59.666667 -25.500000 103.000000 2670.000000 --59.500000 -25.500000 100.000000 2670.000000 --59.333333 -25.500000 95.000000 2670.000000 --59.166667 -25.500000 93.000000 2670.000000 --59.000000 -25.500000 91.000000 2670.000000 --58.833333 -25.500000 85.000000 2670.000000 --58.666667 -25.500000 80.000000 2670.000000 --58.500000 -25.500000 79.000000 2670.000000 --58.333333 -25.500000 72.000000 2670.000000 --58.166667 -25.500000 70.000000 2670.000000 --58.000000 -25.500000 68.000000 2670.000000 --57.833333 -25.500000 65.000000 2670.000000 --57.666667 -25.500000 64.000000 2670.000000 --57.500000 -25.500000 107.000000 2670.000000 --57.333333 -25.500000 130.000000 2670.000000 --57.166667 -25.500000 132.000000 2670.000000 --57.000000 -25.500000 252.000000 2670.000000 --56.833333 -25.500000 147.000000 2670.000000 --56.666667 -25.500000 114.000000 2670.000000 --56.500000 -25.500000 126.000000 2670.000000 --56.333333 -25.500000 204.000000 2670.000000 --56.166667 -25.500000 245.000000 2670.000000 --56.000000 -25.500000 295.000000 2670.000000 --55.833333 -25.500000 233.000000 2670.000000 --55.666667 -25.500000 218.000000 2670.000000 --55.500000 -25.500000 224.000000 2670.000000 --55.333333 -25.500000 256.000000 2670.000000 --55.166667 -25.500000 216.000000 2670.000000 --55.000000 -25.500000 230.000000 2670.000000 --54.833333 -25.500000 245.000000 2670.000000 --54.666667 -25.500000 215.000000 2670.000000 --54.500000 -25.500000 261.000000 2670.000000 --54.333333 -25.500000 284.000000 2670.000000 --54.166667 -25.500000 249.000000 2670.000000 --54.000000 -25.500000 285.000000 2670.000000 --53.833333 -25.500000 309.000000 2670.000000 --53.666667 -25.500000 273.000000 2670.000000 --53.500000 -25.500000 358.000000 2670.000000 --53.333333 -25.500000 378.000000 2670.000000 --53.166667 -25.500000 392.000000 2670.000000 --53.000000 -25.500000 463.000000 2670.000000 --52.833333 -25.500000 586.000000 2670.000000 --52.666667 -25.500000 607.000000 2670.000000 --52.500000 -25.500000 643.000000 2670.000000 --52.333333 -25.500000 773.000000 2670.000000 --52.166667 -25.500000 707.000000 2670.000000 --52.000000 -25.500000 805.000000 2670.000000 --51.833333 -25.500000 938.000000 2670.000000 --51.666667 -25.500000 961.000000 2670.000000 --51.500000 -25.500000 1073.000000 2670.000000 --51.333333 -25.500000 1138.000000 2670.000000 --51.166667 -25.500000 1191.000000 2670.000000 --51.000000 -25.500000 895.000000 2670.000000 --50.833333 -25.500000 823.000000 2670.000000 --50.666667 -25.500000 859.000000 2670.000000 --50.500000 -25.500000 823.000000 2670.000000 --50.333333 -25.500000 906.000000 2670.000000 --50.166667 -25.500000 840.000000 2670.000000 --50.000000 -25.500000 910.000000 2670.000000 --49.833333 -25.500000 928.000000 2670.000000 --49.666667 -25.500000 1085.000000 2670.000000 --49.500000 -25.500000 898.000000 2670.000000 --49.333333 -25.500000 892.000000 2670.000000 --49.166667 -25.500000 882.000000 2670.000000 --49.000000 -25.500000 953.000000 2670.000000 --48.833333 -25.500000 18.000000 2670.000000 --48.666667 -25.500000 4.000000 2670.000000 --48.500000 -25.500000 0.000000 2670.000000 --48.333333 -25.500000 11.000000 2670.000000 --48.166667 -25.500000 -6.000000 1670.000000 --48.000000 -25.500000 -20.000000 1670.000000 --47.833333 -25.500000 -26.000000 1670.000000 --47.666667 -25.500000 -34.000000 1670.000000 --47.500000 -25.500000 -42.000000 1670.000000 --47.333333 -25.500000 -49.000000 1670.000000 --47.166667 -25.500000 -58.000000 1670.000000 --47.000000 -25.500000 -72.000000 1670.000000 --46.833333 -25.500000 -77.000000 1670.000000 --46.666667 -25.500000 -92.000000 1670.000000 --46.500000 -25.500000 -104.000000 1670.000000 --46.333333 -25.500000 -122.000000 1670.000000 --46.166667 -25.500000 -151.000000 1670.000000 --46.000000 -25.500000 -143.000000 1670.000000 --45.833333 -25.500000 -147.000000 1670.000000 --45.666667 -25.500000 -172.000000 1670.000000 --45.500000 -25.500000 -144.000000 1670.000000 --45.333333 -25.500000 -158.000000 1670.000000 --45.166667 -25.500000 -145.000000 1670.000000 --45.000000 -25.500000 -666.000000 1670.000000 --44.833333 -25.500000 -1396.000000 1670.000000 --44.666667 -25.500000 -1757.000000 1670.000000 --44.500000 -25.500000 -1855.000000 1670.000000 --44.333333 -25.500000 -2033.000000 1670.000000 --44.166667 -25.500000 -2108.000000 1670.000000 --44.000000 -25.500000 -2046.000000 1670.000000 --43.833333 -25.500000 -2145.000000 1670.000000 --43.666667 -25.500000 -2139.000000 1670.000000 --43.500000 -25.500000 -2140.000000 1670.000000 --43.333333 -25.500000 -2152.000000 1670.000000 --43.166667 -25.500000 -2176.000000 1670.000000 --43.000000 -25.500000 -2125.000000 1670.000000 --42.833333 -25.500000 -2126.000000 1670.000000 --42.666667 -25.500000 -2182.000000 1670.000000 --42.500000 -25.500000 -2121.000000 1670.000000 --42.333333 -25.500000 -2316.000000 1670.000000 --42.166667 -25.500000 -2427.000000 1670.000000 --42.000000 -25.500000 -2360.000000 1670.000000 --41.833333 -25.500000 -2575.000000 1670.000000 --41.666667 -25.500000 -2591.000000 1670.000000 --41.500000 -25.500000 -2560.000000 1670.000000 --41.333333 -25.500000 -2592.000000 1670.000000 --41.166667 -25.500000 -2554.000000 1670.000000 --41.000000 -25.500000 -2940.000000 1670.000000 --40.833333 -25.500000 -2884.000000 1670.000000 --40.666667 -25.500000 -2949.000000 1670.000000 --40.500000 -25.500000 -3052.000000 1670.000000 --40.333333 -25.500000 -3219.000000 1670.000000 --40.166667 -25.500000 -3158.000000 1670.000000 --40.000000 -25.500000 -3254.000000 1670.000000 --65.000000 -25.666667 896.000000 2670.000000 --64.833333 -25.666667 683.000000 2670.000000 --64.666667 -25.666667 610.000000 2670.000000 --64.500000 -25.666667 770.000000 2670.000000 --64.333333 -25.666667 533.000000 2670.000000 --64.166667 -25.666667 372.000000 2670.000000 --64.000000 -25.666667 302.000000 2670.000000 --63.833333 -25.666667 292.000000 2670.000000 --63.666667 -25.666667 283.000000 2670.000000 --63.500000 -25.666667 270.000000 2670.000000 --63.333333 -25.666667 262.000000 2670.000000 --63.166667 -25.666667 249.000000 2670.000000 --63.000000 -25.666667 238.000000 2670.000000 --62.833333 -25.666667 228.000000 2670.000000 --62.666667 -25.666667 217.000000 2670.000000 --62.500000 -25.666667 207.000000 2670.000000 --62.333333 -25.666667 197.000000 2670.000000 --62.166667 -25.666667 188.000000 2670.000000 --62.000000 -25.666667 178.000000 2670.000000 --61.833333 -25.666667 170.000000 2670.000000 --61.666667 -25.666667 160.000000 2670.000000 --61.500000 -25.666667 154.000000 2670.000000 --61.333333 -25.666667 145.000000 2670.000000 --61.166667 -25.666667 137.000000 2670.000000 --61.000000 -25.666667 130.000000 2670.000000 --60.833333 -25.666667 125.000000 2670.000000 --60.666667 -25.666667 119.000000 2670.000000 --60.500000 -25.666667 116.000000 2670.000000 --60.333333 -25.666667 114.000000 2670.000000 --60.166667 -25.666667 110.000000 2670.000000 --60.000000 -25.666667 106.000000 2670.000000 --59.833333 -25.666667 103.000000 2670.000000 --59.666667 -25.666667 98.000000 2670.000000 --59.500000 -25.666667 101.000000 2670.000000 --59.333333 -25.666667 90.000000 2670.000000 --59.166667 -25.666667 92.000000 2670.000000 --59.000000 -25.666667 84.000000 2670.000000 --58.833333 -25.666667 86.000000 2670.000000 --58.666667 -25.666667 77.000000 2670.000000 --58.500000 -25.666667 78.000000 2670.000000 --58.333333 -25.666667 73.000000 2670.000000 --58.166667 -25.666667 69.000000 2670.000000 --58.000000 -25.666667 65.000000 2670.000000 --57.833333 -25.666667 63.000000 2670.000000 --57.666667 -25.666667 64.000000 2670.000000 --57.500000 -25.666667 73.000000 2670.000000 --57.333333 -25.666667 72.000000 2670.000000 --57.166667 -25.666667 92.000000 2670.000000 --57.000000 -25.666667 147.000000 2670.000000 --56.833333 -25.666667 141.000000 2670.000000 --56.666667 -25.666667 110.000000 2670.000000 --56.500000 -25.666667 121.000000 2670.000000 --56.333333 -25.666667 159.000000 2670.000000 --56.166667 -25.666667 169.000000 2670.000000 --56.000000 -25.666667 204.000000 2670.000000 --55.833333 -25.666667 292.000000 2670.000000 --55.666667 -25.666667 230.000000 2670.000000 --55.500000 -25.666667 267.000000 2670.000000 --55.333333 -25.666667 245.000000 2670.000000 --55.166667 -25.666667 237.000000 2670.000000 --55.000000 -25.666667 252.000000 2670.000000 --54.833333 -25.666667 245.000000 2670.000000 --54.666667 -25.666667 167.000000 2670.000000 --54.500000 -25.666667 243.000000 2670.000000 --54.333333 -25.666667 241.000000 2670.000000 --54.166667 -25.666667 248.000000 2670.000000 --54.000000 -25.666667 303.000000 2670.000000 --53.833333 -25.666667 295.000000 2670.000000 --53.666667 -25.666667 379.000000 2670.000000 --53.500000 -25.666667 385.000000 2670.000000 --53.333333 -25.666667 428.000000 2670.000000 --53.166667 -25.666667 475.000000 2670.000000 --53.000000 -25.666667 416.000000 2670.000000 --52.833333 -25.666667 574.000000 2670.000000 --52.666667 -25.666667 473.000000 2670.000000 --52.500000 -25.666667 510.000000 2670.000000 --52.333333 -25.666667 566.000000 2670.000000 --52.166667 -25.666667 754.000000 2670.000000 --52.000000 -25.666667 840.000000 2670.000000 --51.833333 -25.666667 909.000000 2670.000000 --51.666667 -25.666667 1028.000000 2670.000000 --51.500000 -25.666667 1125.000000 2670.000000 --51.333333 -25.666667 1257.000000 2670.000000 --51.166667 -25.666667 1034.000000 2670.000000 --51.000000 -25.666667 1174.000000 2670.000000 --50.833333 -25.666667 893.000000 2670.000000 --50.666667 -25.666667 812.000000 2670.000000 --50.500000 -25.666667 913.000000 2670.000000 --50.333333 -25.666667 837.000000 2670.000000 --50.166667 -25.666667 814.000000 2670.000000 --50.000000 -25.666667 875.000000 2670.000000 --49.833333 -25.666667 882.000000 2670.000000 --49.666667 -25.666667 907.000000 2670.000000 --49.500000 -25.666667 918.000000 2670.000000 --49.333333 -25.666667 903.000000 2670.000000 --49.166667 -25.666667 899.000000 2670.000000 --49.000000 -25.666667 915.000000 2670.000000 --48.833333 -25.666667 297.000000 2670.000000 --48.666667 -25.666667 396.000000 2670.000000 --48.500000 -25.666667 15.000000 2670.000000 --48.333333 -25.666667 -3.000000 1670.000000 --48.166667 -25.666667 -19.000000 1670.000000 --48.000000 -25.666667 -25.000000 1670.000000 --47.833333 -25.666667 -33.000000 1670.000000 --47.666667 -25.666667 -41.000000 1670.000000 --47.500000 -25.666667 -48.000000 1670.000000 --47.333333 -25.666667 -57.000000 1670.000000 --47.166667 -25.666667 -64.000000 1670.000000 --47.000000 -25.666667 -79.000000 1670.000000 --46.833333 -25.666667 -95.000000 1670.000000 --46.666667 -25.666667 -111.000000 1670.000000 --46.500000 -25.666667 -126.000000 1670.000000 --46.333333 -25.666667 -131.000000 1670.000000 --46.166667 -25.666667 -156.000000 1670.000000 --46.000000 -25.666667 -149.000000 1670.000000 --45.833333 -25.666667 -166.000000 1670.000000 --45.666667 -25.666667 -159.000000 1670.000000 --45.500000 -25.666667 -141.000000 1670.000000 --45.333333 -25.666667 -162.000000 1670.000000 --45.166667 -25.666667 -393.000000 1670.000000 --45.000000 -25.666667 -1226.000000 1670.000000 --44.833333 -25.666667 -1652.000000 1670.000000 --44.666667 -25.666667 -1944.000000 1670.000000 --44.500000 -25.666667 -1980.000000 1670.000000 --44.333333 -25.666667 -2038.000000 1670.000000 --44.166667 -25.666667 -2049.000000 1670.000000 --44.000000 -25.666667 -2112.000000 1670.000000 --43.833333 -25.666667 -2135.000000 1670.000000 --43.666667 -25.666667 -2119.000000 1670.000000 --43.500000 -25.666667 -2120.000000 1670.000000 --43.333333 -25.666667 -2126.000000 1670.000000 --43.166667 -25.666667 -2157.000000 1670.000000 --43.000000 -25.666667 -2162.000000 1670.000000 --42.833333 -25.666667 -2159.000000 1670.000000 --42.666667 -25.666667 -2231.000000 1670.000000 --42.500000 -25.666667 -2249.000000 1670.000000 --42.333333 -25.666667 -2344.000000 1670.000000 --42.166667 -25.666667 -2330.000000 1670.000000 --42.000000 -25.666667 -2527.000000 1670.000000 --41.833333 -25.666667 -2495.000000 1670.000000 --41.666667 -25.666667 -2485.000000 1670.000000 --41.500000 -25.666667 -2585.000000 1670.000000 --41.333333 -25.666667 -2557.000000 1670.000000 --41.166667 -25.666667 -2598.000000 1670.000000 --41.000000 -25.666667 -2927.000000 1670.000000 --40.833333 -25.666667 -2888.000000 1670.000000 --40.666667 -25.666667 -3002.000000 1670.000000 --40.500000 -25.666667 -3099.000000 1670.000000 --40.333333 -25.666667 -3126.000000 1670.000000 --40.166667 -25.666667 -3087.000000 1670.000000 --40.000000 -25.666667 -3293.000000 1670.000000 --65.000000 -25.833333 825.000000 2670.000000 --64.833333 -25.833333 697.000000 2670.000000 --64.666667 -25.833333 579.000000 2670.000000 --64.500000 -25.833333 539.000000 2670.000000 --64.333333 -25.833333 455.000000 2670.000000 --64.166667 -25.833333 347.000000 2670.000000 --64.000000 -25.833333 298.000000 2670.000000 --63.833333 -25.833333 275.000000 2670.000000 --63.666667 -25.833333 267.000000 2670.000000 --63.500000 -25.833333 260.000000 2670.000000 --63.333333 -25.833333 252.000000 2670.000000 --63.166667 -25.833333 243.000000 2670.000000 --63.000000 -25.833333 235.000000 2670.000000 --62.833333 -25.833333 223.000000 2670.000000 --62.666667 -25.833333 215.000000 2670.000000 --62.500000 -25.833333 205.000000 2670.000000 --62.333333 -25.833333 195.000000 2670.000000 --62.166667 -25.833333 185.000000 2670.000000 --62.000000 -25.833333 176.000000 2670.000000 --61.833333 -25.833333 168.000000 2670.000000 --61.666667 -25.833333 160.000000 2670.000000 --61.500000 -25.833333 153.000000 2670.000000 --61.333333 -25.833333 145.000000 2670.000000 --61.166667 -25.833333 138.000000 2670.000000 --61.000000 -25.833333 130.000000 2670.000000 --60.833333 -25.833333 120.000000 2670.000000 --60.666667 -25.833333 117.000000 2670.000000 --60.500000 -25.833333 114.000000 2670.000000 --60.333333 -25.833333 107.000000 2670.000000 --60.166667 -25.833333 108.000000 2670.000000 --60.000000 -25.833333 106.000000 2670.000000 --59.833333 -25.833333 104.000000 2670.000000 --59.666667 -25.833333 98.000000 2670.000000 --59.500000 -25.833333 91.000000 2670.000000 --59.333333 -25.833333 89.000000 2670.000000 --59.166667 -25.833333 86.000000 2670.000000 --59.000000 -25.833333 80.000000 2670.000000 --58.833333 -25.833333 81.000000 2670.000000 --58.666667 -25.833333 75.000000 2670.000000 --58.500000 -25.833333 72.000000 2670.000000 --58.333333 -25.833333 70.000000 2670.000000 --58.166667 -25.833333 69.000000 2670.000000 --58.000000 -25.833333 65.000000 2670.000000 --57.833333 -25.833333 53.000000 2670.000000 --57.666667 -25.833333 64.000000 2670.000000 --57.500000 -25.833333 62.000000 2670.000000 --57.333333 -25.833333 82.000000 2670.000000 --57.166667 -25.833333 116.000000 2670.000000 --57.000000 -25.833333 122.000000 2670.000000 --56.833333 -25.833333 173.000000 2670.000000 --56.666667 -25.833333 120.000000 2670.000000 --56.500000 -25.833333 123.000000 2670.000000 --56.333333 -25.833333 164.000000 2670.000000 --56.166667 -25.833333 257.000000 2670.000000 --56.000000 -25.833333 243.000000 2670.000000 --55.833333 -25.833333 260.000000 2670.000000 --55.666667 -25.833333 263.000000 2670.000000 --55.500000 -25.833333 253.000000 2670.000000 --55.333333 -25.833333 300.000000 2670.000000 --55.166667 -25.833333 290.000000 2670.000000 --55.000000 -25.833333 290.000000 2670.000000 --54.833333 -25.833333 263.000000 2670.000000 --54.666667 -25.833333 241.000000 2670.000000 --54.500000 -25.833333 222.000000 2670.000000 --54.333333 -25.833333 293.000000 2670.000000 --54.166667 -25.833333 305.000000 2670.000000 --54.000000 -25.833333 382.000000 2670.000000 --53.833333 -25.833333 337.000000 2670.000000 --53.666667 -25.833333 426.000000 2670.000000 --53.500000 -25.833333 485.000000 2670.000000 --53.333333 -25.833333 564.000000 2670.000000 --53.166667 -25.833333 527.000000 2670.000000 --53.000000 -25.833333 473.000000 2670.000000 --52.833333 -25.833333 532.000000 2670.000000 --52.666667 -25.833333 686.000000 2670.000000 --52.500000 -25.833333 677.000000 2670.000000 --52.333333 -25.833333 738.000000 2670.000000 --52.166667 -25.833333 618.000000 2670.000000 --52.000000 -25.833333 947.000000 2670.000000 --51.833333 -25.833333 1086.000000 2670.000000 --51.666667 -25.833333 1026.000000 2670.000000 --51.500000 -25.833333 1130.000000 2670.000000 --51.333333 -25.833333 895.000000 2670.000000 --51.166667 -25.833333 1082.000000 2670.000000 --51.000000 -25.833333 1164.000000 2670.000000 --50.833333 -25.833333 877.000000 2670.000000 --50.666667 -25.833333 848.000000 2670.000000 --50.500000 -25.833333 789.000000 2670.000000 --50.333333 -25.833333 783.000000 2670.000000 --50.166667 -25.833333 850.000000 2670.000000 --50.000000 -25.833333 844.000000 2670.000000 --49.833333 -25.833333 920.000000 2670.000000 --49.666667 -25.833333 827.000000 2670.000000 --49.500000 -25.833333 885.000000 2670.000000 --49.333333 -25.833333 921.000000 2670.000000 --49.166667 -25.833333 901.000000 2670.000000 --49.000000 -25.833333 782.000000 2670.000000 --48.833333 -25.833333 719.000000 2670.000000 --48.666667 -25.833333 4.000000 2670.000000 --48.500000 -25.833333 -1.000000 1670.000000 --48.333333 -25.833333 -12.000000 1670.000000 --48.166667 -25.833333 -22.000000 1670.000000 --48.000000 -25.833333 -31.000000 1670.000000 --47.833333 -25.833333 -40.000000 1670.000000 --47.666667 -25.833333 -52.000000 1670.000000 --47.500000 -25.833333 -60.000000 1670.000000 --47.333333 -25.833333 -71.000000 1670.000000 --47.166667 -25.833333 -77.000000 1670.000000 --47.000000 -25.833333 -91.000000 1670.000000 --46.833333 -25.833333 -111.000000 1670.000000 --46.666667 -25.833333 -124.000000 1670.000000 --46.500000 -25.833333 -143.000000 1670.000000 --46.333333 -25.833333 -150.000000 1670.000000 --46.166667 -25.833333 -153.000000 1670.000000 --46.000000 -25.833333 -178.000000 1670.000000 --45.833333 -25.833333 -275.000000 1670.000000 --45.666667 -25.833333 -222.000000 1670.000000 --45.500000 -25.833333 -585.000000 1670.000000 --45.333333 -25.833333 -552.000000 1670.000000 --45.166667 -25.833333 -979.000000 1670.000000 --45.000000 -25.833333 -1504.000000 1670.000000 --44.833333 -25.833333 -1784.000000 1670.000000 --44.666667 -25.833333 -2023.000000 1670.000000 --44.500000 -25.833333 -2117.000000 1670.000000 --44.333333 -25.833333 -2088.000000 1670.000000 --44.166667 -25.833333 -2106.000000 1670.000000 --44.000000 -25.833333 -2133.000000 1670.000000 --43.833333 -25.833333 -2186.000000 1670.000000 --43.666667 -25.833333 -2154.000000 1670.000000 --43.500000 -25.833333 -2167.000000 1670.000000 --43.333333 -25.833333 -2167.000000 1670.000000 --43.166667 -25.833333 -2193.000000 1670.000000 --43.000000 -25.833333 -2206.000000 1670.000000 --42.833333 -25.833333 -2234.000000 1670.000000 --42.666667 -25.833333 -2338.000000 1670.000000 --42.500000 -25.833333 -2313.000000 1670.000000 --42.333333 -25.833333 -2336.000000 1670.000000 --42.166667 -25.833333 -2392.000000 1670.000000 --42.000000 -25.833333 -2467.000000 1670.000000 --41.833333 -25.833333 -2509.000000 1670.000000 --41.666667 -25.833333 -2520.000000 1670.000000 --41.500000 -25.833333 -2777.000000 1670.000000 --41.333333 -25.833333 -2892.000000 1670.000000 --41.166667 -25.833333 -2816.000000 1670.000000 --41.000000 -25.833333 -2864.000000 1670.000000 --40.833333 -25.833333 -2983.000000 1670.000000 --40.666667 -25.833333 -2970.000000 1670.000000 --40.500000 -25.833333 -2963.000000 1670.000000 --40.333333 -25.833333 -3257.000000 1670.000000 --40.166667 -25.833333 -3314.000000 1670.000000 --40.000000 -25.833333 -3600.000000 1670.000000 --65.000000 -26.000000 1139.000000 2670.000000 --64.833333 -26.000000 1376.000000 2670.000000 --64.666667 -26.000000 629.000000 2670.000000 --64.500000 -26.000000 482.000000 2670.000000 --64.333333 -26.000000 415.000000 2670.000000 --64.166667 -26.000000 343.000000 2670.000000 --64.000000 -26.000000 301.000000 2670.000000 --63.833333 -26.000000 264.000000 2670.000000 --63.666667 -26.000000 254.000000 2670.000000 --63.500000 -26.000000 248.000000 2670.000000 --63.333333 -26.000000 243.000000 2670.000000 --63.166667 -26.000000 236.000000 2670.000000 --63.000000 -26.000000 227.000000 2670.000000 --62.833333 -26.000000 218.000000 2670.000000 --62.666667 -26.000000 207.000000 2670.000000 --62.500000 -26.000000 198.000000 2670.000000 --62.333333 -26.000000 190.000000 2670.000000 --62.166667 -26.000000 180.000000 2670.000000 --62.000000 -26.000000 174.000000 2670.000000 --61.833333 -26.000000 164.000000 2670.000000 --61.666667 -26.000000 158.000000 2670.000000 --61.500000 -26.000000 150.000000 2670.000000 --61.333333 -26.000000 143.000000 2670.000000 --61.166667 -26.000000 134.000000 2670.000000 --61.000000 -26.000000 128.000000 2670.000000 --60.833333 -26.000000 122.000000 2670.000000 --60.666667 -26.000000 115.000000 2670.000000 --60.500000 -26.000000 109.000000 2670.000000 --60.333333 -26.000000 107.000000 2670.000000 --60.166667 -26.000000 100.000000 2670.000000 --60.000000 -26.000000 97.000000 2670.000000 --59.833333 -26.000000 93.000000 2670.000000 --59.666667 -26.000000 93.000000 2670.000000 --59.500000 -26.000000 89.000000 2670.000000 --59.333333 -26.000000 89.000000 2670.000000 --59.166667 -26.000000 82.000000 2670.000000 --59.000000 -26.000000 79.000000 2670.000000 --58.833333 -26.000000 74.000000 2670.000000 --58.666667 -26.000000 75.000000 2670.000000 --58.500000 -26.000000 73.000000 2670.000000 --58.333333 -26.000000 68.000000 2670.000000 --58.166667 -26.000000 65.000000 2670.000000 --58.000000 -26.000000 60.000000 2670.000000 --57.833333 -26.000000 57.000000 2670.000000 --57.666667 -26.000000 60.000000 2670.000000 --57.500000 -26.000000 62.000000 2670.000000 --57.333333 -26.000000 89.000000 2670.000000 --57.166667 -26.000000 139.000000 2670.000000 --57.000000 -26.000000 120.000000 2670.000000 --56.833333 -26.000000 362.000000 2670.000000 --56.666667 -26.000000 248.000000 2670.000000 --56.500000 -26.000000 115.000000 2670.000000 --56.333333 -26.000000 127.000000 2670.000000 --56.166667 -26.000000 179.000000 2670.000000 --56.000000 -26.000000 208.000000 2670.000000 --55.833333 -26.000000 241.000000 2670.000000 --55.666667 -26.000000 356.000000 2670.000000 --55.500000 -26.000000 347.000000 2670.000000 --55.333333 -26.000000 266.000000 2670.000000 --55.166667 -26.000000 229.000000 2670.000000 --55.000000 -26.000000 190.000000 2670.000000 --54.833333 -26.000000 184.000000 2670.000000 --54.666667 -26.000000 183.000000 2670.000000 --54.500000 -26.000000 230.000000 2670.000000 --54.333333 -26.000000 291.000000 2670.000000 --54.166667 -26.000000 322.000000 2670.000000 --54.000000 -26.000000 339.000000 2670.000000 --53.833333 -26.000000 478.000000 2670.000000 --53.666667 -26.000000 536.000000 2670.000000 --53.500000 -26.000000 506.000000 2670.000000 --53.333333 -26.000000 680.000000 2670.000000 --53.166667 -26.000000 687.000000 2670.000000 --53.000000 -26.000000 525.000000 2670.000000 --52.833333 -26.000000 606.000000 2670.000000 --52.666667 -26.000000 554.000000 2670.000000 --52.500000 -26.000000 705.000000 2670.000000 --52.333333 -26.000000 977.000000 2670.000000 --52.166667 -26.000000 777.000000 2670.000000 --52.000000 -26.000000 794.000000 2670.000000 --51.833333 -26.000000 775.000000 2670.000000 --51.666667 -26.000000 761.000000 2670.000000 --51.500000 -26.000000 908.000000 2670.000000 --51.333333 -26.000000 887.000000 2670.000000 --51.166667 -26.000000 975.000000 2670.000000 --51.000000 -26.000000 1025.000000 2670.000000 --50.833333 -26.000000 811.000000 2670.000000 --50.666667 -26.000000 785.000000 2670.000000 --50.500000 -26.000000 776.000000 2670.000000 --50.333333 -26.000000 812.000000 2670.000000 --50.166667 -26.000000 808.000000 2670.000000 --50.000000 -26.000000 789.000000 2670.000000 --49.833333 -26.000000 867.000000 2670.000000 --49.666667 -26.000000 814.000000 2670.000000 --49.500000 -26.000000 910.000000 2670.000000 --49.333333 -26.000000 895.000000 2670.000000 --49.166667 -26.000000 831.000000 2670.000000 --49.000000 -26.000000 1147.000000 2670.000000 --48.833333 -26.000000 20.000000 2670.000000 --48.666667 -26.000000 19.000000 2670.000000 --48.500000 -26.000000 -8.000000 1670.000000 --48.333333 -26.000000 -23.000000 1670.000000 --48.166667 -26.000000 -29.000000 1670.000000 --48.000000 -26.000000 -39.000000 1670.000000 --47.833333 -26.000000 -46.000000 1670.000000 --47.666667 -26.000000 -57.000000 1670.000000 --47.500000 -26.000000 -69.000000 1670.000000 --47.333333 -26.000000 -80.000000 1670.000000 --47.166667 -26.000000 -99.000000 1670.000000 --47.000000 -26.000000 -110.000000 1670.000000 --46.833333 -26.000000 -123.000000 1670.000000 --46.666667 -26.000000 -140.000000 1670.000000 --46.500000 -26.000000 -224.000000 1670.000000 --46.333333 -26.000000 -168.000000 1670.000000 --46.166667 -26.000000 -243.000000 1670.000000 --46.000000 -26.000000 -301.000000 1670.000000 --45.833333 -26.000000 -419.000000 1670.000000 --45.666667 -26.000000 -454.000000 1670.000000 --45.500000 -26.000000 -813.000000 1670.000000 --45.333333 -26.000000 -1368.000000 1670.000000 --45.166667 -26.000000 -1527.000000 1670.000000 --45.000000 -26.000000 -1805.000000 1670.000000 --44.833333 -26.000000 -2034.000000 1670.000000 --44.666667 -26.000000 -2124.000000 1670.000000 --44.500000 -26.000000 -2147.000000 1670.000000 --44.333333 -26.000000 -2112.000000 1670.000000 --44.166667 -26.000000 -2172.000000 1670.000000 --44.000000 -26.000000 -2219.000000 1670.000000 --43.833333 -26.000000 -2222.000000 1670.000000 --43.666667 -26.000000 -2206.000000 1670.000000 --43.500000 -26.000000 -2180.000000 1670.000000 --43.333333 -26.000000 -2184.000000 1670.000000 --43.166667 -26.000000 -2234.000000 1670.000000 --43.000000 -26.000000 -2291.000000 1670.000000 --42.833333 -26.000000 -2274.000000 1670.000000 --42.666667 -26.000000 -2313.000000 1670.000000 --42.500000 -26.000000 -2445.000000 1670.000000 --42.333333 -26.000000 -2350.000000 1670.000000 --42.166667 -26.000000 -2518.000000 1670.000000 --42.000000 -26.000000 -2492.000000 1670.000000 --41.833333 -26.000000 -2602.000000 1670.000000 --41.666667 -26.000000 -2600.000000 1670.000000 --41.500000 -26.000000 -2602.000000 1670.000000 --41.333333 -26.000000 -2874.000000 1670.000000 --41.166667 -26.000000 -2723.000000 1670.000000 --41.000000 -26.000000 -2913.000000 1670.000000 --40.833333 -26.000000 -2986.000000 1670.000000 --40.666667 -26.000000 -3083.000000 1670.000000 --40.500000 -26.000000 -3073.000000 1670.000000 --40.333333 -26.000000 -3425.000000 1670.000000 --40.166667 -26.000000 -3819.000000 1670.000000 --40.000000 -26.000000 -4129.000000 1670.000000 --65.000000 -26.166667 1144.000000 2670.000000 --64.833333 -26.166667 1099.000000 2670.000000 --64.666667 -26.166667 564.000000 2670.000000 --64.500000 -26.166667 438.000000 2670.000000 --64.333333 -26.166667 344.000000 2670.000000 --64.166667 -26.166667 309.000000 2670.000000 --64.000000 -26.166667 278.000000 2670.000000 --63.833333 -26.166667 249.000000 2670.000000 --63.666667 -26.166667 242.000000 2670.000000 --63.500000 -26.166667 235.000000 2670.000000 --63.333333 -26.166667 231.000000 2670.000000 --63.166667 -26.166667 225.000000 2670.000000 --63.000000 -26.166667 218.000000 2670.000000 --62.833333 -26.166667 210.000000 2670.000000 --62.666667 -26.166667 205.000000 2670.000000 --62.500000 -26.166667 192.000000 2670.000000 --62.333333 -26.166667 185.000000 2670.000000 --62.166667 -26.166667 177.000000 2670.000000 --62.000000 -26.166667 169.000000 2670.000000 --61.833333 -26.166667 162.000000 2670.000000 --61.666667 -26.166667 154.000000 2670.000000 --61.500000 -26.166667 147.000000 2670.000000 --61.333333 -26.166667 137.000000 2670.000000 --61.166667 -26.166667 133.000000 2670.000000 --61.000000 -26.166667 126.000000 2670.000000 --60.833333 -26.166667 119.000000 2670.000000 --60.666667 -26.166667 111.000000 2670.000000 --60.500000 -26.166667 104.000000 2670.000000 --60.333333 -26.166667 100.000000 2670.000000 --60.166667 -26.166667 99.000000 2670.000000 --60.000000 -26.166667 96.000000 2670.000000 --59.833333 -26.166667 90.000000 2670.000000 --59.666667 -26.166667 90.000000 2670.000000 --59.500000 -26.166667 87.000000 2670.000000 --59.333333 -26.166667 84.000000 2670.000000 --59.166667 -26.166667 85.000000 2670.000000 --59.000000 -26.166667 78.000000 2670.000000 --58.833333 -26.166667 76.000000 2670.000000 --58.666667 -26.166667 72.000000 2670.000000 --58.500000 -26.166667 69.000000 2670.000000 --58.333333 -26.166667 65.000000 2670.000000 --58.166667 -26.166667 60.000000 2670.000000 --58.000000 -26.166667 59.000000 2670.000000 --57.833333 -26.166667 61.000000 2670.000000 --57.666667 -26.166667 61.000000 2670.000000 --57.500000 -26.166667 59.000000 2670.000000 --57.333333 -26.166667 71.000000 2670.000000 --57.166667 -26.166667 144.000000 2670.000000 --57.000000 -26.166667 103.000000 2670.000000 --56.833333 -26.166667 103.000000 2670.000000 --56.666667 -26.166667 94.000000 2670.000000 --56.500000 -26.166667 105.000000 2670.000000 --56.333333 -26.166667 127.000000 2670.000000 --56.166667 -26.166667 136.000000 2670.000000 --56.000000 -26.166667 142.000000 2670.000000 --55.833333 -26.166667 166.000000 2670.000000 --55.666667 -26.166667 184.000000 2670.000000 --55.500000 -26.166667 186.000000 2670.000000 --55.333333 -26.166667 318.000000 2670.000000 --55.166667 -26.166667 319.000000 2670.000000 --55.000000 -26.166667 315.000000 2670.000000 --54.833333 -26.166667 268.000000 2670.000000 --54.666667 -26.166667 134.000000 2670.000000 --54.500000 -26.166667 203.000000 2670.000000 --54.333333 -26.166667 265.000000 2670.000000 --54.166667 -26.166667 403.000000 2670.000000 --54.000000 -26.166667 517.000000 2670.000000 --53.833333 -26.166667 509.000000 2670.000000 --53.666667 -26.166667 702.000000 2670.000000 --53.500000 -26.166667 596.000000 2670.000000 --53.333333 -26.166667 717.000000 2670.000000 --53.166667 -26.166667 688.000000 2670.000000 --53.000000 -26.166667 649.000000 2670.000000 --52.833333 -26.166667 649.000000 2670.000000 --52.666667 -26.166667 789.000000 2670.000000 --52.500000 -26.166667 624.000000 2670.000000 --52.333333 -26.166667 932.000000 2670.000000 --52.166667 -26.166667 1006.000000 2670.000000 --52.000000 -26.166667 1093.000000 2670.000000 --51.833333 -26.166667 850.000000 2670.000000 --51.666667 -26.166667 1110.000000 2670.000000 --51.500000 -26.166667 923.000000 2670.000000 --51.333333 -26.166667 881.000000 2670.000000 --51.166667 -26.166667 811.000000 2670.000000 --51.000000 -26.166667 839.000000 2670.000000 --50.833333 -26.166667 790.000000 2670.000000 --50.666667 -26.166667 768.000000 2670.000000 --50.500000 -26.166667 802.000000 2670.000000 --50.333333 -26.166667 773.000000 2670.000000 --50.166667 -26.166667 793.000000 2670.000000 --50.000000 -26.166667 862.000000 2670.000000 --49.833333 -26.166667 825.000000 2670.000000 --49.666667 -26.166667 825.000000 2670.000000 --49.500000 -26.166667 842.000000 2670.000000 --49.333333 -26.166667 846.000000 2670.000000 --49.166667 -26.166667 895.000000 2670.000000 --49.000000 -26.166667 280.000000 2670.000000 --48.833333 -26.166667 6.000000 2670.000000 --48.666667 -26.166667 92.000000 2670.000000 --48.500000 -26.166667 -1.000000 1670.000000 --48.333333 -26.166667 -22.000000 1670.000000 --48.166667 -26.166667 -35.000000 1670.000000 --48.000000 -26.166667 -48.000000 1670.000000 --47.833333 -26.166667 -57.000000 1670.000000 --47.666667 -26.166667 -74.000000 1670.000000 --47.500000 -26.166667 -71.000000 1670.000000 --47.333333 -26.166667 -92.000000 1670.000000 --47.166667 -26.166667 -109.000000 1670.000000 --47.000000 -26.166667 -121.000000 1670.000000 --46.833333 -26.166667 -146.000000 1670.000000 --46.666667 -26.166667 -126.000000 1670.000000 --46.500000 -26.166667 -172.000000 1670.000000 --46.333333 -26.166667 -246.000000 1670.000000 --46.166667 -26.166667 -388.000000 1670.000000 --46.000000 -26.166667 -455.000000 1670.000000 --45.833333 -26.166667 -506.000000 1670.000000 --45.666667 -26.166667 -659.000000 1670.000000 --45.500000 -26.166667 -1022.000000 1670.000000 --45.333333 -26.166667 -1712.000000 1670.000000 --45.166667 -26.166667 -1941.000000 1670.000000 --45.000000 -26.166667 -2031.000000 1670.000000 --44.833333 -26.166667 -2158.000000 1670.000000 --44.666667 -26.166667 -2220.000000 1670.000000 --44.500000 -26.166667 -2254.000000 1670.000000 --44.333333 -26.166667 -2302.000000 1670.000000 --44.166667 -26.166667 -2336.000000 1670.000000 --44.000000 -26.166667 -2300.000000 1670.000000 --43.833333 -26.166667 -2269.000000 1670.000000 --43.666667 -26.166667 -2247.000000 1670.000000 --43.500000 -26.166667 -2243.000000 1670.000000 --43.333333 -26.166667 -2254.000000 1670.000000 --43.166667 -26.166667 -2281.000000 1670.000000 --43.000000 -26.166667 -2339.000000 1670.000000 --42.833333 -26.166667 -2394.000000 1670.000000 --42.666667 -26.166667 -2471.000000 1670.000000 --42.500000 -26.166667 -2536.000000 1670.000000 --42.333333 -26.166667 -2487.000000 1670.000000 --42.166667 -26.166667 -2596.000000 1670.000000 --42.000000 -26.166667 -2599.000000 1670.000000 --41.833333 -26.166667 -2522.000000 1670.000000 --41.666667 -26.166667 -2519.000000 1670.000000 --41.500000 -26.166667 -2648.000000 1670.000000 --41.333333 -26.166667 -2649.000000 1670.000000 --41.166667 -26.166667 -2657.000000 1670.000000 --41.000000 -26.166667 -2757.000000 1670.000000 --40.833333 -26.166667 -2957.000000 1670.000000 --40.666667 -26.166667 -2942.000000 1670.000000 --40.500000 -26.166667 -3189.000000 1670.000000 --40.333333 -26.166667 -3450.000000 1670.000000 --40.166667 -26.166667 -3290.000000 1670.000000 --40.000000 -26.166667 -1716.000000 1670.000000 --65.000000 -26.333333 1494.000000 2670.000000 --64.833333 -26.333333 1113.000000 2670.000000 --64.666667 -26.333333 533.000000 2670.000000 --64.500000 -26.333333 410.000000 2670.000000 --64.333333 -26.333333 326.000000 2670.000000 --64.166667 -26.333333 282.000000 2670.000000 --64.000000 -26.333333 261.000000 2670.000000 --63.833333 -26.333333 236.000000 2670.000000 --63.666667 -26.333333 225.000000 2670.000000 --63.500000 -26.333333 222.000000 2670.000000 --63.333333 -26.333333 219.000000 2670.000000 --63.166667 -26.333333 215.000000 2670.000000 --63.000000 -26.333333 209.000000 2670.000000 --62.833333 -26.333333 203.000000 2670.000000 --62.666667 -26.333333 196.000000 2670.000000 --62.500000 -26.333333 190.000000 2670.000000 --62.333333 -26.333333 178.000000 2670.000000 --62.166667 -26.333333 172.000000 2670.000000 --62.000000 -26.333333 164.000000 2670.000000 --61.833333 -26.333333 156.000000 2670.000000 --61.666667 -26.333333 148.000000 2670.000000 --61.500000 -26.333333 142.000000 2670.000000 --61.333333 -26.333333 136.000000 2670.000000 --61.166667 -26.333333 129.000000 2670.000000 --61.000000 -26.333333 122.000000 2670.000000 --60.833333 -26.333333 116.000000 2670.000000 --60.666667 -26.333333 109.000000 2670.000000 --60.500000 -26.333333 104.000000 2670.000000 --60.333333 -26.333333 97.000000 2670.000000 --60.166667 -26.333333 93.000000 2670.000000 --60.000000 -26.333333 94.000000 2670.000000 --59.833333 -26.333333 95.000000 2670.000000 --59.666667 -26.333333 86.000000 2670.000000 --59.500000 -26.333333 83.000000 2670.000000 --59.333333 -26.333333 81.000000 2670.000000 --59.166667 -26.333333 77.000000 2670.000000 --59.000000 -26.333333 75.000000 2670.000000 --58.833333 -26.333333 70.000000 2670.000000 --58.666667 -26.333333 68.000000 2670.000000 --58.500000 -26.333333 66.000000 2670.000000 --58.333333 -26.333333 64.000000 2670.000000 --58.166667 -26.333333 57.000000 2670.000000 --58.000000 -26.333333 60.000000 2670.000000 --57.833333 -26.333333 59.000000 2670.000000 --57.666667 -26.333333 60.000000 2670.000000 --57.500000 -26.333333 62.000000 2670.000000 --57.333333 -26.333333 101.000000 2670.000000 --57.166667 -26.333333 164.000000 2670.000000 --57.000000 -26.333333 83.000000 2670.000000 --56.833333 -26.333333 89.000000 2670.000000 --56.666667 -26.333333 88.000000 2670.000000 --56.500000 -26.333333 115.000000 2670.000000 --56.333333 -26.333333 119.000000 2670.000000 --56.166667 -26.333333 129.000000 2670.000000 --56.000000 -26.333333 144.000000 2670.000000 --55.833333 -26.333333 146.000000 2670.000000 --55.666667 -26.333333 251.000000 2670.000000 --55.500000 -26.333333 443.000000 2670.000000 --55.333333 -26.333333 299.000000 2670.000000 --55.166667 -26.333333 314.000000 2670.000000 --55.000000 -26.333333 341.000000 2670.000000 --54.833333 -26.333333 289.000000 2670.000000 --54.666667 -26.333333 129.000000 2670.000000 --54.500000 -26.333333 233.000000 2670.000000 --54.333333 -26.333333 255.000000 2670.000000 --54.166667 -26.333333 551.000000 2670.000000 --54.000000 -26.333333 508.000000 2670.000000 --53.833333 -26.333333 615.000000 2670.000000 --53.666667 -26.333333 675.000000 2670.000000 --53.500000 -26.333333 767.000000 2670.000000 --53.333333 -26.333333 740.000000 2670.000000 --53.166667 -26.333333 872.000000 2670.000000 --53.000000 -26.333333 813.000000 2670.000000 --52.833333 -26.333333 826.000000 2670.000000 --52.666667 -26.333333 825.000000 2670.000000 --52.500000 -26.333333 875.000000 2670.000000 --52.333333 -26.333333 867.000000 2670.000000 --52.166667 -26.333333 931.000000 2670.000000 --52.000000 -26.333333 1080.000000 2670.000000 --51.833333 -26.333333 1226.000000 2670.000000 --51.666667 -26.333333 1132.000000 2670.000000 --51.500000 -26.333333 1102.000000 2670.000000 --51.333333 -26.333333 1038.000000 2670.000000 --51.166667 -26.333333 1018.000000 2670.000000 --51.000000 -26.333333 877.000000 2670.000000 --50.833333 -26.333333 786.000000 2670.000000 --50.666667 -26.333333 825.000000 2670.000000 --50.500000 -26.333333 804.000000 2670.000000 --50.333333 -26.333333 785.000000 2670.000000 --50.166667 -26.333333 829.000000 2670.000000 --50.000000 -26.333333 859.000000 2670.000000 --49.833333 -26.333333 920.000000 2670.000000 --49.666667 -26.333333 866.000000 2670.000000 --49.500000 -26.333333 905.000000 2670.000000 --49.333333 -26.333333 617.000000 2670.000000 --49.166667 -26.333333 1022.000000 2670.000000 --49.000000 -26.333333 225.000000 2670.000000 --48.833333 -26.333333 16.000000 2670.000000 --48.666667 -26.333333 20.000000 2670.000000 --48.500000 -26.333333 -9.000000 1670.000000 --48.333333 -26.333333 -28.000000 1670.000000 --48.166667 -26.333333 -41.000000 1670.000000 --48.000000 -26.333333 -53.000000 1670.000000 --47.833333 -26.333333 -60.000000 1670.000000 --47.666667 -26.333333 -71.000000 1670.000000 --47.500000 -26.333333 -87.000000 1670.000000 --47.333333 -26.333333 -98.000000 1670.000000 --47.166667 -26.333333 -119.000000 1670.000000 --47.000000 -26.333333 -153.000000 1670.000000 --46.833333 -26.333333 -139.000000 1670.000000 --46.666667 -26.333333 -157.000000 1670.000000 --46.500000 -26.333333 -266.000000 1670.000000 --46.333333 -26.333333 -327.000000 1670.000000 --46.166667 -26.333333 -460.000000 1670.000000 --46.000000 -26.333333 -532.000000 1670.000000 --45.833333 -26.333333 -620.000000 1670.000000 --45.666667 -26.333333 -888.000000 1670.000000 --45.500000 -26.333333 -1460.000000 1670.000000 --45.333333 -26.333333 -2022.000000 1670.000000 --45.166667 -26.333333 -2006.000000 1670.000000 --45.000000 -26.333333 -2206.000000 1670.000000 --44.833333 -26.333333 -2273.000000 1670.000000 --44.666667 -26.333333 -2343.000000 1670.000000 --44.500000 -26.333333 -2353.000000 1670.000000 --44.333333 -26.333333 -2362.000000 1670.000000 --44.166667 -26.333333 -2400.000000 1670.000000 --44.000000 -26.333333 -2396.000000 1670.000000 --43.833333 -26.333333 -2358.000000 1670.000000 --43.666667 -26.333333 -2309.000000 1670.000000 --43.500000 -26.333333 -2290.000000 1670.000000 --43.333333 -26.333333 -2284.000000 1670.000000 --43.166667 -26.333333 -2348.000000 1670.000000 --43.000000 -26.333333 -2367.000000 1670.000000 --42.833333 -26.333333 -2454.000000 1670.000000 --42.666667 -26.333333 -2451.000000 1670.000000 --42.500000 -26.333333 -2437.000000 1670.000000 --42.333333 -26.333333 -2475.000000 1670.000000 --42.166667 -26.333333 -2470.000000 1670.000000 --42.000000 -26.333333 -2459.000000 1670.000000 --41.833333 -26.333333 -2540.000000 1670.000000 --41.666667 -26.333333 -2480.000000 1670.000000 --41.500000 -26.333333 -2596.000000 1670.000000 --41.333333 -26.333333 -2554.000000 1670.000000 --41.166667 -26.333333 -2640.000000 1670.000000 --41.000000 -26.333333 -2787.000000 1670.000000 --40.833333 -26.333333 -2847.000000 1670.000000 --40.666667 -26.333333 -2977.000000 1670.000000 --40.500000 -26.333333 -3282.000000 1670.000000 --40.333333 -26.333333 -3517.000000 1670.000000 --40.166667 -26.333333 -3576.000000 1670.000000 --40.000000 -26.333333 -2110.000000 1670.000000 --65.000000 -26.500000 969.000000 2670.000000 --64.833333 -26.500000 665.000000 2670.000000 --64.666667 -26.500000 452.000000 2670.000000 --64.500000 -26.500000 365.000000 2670.000000 --64.333333 -26.500000 296.000000 2670.000000 --64.166667 -26.500000 257.000000 2670.000000 --64.000000 -26.500000 245.000000 2670.000000 --63.833333 -26.500000 225.000000 2670.000000 --63.666667 -26.500000 213.000000 2670.000000 --63.500000 -26.500000 211.000000 2670.000000 --63.333333 -26.500000 209.000000 2670.000000 --63.166667 -26.500000 204.000000 2670.000000 --63.000000 -26.500000 199.000000 2670.000000 --62.833333 -26.500000 196.000000 2670.000000 --62.666667 -26.500000 192.000000 2670.000000 --62.500000 -26.500000 185.000000 2670.000000 --62.333333 -26.500000 175.000000 2670.000000 --62.166667 -26.500000 170.000000 2670.000000 --62.000000 -26.500000 162.000000 2670.000000 --61.833333 -26.500000 190.000000 2670.000000 --61.666667 -26.500000 160.000000 2670.000000 --61.500000 -26.500000 137.000000 2670.000000 --61.333333 -26.500000 131.000000 2670.000000 --61.166667 -26.500000 124.000000 2670.000000 --61.000000 -26.500000 121.000000 2670.000000 --60.833333 -26.500000 110.000000 2670.000000 --60.666667 -26.500000 106.000000 2670.000000 --60.500000 -26.500000 103.000000 2670.000000 --60.333333 -26.500000 97.000000 2670.000000 --60.166667 -26.500000 92.000000 2670.000000 --60.000000 -26.500000 90.000000 2670.000000 --59.833333 -26.500000 87.000000 2670.000000 --59.666667 -26.500000 83.000000 2670.000000 --59.500000 -26.500000 79.000000 2670.000000 --59.333333 -26.500000 79.000000 2670.000000 --59.166667 -26.500000 75.000000 2670.000000 --59.000000 -26.500000 71.000000 2670.000000 --58.833333 -26.500000 69.000000 2670.000000 --58.666667 -26.500000 67.000000 2670.000000 --58.500000 -26.500000 63.000000 2670.000000 --58.333333 -26.500000 59.000000 2670.000000 --58.166667 -26.500000 61.000000 2670.000000 --58.000000 -26.500000 55.000000 2670.000000 --57.833333 -26.500000 60.000000 2670.000000 --57.666667 -26.500000 61.000000 2670.000000 --57.500000 -26.500000 62.000000 2670.000000 --57.333333 -26.500000 65.000000 2670.000000 --57.166667 -26.500000 69.000000 2670.000000 --57.000000 -26.500000 95.000000 2670.000000 --56.833333 -26.500000 79.000000 2670.000000 --56.666667 -26.500000 84.000000 2670.000000 --56.500000 -26.500000 89.000000 2670.000000 --56.333333 -26.500000 86.000000 2670.000000 --56.166667 -26.500000 153.000000 2670.000000 --56.000000 -26.500000 112.000000 2670.000000 --55.833333 -26.500000 135.000000 2670.000000 --55.666667 -26.500000 288.000000 2670.000000 --55.500000 -26.500000 378.000000 2670.000000 --55.333333 -26.500000 284.000000 2670.000000 --55.166667 -26.500000 276.000000 2670.000000 --55.000000 -26.500000 285.000000 2670.000000 --54.833333 -26.500000 221.000000 2670.000000 --54.666667 -26.500000 182.000000 2670.000000 --54.500000 -26.500000 191.000000 2670.000000 --54.333333 -26.500000 251.000000 2670.000000 --54.166667 -26.500000 522.000000 2670.000000 --54.000000 -26.500000 557.000000 2670.000000 --53.833333 -26.500000 549.000000 2670.000000 --53.666667 -26.500000 495.000000 2670.000000 --53.500000 -26.500000 695.000000 2670.000000 --53.333333 -26.500000 612.000000 2670.000000 --53.166667 -26.500000 712.000000 2670.000000 --53.000000 -26.500000 627.000000 2670.000000 --52.833333 -26.500000 774.000000 2670.000000 --52.666667 -26.500000 737.000000 2670.000000 --52.500000 -26.500000 787.000000 2670.000000 --52.333333 -26.500000 855.000000 2670.000000 --52.166667 -26.500000 921.000000 2670.000000 --52.000000 -26.500000 1104.000000 2670.000000 --51.833333 -26.500000 1177.000000 2670.000000 --51.666667 -26.500000 1213.000000 2670.000000 --51.500000 -26.500000 1111.000000 2670.000000 --51.333333 -26.500000 1054.000000 2670.000000 --51.166667 -26.500000 1064.000000 2670.000000 --51.000000 -26.500000 1082.000000 2670.000000 --50.833333 -26.500000 930.000000 2670.000000 --50.666667 -26.500000 897.000000 2670.000000 --50.500000 -26.500000 996.000000 2670.000000 --50.333333 -26.500000 831.000000 2670.000000 --50.166667 -26.500000 556.000000 2670.000000 --50.000000 -26.500000 584.000000 2670.000000 --49.833333 -26.500000 922.000000 2670.000000 --49.666667 -26.500000 971.000000 2670.000000 --49.500000 -26.500000 928.000000 2670.000000 --49.333333 -26.500000 598.000000 2670.000000 --49.166667 -26.500000 112.000000 2670.000000 --49.000000 -26.500000 96.000000 2670.000000 --48.833333 -26.500000 14.000000 2670.000000 --48.666667 -26.500000 15.000000 2670.000000 --48.500000 -26.500000 -21.000000 1670.000000 --48.333333 -26.500000 -35.000000 1670.000000 --48.166667 -26.500000 -45.000000 1670.000000 --48.000000 -26.500000 -51.000000 1670.000000 --47.833333 -26.500000 -57.000000 1670.000000 --47.666667 -26.500000 -73.000000 1670.000000 --47.500000 -26.500000 -90.000000 1670.000000 --47.333333 -26.500000 -109.000000 1670.000000 --47.166667 -26.500000 -120.000000 1670.000000 --47.000000 -26.500000 -145.000000 1670.000000 --46.833333 -26.500000 -152.000000 1670.000000 --46.666667 -26.500000 -215.000000 1670.000000 --46.500000 -26.500000 -349.000000 1670.000000 --46.333333 -26.500000 -411.000000 1670.000000 --46.166667 -26.500000 -522.000000 1670.000000 --46.000000 -26.500000 -610.000000 1670.000000 --45.833333 -26.500000 -859.000000 1670.000000 --45.666667 -26.500000 -1375.000000 1670.000000 --45.500000 -26.500000 -1845.000000 1670.000000 --45.333333 -26.500000 -2102.000000 1670.000000 --45.166667 -26.500000 -2148.000000 1670.000000 --45.000000 -26.500000 -2381.000000 1670.000000 --44.833333 -26.500000 -2382.000000 1670.000000 --44.666667 -26.500000 -2241.000000 1670.000000 --44.500000 -26.500000 -2477.000000 1670.000000 --44.333333 -26.500000 -2527.000000 1670.000000 --44.166667 -26.500000 -2521.000000 1670.000000 --44.000000 -26.500000 -2547.000000 1670.000000 --43.833333 -26.500000 -2466.000000 1670.000000 --43.666667 -26.500000 -2377.000000 1670.000000 --43.500000 -26.500000 -2422.000000 1670.000000 --43.333333 -26.500000 -2338.000000 1670.000000 --43.166667 -26.500000 -2366.000000 1670.000000 --43.000000 -26.500000 -2402.000000 1670.000000 --42.833333 -26.500000 -2391.000000 1670.000000 --42.666667 -26.500000 -2392.000000 1670.000000 --42.500000 -26.500000 -2415.000000 1670.000000 --42.333333 -26.500000 -2387.000000 1670.000000 --42.166667 -26.500000 -2367.000000 1670.000000 --42.000000 -26.500000 -2475.000000 1670.000000 --41.833333 -26.500000 -2497.000000 1670.000000 --41.666667 -26.500000 -2406.000000 1670.000000 --41.500000 -26.500000 -2457.000000 1670.000000 --41.333333 -26.500000 -2561.000000 1670.000000 --41.166667 -26.500000 -2622.000000 1670.000000 --41.000000 -26.500000 -2571.000000 1670.000000 --40.833333 -26.500000 -2682.000000 1670.000000 --40.666667 -26.500000 -2834.000000 1670.000000 --40.500000 -26.500000 -3297.000000 1670.000000 --40.333333 -26.500000 -3572.000000 1670.000000 --40.166667 -26.500000 -3651.000000 1670.000000 --40.000000 -26.500000 -3651.000000 1670.000000 --65.000000 -26.666667 808.000000 2670.000000 --64.833333 -26.666667 461.000000 2670.000000 --64.666667 -26.666667 389.000000 2670.000000 --64.500000 -26.666667 318.000000 2670.000000 --64.333333 -26.666667 258.000000 2670.000000 --64.166667 -26.666667 231.000000 2670.000000 --64.000000 -26.666667 224.000000 2670.000000 --63.833333 -26.666667 214.000000 2670.000000 --63.666667 -26.666667 204.000000 2670.000000 --63.500000 -26.666667 201.000000 2670.000000 --63.333333 -26.666667 197.000000 2670.000000 --63.166667 -26.666667 194.000000 2670.000000 --63.000000 -26.666667 193.000000 2670.000000 --62.833333 -26.666667 187.000000 2670.000000 --62.666667 -26.666667 187.000000 2670.000000 --62.500000 -26.666667 181.000000 2670.000000 --62.333333 -26.666667 173.000000 2670.000000 --62.166667 -26.666667 166.000000 2670.000000 --62.000000 -26.666667 160.000000 2670.000000 --61.833333 -26.666667 196.000000 2670.000000 --61.666667 -26.666667 153.000000 2670.000000 --61.500000 -26.666667 139.000000 2670.000000 --61.333333 -26.666667 126.000000 2670.000000 --61.166667 -26.666667 118.000000 2670.000000 --61.000000 -26.666667 114.000000 2670.000000 --60.833333 -26.666667 108.000000 2670.000000 --60.666667 -26.666667 102.000000 2670.000000 --60.500000 -26.666667 100.000000 2670.000000 --60.333333 -26.666667 94.000000 2670.000000 --60.166667 -26.666667 89.000000 2670.000000 --60.000000 -26.666667 85.000000 2670.000000 --59.833333 -26.666667 85.000000 2670.000000 --59.666667 -26.666667 82.000000 2670.000000 --59.500000 -26.666667 80.000000 2670.000000 --59.333333 -26.666667 78.000000 2670.000000 --59.166667 -26.666667 75.000000 2670.000000 --59.000000 -26.666667 68.000000 2670.000000 --58.833333 -26.666667 69.000000 2670.000000 --58.666667 -26.666667 63.000000 2670.000000 --58.500000 -26.666667 58.000000 2670.000000 --58.333333 -26.666667 58.000000 2670.000000 --58.166667 -26.666667 59.000000 2670.000000 --58.000000 -26.666667 59.000000 2670.000000 --57.833333 -26.666667 63.000000 2670.000000 --57.666667 -26.666667 65.000000 2670.000000 --57.500000 -26.666667 67.000000 2670.000000 --57.333333 -26.666667 70.000000 2670.000000 --57.166667 -26.666667 115.000000 2670.000000 --57.000000 -26.666667 102.000000 2670.000000 --56.833333 -26.666667 77.000000 2670.000000 --56.666667 -26.666667 77.000000 2670.000000 --56.500000 -26.666667 84.000000 2670.000000 --56.333333 -26.666667 89.000000 2670.000000 --56.166667 -26.666667 101.000000 2670.000000 --56.000000 -26.666667 117.000000 2670.000000 --55.833333 -26.666667 206.000000 2670.000000 --55.666667 -26.666667 302.000000 2670.000000 --55.500000 -26.666667 297.000000 2670.000000 --55.333333 -26.666667 179.000000 2670.000000 --55.166667 -26.666667 261.000000 2670.000000 --55.000000 -26.666667 147.000000 2670.000000 --54.833333 -26.666667 148.000000 2670.000000 --54.666667 -26.666667 213.000000 2670.000000 --54.500000 -26.666667 521.000000 2670.000000 --54.333333 -26.666667 351.000000 2670.000000 --54.166667 -26.666667 541.000000 2670.000000 --54.000000 -26.666667 540.000000 2670.000000 --53.833333 -26.666667 546.000000 2670.000000 --53.666667 -26.666667 457.000000 2670.000000 --53.500000 -26.666667 592.000000 2670.000000 --53.333333 -26.666667 467.000000 2670.000000 --53.166667 -26.666667 584.000000 2670.000000 --53.000000 -26.666667 576.000000 2670.000000 --52.833333 -26.666667 618.000000 2670.000000 --52.666667 -26.666667 628.000000 2670.000000 --52.500000 -26.666667 639.000000 2670.000000 --52.333333 -26.666667 841.000000 2670.000000 --52.166667 -26.666667 992.000000 2670.000000 --52.000000 -26.666667 936.000000 2670.000000 --51.833333 -26.666667 1125.000000 2670.000000 --51.666667 -26.666667 1201.000000 2670.000000 --51.500000 -26.666667 1223.000000 2670.000000 --51.333333 -26.666667 1150.000000 2670.000000 --51.166667 -26.666667 1228.000000 2670.000000 --51.000000 -26.666667 1154.000000 2670.000000 --50.833333 -26.666667 1120.000000 2670.000000 --50.666667 -26.666667 1003.000000 2670.000000 --50.500000 -26.666667 1070.000000 2670.000000 --50.333333 -26.666667 830.000000 2670.000000 --50.166667 -26.666667 610.000000 2670.000000 --50.000000 -26.666667 721.000000 2670.000000 --49.833333 -26.666667 508.000000 2670.000000 --49.666667 -26.666667 994.000000 2670.000000 --49.500000 -26.666667 834.000000 2670.000000 --49.333333 -26.666667 393.000000 2670.000000 --49.166667 -26.666667 215.000000 2670.000000 --49.000000 -26.666667 190.000000 2670.000000 --48.833333 -26.666667 166.000000 2670.000000 --48.666667 -26.666667 -1.000000 1670.000000 --48.500000 -26.666667 -22.000000 1670.000000 --48.333333 -26.666667 -40.000000 1670.000000 --48.166667 -26.666667 -47.000000 1670.000000 --48.000000 -26.666667 -45.000000 1670.000000 --47.833333 -26.666667 -63.000000 1670.000000 --47.666667 -26.666667 -89.000000 1670.000000 --47.500000 -26.666667 -104.000000 1670.000000 --47.333333 -26.666667 -115.000000 1670.000000 --47.166667 -26.666667 -117.000000 1670.000000 --47.000000 -26.666667 -147.000000 1670.000000 --46.833333 -26.666667 -164.000000 1670.000000 --46.666667 -26.666667 -225.000000 1670.000000 --46.500000 -26.666667 -366.000000 1670.000000 --46.333333 -26.666667 -481.000000 1670.000000 --46.166667 -26.666667 -570.000000 1670.000000 --46.000000 -26.666667 -727.000000 1670.000000 --45.833333 -26.666667 -1204.000000 1670.000000 --45.666667 -26.666667 -1671.000000 1670.000000 --45.500000 -26.666667 -2087.000000 1670.000000 --45.333333 -26.666667 -2188.000000 1670.000000 --45.166667 -26.666667 -2263.000000 1670.000000 --45.000000 -26.666667 -2438.000000 1670.000000 --44.833333 -26.666667 -2557.000000 1670.000000 --44.666667 -26.666667 -2579.000000 1670.000000 --44.500000 -26.666667 -2530.000000 1670.000000 --44.333333 -26.666667 -2596.000000 1670.000000 --44.166667 -26.666667 -2587.000000 1670.000000 --44.000000 -26.666667 -2604.000000 1670.000000 --43.833333 -26.666667 -2547.000000 1670.000000 --43.666667 -26.666667 -2477.000000 1670.000000 --43.500000 -26.666667 -2442.000000 1670.000000 --43.333333 -26.666667 -2448.000000 1670.000000 --43.166667 -26.666667 -2408.000000 1670.000000 --43.000000 -26.666667 -2373.000000 1670.000000 --42.833333 -26.666667 -2373.000000 1670.000000 --42.666667 -26.666667 -2402.000000 1670.000000 --42.500000 -26.666667 -2349.000000 1670.000000 --42.333333 -26.666667 -2373.000000 1670.000000 --42.166667 -26.666667 -2380.000000 1670.000000 --42.000000 -26.666667 -2381.000000 1670.000000 --41.833333 -26.666667 -2399.000000 1670.000000 --41.666667 -26.666667 -2579.000000 1670.000000 --41.500000 -26.666667 -2438.000000 1670.000000 --41.333333 -26.666667 -2576.000000 1670.000000 --41.166667 -26.666667 -2557.000000 1670.000000 --41.000000 -26.666667 -2577.000000 1670.000000 --40.833333 -26.666667 -2839.000000 1670.000000 --40.666667 -26.666667 -3093.000000 1670.000000 --40.500000 -26.666667 -3352.000000 1670.000000 --40.333333 -26.666667 -3646.000000 1670.000000 --40.166667 -26.666667 -3268.000000 1670.000000 --40.000000 -26.666667 -2654.000000 1670.000000 --65.000000 -26.833333 447.000000 2670.000000 --64.833333 -26.833333 380.000000 2670.000000 --64.666667 -26.833333 324.000000 2670.000000 --64.500000 -26.833333 274.000000 2670.000000 --64.333333 -26.833333 231.000000 2670.000000 --64.166667 -26.833333 206.000000 2670.000000 --64.000000 -26.833333 205.000000 2670.000000 --63.833333 -26.833333 193.000000 2670.000000 --63.666667 -26.833333 192.000000 2670.000000 --63.500000 -26.833333 191.000000 2670.000000 --63.333333 -26.833333 189.000000 2670.000000 --63.166667 -26.833333 186.000000 2670.000000 --63.000000 -26.833333 183.000000 2670.000000 --62.833333 -26.833333 180.000000 2670.000000 --62.666667 -26.833333 174.000000 2670.000000 --62.500000 -26.833333 174.000000 2670.000000 --62.333333 -26.833333 168.000000 2670.000000 --62.166667 -26.833333 164.000000 2670.000000 --62.000000 -26.833333 156.000000 2670.000000 --61.833333 -26.833333 173.000000 2670.000000 --61.666667 -26.833333 145.000000 2670.000000 --61.500000 -26.833333 115.000000 2670.000000 --61.333333 -26.833333 117.000000 2670.000000 --61.166667 -26.833333 113.000000 2670.000000 --61.000000 -26.833333 109.000000 2670.000000 --60.833333 -26.833333 104.000000 2670.000000 --60.666667 -26.833333 101.000000 2670.000000 --60.500000 -26.833333 96.000000 2670.000000 --60.333333 -26.833333 90.000000 2670.000000 --60.166667 -26.833333 85.000000 2670.000000 --60.000000 -26.833333 81.000000 2670.000000 --59.833333 -26.833333 79.000000 2670.000000 --59.666667 -26.833333 75.000000 2670.000000 --59.500000 -26.833333 76.000000 2670.000000 --59.333333 -26.833333 74.000000 2670.000000 --59.166667 -26.833333 72.000000 2670.000000 --59.000000 -26.833333 64.000000 2670.000000 --58.833333 -26.833333 62.000000 2670.000000 --58.666667 -26.833333 58.000000 2670.000000 --58.500000 -26.833333 58.000000 2670.000000 --58.333333 -26.833333 51.000000 2670.000000 --58.166667 -26.833333 59.000000 2670.000000 --58.000000 -26.833333 61.000000 2670.000000 --57.833333 -26.833333 64.000000 2670.000000 --57.666667 -26.833333 66.000000 2670.000000 --57.500000 -26.833333 69.000000 2670.000000 --57.333333 -26.833333 74.000000 2670.000000 --57.166667 -26.833333 109.000000 2670.000000 --57.000000 -26.833333 165.000000 2670.000000 --56.833333 -26.833333 143.000000 2670.000000 --56.666667 -26.833333 86.000000 2670.000000 --56.500000 -26.833333 88.000000 2670.000000 --56.333333 -26.833333 91.000000 2670.000000 --56.166667 -26.833333 145.000000 2670.000000 --56.000000 -26.833333 175.000000 2670.000000 --55.833333 -26.833333 255.000000 2670.000000 --55.666667 -26.833333 243.000000 2670.000000 --55.500000 -26.833333 201.000000 2670.000000 --55.333333 -26.833333 257.000000 2670.000000 --55.166667 -26.833333 178.000000 2670.000000 --55.000000 -26.833333 221.000000 2670.000000 --54.833333 -26.833333 245.000000 2670.000000 --54.666667 -26.833333 215.000000 2670.000000 --54.500000 -26.833333 364.000000 2670.000000 --54.333333 -26.833333 489.000000 2670.000000 --54.166667 -26.833333 491.000000 2670.000000 --54.000000 -26.833333 388.000000 2670.000000 --53.833333 -26.833333 435.000000 2670.000000 --53.666667 -26.833333 354.000000 2670.000000 --53.500000 -26.833333 561.000000 2670.000000 --53.333333 -26.833333 411.000000 2670.000000 --53.166667 -26.833333 578.000000 2670.000000 --53.000000 -26.833333 497.000000 2670.000000 --52.833333 -26.833333 430.000000 2670.000000 --52.666667 -26.833333 513.000000 2670.000000 --52.500000 -26.833333 646.000000 2670.000000 --52.333333 -26.833333 841.000000 2670.000000 --52.166667 -26.833333 818.000000 2670.000000 --52.000000 -26.833333 1050.000000 2670.000000 --51.833333 -26.833333 1041.000000 2670.000000 --51.666667 -26.833333 1143.000000 2670.000000 --51.500000 -26.833333 1270.000000 2670.000000 --51.333333 -26.833333 1067.000000 2670.000000 --51.166667 -26.833333 1042.000000 2670.000000 --51.000000 -26.833333 918.000000 2670.000000 --50.833333 -26.833333 1137.000000 2670.000000 --50.666667 -26.833333 1181.000000 2670.000000 --50.500000 -26.833333 1266.000000 2670.000000 --50.333333 -26.833333 1249.000000 2670.000000 --50.166667 -26.833333 721.000000 2670.000000 --50.000000 -26.833333 663.000000 2670.000000 --49.833333 -26.833333 679.000000 2670.000000 --49.666667 -26.833333 671.000000 2670.000000 --49.500000 -26.833333 614.000000 2670.000000 --49.333333 -26.833333 119.000000 2670.000000 --49.166667 -26.833333 59.000000 2670.000000 --49.000000 -26.833333 218.000000 2670.000000 --48.833333 -26.833333 66.000000 2670.000000 --48.666667 -26.833333 93.000000 2670.000000 --48.500000 -26.833333 -22.000000 1670.000000 --48.333333 -26.833333 -44.000000 1670.000000 --48.166667 -26.833333 -47.000000 1670.000000 --48.000000 -26.833333 -55.000000 1670.000000 --47.833333 -26.833333 -60.000000 1670.000000 --47.666667 -26.833333 -94.000000 1670.000000 --47.500000 -26.833333 -110.000000 1670.000000 --47.333333 -26.833333 -115.000000 1670.000000 --47.166667 -26.833333 -147.000000 1670.000000 --47.000000 -26.833333 -182.000000 1670.000000 --46.833333 -26.833333 -191.000000 1670.000000 --46.666667 -26.833333 -225.000000 1670.000000 --46.500000 -26.833333 -341.000000 1670.000000 --46.333333 -26.833333 -482.000000 1670.000000 --46.166667 -26.833333 -720.000000 1670.000000 --46.000000 -26.833333 -1064.000000 1670.000000 --45.833333 -26.833333 -1456.000000 1670.000000 --45.666667 -26.833333 -2009.000000 1670.000000 --45.500000 -26.833333 -2113.000000 1670.000000 --45.333333 -26.833333 -2209.000000 1670.000000 --45.166667 -26.833333 -2400.000000 1670.000000 --45.000000 -26.833333 -2262.000000 1670.000000 --44.833333 -26.833333 -2142.000000 1670.000000 --44.666667 -26.833333 -2663.000000 1670.000000 --44.500000 -26.833333 -2627.000000 1670.000000 --44.333333 -26.833333 -2628.000000 1670.000000 --44.166667 -26.833333 -2587.000000 1670.000000 --44.000000 -26.833333 -2599.000000 1670.000000 --43.833333 -26.833333 -2596.000000 1670.000000 --43.666667 -26.833333 -2519.000000 1670.000000 --43.500000 -26.833333 -2470.000000 1670.000000 --43.333333 -26.833333 -2466.000000 1670.000000 --43.166667 -26.833333 -2483.000000 1670.000000 --43.000000 -26.833333 -2356.000000 1670.000000 --42.833333 -26.833333 -2296.000000 1670.000000 --42.666667 -26.833333 -2336.000000 1670.000000 --42.500000 -26.833333 -2379.000000 1670.000000 --42.333333 -26.833333 -2470.000000 1670.000000 --42.166667 -26.833333 -2488.000000 1670.000000 --42.000000 -26.833333 -2451.000000 1670.000000 --41.833333 -26.833333 -2466.000000 1670.000000 --41.666667 -26.833333 -2540.000000 1670.000000 --41.500000 -26.833333 -2621.000000 1670.000000 --41.333333 -26.833333 -2648.000000 1670.000000 --41.166667 -26.833333 -2833.000000 1670.000000 --41.000000 -26.833333 -2908.000000 1670.000000 --40.833333 -26.833333 -3067.000000 1670.000000 --40.666667 -26.833333 -3283.000000 1670.000000 --40.500000 -26.833333 -3459.000000 1670.000000 --40.333333 -26.833333 -3641.000000 1670.000000 --40.166667 -26.833333 -3870.000000 1670.000000 --40.000000 -26.833333 -3454.000000 1670.000000 --65.000000 -27.000000 375.000000 2670.000000 --64.833333 -27.000000 433.000000 2670.000000 --64.666667 -27.000000 320.000000 2670.000000 --64.500000 -27.000000 255.000000 2670.000000 --64.333333 -27.000000 244.000000 2670.000000 --64.166667 -27.000000 191.000000 2670.000000 --64.000000 -27.000000 186.000000 2670.000000 --63.833333 -27.000000 180.000000 2670.000000 --63.666667 -27.000000 179.000000 2670.000000 --63.500000 -27.000000 180.000000 2670.000000 --63.333333 -27.000000 177.000000 2670.000000 --63.166667 -27.000000 177.000000 2670.000000 --63.000000 -27.000000 173.000000 2670.000000 --62.833333 -27.000000 170.000000 2670.000000 --62.666667 -27.000000 167.000000 2670.000000 --62.500000 -27.000000 163.000000 2670.000000 --62.333333 -27.000000 164.000000 2670.000000 --62.166667 -27.000000 165.000000 2670.000000 --62.000000 -27.000000 154.000000 2670.000000 --61.833333 -27.000000 194.000000 2670.000000 --61.666667 -27.000000 140.000000 2670.000000 --61.500000 -27.000000 107.000000 2670.000000 --61.333333 -27.000000 110.000000 2670.000000 --61.166667 -27.000000 106.000000 2670.000000 --61.000000 -27.000000 104.000000 2670.000000 --60.833333 -27.000000 100.000000 2670.000000 --60.666667 -27.000000 97.000000 2670.000000 --60.500000 -27.000000 91.000000 2670.000000 --60.333333 -27.000000 87.000000 2670.000000 --60.166667 -27.000000 82.000000 2670.000000 --60.000000 -27.000000 81.000000 2670.000000 --59.833333 -27.000000 75.000000 2670.000000 --59.666667 -27.000000 72.000000 2670.000000 --59.500000 -27.000000 72.000000 2670.000000 --59.333333 -27.000000 69.000000 2670.000000 --59.166667 -27.000000 66.000000 2670.000000 --59.000000 -27.000000 69.000000 2670.000000 --58.833333 -27.000000 61.000000 2670.000000 --58.666667 -27.000000 58.000000 2670.000000 --58.500000 -27.000000 54.000000 2670.000000 --58.333333 -27.000000 59.000000 2670.000000 --58.166667 -27.000000 60.000000 2670.000000 --58.000000 -27.000000 62.000000 2670.000000 --57.833333 -27.000000 66.000000 2670.000000 --57.666667 -27.000000 68.000000 2670.000000 --57.500000 -27.000000 70.000000 2670.000000 --57.333333 -27.000000 71.000000 2670.000000 --57.166667 -27.000000 71.000000 2670.000000 --57.000000 -27.000000 101.000000 2670.000000 --56.833333 -27.000000 155.000000 2670.000000 --56.666667 -27.000000 114.000000 2670.000000 --56.500000 -27.000000 86.000000 2670.000000 --56.333333 -27.000000 88.000000 2670.000000 --56.166667 -27.000000 181.000000 2670.000000 --56.000000 -27.000000 130.000000 2670.000000 --55.833333 -27.000000 256.000000 2670.000000 --55.666667 -27.000000 170.000000 2670.000000 --55.500000 -27.000000 204.000000 2670.000000 --55.333333 -27.000000 196.000000 2670.000000 --55.166667 -27.000000 174.000000 2670.000000 --55.000000 -27.000000 208.000000 2670.000000 --54.833333 -27.000000 488.000000 2670.000000 --54.666667 -27.000000 476.000000 2670.000000 --54.500000 -27.000000 527.000000 2670.000000 --54.333333 -27.000000 340.000000 2670.000000 --54.166667 -27.000000 487.000000 2670.000000 --54.000000 -27.000000 281.000000 2670.000000 --53.833333 -27.000000 253.000000 2670.000000 --53.666667 -27.000000 356.000000 2670.000000 --53.500000 -27.000000 470.000000 2670.000000 --53.333333 -27.000000 298.000000 2670.000000 --53.166667 -27.000000 438.000000 2670.000000 --53.000000 -27.000000 362.000000 2670.000000 --52.833333 -27.000000 498.000000 2670.000000 --52.666667 -27.000000 702.000000 2670.000000 --52.500000 -27.000000 762.000000 2670.000000 --52.333333 -27.000000 726.000000 2670.000000 --52.166667 -27.000000 885.000000 2670.000000 --52.000000 -27.000000 950.000000 2670.000000 --51.833333 -27.000000 943.000000 2670.000000 --51.666667 -27.000000 949.000000 2670.000000 --51.500000 -27.000000 857.000000 2670.000000 --51.333333 -27.000000 756.000000 2670.000000 --51.166667 -27.000000 749.000000 2670.000000 --51.000000 -27.000000 959.000000 2670.000000 --50.833333 -27.000000 964.000000 2670.000000 --50.666667 -27.000000 935.000000 2670.000000 --50.500000 -27.000000 1059.000000 2670.000000 --50.333333 -27.000000 1137.000000 2670.000000 --50.166667 -27.000000 563.000000 2670.000000 --50.000000 -27.000000 625.000000 2670.000000 --49.833333 -27.000000 577.000000 2670.000000 --49.666667 -27.000000 360.000000 2670.000000 --49.500000 -27.000000 353.000000 2670.000000 --49.333333 -27.000000 226.000000 2670.000000 --49.166667 -27.000000 483.000000 2670.000000 --49.000000 -27.000000 342.000000 2670.000000 --48.833333 -27.000000 17.000000 2670.000000 --48.666667 -27.000000 35.000000 2670.000000 --48.500000 -27.000000 -24.000000 1670.000000 --48.333333 -27.000000 -42.000000 1670.000000 --48.166667 -27.000000 -54.000000 1670.000000 --48.000000 -27.000000 -67.000000 1670.000000 --47.833333 -27.000000 -98.000000 1670.000000 --47.666667 -27.000000 -105.000000 1670.000000 --47.500000 -27.000000 -152.000000 1670.000000 --47.333333 -27.000000 -115.000000 1670.000000 --47.166667 -27.000000 -146.000000 1670.000000 --47.000000 -27.000000 -186.000000 1670.000000 --46.833333 -27.000000 -207.000000 1670.000000 --46.666667 -27.000000 -301.000000 1670.000000 --46.500000 -27.000000 -402.000000 1670.000000 --46.333333 -27.000000 -627.000000 1670.000000 --46.166667 -27.000000 -1187.000000 1670.000000 --46.000000 -27.000000 -1426.000000 1670.000000 --45.833333 -27.000000 -1789.000000 1670.000000 --45.666667 -27.000000 -2077.000000 1670.000000 --45.500000 -27.000000 -2228.000000 1670.000000 --45.333333 -27.000000 -2290.000000 1670.000000 --45.166667 -27.000000 -2434.000000 1670.000000 --45.000000 -27.000000 -2454.000000 1670.000000 --44.833333 -27.000000 -2457.000000 1670.000000 --44.666667 -27.000000 -2667.000000 1670.000000 --44.500000 -27.000000 -2753.000000 1670.000000 --44.333333 -27.000000 -2687.000000 1670.000000 --44.166667 -27.000000 -2696.000000 1670.000000 --44.000000 -27.000000 -2647.000000 1670.000000 --43.833333 -27.000000 -2676.000000 1670.000000 --43.666667 -27.000000 -2624.000000 1670.000000 --43.500000 -27.000000 -2566.000000 1670.000000 --43.333333 -27.000000 -2533.000000 1670.000000 --43.166667 -27.000000 -2443.000000 1670.000000 --43.000000 -27.000000 -2489.000000 1670.000000 --42.833333 -27.000000 -2442.000000 1670.000000 --42.666667 -27.000000 -2394.000000 1670.000000 --42.500000 -27.000000 -2459.000000 1670.000000 --42.333333 -27.000000 -2430.000000 1670.000000 --42.166667 -27.000000 -2521.000000 1670.000000 --42.000000 -27.000000 -2674.000000 1670.000000 --41.833333 -27.000000 -2673.000000 1670.000000 --41.666667 -27.000000 -2766.000000 1670.000000 --41.500000 -27.000000 -2858.000000 1670.000000 --41.333333 -27.000000 -2897.000000 1670.000000 --41.166667 -27.000000 -3061.000000 1670.000000 --41.000000 -27.000000 -3096.000000 1670.000000 --40.833333 -27.000000 -3347.000000 1670.000000 --40.666667 -27.000000 -3240.000000 1670.000000 --40.500000 -27.000000 -3443.000000 1670.000000 --40.333333 -27.000000 -3673.000000 1670.000000 --40.166667 -27.000000 -3747.000000 1670.000000 --40.000000 -27.000000 -3934.000000 1670.000000 --65.000000 -27.166667 334.000000 2670.000000 --64.833333 -27.166667 406.000000 2670.000000 --64.666667 -27.166667 293.000000 2670.000000 --64.500000 -27.166667 263.000000 2670.000000 --64.333333 -27.166667 245.000000 2670.000000 --64.166667 -27.166667 183.000000 2670.000000 --64.000000 -27.166667 168.000000 2670.000000 --63.833333 -27.166667 170.000000 2670.000000 --63.666667 -27.166667 170.000000 2670.000000 --63.500000 -27.166667 170.000000 2670.000000 --63.333333 -27.166667 169.000000 2670.000000 --63.166667 -27.166667 168.000000 2670.000000 --63.000000 -27.166667 164.000000 2670.000000 --62.833333 -27.166667 161.000000 2670.000000 --62.666667 -27.166667 162.000000 2670.000000 --62.500000 -27.166667 160.000000 2670.000000 --62.333333 -27.166667 156.000000 2670.000000 --62.166667 -27.166667 167.000000 2670.000000 --62.000000 -27.166667 155.000000 2670.000000 --61.833333 -27.166667 188.000000 2670.000000 --61.666667 -27.166667 143.000000 2670.000000 --61.500000 -27.166667 100.000000 2670.000000 --61.333333 -27.166667 104.000000 2670.000000 --61.166667 -27.166667 101.000000 2670.000000 --61.000000 -27.166667 98.000000 2670.000000 --60.833333 -27.166667 92.000000 2670.000000 --60.666667 -27.166667 91.000000 2670.000000 --60.500000 -27.166667 86.000000 2670.000000 --60.333333 -27.166667 82.000000 2670.000000 --60.166667 -27.166667 80.000000 2670.000000 --60.000000 -27.166667 75.000000 2670.000000 --59.833333 -27.166667 72.000000 2670.000000 --59.666667 -27.166667 73.000000 2670.000000 --59.500000 -27.166667 67.000000 2670.000000 --59.333333 -27.166667 64.000000 2670.000000 --59.166667 -27.166667 59.000000 2670.000000 --59.000000 -27.166667 61.000000 2670.000000 --58.833333 -27.166667 60.000000 2670.000000 --58.666667 -27.166667 52.000000 2670.000000 --58.500000 -27.166667 54.000000 2670.000000 --58.333333 -27.166667 59.000000 2670.000000 --58.166667 -27.166667 60.000000 2670.000000 --58.000000 -27.166667 61.000000 2670.000000 --57.833333 -27.166667 64.000000 2670.000000 --57.666667 -27.166667 65.000000 2670.000000 --57.500000 -27.166667 68.000000 2670.000000 --57.333333 -27.166667 69.000000 2670.000000 --57.166667 -27.166667 71.000000 2670.000000 --57.000000 -27.166667 77.000000 2670.000000 --56.833333 -27.166667 80.000000 2670.000000 --56.666667 -27.166667 82.000000 2670.000000 --56.500000 -27.166667 119.000000 2670.000000 --56.333333 -27.166667 96.000000 2670.000000 --56.166667 -27.166667 87.000000 2670.000000 --56.000000 -27.166667 156.000000 2670.000000 --55.833333 -27.166667 196.000000 2670.000000 --55.666667 -27.166667 130.000000 2670.000000 --55.500000 -27.166667 142.000000 2670.000000 --55.333333 -27.166667 151.000000 2670.000000 --55.166667 -27.166667 341.000000 2670.000000 --55.000000 -27.166667 375.000000 2670.000000 --54.833333 -27.166667 331.000000 2670.000000 --54.666667 -27.166667 464.000000 2670.000000 --54.500000 -27.166667 365.000000 2670.000000 --54.333333 -27.166667 369.000000 2670.000000 --54.166667 -27.166667 319.000000 2670.000000 --54.000000 -27.166667 273.000000 2670.000000 --53.833333 -27.166667 190.000000 2670.000000 --53.666667 -27.166667 202.000000 2670.000000 --53.500000 -27.166667 208.000000 2670.000000 --53.333333 -27.166667 289.000000 2670.000000 --53.166667 -27.166667 240.000000 2670.000000 --53.000000 -27.166667 361.000000 2670.000000 --52.833333 -27.166667 395.000000 2670.000000 --52.666667 -27.166667 644.000000 2670.000000 --52.500000 -27.166667 436.000000 2670.000000 --52.333333 -27.166667 608.000000 2670.000000 --52.166667 -27.166667 505.000000 2670.000000 --52.000000 -27.166667 706.000000 2670.000000 --51.833333 -27.166667 746.000000 2670.000000 --51.666667 -27.166667 807.000000 2670.000000 --51.500000 -27.166667 582.000000 2670.000000 --51.333333 -27.166667 844.000000 2670.000000 --51.166667 -27.166667 828.000000 2670.000000 --51.000000 -27.166667 1018.000000 2670.000000 --50.833333 -27.166667 916.000000 2670.000000 --50.666667 -27.166667 884.000000 2670.000000 --50.500000 -27.166667 998.000000 2670.000000 --50.333333 -27.166667 1117.000000 2670.000000 --50.166667 -27.166667 727.000000 2670.000000 --50.000000 -27.166667 539.000000 2670.000000 --49.833333 -27.166667 370.000000 2670.000000 --49.666667 -27.166667 657.000000 2670.000000 --49.500000 -27.166667 476.000000 2670.000000 --49.333333 -27.166667 417.000000 2670.000000 --49.166667 -27.166667 620.000000 2670.000000 --49.000000 -27.166667 136.000000 2670.000000 --48.833333 -27.166667 153.000000 2670.000000 --48.666667 -27.166667 258.000000 2670.000000 --48.500000 -27.166667 45.000000 2670.000000 --48.333333 -27.166667 -24.000000 1670.000000 --48.166667 -27.166667 -63.000000 1670.000000 --48.000000 -27.166667 -70.000000 1670.000000 --47.833333 -27.166667 -75.000000 1670.000000 --47.666667 -27.166667 -117.000000 1670.000000 --47.500000 -27.166667 -132.000000 1670.000000 --47.333333 -27.166667 -150.000000 1670.000000 --47.166667 -27.166667 -181.000000 1670.000000 --47.000000 -27.166667 -340.000000 1670.000000 --46.833333 -27.166667 -470.000000 1670.000000 --46.666667 -27.166667 -636.000000 1670.000000 --46.500000 -27.166667 -958.000000 1670.000000 --46.333333 -27.166667 -1399.000000 1670.000000 --46.166667 -27.166667 -1604.000000 1670.000000 --46.000000 -27.166667 -1833.000000 1670.000000 --45.833333 -27.166667 -1993.000000 1670.000000 --45.666667 -27.166667 -2151.000000 1670.000000 --45.500000 -27.166667 -2245.000000 1670.000000 --45.333333 -27.166667 -2564.000000 1670.000000 --45.166667 -27.166667 -2646.000000 1670.000000 --45.000000 -27.166667 -2639.000000 1670.000000 --44.833333 -27.166667 -2576.000000 1670.000000 --44.666667 -27.166667 -2777.000000 1670.000000 --44.500000 -27.166667 -2681.000000 1670.000000 --44.333333 -27.166667 -2689.000000 1670.000000 --44.166667 -27.166667 -2845.000000 1670.000000 --44.000000 -27.166667 -2862.000000 1670.000000 --43.833333 -27.166667 -2711.000000 1670.000000 --43.666667 -27.166667 -2644.000000 1670.000000 --43.500000 -27.166667 -2622.000000 1670.000000 --43.333333 -27.166667 -2530.000000 1670.000000 --43.166667 -27.166667 -2439.000000 1670.000000 --43.000000 -27.166667 -2372.000000 1670.000000 --42.833333 -27.166667 -2399.000000 1670.000000 --42.666667 -27.166667 -2462.000000 1670.000000 --42.500000 -27.166667 -2431.000000 1670.000000 --42.333333 -27.166667 -2553.000000 1670.000000 --42.166667 -27.166667 -2704.000000 1670.000000 --42.000000 -27.166667 -2849.000000 1670.000000 --41.833333 -27.166667 -2909.000000 1670.000000 --41.666667 -27.166667 -2985.000000 1670.000000 --41.500000 -27.166667 -3046.000000 1670.000000 --41.333333 -27.166667 -3118.000000 1670.000000 --41.166667 -27.166667 -3189.000000 1670.000000 --41.000000 -27.166667 -3274.000000 1670.000000 --40.833333 -27.166667 -3313.000000 1670.000000 --40.666667 -27.166667 -3369.000000 1670.000000 --40.500000 -27.166667 -3478.000000 1670.000000 --40.333333 -27.166667 -3629.000000 1670.000000 --40.166667 -27.166667 -3599.000000 1670.000000 --40.000000 -27.166667 -3796.000000 1670.000000 --65.000000 -27.333333 301.000000 2670.000000 --64.833333 -27.333333 319.000000 2670.000000 --64.666667 -27.333333 328.000000 2670.000000 --64.500000 -27.333333 242.000000 2670.000000 --64.333333 -27.333333 237.000000 2670.000000 --64.166667 -27.333333 168.000000 2670.000000 --64.000000 -27.333333 159.000000 2670.000000 --63.833333 -27.333333 159.000000 2670.000000 --63.666667 -27.333333 160.000000 2670.000000 --63.500000 -27.333333 160.000000 2670.000000 --63.333333 -27.333333 159.000000 2670.000000 --63.166667 -27.333333 158.000000 2670.000000 --63.000000 -27.333333 158.000000 2670.000000 --62.833333 -27.333333 159.000000 2670.000000 --62.666667 -27.333333 157.000000 2670.000000 --62.500000 -27.333333 156.000000 2670.000000 --62.333333 -27.333333 155.000000 2670.000000 --62.166667 -27.333333 152.000000 2670.000000 --62.000000 -27.333333 153.000000 2670.000000 --61.833333 -27.333333 133.000000 2670.000000 --61.666667 -27.333333 127.000000 2670.000000 --61.500000 -27.333333 111.000000 2670.000000 --61.333333 -27.333333 95.000000 2670.000000 --61.166667 -27.333333 94.000000 2670.000000 --61.000000 -27.333333 93.000000 2670.000000 --60.833333 -27.333333 89.000000 2670.000000 --60.666667 -27.333333 85.000000 2670.000000 --60.500000 -27.333333 81.000000 2670.000000 --60.333333 -27.333333 78.000000 2670.000000 --60.166667 -27.333333 77.000000 2670.000000 --60.000000 -27.333333 73.000000 2670.000000 --59.833333 -27.333333 69.000000 2670.000000 --59.666667 -27.333333 71.000000 2670.000000 --59.500000 -27.333333 68.000000 2670.000000 --59.333333 -27.333333 63.000000 2670.000000 --59.166667 -27.333333 60.000000 2670.000000 --59.000000 -27.333333 55.000000 2670.000000 --58.833333 -27.333333 52.000000 2670.000000 --58.666667 -27.333333 51.000000 2670.000000 --58.500000 -27.333333 61.000000 2670.000000 --58.333333 -27.333333 65.000000 2670.000000 --58.166667 -27.333333 67.000000 2670.000000 --58.000000 -27.333333 66.000000 2670.000000 --57.833333 -27.333333 55.000000 2670.000000 --57.666667 -27.333333 56.000000 2670.000000 --57.500000 -27.333333 55.000000 2670.000000 --57.333333 -27.333333 64.000000 2670.000000 --57.166667 -27.333333 72.000000 2670.000000 --57.000000 -27.333333 71.000000 2670.000000 --56.833333 -27.333333 76.000000 2670.000000 --56.666667 -27.333333 77.000000 2670.000000 --56.500000 -27.333333 75.000000 2670.000000 --56.333333 -27.333333 82.000000 2670.000000 --56.166667 -27.333333 75.000000 2670.000000 --56.000000 -27.333333 75.000000 2670.000000 --55.833333 -27.333333 103.000000 2670.000000 --55.666667 -27.333333 165.000000 2670.000000 --55.500000 -27.333333 131.000000 2670.000000 --55.333333 -27.333333 194.000000 2670.000000 --55.166667 -27.333333 327.000000 2670.000000 --55.000000 -27.333333 293.000000 2670.000000 --54.833333 -27.333333 232.000000 2670.000000 --54.666667 -27.333333 258.000000 2670.000000 --54.500000 -27.333333 379.000000 2670.000000 --54.333333 -27.333333 266.000000 2670.000000 --54.166667 -27.333333 276.000000 2670.000000 --54.000000 -27.333333 280.000000 2670.000000 --53.833333 -27.333333 388.000000 2670.000000 --53.666667 -27.333333 344.000000 2670.000000 --53.500000 -27.333333 456.000000 2670.000000 --53.333333 -27.333333 332.000000 2670.000000 --53.166667 -27.333333 439.000000 2670.000000 --53.000000 -27.333333 537.000000 2670.000000 --52.833333 -27.333333 549.000000 2670.000000 --52.666667 -27.333333 508.000000 2670.000000 --52.500000 -27.333333 555.000000 2670.000000 --52.333333 -27.333333 475.000000 2670.000000 --52.166667 -27.333333 475.000000 2670.000000 --52.000000 -27.333333 431.000000 2670.000000 --51.833333 -27.333333 623.000000 2670.000000 --51.666667 -27.333333 525.000000 2670.000000 --51.500000 -27.333333 635.000000 2670.000000 --51.333333 -27.333333 780.000000 2670.000000 --51.166667 -27.333333 962.000000 2670.000000 --51.000000 -27.333333 980.000000 2670.000000 --50.833333 -27.333333 923.000000 2670.000000 --50.666667 -27.333333 902.000000 2670.000000 --50.500000 -27.333333 1038.000000 2670.000000 --50.333333 -27.333333 1129.000000 2670.000000 --50.166667 -27.333333 861.000000 2670.000000 --50.000000 -27.333333 645.000000 2670.000000 --49.833333 -27.333333 395.000000 2670.000000 --49.666667 -27.333333 472.000000 2670.000000 --49.500000 -27.333333 670.000000 2670.000000 --49.333333 -27.333333 403.000000 2670.000000 --49.166667 -27.333333 323.000000 2670.000000 --49.000000 -27.333333 291.000000 2670.000000 --48.833333 -27.333333 152.000000 2670.000000 --48.666667 -27.333333 204.000000 2670.000000 --48.500000 -27.333333 -1.000000 1670.000000 --48.333333 -27.333333 -24.000000 1670.000000 --48.166667 -27.333333 -53.000000 1670.000000 --48.000000 -27.333333 -85.000000 1670.000000 --47.833333 -27.333333 -106.000000 1670.000000 --47.666667 -27.333333 -118.000000 1670.000000 --47.500000 -27.333333 -138.000000 1670.000000 --47.333333 -27.333333 -163.000000 1670.000000 --47.166667 -27.333333 -262.000000 1670.000000 --47.000000 -27.333333 -633.000000 1670.000000 --46.833333 -27.333333 -794.000000 1670.000000 --46.666667 -27.333333 -1045.000000 1670.000000 --46.500000 -27.333333 -1398.000000 1670.000000 --46.333333 -27.333333 -1732.000000 1670.000000 --46.166667 -27.333333 -1861.000000 1670.000000 --46.000000 -27.333333 -2027.000000 1670.000000 --45.833333 -27.333333 -2234.000000 1670.000000 --45.666667 -27.333333 -2238.000000 1670.000000 --45.500000 -27.333333 -2403.000000 1670.000000 --45.333333 -27.333333 -2564.000000 1670.000000 --45.166667 -27.333333 -2579.000000 1670.000000 --45.000000 -27.333333 -2607.000000 1670.000000 --44.833333 -27.333333 -2604.000000 1670.000000 --44.666667 -27.333333 -2332.000000 1670.000000 --44.500000 -27.333333 -2926.000000 1670.000000 --44.333333 -27.333333 -2714.000000 1670.000000 --44.166667 -27.333333 -2770.000000 1670.000000 --44.000000 -27.333333 -2645.000000 1670.000000 --43.833333 -27.333333 -2816.000000 1670.000000 --43.666667 -27.333333 -2741.000000 1670.000000 --43.500000 -27.333333 -2735.000000 1670.000000 --43.333333 -27.333333 -2709.000000 1670.000000 --43.166667 -27.333333 -2613.000000 1670.000000 --43.000000 -27.333333 -2443.000000 1670.000000 --42.833333 -27.333333 -2426.000000 1670.000000 --42.666667 -27.333333 -2486.000000 1670.000000 --42.500000 -27.333333 -2600.000000 1670.000000 --42.333333 -27.333333 -2781.000000 1670.000000 --42.166667 -27.333333 -2864.000000 1670.000000 --42.000000 -27.333333 -2937.000000 1670.000000 --41.833333 -27.333333 -3034.000000 1670.000000 --41.666667 -27.333333 -3062.000000 1670.000000 --41.500000 -27.333333 -3133.000000 1670.000000 --41.333333 -27.333333 -3202.000000 1670.000000 --41.166667 -27.333333 -3208.000000 1670.000000 --41.000000 -27.333333 -3302.000000 1670.000000 --40.833333 -27.333333 -3417.000000 1670.000000 --40.666667 -27.333333 -3471.000000 1670.000000 --40.500000 -27.333333 -3482.000000 1670.000000 --40.333333 -27.333333 -3572.000000 1670.000000 --40.166667 -27.333333 -3871.000000 1670.000000 --40.000000 -27.333333 -3730.000000 1670.000000 --65.000000 -27.500000 274.000000 2670.000000 --64.833333 -27.500000 268.000000 2670.000000 --64.666667 -27.500000 265.000000 2670.000000 --64.500000 -27.500000 236.000000 2670.000000 --64.333333 -27.500000 232.000000 2670.000000 --64.166667 -27.500000 176.000000 2670.000000 --64.000000 -27.500000 161.000000 2670.000000 --63.833333 -27.500000 154.000000 2670.000000 --63.666667 -27.500000 151.000000 2670.000000 --63.500000 -27.500000 149.000000 2670.000000 --63.333333 -27.500000 150.000000 2670.000000 --63.166667 -27.500000 150.000000 2670.000000 --63.000000 -27.500000 152.000000 2670.000000 --62.833333 -27.500000 151.000000 2670.000000 --62.666667 -27.500000 148.000000 2670.000000 --62.500000 -27.500000 153.000000 2670.000000 --62.333333 -27.500000 144.000000 2670.000000 --62.166667 -27.500000 147.000000 2670.000000 --62.000000 -27.500000 168.000000 2670.000000 --61.833333 -27.500000 127.000000 2670.000000 --61.666667 -27.500000 101.000000 2670.000000 --61.500000 -27.500000 115.000000 2670.000000 --61.333333 -27.500000 87.000000 2670.000000 --61.166667 -27.500000 87.000000 2670.000000 --61.000000 -27.500000 87.000000 2670.000000 --60.833333 -27.500000 82.000000 2670.000000 --60.666667 -27.500000 78.000000 2670.000000 --60.500000 -27.500000 76.000000 2670.000000 --60.333333 -27.500000 75.000000 2670.000000 --60.166667 -27.500000 71.000000 2670.000000 --60.000000 -27.500000 73.000000 2670.000000 --59.833333 -27.500000 72.000000 2670.000000 --59.666667 -27.500000 67.000000 2670.000000 --59.500000 -27.500000 66.000000 2670.000000 --59.333333 -27.500000 63.000000 2670.000000 --59.166667 -27.500000 55.000000 2670.000000 --59.000000 -27.500000 51.000000 2670.000000 --58.833333 -27.500000 61.000000 2670.000000 --58.666667 -27.500000 62.000000 2670.000000 --58.500000 -27.500000 62.000000 2670.000000 --58.333333 -27.500000 63.000000 2670.000000 --58.166667 -27.500000 66.000000 2670.000000 --58.000000 -27.500000 66.000000 2670.000000 --57.833333 -27.500000 67.000000 2670.000000 --57.666667 -27.500000 69.000000 2670.000000 --57.500000 -27.500000 70.000000 2670.000000 --57.333333 -27.500000 72.000000 2670.000000 --57.166667 -27.500000 60.000000 2670.000000 --57.000000 -27.500000 60.000000 2670.000000 --56.833333 -27.500000 62.000000 2670.000000 --56.666667 -27.500000 81.000000 2670.000000 --56.500000 -27.500000 75.000000 2670.000000 --56.333333 -27.500000 75.000000 2670.000000 --56.166667 -27.500000 104.000000 2670.000000 --56.000000 -27.500000 148.000000 2670.000000 --55.833333 -27.500000 88.000000 2670.000000 --55.666667 -27.500000 130.000000 2670.000000 --55.500000 -27.500000 261.000000 2670.000000 --55.333333 -27.500000 231.000000 2670.000000 --55.166667 -27.500000 322.000000 2670.000000 --55.000000 -27.500000 286.000000 2670.000000 --54.833333 -27.500000 265.000000 2670.000000 --54.666667 -27.500000 135.000000 2670.000000 --54.500000 -27.500000 171.000000 2670.000000 --54.333333 -27.500000 200.000000 2670.000000 --54.166667 -27.500000 263.000000 2670.000000 --54.000000 -27.500000 310.000000 2670.000000 --53.833333 -27.500000 325.000000 2670.000000 --53.666667 -27.500000 451.000000 2670.000000 --53.500000 -27.500000 467.000000 2670.000000 --53.333333 -27.500000 408.000000 2670.000000 --53.166667 -27.500000 322.000000 2670.000000 --53.000000 -27.500000 536.000000 2670.000000 --52.833333 -27.500000 574.000000 2670.000000 --52.666667 -27.500000 592.000000 2670.000000 --52.500000 -27.500000 649.000000 2670.000000 --52.333333 -27.500000 706.000000 2670.000000 --52.166667 -27.500000 620.000000 2670.000000 --52.000000 -27.500000 546.000000 2670.000000 --51.833333 -27.500000 481.000000 2670.000000 --51.666667 -27.500000 554.000000 2670.000000 --51.500000 -27.500000 698.000000 2670.000000 --51.333333 -27.500000 825.000000 2670.000000 --51.166667 -27.500000 866.000000 2670.000000 --51.000000 -27.500000 864.000000 2670.000000 --50.833333 -27.500000 783.000000 2670.000000 --50.666667 -27.500000 867.000000 2670.000000 --50.500000 -27.500000 888.000000 2670.000000 --50.333333 -27.500000 898.000000 2670.000000 --50.166667 -27.500000 851.000000 2670.000000 --50.000000 -27.500000 855.000000 2670.000000 --49.833333 -27.500000 722.000000 2670.000000 --49.666667 -27.500000 511.000000 2670.000000 --49.500000 -27.500000 639.000000 2670.000000 --49.333333 -27.500000 740.000000 2670.000000 --49.166667 -27.500000 776.000000 2670.000000 --49.000000 -27.500000 302.000000 2670.000000 --48.833333 -27.500000 219.000000 2670.000000 --48.666667 -27.500000 79.000000 2670.000000 --48.500000 -27.500000 85.000000 2670.000000 --48.333333 -27.500000 -22.000000 1670.000000 --48.166667 -27.500000 -60.000000 1670.000000 --48.000000 -27.500000 -71.000000 1670.000000 --47.833333 -27.500000 -113.000000 1670.000000 --47.666667 -27.500000 -126.000000 1670.000000 --47.500000 -27.500000 -151.000000 1670.000000 --47.333333 -27.500000 -207.000000 1670.000000 --47.166667 -27.500000 -449.000000 1670.000000 --47.000000 -27.500000 -673.000000 1670.000000 --46.833333 -27.500000 -1031.000000 1670.000000 --46.666667 -27.500000 -1230.000000 1670.000000 --46.500000 -27.500000 -1558.000000 1670.000000 --46.333333 -27.500000 -1853.000000 1670.000000 --46.166667 -27.500000 -2074.000000 1670.000000 --46.000000 -27.500000 -2195.000000 1670.000000 --45.833333 -27.500000 -2273.000000 1670.000000 --45.666667 -27.500000 -2399.000000 1670.000000 --45.500000 -27.500000 -2395.000000 1670.000000 --45.333333 -27.500000 -2620.000000 1670.000000 --45.166667 -27.500000 -2601.000000 1670.000000 --45.000000 -27.500000 -2638.000000 1670.000000 --44.833333 -27.500000 -2677.000000 1670.000000 --44.666667 -27.500000 -2745.000000 1670.000000 --44.500000 -27.500000 -2880.000000 1670.000000 --44.333333 -27.500000 -2770.000000 1670.000000 --44.166667 -27.500000 -2780.000000 1670.000000 --44.000000 -27.500000 -2906.000000 1670.000000 --43.833333 -27.500000 -2883.000000 1670.000000 --43.666667 -27.500000 -2856.000000 1670.000000 --43.500000 -27.500000 -2844.000000 1670.000000 --43.333333 -27.500000 -2821.000000 1670.000000 --43.166667 -27.500000 -2666.000000 1670.000000 --43.000000 -27.500000 -2621.000000 1670.000000 --42.833333 -27.500000 -2622.000000 1670.000000 --42.666667 -27.500000 -2662.000000 1670.000000 --42.500000 -27.500000 -2790.000000 1670.000000 --42.333333 -27.500000 -2901.000000 1670.000000 --42.166667 -27.500000 -2948.000000 1670.000000 --42.000000 -27.500000 -3068.000000 1670.000000 --41.833333 -27.500000 -3055.000000 1670.000000 --41.666667 -27.500000 -3183.000000 1670.000000 --41.500000 -27.500000 -3118.000000 1670.000000 --41.333333 -27.500000 -3166.000000 1670.000000 --41.166667 -27.500000 -3221.000000 1670.000000 --41.000000 -27.500000 -3280.000000 1670.000000 --40.833333 -27.500000 -3174.000000 1670.000000 --40.666667 -27.500000 -3213.000000 1670.000000 --40.500000 -27.500000 -3206.000000 1670.000000 --40.333333 -27.500000 -3278.000000 1670.000000 --40.166667 -27.500000 -3464.000000 1670.000000 --40.000000 -27.500000 -3556.000000 1670.000000 --65.000000 -27.666667 291.000000 2670.000000 --64.833333 -27.666667 378.000000 2670.000000 --64.666667 -27.666667 335.000000 2670.000000 --64.500000 -27.666667 274.000000 2670.000000 --64.333333 -27.666667 213.000000 2670.000000 --64.166667 -27.666667 184.000000 2670.000000 --64.000000 -27.666667 167.000000 2670.000000 --63.833333 -27.666667 158.000000 2670.000000 --63.666667 -27.666667 148.000000 2670.000000 --63.500000 -27.666667 143.000000 2670.000000 --63.333333 -27.666667 146.000000 2670.000000 --63.166667 -27.666667 143.000000 2670.000000 --63.000000 -27.666667 143.000000 2670.000000 --62.833333 -27.666667 143.000000 2670.000000 --62.666667 -27.666667 144.000000 2670.000000 --62.500000 -27.666667 138.000000 2670.000000 --62.333333 -27.666667 138.000000 2670.000000 --62.166667 -27.666667 165.000000 2670.000000 --62.000000 -27.666667 130.000000 2670.000000 --61.833333 -27.666667 117.000000 2670.000000 --61.666667 -27.666667 78.000000 2670.000000 --61.500000 -27.666667 79.000000 2670.000000 --61.333333 -27.666667 81.000000 2670.000000 --61.166667 -27.666667 80.000000 2670.000000 --61.000000 -27.666667 79.000000 2670.000000 --60.833333 -27.666667 76.000000 2670.000000 --60.666667 -27.666667 74.000000 2670.000000 --60.500000 -27.666667 73.000000 2670.000000 --60.333333 -27.666667 69.000000 2670.000000 --60.166667 -27.666667 68.000000 2670.000000 --60.000000 -27.666667 66.000000 2670.000000 --59.833333 -27.666667 65.000000 2670.000000 --59.666667 -27.666667 62.000000 2670.000000 --59.500000 -27.666667 63.000000 2670.000000 --59.333333 -27.666667 61.000000 2670.000000 --59.166667 -27.666667 50.000000 2670.000000 --59.000000 -27.666667 48.000000 2670.000000 --58.833333 -27.666667 46.000000 2670.000000 --58.666667 -27.666667 63.000000 2670.000000 --58.500000 -27.666667 64.000000 2670.000000 --58.333333 -27.666667 64.000000 2670.000000 --58.166667 -27.666667 66.000000 2670.000000 --58.000000 -27.666667 66.000000 2670.000000 --57.833333 -27.666667 69.000000 2670.000000 --57.666667 -27.666667 70.000000 2670.000000 --57.500000 -27.666667 71.000000 2670.000000 --57.333333 -27.666667 70.000000 2670.000000 --57.166667 -27.666667 72.000000 2670.000000 --57.000000 -27.666667 72.000000 2670.000000 --56.833333 -27.666667 73.000000 2670.000000 --56.666667 -27.666667 72.000000 2670.000000 --56.500000 -27.666667 80.000000 2670.000000 --56.333333 -27.666667 91.000000 2670.000000 --56.166667 -27.666667 104.000000 2670.000000 --56.000000 -27.666667 135.000000 2670.000000 --55.833333 -27.666667 133.000000 2670.000000 --55.666667 -27.666667 125.000000 2670.000000 --55.500000 -27.666667 280.000000 2670.000000 --55.333333 -27.666667 215.000000 2670.000000 --55.166667 -27.666667 192.000000 2670.000000 --55.000000 -27.666667 286.000000 2670.000000 --54.833333 -27.666667 173.000000 2670.000000 --54.666667 -27.666667 148.000000 2670.000000 --54.500000 -27.666667 178.000000 2670.000000 --54.333333 -27.666667 260.000000 2670.000000 --54.166667 -27.666667 190.000000 2670.000000 --54.000000 -27.666667 319.000000 2670.000000 --53.833333 -27.666667 443.000000 2670.000000 --53.666667 -27.666667 475.000000 2670.000000 --53.500000 -27.666667 546.000000 2670.000000 --53.333333 -27.666667 543.000000 2670.000000 --53.166667 -27.666667 377.000000 2670.000000 --53.000000 -27.666667 410.000000 2670.000000 --52.833333 -27.666667 644.000000 2670.000000 --52.666667 -27.666667 571.000000 2670.000000 --52.500000 -27.666667 570.000000 2670.000000 --52.333333 -27.666667 722.000000 2670.000000 --52.166667 -27.666667 593.000000 2670.000000 --52.000000 -27.666667 597.000000 2670.000000 --51.833333 -27.666667 511.000000 2670.000000 --51.666667 -27.666667 707.000000 2670.000000 --51.500000 -27.666667 682.000000 2670.000000 --51.333333 -27.666667 620.000000 2670.000000 --51.166667 -27.666667 824.000000 2670.000000 --51.000000 -27.666667 709.000000 2670.000000 --50.833333 -27.666667 861.000000 2670.000000 --50.666667 -27.666667 805.000000 2670.000000 --50.500000 -27.666667 973.000000 2670.000000 --50.333333 -27.666667 875.000000 2670.000000 --50.166667 -27.666667 893.000000 2670.000000 --50.000000 -27.666667 847.000000 2670.000000 --49.833333 -27.666667 876.000000 2670.000000 --49.666667 -27.666667 925.000000 2670.000000 --49.500000 -27.666667 598.000000 2670.000000 --49.333333 -27.666667 804.000000 2670.000000 --49.166667 -27.666667 1019.000000 2670.000000 --49.000000 -27.666667 813.000000 2670.000000 --48.833333 -27.666667 333.000000 2670.000000 --48.666667 -27.666667 4.000000 2670.000000 --48.500000 -27.666667 42.000000 2670.000000 --48.333333 -27.666667 -36.000000 1670.000000 --48.166667 -27.666667 -76.000000 1670.000000 --48.000000 -27.666667 -92.000000 1670.000000 --47.833333 -27.666667 -71.000000 1670.000000 --47.666667 -27.666667 -139.000000 1670.000000 --47.500000 -27.666667 -155.000000 1670.000000 --47.333333 -27.666667 -210.000000 1670.000000 --47.166667 -27.666667 -471.000000 1670.000000 --47.000000 -27.666667 -630.000000 1670.000000 --46.833333 -27.666667 -942.000000 1670.000000 --46.666667 -27.666667 -1275.000000 1670.000000 --46.500000 -27.666667 -1616.000000 1670.000000 --46.333333 -27.666667 -1947.000000 1670.000000 --46.166667 -27.666667 -2194.000000 1670.000000 --46.000000 -27.666667 -2273.000000 1670.000000 --45.833333 -27.666667 -2363.000000 1670.000000 --45.666667 -27.666667 -2460.000000 1670.000000 --45.500000 -27.666667 -2556.000000 1670.000000 --45.333333 -27.666667 -2658.000000 1670.000000 --45.166667 -27.666667 -2760.000000 1670.000000 --45.000000 -27.666667 -2909.000000 1670.000000 --44.833333 -27.666667 -3016.000000 1670.000000 --44.666667 -27.666667 -3079.000000 1670.000000 --44.500000 -27.666667 -3145.000000 1670.000000 --44.333333 -27.666667 -2902.000000 1670.000000 --44.166667 -27.666667 -2861.000000 1670.000000 --44.000000 -27.666667 -2980.000000 1670.000000 --43.833333 -27.666667 -3009.000000 1670.000000 --43.666667 -27.666667 -3249.000000 1670.000000 --43.500000 -27.666667 -2882.000000 1670.000000 --43.333333 -27.666667 -2969.000000 1670.000000 --43.166667 -27.666667 -2796.000000 1670.000000 --43.000000 -27.666667 -2667.000000 1670.000000 --42.833333 -27.666667 -2664.000000 1670.000000 --42.666667 -27.666667 -2775.000000 1670.000000 --42.500000 -27.666667 -2846.000000 1670.000000 --42.333333 -27.666667 -2812.000000 1670.000000 --42.166667 -27.666667 -2974.000000 1670.000000 --42.000000 -27.666667 -3045.000000 1670.000000 --41.833333 -27.666667 -2985.000000 1670.000000 --41.666667 -27.666667 -3122.000000 1670.000000 --41.500000 -27.666667 -3176.000000 1670.000000 --41.333333 -27.666667 -3083.000000 1670.000000 --41.166667 -27.666667 -3091.000000 1670.000000 --41.000000 -27.666667 -3038.000000 1670.000000 --40.833333 -27.666667 -3085.000000 1670.000000 --40.666667 -27.666667 -3032.000000 1670.000000 --40.500000 -27.666667 -3014.000000 1670.000000 --40.333333 -27.666667 -2925.000000 1670.000000 --40.166667 -27.666667 -3502.000000 1670.000000 --40.000000 -27.666667 -3002.000000 1670.000000 --65.000000 -27.833333 374.000000 2670.000000 --64.833333 -27.833333 495.000000 2670.000000 --64.666667 -27.833333 395.000000 2670.000000 --64.500000 -27.833333 312.000000 2670.000000 --64.333333 -27.833333 214.000000 2670.000000 --64.166667 -27.833333 179.000000 2670.000000 --64.000000 -27.833333 164.000000 2670.000000 --63.833333 -27.833333 156.000000 2670.000000 --63.666667 -27.833333 146.000000 2670.000000 --63.500000 -27.833333 138.000000 2670.000000 --63.333333 -27.833333 139.000000 2670.000000 --63.166667 -27.833333 133.000000 2670.000000 --63.000000 -27.833333 133.000000 2670.000000 --62.833333 -27.833333 136.000000 2670.000000 --62.666667 -27.833333 134.000000 2670.000000 --62.500000 -27.833333 131.000000 2670.000000 --62.333333 -27.833333 148.000000 2670.000000 --62.166667 -27.833333 132.000000 2670.000000 --62.000000 -27.833333 106.000000 2670.000000 --61.833333 -27.833333 120.000000 2670.000000 --61.666667 -27.833333 95.000000 2670.000000 --61.500000 -27.833333 72.000000 2670.000000 --61.333333 -27.833333 74.000000 2670.000000 --61.166667 -27.833333 74.000000 2670.000000 --61.000000 -27.833333 74.000000 2670.000000 --60.833333 -27.833333 73.000000 2670.000000 --60.666667 -27.833333 71.000000 2670.000000 --60.500000 -27.833333 70.000000 2670.000000 --60.333333 -27.833333 67.000000 2670.000000 --60.166667 -27.833333 65.000000 2670.000000 --60.000000 -27.833333 65.000000 2670.000000 --59.833333 -27.833333 62.000000 2670.000000 --59.666667 -27.833333 61.000000 2670.000000 --59.500000 -27.833333 61.000000 2670.000000 --59.333333 -27.833333 57.000000 2670.000000 --59.166667 -27.833333 49.000000 2670.000000 --59.000000 -27.833333 46.000000 2670.000000 --58.833333 -27.833333 46.000000 2670.000000 --58.666667 -27.833333 63.000000 2670.000000 --58.500000 -27.833333 64.000000 2670.000000 --58.333333 -27.833333 66.000000 2670.000000 --58.166667 -27.833333 66.000000 2670.000000 --58.000000 -27.833333 69.000000 2670.000000 --57.833333 -27.833333 72.000000 2670.000000 --57.666667 -27.833333 71.000000 2670.000000 --57.500000 -27.833333 68.000000 2670.000000 --57.333333 -27.833333 75.000000 2670.000000 --57.166667 -27.833333 68.000000 2670.000000 --57.000000 -27.833333 70.000000 2670.000000 --56.833333 -27.833333 72.000000 2670.000000 --56.666667 -27.833333 72.000000 2670.000000 --56.500000 -27.833333 75.000000 2670.000000 --56.333333 -27.833333 90.000000 2670.000000 --56.166667 -27.833333 89.000000 2670.000000 --56.000000 -27.833333 128.000000 2670.000000 --55.833333 -27.833333 150.000000 2670.000000 --55.666667 -27.833333 153.000000 2670.000000 --55.500000 -27.833333 266.000000 2670.000000 --55.333333 -27.833333 132.000000 2670.000000 --55.166667 -27.833333 148.000000 2670.000000 --55.000000 -27.833333 131.000000 2670.000000 --54.833333 -27.833333 141.000000 2670.000000 --54.666667 -27.833333 287.000000 2670.000000 --54.500000 -27.833333 289.000000 2670.000000 --54.333333 -27.833333 261.000000 2670.000000 --54.166667 -27.833333 321.000000 2670.000000 --54.000000 -27.833333 367.000000 2670.000000 --53.833333 -27.833333 452.000000 2670.000000 --53.666667 -27.833333 516.000000 2670.000000 --53.500000 -27.833333 514.000000 2670.000000 --53.333333 -27.833333 596.000000 2670.000000 --53.166667 -27.833333 448.000000 2670.000000 --53.000000 -27.833333 377.000000 2670.000000 --52.833333 -27.833333 578.000000 2670.000000 --52.666667 -27.833333 599.000000 2670.000000 --52.500000 -27.833333 695.000000 2670.000000 --52.333333 -27.833333 717.000000 2670.000000 --52.166667 -27.833333 693.000000 2670.000000 --52.000000 -27.833333 484.000000 2670.000000 --51.833333 -27.833333 701.000000 2670.000000 --51.666667 -27.833333 701.000000 2670.000000 --51.500000 -27.833333 775.000000 2670.000000 --51.333333 -27.833333 799.000000 2670.000000 --51.166667 -27.833333 847.000000 2670.000000 --51.000000 -27.833333 851.000000 2670.000000 --50.833333 -27.833333 1001.000000 2670.000000 --50.666667 -27.833333 922.000000 2670.000000 --50.500000 -27.833333 920.000000 2670.000000 --50.333333 -27.833333 922.000000 2670.000000 --50.166667 -27.833333 1110.000000 2670.000000 --50.000000 -27.833333 1286.000000 2670.000000 --49.833333 -27.833333 1081.000000 2670.000000 --49.666667 -27.833333 943.000000 2670.000000 --49.500000 -27.833333 993.000000 2670.000000 --49.333333 -27.833333 1453.000000 2670.000000 --49.166667 -27.833333 868.000000 2670.000000 --49.000000 -27.833333 781.000000 2670.000000 --48.833333 -27.833333 788.000000 2670.000000 --48.666667 -27.833333 225.000000 2670.000000 --48.500000 -27.833333 0.000000 2670.000000 --48.333333 -27.833333 -61.000000 1670.000000 --48.166667 -27.833333 -73.000000 1670.000000 --48.000000 -27.833333 -78.000000 1670.000000 --47.833333 -27.833333 -108.000000 1670.000000 --47.666667 -27.833333 -154.000000 1670.000000 --47.500000 -27.833333 -231.000000 1670.000000 --47.333333 -27.833333 -237.000000 1670.000000 --47.166667 -27.833333 -353.000000 1670.000000 --47.000000 -27.833333 -528.000000 1670.000000 --46.833333 -27.833333 -774.000000 1670.000000 --46.666667 -27.833333 -1228.000000 1670.000000 --46.500000 -27.833333 -1623.000000 1670.000000 --46.333333 -27.833333 -2057.000000 1670.000000 --46.166667 -27.833333 -2302.000000 1670.000000 --46.000000 -27.833333 -2397.000000 1670.000000 --45.833333 -27.833333 -2490.000000 1670.000000 --45.666667 -27.833333 -2672.000000 1670.000000 --45.500000 -27.833333 -2853.000000 1670.000000 --45.333333 -27.833333 -3009.000000 1670.000000 --45.166667 -27.833333 -2997.000000 1670.000000 --45.000000 -27.833333 -3124.000000 1670.000000 --44.833333 -27.833333 -3413.000000 1670.000000 --44.666667 -27.833333 -3413.000000 1670.000000 --44.500000 -27.833333 -3452.000000 1670.000000 --44.333333 -27.833333 -3367.000000 1670.000000 --44.166667 -27.833333 -3276.000000 1670.000000 --44.000000 -27.833333 -3338.000000 1670.000000 --43.833333 -27.833333 -3250.000000 1670.000000 --43.666667 -27.833333 -3249.000000 1670.000000 --43.500000 -27.833333 -3381.000000 1670.000000 --43.333333 -27.833333 -3072.000000 1670.000000 --43.166667 -27.833333 -2876.000000 1670.000000 --43.000000 -27.833333 -2741.000000 1670.000000 --42.833333 -27.833333 -2745.000000 1670.000000 --42.666667 -27.833333 -2855.000000 1670.000000 --42.500000 -27.833333 -2913.000000 1670.000000 --42.333333 -27.833333 -2919.000000 1670.000000 --42.166667 -27.833333 -3012.000000 1670.000000 --42.000000 -27.833333 -2947.000000 1670.000000 --41.833333 -27.833333 -3198.000000 1670.000000 --41.666667 -27.833333 -3167.000000 1670.000000 --41.500000 -27.833333 -3291.000000 1670.000000 --41.333333 -27.833333 -3119.000000 1670.000000 --41.166667 -27.833333 -2977.000000 1670.000000 --41.000000 -27.833333 -2985.000000 1670.000000 --40.833333 -27.833333 -3173.000000 1670.000000 --40.666667 -27.833333 -3202.000000 1670.000000 --40.500000 -27.833333 -2856.000000 1670.000000 --40.333333 -27.833333 -2703.000000 1670.000000 --40.166667 -27.833333 -2686.000000 1670.000000 --40.000000 -27.833333 -3155.000000 1670.000000 --65.000000 -28.000000 433.000000 2670.000000 --64.833333 -28.000000 645.000000 2670.000000 --64.666667 -28.000000 423.000000 2670.000000 --64.500000 -28.000000 292.000000 2670.000000 --64.333333 -28.000000 219.000000 2670.000000 --64.166667 -28.000000 164.000000 2670.000000 --64.000000 -28.000000 155.000000 2670.000000 --63.833333 -28.000000 145.000000 2670.000000 --63.666667 -28.000000 141.000000 2670.000000 --63.500000 -28.000000 136.000000 2670.000000 --63.333333 -28.000000 132.000000 2670.000000 --63.166667 -28.000000 127.000000 2670.000000 --63.000000 -28.000000 128.000000 2670.000000 --62.833333 -28.000000 128.000000 2670.000000 --62.666667 -28.000000 127.000000 2670.000000 --62.500000 -28.000000 126.000000 2670.000000 --62.333333 -28.000000 123.000000 2670.000000 --62.166667 -28.000000 84.000000 2670.000000 --62.000000 -28.000000 83.000000 2670.000000 --61.833333 -28.000000 80.000000 2670.000000 --61.666667 -28.000000 74.000000 2670.000000 --61.500000 -28.000000 70.000000 2670.000000 --61.333333 -28.000000 69.000000 2670.000000 --61.166667 -28.000000 71.000000 2670.000000 --61.000000 -28.000000 68.000000 2670.000000 --60.833333 -28.000000 67.000000 2670.000000 --60.666667 -28.000000 67.000000 2670.000000 --60.500000 -28.000000 67.000000 2670.000000 --60.333333 -28.000000 64.000000 2670.000000 --60.166667 -28.000000 63.000000 2670.000000 --60.000000 -28.000000 61.000000 2670.000000 --59.833333 -28.000000 62.000000 2670.000000 --59.666667 -28.000000 57.000000 2670.000000 --59.500000 -28.000000 58.000000 2670.000000 --59.333333 -28.000000 54.000000 2670.000000 --59.166667 -28.000000 45.000000 2670.000000 --59.000000 -28.000000 43.000000 2670.000000 --58.833333 -28.000000 41.000000 2670.000000 --58.666667 -28.000000 64.000000 2670.000000 --58.500000 -28.000000 66.000000 2670.000000 --58.333333 -28.000000 68.000000 2670.000000 --58.166667 -28.000000 73.000000 2670.000000 --58.000000 -28.000000 72.000000 2670.000000 --57.833333 -28.000000 65.000000 2670.000000 --57.666667 -28.000000 69.000000 2670.000000 --57.500000 -28.000000 74.000000 2670.000000 --57.333333 -28.000000 66.000000 2670.000000 --57.166667 -28.000000 66.000000 2670.000000 --57.000000 -28.000000 69.000000 2670.000000 --56.833333 -28.000000 69.000000 2670.000000 --56.666667 -28.000000 70.000000 2670.000000 --56.500000 -28.000000 82.000000 2670.000000 --56.333333 -28.000000 82.000000 2670.000000 --56.166667 -28.000000 104.000000 2670.000000 --56.000000 -28.000000 133.000000 2670.000000 --55.833333 -28.000000 153.000000 2670.000000 --55.666667 -28.000000 82.000000 2670.000000 --55.500000 -28.000000 148.000000 2670.000000 --55.333333 -28.000000 116.000000 2670.000000 --55.166667 -28.000000 196.000000 2670.000000 --55.000000 -28.000000 207.000000 2670.000000 --54.833333 -28.000000 205.000000 2670.000000 --54.666667 -28.000000 265.000000 2670.000000 --54.500000 -28.000000 348.000000 2670.000000 --54.333333 -28.000000 372.000000 2670.000000 --54.166667 -28.000000 336.000000 2670.000000 --54.000000 -28.000000 397.000000 2670.000000 --53.833333 -28.000000 454.000000 2670.000000 --53.666667 -28.000000 529.000000 2670.000000 --53.500000 -28.000000 557.000000 2670.000000 --53.333333 -28.000000 566.000000 2670.000000 --53.166667 -28.000000 568.000000 2670.000000 --53.000000 -28.000000 472.000000 2670.000000 --52.833333 -28.000000 615.000000 2670.000000 --52.666667 -28.000000 668.000000 2670.000000 --52.500000 -28.000000 630.000000 2670.000000 --52.333333 -28.000000 688.000000 2670.000000 --52.166667 -28.000000 626.000000 2670.000000 --52.000000 -28.000000 685.000000 2670.000000 --51.833333 -28.000000 667.000000 2670.000000 --51.666667 -28.000000 606.000000 2670.000000 --51.500000 -28.000000 806.000000 2670.000000 --51.333333 -28.000000 800.000000 2670.000000 --51.166667 -28.000000 899.000000 2670.000000 --51.000000 -28.000000 756.000000 2670.000000 --50.833333 -28.000000 913.000000 2670.000000 --50.666667 -28.000000 868.000000 2670.000000 --50.500000 -28.000000 962.000000 2670.000000 --50.333333 -28.000000 1105.000000 2670.000000 --50.166667 -28.000000 1171.000000 2670.000000 --50.000000 -28.000000 1146.000000 2670.000000 --49.833333 -28.000000 1406.000000 2670.000000 --49.666667 -28.000000 1196.000000 2670.000000 --49.500000 -28.000000 1133.000000 2670.000000 --49.333333 -28.000000 1347.000000 2670.000000 --49.166667 -28.000000 336.000000 2670.000000 --49.000000 -28.000000 583.000000 2670.000000 --48.833333 -28.000000 643.000000 2670.000000 --48.666667 -28.000000 278.000000 2670.000000 --48.500000 -28.000000 -38.000000 1670.000000 --48.333333 -28.000000 -68.000000 1670.000000 --48.166667 -28.000000 -79.000000 1670.000000 --48.000000 -28.000000 -67.000000 1670.000000 --47.833333 -28.000000 -133.000000 1670.000000 --47.666667 -28.000000 -182.000000 1670.000000 --47.500000 -28.000000 -177.000000 1670.000000 --47.333333 -28.000000 -218.000000 1670.000000 --47.166667 -28.000000 -269.000000 1670.000000 --47.000000 -28.000000 -456.000000 1670.000000 --46.833333 -28.000000 -580.000000 1670.000000 --46.666667 -28.000000 -1213.000000 1670.000000 --46.500000 -28.000000 -1728.000000 1670.000000 --46.333333 -28.000000 -2209.000000 1670.000000 --46.166667 -28.000000 -2377.000000 1670.000000 --46.000000 -28.000000 -2510.000000 1670.000000 --45.833333 -28.000000 -2644.000000 1670.000000 --45.666667 -28.000000 -2748.000000 1670.000000 --45.500000 -28.000000 -2833.000000 1670.000000 --45.333333 -28.000000 -3039.000000 1670.000000 --45.166667 -28.000000 -3102.000000 1670.000000 --45.000000 -28.000000 -3392.000000 1670.000000 --44.833333 -28.000000 -3397.000000 1670.000000 --44.666667 -28.000000 -3373.000000 1670.000000 --44.500000 -28.000000 -3441.000000 1670.000000 --44.333333 -28.000000 -3366.000000 1670.000000 --44.166667 -28.000000 -3319.000000 1670.000000 --44.000000 -28.000000 -3396.000000 1670.000000 --43.833333 -28.000000 -3487.000000 1670.000000 --43.666667 -28.000000 -3442.000000 1670.000000 --43.500000 -28.000000 -3353.000000 1670.000000 --43.333333 -28.000000 -3555.000000 1670.000000 --43.166667 -28.000000 -3047.000000 1670.000000 --43.000000 -28.000000 -2750.000000 1670.000000 --42.833333 -28.000000 -2982.000000 1670.000000 --42.666667 -28.000000 -2975.000000 1670.000000 --42.500000 -28.000000 -2954.000000 1670.000000 --42.333333 -28.000000 -3074.000000 1670.000000 --42.166667 -28.000000 -2984.000000 1670.000000 --42.000000 -28.000000 -3131.000000 1670.000000 --41.833333 -28.000000 -3027.000000 1670.000000 --41.666667 -28.000000 -2915.000000 1670.000000 --41.500000 -28.000000 -3130.000000 1670.000000 --41.333333 -28.000000 -3215.000000 1670.000000 --41.166667 -28.000000 -3131.000000 1670.000000 --41.000000 -28.000000 -3124.000000 1670.000000 --40.833333 -28.000000 -2985.000000 1670.000000 --40.666667 -28.000000 -2796.000000 1670.000000 --40.500000 -28.000000 -2548.000000 1670.000000 --40.333333 -28.000000 -2613.000000 1670.000000 --40.166667 -28.000000 -2640.000000 1670.000000 --40.000000 -28.000000 -3693.000000 1670.000000 --65.000000 -28.166667 470.000000 2670.000000 --64.833333 -28.166667 648.000000 2670.000000 --64.666667 -28.166667 338.000000 2670.000000 --64.500000 -28.166667 247.000000 2670.000000 --64.333333 -28.166667 185.000000 2670.000000 --64.166667 -28.166667 151.000000 2670.000000 --64.000000 -28.166667 147.000000 2670.000000 --63.833333 -28.166667 140.000000 2670.000000 --63.666667 -28.166667 134.000000 2670.000000 --63.500000 -28.166667 129.000000 2670.000000 --63.333333 -28.166667 126.000000 2670.000000 --63.166667 -28.166667 123.000000 2670.000000 --63.000000 -28.166667 120.000000 2670.000000 --62.833333 -28.166667 118.000000 2670.000000 --62.666667 -28.166667 121.000000 2670.000000 --62.500000 -28.166667 129.000000 2670.000000 --62.333333 -28.166667 87.000000 2670.000000 --62.166667 -28.166667 84.000000 2670.000000 --62.000000 -28.166667 82.000000 2670.000000 --61.833333 -28.166667 78.000000 2670.000000 --61.666667 -28.166667 73.000000 2670.000000 --61.500000 -28.166667 70.000000 2670.000000 --61.333333 -28.166667 67.000000 2670.000000 --61.166667 -28.166667 66.000000 2670.000000 --61.000000 -28.166667 66.000000 2670.000000 --60.833333 -28.166667 65.000000 2670.000000 --60.666667 -28.166667 63.000000 2670.000000 --60.500000 -28.166667 63.000000 2670.000000 --60.333333 -28.166667 60.000000 2670.000000 --60.166667 -28.166667 60.000000 2670.000000 --60.000000 -28.166667 60.000000 2670.000000 --59.833333 -28.166667 57.000000 2670.000000 --59.666667 -28.166667 58.000000 2670.000000 --59.500000 -28.166667 57.000000 2670.000000 --59.333333 -28.166667 55.000000 2670.000000 --59.166667 -28.166667 41.000000 2670.000000 --59.000000 -28.166667 43.000000 2670.000000 --58.833333 -28.166667 54.000000 2670.000000 --58.666667 -28.166667 65.000000 2670.000000 --58.500000 -28.166667 70.000000 2670.000000 --58.333333 -28.166667 67.000000 2670.000000 --58.166667 -28.166667 68.000000 2670.000000 --58.000000 -28.166667 73.000000 2670.000000 --57.833333 -28.166667 74.000000 2670.000000 --57.666667 -28.166667 71.000000 2670.000000 --57.500000 -28.166667 63.000000 2670.000000 --57.333333 -28.166667 64.000000 2670.000000 --57.166667 -28.166667 65.000000 2670.000000 --57.000000 -28.166667 66.000000 2670.000000 --56.833333 -28.166667 65.000000 2670.000000 --56.666667 -28.166667 77.000000 2670.000000 --56.500000 -28.166667 68.000000 2670.000000 --56.333333 -28.166667 80.000000 2670.000000 --56.166667 -28.166667 87.000000 2670.000000 --56.000000 -28.166667 114.000000 2670.000000 --55.833333 -28.166667 121.000000 2670.000000 --55.666667 -28.166667 97.000000 2670.000000 --55.500000 -28.166667 83.000000 2670.000000 --55.333333 -28.166667 113.000000 2670.000000 --55.166667 -28.166667 183.000000 2670.000000 --55.000000 -28.166667 135.000000 2670.000000 --54.833333 -28.166667 161.000000 2670.000000 --54.666667 -28.166667 240.000000 2670.000000 --54.500000 -28.166667 247.000000 2670.000000 --54.333333 -28.166667 315.000000 2670.000000 --54.166667 -28.166667 371.000000 2670.000000 --54.000000 -28.166667 355.000000 2670.000000 --53.833333 -28.166667 335.000000 2670.000000 --53.666667 -28.166667 456.000000 2670.000000 --53.500000 -28.166667 470.000000 2670.000000 --53.333333 -28.166667 543.000000 2670.000000 --53.166667 -28.166667 565.000000 2670.000000 --53.000000 -28.166667 523.000000 2670.000000 --52.833333 -28.166667 594.000000 2670.000000 --52.666667 -28.166667 575.000000 2670.000000 --52.500000 -28.166667 645.000000 2670.000000 --52.333333 -28.166667 678.000000 2670.000000 --52.166667 -28.166667 649.000000 2670.000000 --52.000000 -28.166667 738.000000 2670.000000 --51.833333 -28.166667 746.000000 2670.000000 --51.666667 -28.166667 724.000000 2670.000000 --51.500000 -28.166667 704.000000 2670.000000 --51.333333 -28.166667 869.000000 2670.000000 --51.166667 -28.166667 938.000000 2670.000000 --51.000000 -28.166667 921.000000 2670.000000 --50.833333 -28.166667 869.000000 2670.000000 --50.666667 -28.166667 985.000000 2670.000000 --50.500000 -28.166667 987.000000 2670.000000 --50.333333 -28.166667 1086.000000 2670.000000 --50.166667 -28.166667 992.000000 2670.000000 --50.000000 -28.166667 1153.000000 2670.000000 --49.833333 -28.166667 1296.000000 2670.000000 --49.666667 -28.166667 1457.000000 2670.000000 --49.500000 -28.166667 1101.000000 2670.000000 --49.333333 -28.166667 352.000000 2670.000000 --49.166667 -28.166667 154.000000 2670.000000 --49.000000 -28.166667 92.000000 2670.000000 --48.833333 -28.166667 211.000000 2670.000000 --48.666667 -28.166667 7.000000 2670.000000 --48.500000 -28.166667 -50.000000 1670.000000 --48.333333 -28.166667 -67.000000 1670.000000 --48.166667 -28.166667 -94.000000 1670.000000 --48.000000 -28.166667 -113.000000 1670.000000 --47.833333 -28.166667 -143.000000 1670.000000 --47.666667 -28.166667 -185.000000 1670.000000 --47.500000 -28.166667 -149.000000 1670.000000 --47.333333 -28.166667 -193.000000 1670.000000 --47.166667 -28.166667 -325.000000 1670.000000 --47.000000 -28.166667 -494.000000 1670.000000 --46.833333 -28.166667 -724.000000 1670.000000 --46.666667 -28.166667 -1316.000000 1670.000000 --46.500000 -28.166667 -1906.000000 1670.000000 --46.333333 -28.166667 -2383.000000 1670.000000 --46.166667 -28.166667 -2441.000000 1670.000000 --46.000000 -28.166667 -2578.000000 1670.000000 --45.833333 -28.166667 -2714.000000 1670.000000 --45.666667 -28.166667 -2799.000000 1670.000000 --45.500000 -28.166667 -2870.000000 1670.000000 --45.333333 -28.166667 -3041.000000 1670.000000 --45.166667 -28.166667 -3311.000000 1670.000000 --45.000000 -28.166667 -3452.000000 1670.000000 --44.833333 -28.166667 -3400.000000 1670.000000 --44.666667 -28.166667 -3425.000000 1670.000000 --44.500000 -28.166667 -3500.000000 1670.000000 --44.333333 -28.166667 -3523.000000 1670.000000 --44.166667 -28.166667 -3419.000000 1670.000000 --44.000000 -28.166667 -3516.000000 1670.000000 --43.833333 -28.166667 -3562.000000 1670.000000 --43.666667 -28.166667 -3629.000000 1670.000000 --43.500000 -28.166667 -3503.000000 1670.000000 --43.333333 -28.166667 -3608.000000 1670.000000 --43.166667 -28.166667 -3269.000000 1670.000000 --43.000000 -28.166667 -2957.000000 1670.000000 --42.833333 -28.166667 -2827.000000 1670.000000 --42.666667 -28.166667 -2852.000000 1670.000000 --42.500000 -28.166667 -2875.000000 1670.000000 --42.333333 -28.166667 -3021.000000 1670.000000 --42.166667 -28.166667 -3177.000000 1670.000000 --42.000000 -28.166667 -3088.000000 1670.000000 --41.833333 -28.166667 -3080.000000 1670.000000 --41.666667 -28.166667 -3049.000000 1670.000000 --41.500000 -28.166667 -3073.000000 1670.000000 --41.333333 -28.166667 -3069.000000 1670.000000 --41.166667 -28.166667 -3188.000000 1670.000000 --41.000000 -28.166667 -3185.000000 1670.000000 --40.833333 -28.166667 -2765.000000 1670.000000 --40.666667 -28.166667 -2730.000000 1670.000000 --40.500000 -28.166667 -2609.000000 1670.000000 --40.333333 -28.166667 -2465.000000 1670.000000 --40.166667 -28.166667 -2760.000000 1670.000000 --40.000000 -28.166667 -3922.000000 1670.000000 --65.000000 -28.333333 407.000000 2670.000000 --64.833333 -28.333333 581.000000 2670.000000 --64.666667 -28.333333 286.000000 2670.000000 --64.500000 -28.333333 207.000000 2670.000000 --64.333333 -28.333333 156.000000 2670.000000 --64.166667 -28.333333 137.000000 2670.000000 --64.000000 -28.333333 137.000000 2670.000000 --63.833333 -28.333333 131.000000 2670.000000 --63.666667 -28.333333 127.000000 2670.000000 --63.500000 -28.333333 124.000000 2670.000000 --63.333333 -28.333333 120.000000 2670.000000 --63.166667 -28.333333 117.000000 2670.000000 --63.000000 -28.333333 114.000000 2670.000000 --62.833333 -28.333333 115.000000 2670.000000 --62.666667 -28.333333 114.000000 2670.000000 --62.500000 -28.333333 111.000000 2670.000000 --62.333333 -28.333333 123.000000 2670.000000 --62.166667 -28.333333 90.000000 2670.000000 --62.000000 -28.333333 86.000000 2670.000000 --61.833333 -28.333333 82.000000 2670.000000 --61.666667 -28.333333 76.000000 2670.000000 --61.500000 -28.333333 74.000000 2670.000000 --61.333333 -28.333333 69.000000 2670.000000 --61.166667 -28.333333 67.000000 2670.000000 --61.000000 -28.333333 65.000000 2670.000000 --60.833333 -28.333333 63.000000 2670.000000 --60.666667 -28.333333 62.000000 2670.000000 --60.500000 -28.333333 61.000000 2670.000000 --60.333333 -28.333333 59.000000 2670.000000 --60.166667 -28.333333 60.000000 2670.000000 --60.000000 -28.333333 62.000000 2670.000000 --59.833333 -28.333333 61.000000 2670.000000 --59.666667 -28.333333 61.000000 2670.000000 --59.500000 -28.333333 54.000000 2670.000000 --59.333333 -28.333333 52.000000 2670.000000 --59.166667 -28.333333 41.000000 2670.000000 --59.000000 -28.333333 41.000000 2670.000000 --58.833333 -28.333333 67.000000 2670.000000 --58.666667 -28.333333 68.000000 2670.000000 --58.500000 -28.333333 62.000000 2670.000000 --58.333333 -28.333333 72.000000 2670.000000 --58.166667 -28.333333 64.000000 2670.000000 --58.000000 -28.333333 72.000000 2670.000000 --57.833333 -28.333333 64.000000 2670.000000 --57.666667 -28.333333 61.000000 2670.000000 --57.500000 -28.333333 61.000000 2670.000000 --57.333333 -28.333333 61.000000 2670.000000 --57.166667 -28.333333 64.000000 2670.000000 --57.000000 -28.333333 66.000000 2670.000000 --56.833333 -28.333333 68.000000 2670.000000 --56.666667 -28.333333 74.000000 2670.000000 --56.500000 -28.333333 63.000000 2670.000000 --56.333333 -28.333333 79.000000 2670.000000 --56.166667 -28.333333 80.000000 2670.000000 --56.000000 -28.333333 103.000000 2670.000000 --55.833333 -28.333333 79.000000 2670.000000 --55.666667 -28.333333 71.000000 2670.000000 --55.500000 -28.333333 74.000000 2670.000000 --55.333333 -28.333333 141.000000 2670.000000 --55.166667 -28.333333 129.000000 2670.000000 --55.000000 -28.333333 163.000000 2670.000000 --54.833333 -28.333333 293.000000 2670.000000 --54.666667 -28.333333 190.000000 2670.000000 --54.500000 -28.333333 187.000000 2670.000000 --54.333333 -28.333333 216.000000 2670.000000 --54.166667 -28.333333 223.000000 2670.000000 --54.000000 -28.333333 253.000000 2670.000000 --53.833333 -28.333333 346.000000 2670.000000 --53.666667 -28.333333 354.000000 2670.000000 --53.500000 -28.333333 472.000000 2670.000000 --53.333333 -28.333333 498.000000 2670.000000 --53.166667 -28.333333 470.000000 2670.000000 --53.000000 -28.333333 537.000000 2670.000000 --52.833333 -28.333333 527.000000 2670.000000 --52.666667 -28.333333 570.000000 2670.000000 --52.500000 -28.333333 551.000000 2670.000000 --52.333333 -28.333333 686.000000 2670.000000 --52.166667 -28.333333 675.000000 2670.000000 --52.000000 -28.333333 780.000000 2670.000000 --51.833333 -28.333333 796.000000 2670.000000 --51.666667 -28.333333 771.000000 2670.000000 --51.500000 -28.333333 749.000000 2670.000000 --51.333333 -28.333333 757.000000 2670.000000 --51.166667 -28.333333 868.000000 2670.000000 --51.000000 -28.333333 928.000000 2670.000000 --50.833333 -28.333333 947.000000 2670.000000 --50.666667 -28.333333 782.000000 2670.000000 --50.500000 -28.333333 945.000000 2670.000000 --50.333333 -28.333333 981.000000 2670.000000 --50.166667 -28.333333 1142.000000 2670.000000 --50.000000 -28.333333 1265.000000 2670.000000 --49.833333 -28.333333 1360.000000 2670.000000 --49.666667 -28.333333 1218.000000 2670.000000 --49.500000 -28.333333 542.000000 2670.000000 --49.333333 -28.333333 211.000000 2670.000000 --49.166667 -28.333333 56.000000 2670.000000 --49.000000 -28.333333 210.000000 2670.000000 --48.833333 -28.333333 3.000000 2670.000000 --48.666667 -28.333333 -14.000000 1670.000000 --48.500000 -28.333333 -57.000000 1670.000000 --48.333333 -28.333333 -79.000000 1670.000000 --48.166667 -28.333333 -99.000000 1670.000000 --48.000000 -28.333333 -125.000000 1670.000000 --47.833333 -28.333333 -175.000000 1670.000000 --47.666667 -28.333333 -146.000000 1670.000000 --47.500000 -28.333333 -162.000000 1670.000000 --47.333333 -28.333333 -202.000000 1670.000000 --47.166667 -28.333333 -373.000000 1670.000000 --47.000000 -28.333333 -446.000000 1670.000000 --46.833333 -28.333333 -707.000000 1670.000000 --46.666667 -28.333333 -1357.000000 1670.000000 --46.500000 -28.333333 -2004.000000 1670.000000 --46.333333 -28.333333 -2317.000000 1670.000000 --46.166667 -28.333333 -2485.000000 1670.000000 --46.000000 -28.333333 -2647.000000 1670.000000 --45.833333 -28.333333 -2740.000000 1670.000000 --45.666667 -28.333333 -2842.000000 1670.000000 --45.500000 -28.333333 -2966.000000 1670.000000 --45.333333 -28.333333 -3156.000000 1670.000000 --45.166667 -28.333333 -3390.000000 1670.000000 --45.000000 -28.333333 -3381.000000 1670.000000 --44.833333 -28.333333 -3461.000000 1670.000000 --44.666667 -28.333333 -3541.000000 1670.000000 --44.500000 -28.333333 -3598.000000 1670.000000 --44.333333 -28.333333 -3596.000000 1670.000000 --44.166667 -28.333333 -3614.000000 1670.000000 --44.000000 -28.333333 -3643.000000 1670.000000 --43.833333 -28.333333 -3648.000000 1670.000000 --43.666667 -28.333333 -3692.000000 1670.000000 --43.500000 -28.333333 -3588.000000 1670.000000 --43.333333 -28.333333 -3611.000000 1670.000000 --43.166667 -28.333333 -3603.000000 1670.000000 --43.000000 -28.333333 -3234.000000 1670.000000 --42.833333 -28.333333 -3086.000000 1670.000000 --42.666667 -28.333333 -2965.000000 1670.000000 --42.500000 -28.333333 -3006.000000 1670.000000 --42.333333 -28.333333 -2932.000000 1670.000000 --42.166667 -28.333333 -3038.000000 1670.000000 --42.000000 -28.333333 -3142.000000 1670.000000 --41.833333 -28.333333 -3156.000000 1670.000000 --41.666667 -28.333333 -3107.000000 1670.000000 --41.500000 -28.333333 -3144.000000 1670.000000 --41.333333 -28.333333 -3127.000000 1670.000000 --41.166667 -28.333333 -3217.000000 1670.000000 --41.000000 -28.333333 -2632.000000 1670.000000 --40.833333 -28.333333 -3179.000000 1670.000000 --40.666667 -28.333333 -3762.000000 1670.000000 --40.500000 -28.333333 -4236.000000 1670.000000 --40.333333 -28.333333 -4462.000000 1670.000000 --40.166667 -28.333333 -4526.000000 1670.000000 --40.000000 -28.333333 -4470.000000 1670.000000 --65.000000 -28.500000 354.000000 2670.000000 --64.833333 -28.500000 400.000000 2670.000000 --64.666667 -28.500000 277.000000 2670.000000 --64.500000 -28.500000 182.000000 2670.000000 --64.333333 -28.500000 130.000000 2670.000000 --64.166667 -28.500000 127.000000 2670.000000 --64.000000 -28.500000 130.000000 2670.000000 --63.833333 -28.500000 122.000000 2670.000000 --63.666667 -28.500000 120.000000 2670.000000 --63.500000 -28.500000 118.000000 2670.000000 --63.333333 -28.500000 114.000000 2670.000000 --63.166667 -28.500000 112.000000 2670.000000 --63.000000 -28.500000 111.000000 2670.000000 --62.833333 -28.500000 109.000000 2670.000000 --62.666667 -28.500000 108.000000 2670.000000 --62.500000 -28.500000 104.000000 2670.000000 --62.333333 -28.500000 104.000000 2670.000000 --62.166667 -28.500000 95.000000 2670.000000 --62.000000 -28.500000 89.000000 2670.000000 --61.833333 -28.500000 84.000000 2670.000000 --61.666667 -28.500000 78.000000 2670.000000 --61.500000 -28.500000 73.000000 2670.000000 --61.333333 -28.500000 69.000000 2670.000000 --61.166667 -28.500000 66.000000 2670.000000 --61.000000 -28.500000 64.000000 2670.000000 --60.833333 -28.500000 61.000000 2670.000000 --60.666667 -28.500000 59.000000 2670.000000 --60.500000 -28.500000 60.000000 2670.000000 --60.333333 -28.500000 59.000000 2670.000000 --60.166667 -28.500000 61.000000 2670.000000 --60.000000 -28.500000 61.000000 2670.000000 --59.833333 -28.500000 62.000000 2670.000000 --59.666667 -28.500000 58.000000 2670.000000 --59.500000 -28.500000 51.000000 2670.000000 --59.333333 -28.500000 50.000000 2670.000000 --59.166667 -28.500000 40.000000 2670.000000 --59.000000 -28.500000 70.000000 2670.000000 --58.833333 -28.500000 65.000000 2670.000000 --58.666667 -28.500000 59.000000 2670.000000 --58.500000 -28.500000 72.000000 2670.000000 --58.333333 -28.500000 63.000000 2670.000000 --58.166667 -28.500000 61.000000 2670.000000 --58.000000 -28.500000 63.000000 2670.000000 --57.833333 -28.500000 58.000000 2670.000000 --57.666667 -28.500000 57.000000 2670.000000 --57.500000 -28.500000 59.000000 2670.000000 --57.333333 -28.500000 61.000000 2670.000000 --57.166667 -28.500000 63.000000 2670.000000 --57.000000 -28.500000 70.000000 2670.000000 --56.833333 -28.500000 72.000000 2670.000000 --56.666667 -28.500000 71.000000 2670.000000 --56.500000 -28.500000 91.000000 2670.000000 --56.333333 -28.500000 74.000000 2670.000000 --56.166667 -28.500000 71.000000 2670.000000 --56.000000 -28.500000 58.000000 2670.000000 --55.833333 -28.500000 99.000000 2670.000000 --55.666667 -28.500000 77.000000 2670.000000 --55.500000 -28.500000 99.000000 2670.000000 --55.333333 -28.500000 129.000000 2670.000000 --55.166667 -28.500000 182.000000 2670.000000 --55.000000 -28.500000 186.000000 2670.000000 --54.833333 -28.500000 244.000000 2670.000000 --54.666667 -28.500000 236.000000 2670.000000 --54.500000 -28.500000 296.000000 2670.000000 --54.333333 -28.500000 317.000000 2670.000000 --54.166667 -28.500000 336.000000 2670.000000 --54.000000 -28.500000 334.000000 2670.000000 --53.833333 -28.500000 384.000000 2670.000000 --53.666667 -28.500000 379.000000 2670.000000 --53.500000 -28.500000 458.000000 2670.000000 --53.333333 -28.500000 452.000000 2670.000000 --53.166667 -28.500000 379.000000 2670.000000 --53.000000 -28.500000 477.000000 2670.000000 --52.833333 -28.500000 490.000000 2670.000000 --52.666667 -28.500000 468.000000 2670.000000 --52.500000 -28.500000 493.000000 2670.000000 --52.333333 -28.500000 540.000000 2670.000000 --52.166667 -28.500000 587.000000 2670.000000 --52.000000 -28.500000 766.000000 2670.000000 --51.833333 -28.500000 688.000000 2670.000000 --51.666667 -28.500000 803.000000 2670.000000 --51.500000 -28.500000 699.000000 2670.000000 --51.333333 -28.500000 717.000000 2670.000000 --51.166667 -28.500000 814.000000 2670.000000 --51.000000 -28.500000 874.000000 2670.000000 --50.833333 -28.500000 950.000000 2670.000000 --50.666667 -28.500000 950.000000 2670.000000 --50.500000 -28.500000 989.000000 2670.000000 --50.333333 -28.500000 1033.000000 2670.000000 --50.166667 -28.500000 992.000000 2670.000000 --50.000000 -28.500000 1031.000000 2670.000000 --49.833333 -28.500000 1060.000000 2670.000000 --49.666667 -28.500000 1295.000000 2670.000000 --49.500000 -28.500000 284.000000 2670.000000 --49.333333 -28.500000 152.000000 2670.000000 --49.166667 -28.500000 366.000000 2670.000000 --49.000000 -28.500000 3.000000 2670.000000 --48.833333 -28.500000 -3.000000 1670.000000 --48.666667 -28.500000 -44.000000 1670.000000 --48.500000 -28.500000 -67.000000 1670.000000 --48.333333 -28.500000 -88.000000 1670.000000 --48.166667 -28.500000 -103.000000 1670.000000 --48.000000 -28.500000 -149.000000 1670.000000 --47.833333 -28.500000 -141.000000 1670.000000 --47.666667 -28.500000 -152.000000 1670.000000 --47.500000 -28.500000 -151.000000 1670.000000 --47.333333 -28.500000 -234.000000 1670.000000 --47.166667 -28.500000 -348.000000 1670.000000 --47.000000 -28.500000 -430.000000 1670.000000 --46.833333 -28.500000 -833.000000 1670.000000 --46.666667 -28.500000 -1629.000000 1670.000000 --46.500000 -28.500000 -2132.000000 1670.000000 --46.333333 -28.500000 -2338.000000 1670.000000 --46.166667 -28.500000 -2528.000000 1670.000000 --46.000000 -28.500000 -2661.000000 1670.000000 --45.833333 -28.500000 -2783.000000 1670.000000 --45.666667 -28.500000 -2874.000000 1670.000000 --45.500000 -28.500000 -2978.000000 1670.000000 --45.333333 -28.500000 -3275.000000 1670.000000 --45.166667 -28.500000 -3334.000000 1670.000000 --45.000000 -28.500000 -3437.000000 1670.000000 --44.833333 -28.500000 -3509.000000 1670.000000 --44.666667 -28.500000 -3620.000000 1670.000000 --44.500000 -28.500000 -3649.000000 1670.000000 --44.333333 -28.500000 -3674.000000 1670.000000 --44.166667 -28.500000 -3713.000000 1670.000000 --44.000000 -28.500000 -3711.000000 1670.000000 --43.833333 -28.500000 -3712.000000 1670.000000 --43.666667 -28.500000 -3703.000000 1670.000000 --43.500000 -28.500000 -3653.000000 1670.000000 --43.333333 -28.500000 -3726.000000 1670.000000 --43.166667 -28.500000 -3770.000000 1670.000000 --43.000000 -28.500000 -3731.000000 1670.000000 --42.833333 -28.500000 -3438.000000 1670.000000 --42.666667 -28.500000 -3481.000000 1670.000000 --42.500000 -28.500000 -3313.000000 1670.000000 --42.333333 -28.500000 -3077.000000 1670.000000 --42.166667 -28.500000 -3103.000000 1670.000000 --42.000000 -28.500000 -3209.000000 1670.000000 --41.833333 -28.500000 -3733.000000 1670.000000 --41.666667 -28.500000 -4016.000000 1670.000000 --41.500000 -28.500000 -4295.000000 1670.000000 --41.333333 -28.500000 -4424.000000 1670.000000 --41.166667 -28.500000 -4229.000000 1670.000000 --41.000000 -28.500000 -4112.000000 1670.000000 --40.833333 -28.500000 -4074.000000 1670.000000 --40.666667 -28.500000 -3989.000000 1670.000000 --40.500000 -28.500000 -4021.000000 1670.000000 --40.333333 -28.500000 -4026.000000 1670.000000 --40.166667 -28.500000 -4091.000000 1670.000000 --40.000000 -28.500000 -3992.000000 1670.000000 --65.000000 -28.666667 306.000000 2670.000000 --64.833333 -28.666667 332.000000 2670.000000 --64.666667 -28.666667 245.000000 2670.000000 --64.500000 -28.666667 162.000000 2670.000000 --64.333333 -28.666667 119.000000 2670.000000 --64.166667 -28.666667 118.000000 2670.000000 --64.000000 -28.666667 119.000000 2670.000000 --63.833333 -28.666667 123.000000 2670.000000 --63.666667 -28.666667 115.000000 2670.000000 --63.500000 -28.666667 113.000000 2670.000000 --63.333333 -28.666667 108.000000 2670.000000 --63.166667 -28.666667 107.000000 2670.000000 --63.000000 -28.666667 106.000000 2670.000000 --62.833333 -28.666667 103.000000 2670.000000 --62.666667 -28.666667 102.000000 2670.000000 --62.500000 -28.666667 99.000000 2670.000000 --62.333333 -28.666667 95.000000 2670.000000 --62.166667 -28.666667 93.000000 2670.000000 --62.000000 -28.666667 86.000000 2670.000000 --61.833333 -28.666667 85.000000 2670.000000 --61.666667 -28.666667 79.000000 2670.000000 --61.500000 -28.666667 73.000000 2670.000000 --61.333333 -28.666667 71.000000 2670.000000 --61.166667 -28.666667 66.000000 2670.000000 --61.000000 -28.666667 63.000000 2670.000000 --60.833333 -28.666667 61.000000 2670.000000 --60.666667 -28.666667 60.000000 2670.000000 --60.500000 -28.666667 58.000000 2670.000000 --60.333333 -28.666667 58.000000 2670.000000 --60.166667 -28.666667 57.000000 2670.000000 --60.000000 -28.666667 61.000000 2670.000000 --59.833333 -28.666667 57.000000 2670.000000 --59.666667 -28.666667 58.000000 2670.000000 --59.500000 -28.666667 52.000000 2670.000000 --59.333333 -28.666667 39.000000 2670.000000 --59.166667 -28.666667 38.000000 2670.000000 --59.000000 -28.666667 63.000000 2670.000000 --58.833333 -28.666667 63.000000 2670.000000 --58.666667 -28.666667 68.000000 2670.000000 --58.500000 -28.666667 59.000000 2670.000000 --58.333333 -28.666667 59.000000 2670.000000 --58.166667 -28.666667 52.000000 2670.000000 --58.000000 -28.666667 53.000000 2670.000000 --57.833333 -28.666667 54.000000 2670.000000 --57.666667 -28.666667 59.000000 2670.000000 --57.500000 -28.666667 72.000000 2670.000000 --57.333333 -28.666667 71.000000 2670.000000 --57.166667 -28.666667 67.000000 2670.000000 --57.000000 -28.666667 70.000000 2670.000000 --56.833333 -28.666667 70.000000 2670.000000 --56.666667 -28.666667 56.000000 2670.000000 --56.500000 -28.666667 69.000000 2670.000000 --56.333333 -28.666667 73.000000 2670.000000 --56.166667 -28.666667 80.000000 2670.000000 --56.000000 -28.666667 84.000000 2670.000000 --55.833333 -28.666667 77.000000 2670.000000 --55.666667 -28.666667 72.000000 2670.000000 --55.500000 -28.666667 82.000000 2670.000000 --55.333333 -28.666667 99.000000 2670.000000 --55.166667 -28.666667 150.000000 2670.000000 --55.000000 -28.666667 222.000000 2670.000000 --54.833333 -28.666667 190.000000 2670.000000 --54.666667 -28.666667 192.000000 2670.000000 --54.500000 -28.666667 229.000000 2670.000000 --54.333333 -28.666667 278.000000 2670.000000 --54.166667 -28.666667 323.000000 2670.000000 --54.000000 -28.666667 346.000000 2670.000000 --53.833333 -28.666667 388.000000 2670.000000 --53.666667 -28.666667 404.000000 2670.000000 --53.500000 -28.666667 398.000000 2670.000000 --53.333333 -28.666667 440.000000 2670.000000 --53.166667 -28.666667 352.000000 2670.000000 --53.000000 -28.666667 408.000000 2670.000000 --52.833333 -28.666667 416.000000 2670.000000 --52.666667 -28.666667 457.000000 2670.000000 --52.500000 -28.666667 610.000000 2670.000000 --52.333333 -28.666667 680.000000 2670.000000 --52.166667 -28.666667 438.000000 2670.000000 --52.000000 -28.666667 595.000000 2670.000000 --51.833333 -28.666667 488.000000 2670.000000 --51.666667 -28.666667 726.000000 2670.000000 --51.500000 -28.666667 671.000000 2670.000000 --51.333333 -28.666667 711.000000 2670.000000 --51.166667 -28.666667 800.000000 2670.000000 --51.000000 -28.666667 682.000000 2670.000000 --50.833333 -28.666667 858.000000 2670.000000 --50.666667 -28.666667 968.000000 2670.000000 --50.500000 -28.666667 1001.000000 2670.000000 --50.333333 -28.666667 1060.000000 2670.000000 --50.166667 -28.666667 1113.000000 2670.000000 --50.000000 -28.666667 1201.000000 2670.000000 --49.833333 -28.666667 1193.000000 2670.000000 --49.666667 -28.666667 351.000000 2670.000000 --49.500000 -28.666667 60.000000 2670.000000 --49.333333 -28.666667 64.000000 2670.000000 --49.166667 -28.666667 13.000000 2670.000000 --49.000000 -28.666667 26.000000 2670.000000 --48.833333 -28.666667 -40.000000 1670.000000 --48.666667 -28.666667 -61.000000 1670.000000 --48.500000 -28.666667 -79.000000 1670.000000 --48.333333 -28.666667 -101.000000 1670.000000 --48.166667 -28.666667 -123.000000 1670.000000 --48.000000 -28.666667 -126.000000 1670.000000 --47.833333 -28.666667 -127.000000 1670.000000 --47.666667 -28.666667 -189.000000 1670.000000 --47.500000 -28.666667 -279.000000 1670.000000 --47.333333 -28.666667 -534.000000 1670.000000 --47.166667 -28.666667 -619.000000 1670.000000 --47.000000 -28.666667 -827.000000 1670.000000 --46.833333 -28.666667 -1161.000000 1670.000000 --46.666667 -28.666667 -1743.000000 1670.000000 --46.500000 -28.666667 -2026.000000 1670.000000 --46.333333 -28.666667 -2431.000000 1670.000000 --46.166667 -28.666667 -2523.000000 1670.000000 --46.000000 -28.666667 -2671.000000 1670.000000 --45.833333 -28.666667 -2818.000000 1670.000000 --45.666667 -28.666667 -2853.000000 1670.000000 --45.500000 -28.666667 -3036.000000 1670.000000 --45.333333 -28.666667 -3427.000000 1670.000000 --45.166667 -28.666667 -3406.000000 1670.000000 --45.000000 -28.666667 -3543.000000 1670.000000 --44.833333 -28.666667 -3596.000000 1670.000000 --44.666667 -28.666667 -3678.000000 1670.000000 --44.500000 -28.666667 -3674.000000 1670.000000 --44.333333 -28.666667 -3675.000000 1670.000000 --44.166667 -28.666667 -3746.000000 1670.000000 --44.000000 -28.666667 -3748.000000 1670.000000 --43.833333 -28.666667 -3800.000000 1670.000000 --43.666667 -28.666667 -3788.000000 1670.000000 --43.500000 -28.666667 -3960.000000 1670.000000 --43.333333 -28.666667 -3960.000000 1670.000000 --43.166667 -28.666667 -4012.000000 1670.000000 --43.000000 -28.666667 -4071.000000 1670.000000 --42.833333 -28.666667 -4079.000000 1670.000000 --42.666667 -28.666667 -3701.000000 1670.000000 --42.500000 -28.666667 -3463.000000 1670.000000 --42.333333 -28.666667 -3318.000000 1670.000000 --42.166667 -28.666667 -3518.000000 1670.000000 --42.000000 -28.666667 -3856.000000 1670.000000 --41.833333 -28.666667 -3959.000000 1670.000000 --41.666667 -28.666667 -3807.000000 1670.000000 --41.500000 -28.666667 -3731.000000 1670.000000 --41.333333 -28.666667 -3919.000000 1670.000000 --41.166667 -28.666667 -3861.000000 1670.000000 --41.000000 -28.666667 -3884.000000 1670.000000 --40.833333 -28.666667 -3843.000000 1670.000000 --40.666667 -28.666667 -3872.000000 1670.000000 --40.500000 -28.666667 -3850.000000 1670.000000 --40.333333 -28.666667 -3914.000000 1670.000000 --40.166667 -28.666667 -3902.000000 1670.000000 --40.000000 -28.666667 -4108.000000 1670.000000 --65.000000 -28.833333 277.000000 2670.000000 --64.833333 -28.833333 301.000000 2670.000000 --64.666667 -28.833333 203.000000 2670.000000 --64.500000 -28.833333 128.000000 2670.000000 --64.333333 -28.833333 113.000000 2670.000000 --64.166667 -28.833333 114.000000 2670.000000 --64.000000 -28.833333 112.000000 2670.000000 --63.833333 -28.833333 113.000000 2670.000000 --63.666667 -28.833333 113.000000 2670.000000 --63.500000 -28.833333 111.000000 2670.000000 --63.333333 -28.833333 104.000000 2670.000000 --63.166667 -28.833333 102.000000 2670.000000 --63.000000 -28.833333 103.000000 2670.000000 --62.833333 -28.833333 97.000000 2670.000000 --62.666667 -28.833333 94.000000 2670.000000 --62.500000 -28.833333 97.000000 2670.000000 --62.333333 -28.833333 92.000000 2670.000000 --62.166667 -28.833333 89.000000 2670.000000 --62.000000 -28.833333 86.000000 2670.000000 --61.833333 -28.833333 81.000000 2670.000000 --61.666667 -28.833333 76.000000 2670.000000 --61.500000 -28.833333 73.000000 2670.000000 --61.333333 -28.833333 68.000000 2670.000000 --61.166667 -28.833333 65.000000 2670.000000 --61.000000 -28.833333 64.000000 2670.000000 --60.833333 -28.833333 61.000000 2670.000000 --60.666667 -28.833333 59.000000 2670.000000 --60.500000 -28.833333 58.000000 2670.000000 --60.333333 -28.833333 56.000000 2670.000000 --60.166667 -28.833333 61.000000 2670.000000 --60.000000 -28.833333 66.000000 2670.000000 --59.833333 -28.833333 60.000000 2670.000000 --59.666667 -28.833333 55.000000 2670.000000 --59.500000 -28.833333 46.000000 2670.000000 --59.333333 -28.833333 36.000000 2670.000000 --59.166667 -28.833333 38.000000 2670.000000 --59.000000 -28.833333 51.000000 2670.000000 --58.833333 -28.833333 67.000000 2670.000000 --58.666667 -28.833333 62.000000 2670.000000 --58.500000 -28.833333 62.000000 2670.000000 --58.333333 -28.833333 49.000000 2670.000000 --58.166667 -28.833333 67.000000 2670.000000 --58.000000 -28.833333 71.000000 2670.000000 --57.833333 -28.833333 74.000000 2670.000000 --57.666667 -28.833333 72.000000 2670.000000 --57.500000 -28.833333 72.000000 2670.000000 --57.333333 -28.833333 69.000000 2670.000000 --57.166667 -28.833333 67.000000 2670.000000 --57.000000 -28.833333 70.000000 2670.000000 --56.833333 -28.833333 68.000000 2670.000000 --56.666667 -28.833333 55.000000 2670.000000 --56.500000 -28.833333 69.000000 2670.000000 --56.333333 -28.833333 73.000000 2670.000000 --56.166667 -28.833333 73.000000 2670.000000 --56.000000 -28.833333 95.000000 2670.000000 --55.833333 -28.833333 86.000000 2670.000000 --55.666667 -28.833333 111.000000 2670.000000 --55.500000 -28.833333 124.000000 2670.000000 --55.333333 -28.833333 147.000000 2670.000000 --55.166667 -28.833333 162.000000 2670.000000 --55.000000 -28.833333 197.000000 2670.000000 --54.833333 -28.833333 189.000000 2670.000000 --54.666667 -28.833333 252.000000 2670.000000 --54.500000 -28.833333 300.000000 2670.000000 --54.333333 -28.833333 285.000000 2670.000000 --54.166667 -28.833333 396.000000 2670.000000 --54.000000 -28.833333 383.000000 2670.000000 --53.833333 -28.833333 398.000000 2670.000000 --53.666667 -28.833333 386.000000 2670.000000 --53.500000 -28.833333 413.000000 2670.000000 --53.333333 -28.833333 380.000000 2670.000000 --53.166667 -28.833333 359.000000 2670.000000 --53.000000 -28.833333 471.000000 2670.000000 --52.833333 -28.833333 398.000000 2670.000000 --52.666667 -28.833333 568.000000 2670.000000 --52.500000 -28.833333 677.000000 2670.000000 --52.333333 -28.833333 644.000000 2670.000000 --52.166667 -28.833333 590.000000 2670.000000 --52.000000 -28.833333 432.000000 2670.000000 --51.833333 -28.833333 412.000000 2670.000000 --51.666667 -28.833333 567.000000 2670.000000 --51.500000 -28.833333 534.000000 2670.000000 --51.333333 -28.833333 764.000000 2670.000000 --51.166667 -28.833333 550.000000 2670.000000 --51.000000 -28.833333 541.000000 2670.000000 --50.833333 -28.833333 578.000000 2670.000000 --50.666667 -28.833333 790.000000 2670.000000 --50.500000 -28.833333 854.000000 2670.000000 --50.333333 -28.833333 896.000000 2670.000000 --50.166667 -28.833333 903.000000 2670.000000 --50.000000 -28.833333 1065.000000 2670.000000 --49.833333 -28.833333 112.000000 2670.000000 --49.666667 -28.833333 45.000000 2670.000000 --49.500000 -28.833333 11.000000 2670.000000 --49.333333 -28.833333 7.000000 2670.000000 --49.166667 -28.833333 -27.000000 1670.000000 --49.000000 -28.833333 -43.000000 1670.000000 --48.833333 -28.833333 -58.000000 1670.000000 --48.666667 -28.833333 -70.000000 1670.000000 --48.500000 -28.833333 -91.000000 1670.000000 --48.333333 -28.833333 -108.000000 1670.000000 --48.166667 -28.833333 -129.000000 1670.000000 --48.000000 -28.833333 -136.000000 1670.000000 --47.833333 -28.833333 -208.000000 1670.000000 --47.666667 -28.833333 -411.000000 1670.000000 --47.500000 -28.833333 -758.000000 1670.000000 --47.333333 -28.833333 -995.000000 1670.000000 --47.166667 -28.833333 -1090.000000 1670.000000 --47.000000 -28.833333 -1242.000000 1670.000000 --46.833333 -28.833333 -1487.000000 1670.000000 --46.666667 -28.833333 -1780.000000 1670.000000 --46.500000 -28.833333 -2164.000000 1670.000000 --46.333333 -28.833333 -2375.000000 1670.000000 --46.166667 -28.833333 -2524.000000 1670.000000 --46.000000 -28.833333 -2654.000000 1670.000000 --45.833333 -28.833333 -2800.000000 1670.000000 --45.666667 -28.833333 -2857.000000 1670.000000 --45.500000 -28.833333 -3064.000000 1670.000000 --45.333333 -28.833333 -3421.000000 1670.000000 --45.166667 -28.833333 -3479.000000 1670.000000 --45.000000 -28.833333 -3577.000000 1670.000000 --44.833333 -28.833333 -3616.000000 1670.000000 --44.666667 -28.833333 -3662.000000 1670.000000 --44.500000 -28.833333 -3706.000000 1670.000000 --44.333333 -28.833333 -3703.000000 1670.000000 --44.166667 -28.833333 -3760.000000 1670.000000 --44.000000 -28.833333 -3754.000000 1670.000000 --43.833333 -28.833333 -3830.000000 1670.000000 --43.666667 -28.833333 -3862.000000 1670.000000 --43.500000 -28.833333 -3943.000000 1670.000000 --43.333333 -28.833333 -3971.000000 1670.000000 --43.166667 -28.833333 -3957.000000 1670.000000 --43.000000 -28.833333 -4016.000000 1670.000000 --42.833333 -28.833333 -4000.000000 1670.000000 --42.666667 -28.833333 -3869.000000 1670.000000 --42.500000 -28.833333 -3739.000000 1670.000000 --42.333333 -28.833333 -3800.000000 1670.000000 --42.166667 -28.833333 -3958.000000 1670.000000 --42.000000 -28.833333 -4070.000000 1670.000000 --41.833333 -28.833333 -3997.000000 1670.000000 --41.666667 -28.833333 -3684.000000 1670.000000 --41.500000 -28.833333 -3639.000000 1670.000000 --41.333333 -28.833333 -3777.000000 1670.000000 --41.166667 -28.833333 -3797.000000 1670.000000 --41.000000 -28.833333 -3786.000000 1670.000000 --40.833333 -28.833333 -3797.000000 1670.000000 --40.666667 -28.833333 -3785.000000 1670.000000 --40.500000 -28.833333 -3808.000000 1670.000000 --40.333333 -28.833333 -3784.000000 1670.000000 --40.166667 -28.833333 -3873.000000 1670.000000 --40.000000 -28.833333 -3954.000000 1670.000000 --65.000000 -29.000000 284.000000 2670.000000 --64.833333 -29.000000 235.000000 2670.000000 --64.666667 -29.000000 168.000000 2670.000000 --64.500000 -29.000000 116.000000 2670.000000 --64.333333 -29.000000 114.000000 2670.000000 --64.166667 -29.000000 110.000000 2670.000000 --64.000000 -29.000000 136.000000 2670.000000 --63.833333 -29.000000 158.000000 2670.000000 --63.666667 -29.000000 147.000000 2670.000000 --63.500000 -29.000000 107.000000 2670.000000 --63.333333 -29.000000 102.000000 2670.000000 --63.166667 -29.000000 97.000000 2670.000000 --63.000000 -29.000000 97.000000 2670.000000 --62.833333 -29.000000 95.000000 2670.000000 --62.666667 -29.000000 91.000000 2670.000000 --62.500000 -29.000000 89.000000 2670.000000 --62.333333 -29.000000 87.000000 2670.000000 --62.166667 -29.000000 85.000000 2670.000000 --62.000000 -29.000000 82.000000 2670.000000 --61.833333 -29.000000 79.000000 2670.000000 --61.666667 -29.000000 77.000000 2670.000000 --61.500000 -29.000000 72.000000 2670.000000 --61.333333 -29.000000 68.000000 2670.000000 --61.166667 -29.000000 66.000000 2670.000000 --61.000000 -29.000000 63.000000 2670.000000 --60.833333 -29.000000 61.000000 2670.000000 --60.666667 -29.000000 58.000000 2670.000000 --60.500000 -29.000000 54.000000 2670.000000 --60.333333 -29.000000 61.000000 2670.000000 --60.166667 -29.000000 60.000000 2670.000000 --60.000000 -29.000000 59.000000 2670.000000 --59.833333 -29.000000 56.000000 2670.000000 --59.666667 -29.000000 53.000000 2670.000000 --59.500000 -29.000000 37.000000 2670.000000 --59.333333 -29.000000 35.000000 2670.000000 --59.166667 -29.000000 55.000000 2670.000000 --59.000000 -29.000000 60.000000 2670.000000 --58.833333 -29.000000 59.000000 2670.000000 --58.666667 -29.000000 59.000000 2670.000000 --58.500000 -29.000000 49.000000 2670.000000 --58.333333 -29.000000 62.000000 2670.000000 --58.166667 -29.000000 71.000000 2670.000000 --58.000000 -29.000000 94.000000 2670.000000 --57.833333 -29.000000 75.000000 2670.000000 --57.666667 -29.000000 66.000000 2670.000000 --57.500000 -29.000000 66.000000 2670.000000 --57.333333 -29.000000 65.000000 2670.000000 --57.166667 -29.000000 74.000000 2670.000000 --57.000000 -29.000000 69.000000 2670.000000 --56.833333 -29.000000 65.000000 2670.000000 --56.666667 -29.000000 64.000000 2670.000000 --56.500000 -29.000000 63.000000 2670.000000 --56.333333 -29.000000 66.000000 2670.000000 --56.166667 -29.000000 61.000000 2670.000000 --56.000000 -29.000000 75.000000 2670.000000 --55.833333 -29.000000 91.000000 2670.000000 --55.666667 -29.000000 121.000000 2670.000000 --55.500000 -29.000000 178.000000 2670.000000 --55.333333 -29.000000 235.000000 2670.000000 --55.166667 -29.000000 260.000000 2670.000000 --55.000000 -29.000000 296.000000 2670.000000 --54.833333 -29.000000 279.000000 2670.000000 --54.666667 -29.000000 354.000000 2670.000000 --54.500000 -29.000000 316.000000 2670.000000 --54.333333 -29.000000 375.000000 2670.000000 --54.166667 -29.000000 434.000000 2670.000000 --54.000000 -29.000000 487.000000 2670.000000 --53.833333 -29.000000 400.000000 2670.000000 --53.666667 -29.000000 392.000000 2670.000000 --53.500000 -29.000000 373.000000 2670.000000 --53.333333 -29.000000 365.000000 2670.000000 --53.166667 -29.000000 340.000000 2670.000000 --53.000000 -29.000000 425.000000 2670.000000 --52.833333 -29.000000 596.000000 2670.000000 --52.666667 -29.000000 669.000000 2670.000000 --52.500000 -29.000000 486.000000 2670.000000 --52.333333 -29.000000 676.000000 2670.000000 --52.166667 -29.000000 512.000000 2670.000000 --52.000000 -29.000000 440.000000 2670.000000 --51.833333 -29.000000 576.000000 2670.000000 --51.666667 -29.000000 387.000000 2670.000000 --51.500000 -29.000000 514.000000 2670.000000 --51.333333 -29.000000 579.000000 2670.000000 --51.166667 -29.000000 689.000000 2670.000000 --51.000000 -29.000000 810.000000 2670.000000 --50.833333 -29.000000 864.000000 2670.000000 --50.666667 -29.000000 915.000000 2670.000000 --50.500000 -29.000000 934.000000 2670.000000 --50.333333 -29.000000 864.000000 2670.000000 --50.166667 -29.000000 1029.000000 2670.000000 --50.000000 -29.000000 1043.000000 2670.000000 --49.833333 -29.000000 96.000000 2670.000000 --49.666667 -29.000000 20.000000 2670.000000 --49.500000 -29.000000 6.000000 2670.000000 --49.333333 -29.000000 -32.000000 1670.000000 --49.166667 -29.000000 -44.000000 1670.000000 --49.000000 -29.000000 -50.000000 1670.000000 --48.833333 -29.000000 -63.000000 1670.000000 --48.666667 -29.000000 -86.000000 1670.000000 --48.500000 -29.000000 -102.000000 1670.000000 --48.333333 -29.000000 -120.000000 1670.000000 --48.166667 -29.000000 -127.000000 1670.000000 --48.000000 -29.000000 -163.000000 1670.000000 --47.833333 -29.000000 -420.000000 1670.000000 --47.666667 -29.000000 -758.000000 1670.000000 --47.500000 -29.000000 -971.000000 1670.000000 --47.333333 -29.000000 -1200.000000 1670.000000 --47.166667 -29.000000 -1438.000000 1670.000000 --47.000000 -29.000000 -1540.000000 1670.000000 --46.833333 -29.000000 -1770.000000 1670.000000 --46.666667 -29.000000 -1978.000000 1670.000000 --46.500000 -29.000000 -2276.000000 1670.000000 --46.333333 -29.000000 -2420.000000 1670.000000 --46.166667 -29.000000 -2534.000000 1670.000000 --46.000000 -29.000000 -2644.000000 1670.000000 --45.833333 -29.000000 -2749.000000 1670.000000 --45.666667 -29.000000 -2866.000000 1670.000000 --45.500000 -29.000000 -3201.000000 1670.000000 --45.333333 -29.000000 -3388.000000 1670.000000 --45.166667 -29.000000 -3524.000000 1670.000000 --45.000000 -29.000000 -3656.000000 1670.000000 --44.833333 -29.000000 -3654.000000 1670.000000 --44.666667 -29.000000 -3680.000000 1670.000000 --44.500000 -29.000000 -3652.000000 1670.000000 --44.333333 -29.000000 -3696.000000 1670.000000 --44.166667 -29.000000 -3771.000000 1670.000000 --44.000000 -29.000000 -3852.000000 1670.000000 --43.833333 -29.000000 -3848.000000 1670.000000 --43.666667 -29.000000 -3901.000000 1670.000000 --43.500000 -29.000000 -3935.000000 1670.000000 --43.333333 -29.000000 -4012.000000 1670.000000 --43.166667 -29.000000 -3992.000000 1670.000000 --43.000000 -29.000000 -4014.000000 1670.000000 --42.833333 -29.000000 -4023.000000 1670.000000 --42.666667 -29.000000 -4009.000000 1670.000000 --42.500000 -29.000000 -3983.000000 1670.000000 --42.333333 -29.000000 -3969.000000 1670.000000 --42.166667 -29.000000 -3982.000000 1670.000000 --42.000000 -29.000000 -4013.000000 1670.000000 --41.833333 -29.000000 -4085.000000 1670.000000 --41.666667 -29.000000 -3802.000000 1670.000000 --41.500000 -29.000000 -3769.000000 1670.000000 --41.333333 -29.000000 -3758.000000 1670.000000 --41.166667 -29.000000 -3748.000000 1670.000000 --41.000000 -29.000000 -3787.000000 1670.000000 --40.833333 -29.000000 -3782.000000 1670.000000 --40.666667 -29.000000 -3714.000000 1670.000000 --40.500000 -29.000000 -3733.000000 1670.000000 --40.333333 -29.000000 -3777.000000 1670.000000 --40.166667 -29.000000 -3871.000000 1670.000000 --40.000000 -29.000000 -3897.000000 1670.000000 --65.000000 -29.166667 285.000000 2670.000000 --64.833333 -29.166667 216.000000 2670.000000 --64.666667 -29.166667 136.000000 2670.000000 --64.500000 -29.166667 118.000000 2670.000000 --64.333333 -29.166667 114.000000 2670.000000 --64.166667 -29.166667 114.000000 2670.000000 --64.000000 -29.166667 253.000000 2670.000000 --63.833333 -29.166667 259.000000 2670.000000 --63.666667 -29.166667 253.000000 2670.000000 --63.500000 -29.166667 194.000000 2670.000000 --63.333333 -29.166667 96.000000 2670.000000 --63.166667 -29.166667 92.000000 2670.000000 --63.000000 -29.166667 93.000000 2670.000000 --62.833333 -29.166667 92.000000 2670.000000 --62.666667 -29.166667 90.000000 2670.000000 --62.500000 -29.166667 87.000000 2670.000000 --62.333333 -29.166667 82.000000 2670.000000 --62.166667 -29.166667 80.000000 2670.000000 --62.000000 -29.166667 79.000000 2670.000000 --61.833333 -29.166667 78.000000 2670.000000 --61.666667 -29.166667 75.000000 2670.000000 --61.500000 -29.166667 72.000000 2670.000000 --61.333333 -29.166667 68.000000 2670.000000 --61.166667 -29.166667 65.000000 2670.000000 --61.000000 -29.166667 63.000000 2670.000000 --60.833333 -29.166667 60.000000 2670.000000 --60.666667 -29.166667 56.000000 2670.000000 --60.500000 -29.166667 57.000000 2670.000000 --60.333333 -29.166667 59.000000 2670.000000 --60.166667 -29.166667 63.000000 2670.000000 --60.000000 -29.166667 60.000000 2670.000000 --59.833333 -29.166667 54.000000 2670.000000 --59.666667 -29.166667 49.000000 2670.000000 --59.500000 -29.166667 35.000000 2670.000000 --59.333333 -29.166667 36.000000 2670.000000 --59.166667 -29.166667 63.000000 2670.000000 --59.000000 -29.166667 57.000000 2670.000000 --58.833333 -29.166667 49.000000 2670.000000 --58.666667 -29.166667 47.000000 2670.000000 --58.500000 -29.166667 52.000000 2670.000000 --58.333333 -29.166667 74.000000 2670.000000 --58.166667 -29.166667 88.000000 2670.000000 --58.000000 -29.166667 96.000000 2670.000000 --57.833333 -29.166667 78.000000 2670.000000 --57.666667 -29.166667 66.000000 2670.000000 --57.500000 -29.166667 58.000000 2670.000000 --57.333333 -29.166667 69.000000 2670.000000 --57.166667 -29.166667 71.000000 2670.000000 --57.000000 -29.166667 64.000000 2670.000000 --56.833333 -29.166667 59.000000 2670.000000 --56.666667 -29.166667 66.000000 2670.000000 --56.500000 -29.166667 61.000000 2670.000000 --56.333333 -29.166667 65.000000 2670.000000 --56.166667 -29.166667 76.000000 2670.000000 --56.000000 -29.166667 83.000000 2670.000000 --55.833333 -29.166667 115.000000 2670.000000 --55.666667 -29.166667 156.000000 2670.000000 --55.500000 -29.166667 97.000000 2670.000000 --55.333333 -29.166667 191.000000 2670.000000 --55.166667 -29.166667 181.000000 2670.000000 --55.000000 -29.166667 258.000000 2670.000000 --54.833333 -29.166667 343.000000 2670.000000 --54.666667 -29.166667 338.000000 2670.000000 --54.500000 -29.166667 358.000000 2670.000000 --54.333333 -29.166667 293.000000 2670.000000 --54.166667 -29.166667 436.000000 2670.000000 --54.000000 -29.166667 445.000000 2670.000000 --53.833333 -29.166667 447.000000 2670.000000 --53.666667 -29.166667 460.000000 2670.000000 --53.500000 -29.166667 408.000000 2670.000000 --53.333333 -29.166667 318.000000 2670.000000 --53.166667 -29.166667 364.000000 2670.000000 --53.000000 -29.166667 312.000000 2670.000000 --52.833333 -29.166667 579.000000 2670.000000 --52.666667 -29.166667 464.000000 2670.000000 --52.500000 -29.166667 435.000000 2670.000000 --52.333333 -29.166667 448.000000 2670.000000 --52.166667 -29.166667 235.000000 2670.000000 --52.000000 -29.166667 253.000000 2670.000000 --51.833333 -29.166667 146.000000 2670.000000 --51.666667 -29.166667 385.000000 2670.000000 --51.500000 -29.166667 624.000000 2670.000000 --51.333333 -29.166667 632.000000 2670.000000 --51.166667 -29.166667 784.000000 2670.000000 --51.000000 -29.166667 693.000000 2670.000000 --50.833333 -29.166667 815.000000 2670.000000 --50.666667 -29.166667 902.000000 2670.000000 --50.500000 -29.166667 973.000000 2670.000000 --50.333333 -29.166667 895.000000 2670.000000 --50.166667 -29.166667 970.000000 2670.000000 --50.000000 -29.166667 373.000000 2670.000000 --49.833333 -29.166667 9.000000 2670.000000 --49.666667 -29.166667 0.000000 2670.000000 --49.500000 -29.166667 -20.000000 1670.000000 --49.333333 -29.166667 -38.000000 1670.000000 --49.166667 -29.166667 -47.000000 1670.000000 --49.000000 -29.166667 -57.000000 1670.000000 --48.833333 -29.166667 -73.000000 1670.000000 --48.666667 -29.166667 -98.000000 1670.000000 --48.500000 -29.166667 -117.000000 1670.000000 --48.333333 -29.166667 -129.000000 1670.000000 --48.166667 -29.166667 -138.000000 1670.000000 --48.000000 -29.166667 -255.000000 1670.000000 --47.833333 -29.166667 -485.000000 1670.000000 --47.666667 -29.166667 -892.000000 1670.000000 --47.500000 -29.166667 -1123.000000 1670.000000 --47.333333 -29.166667 -1392.000000 1670.000000 --47.166667 -29.166667 -1640.000000 1670.000000 --47.000000 -29.166667 -1733.000000 1670.000000 --46.833333 -29.166667 -1894.000000 1670.000000 --46.666667 -29.166667 -2150.000000 1670.000000 --46.500000 -29.166667 -2228.000000 1670.000000 --46.333333 -29.166667 -2404.000000 1670.000000 --46.166667 -29.166667 -2487.000000 1670.000000 --46.000000 -29.166667 -2638.000000 1670.000000 --45.833333 -29.166667 -2740.000000 1670.000000 --45.666667 -29.166667 -2963.000000 1670.000000 --45.500000 -29.166667 -3323.000000 1670.000000 --45.333333 -29.166667 -3465.000000 1670.000000 --45.166667 -29.166667 -3563.000000 1670.000000 --45.000000 -29.166667 -3646.000000 1670.000000 --44.833333 -29.166667 -3631.000000 1670.000000 --44.666667 -29.166667 -3664.000000 1670.000000 --44.500000 -29.166667 -3690.000000 1670.000000 --44.333333 -29.166667 -3732.000000 1670.000000 --44.166667 -29.166667 -3768.000000 1670.000000 --44.000000 -29.166667 -3820.000000 1670.000000 --43.833333 -29.166667 -3867.000000 1670.000000 --43.666667 -29.166667 -3900.000000 1670.000000 --43.500000 -29.166667 -3974.000000 1670.000000 --43.333333 -29.166667 -4057.000000 1670.000000 --43.166667 -29.166667 -4019.000000 1670.000000 --43.000000 -29.166667 -4019.000000 1670.000000 --42.833333 -29.166667 -4013.000000 1670.000000 --42.666667 -29.166667 -4019.000000 1670.000000 --42.500000 -29.166667 -4019.000000 1670.000000 --42.333333 -29.166667 -4010.000000 1670.000000 --42.166667 -29.166667 -3925.000000 1670.000000 --42.000000 -29.166667 -3888.000000 1670.000000 --41.833333 -29.166667 -4085.000000 1670.000000 --41.666667 -29.166667 -3806.000000 1670.000000 --41.500000 -29.166667 -3795.000000 1670.000000 --41.333333 -29.166667 -3754.000000 1670.000000 --41.166667 -29.166667 -3812.000000 1670.000000 --41.000000 -29.166667 -3788.000000 1670.000000 --40.833333 -29.166667 -3712.000000 1670.000000 --40.666667 -29.166667 -3754.000000 1670.000000 --40.500000 -29.166667 -3744.000000 1670.000000 --40.333333 -29.166667 -3934.000000 1670.000000 --40.166667 -29.166667 -3826.000000 1670.000000 --40.000000 -29.166667 -3901.000000 1670.000000 --65.000000 -29.333333 206.000000 2670.000000 --64.833333 -29.333333 233.000000 2670.000000 --64.666667 -29.333333 134.000000 2670.000000 --64.500000 -29.333333 119.000000 2670.000000 --64.333333 -29.333333 115.000000 2670.000000 --64.166667 -29.333333 172.000000 2670.000000 --64.000000 -29.333333 349.000000 2670.000000 --63.833333 -29.333333 399.000000 2670.000000 --63.666667 -29.333333 434.000000 2670.000000 --63.500000 -29.333333 257.000000 2670.000000 --63.333333 -29.333333 93.000000 2670.000000 --63.166667 -29.333333 90.000000 2670.000000 --63.000000 -29.333333 88.000000 2670.000000 --62.833333 -29.333333 88.000000 2670.000000 --62.666667 -29.333333 84.000000 2670.000000 --62.500000 -29.333333 83.000000 2670.000000 --62.333333 -29.333333 83.000000 2670.000000 --62.166667 -29.333333 81.000000 2670.000000 --62.000000 -29.333333 76.000000 2670.000000 --61.833333 -29.333333 74.000000 2670.000000 --61.666667 -29.333333 73.000000 2670.000000 --61.500000 -29.333333 71.000000 2670.000000 --61.333333 -29.333333 67.000000 2670.000000 --61.166667 -29.333333 65.000000 2670.000000 --61.000000 -29.333333 61.000000 2670.000000 --60.833333 -29.333333 58.000000 2670.000000 --60.666667 -29.333333 55.000000 2670.000000 --60.500000 -29.333333 54.000000 2670.000000 --60.333333 -29.333333 60.000000 2670.000000 --60.166667 -29.333333 58.000000 2670.000000 --60.000000 -29.333333 58.000000 2670.000000 --59.833333 -29.333333 50.000000 2670.000000 --59.666667 -29.333333 36.000000 2670.000000 --59.500000 -29.333333 33.000000 2670.000000 --59.333333 -29.333333 37.000000 2670.000000 --59.166667 -29.333333 59.000000 2670.000000 --59.000000 -29.333333 49.000000 2670.000000 --58.833333 -29.333333 43.000000 2670.000000 --58.666667 -29.333333 46.000000 2670.000000 --58.500000 -29.333333 73.000000 2670.000000 --58.333333 -29.333333 92.000000 2670.000000 --58.166667 -29.333333 114.000000 2670.000000 --58.000000 -29.333333 115.000000 2670.000000 --57.833333 -29.333333 90.000000 2670.000000 --57.666667 -29.333333 85.000000 2670.000000 --57.500000 -29.333333 65.000000 2670.000000 --57.333333 -29.333333 69.000000 2670.000000 --57.166667 -29.333333 70.000000 2670.000000 --57.000000 -29.333333 70.000000 2670.000000 --56.833333 -29.333333 61.000000 2670.000000 --56.666667 -29.333333 50.000000 2670.000000 --56.500000 -29.333333 59.000000 2670.000000 --56.333333 -29.333333 64.000000 2670.000000 --56.166667 -29.333333 58.000000 2670.000000 --56.000000 -29.333333 62.000000 2670.000000 --55.833333 -29.333333 82.000000 2670.000000 --55.666667 -29.333333 105.000000 2670.000000 --55.500000 -29.333333 159.000000 2670.000000 --55.333333 -29.333333 180.000000 2670.000000 --55.166667 -29.333333 229.000000 2670.000000 --55.000000 -29.333333 412.000000 2670.000000 --54.833333 -29.333333 272.000000 2670.000000 --54.666667 -29.333333 263.000000 2670.000000 --54.500000 -29.333333 192.000000 2670.000000 --54.333333 -29.333333 374.000000 2670.000000 --54.166667 -29.333333 316.000000 2670.000000 --54.000000 -29.333333 336.000000 2670.000000 --53.833333 -29.333333 419.000000 2670.000000 --53.666667 -29.333333 451.000000 2670.000000 --53.500000 -29.333333 385.000000 2670.000000 --53.333333 -29.333333 430.000000 2670.000000 --53.166667 -29.333333 168.000000 2670.000000 --53.000000 -29.333333 371.000000 2670.000000 --52.833333 -29.333333 506.000000 2670.000000 --52.666667 -29.333333 555.000000 2670.000000 --52.500000 -29.333333 618.000000 2670.000000 --52.333333 -29.333333 571.000000 2670.000000 --52.166667 -29.333333 165.000000 2670.000000 --52.000000 -29.333333 337.000000 2670.000000 --51.833333 -29.333333 374.000000 2670.000000 --51.666667 -29.333333 519.000000 2670.000000 --51.500000 -29.333333 683.000000 2670.000000 --51.333333 -29.333333 554.000000 2670.000000 --51.166667 -29.333333 116.000000 2670.000000 --51.000000 -29.333333 455.000000 2670.000000 --50.833333 -29.333333 799.000000 2670.000000 --50.666667 -29.333333 840.000000 2670.000000 --50.500000 -29.333333 892.000000 2670.000000 --50.333333 -29.333333 920.000000 2670.000000 --50.166667 -29.333333 921.000000 2670.000000 --50.000000 -29.333333 508.000000 2670.000000 --49.833333 -29.333333 12.000000 2670.000000 --49.666667 -29.333333 -22.000000 1670.000000 --49.500000 -29.333333 -27.000000 1670.000000 --49.333333 -29.333333 -44.000000 1670.000000 --49.166667 -29.333333 -51.000000 1670.000000 --49.000000 -29.333333 -68.000000 1670.000000 --48.833333 -29.333333 -94.000000 1670.000000 --48.666667 -29.333333 -114.000000 1670.000000 --48.500000 -29.333333 -129.000000 1670.000000 --48.333333 -29.333333 -131.000000 1670.000000 --48.166667 -29.333333 -185.000000 1670.000000 --48.000000 -29.333333 -330.000000 1670.000000 --47.833333 -29.333333 -523.000000 1670.000000 --47.666667 -29.333333 -928.000000 1670.000000 --47.500000 -29.333333 -1207.000000 1670.000000 --47.333333 -29.333333 -1472.000000 1670.000000 --47.166667 -29.333333 -1833.000000 1670.000000 --47.000000 -29.333333 -1870.000000 1670.000000 --46.833333 -29.333333 -1991.000000 1670.000000 --46.666667 -29.333333 -2156.000000 1670.000000 --46.500000 -29.333333 -2340.000000 1670.000000 --46.333333 -29.333333 -2365.000000 1670.000000 --46.166667 -29.333333 -2476.000000 1670.000000 --46.000000 -29.333333 -2556.000000 1670.000000 --45.833333 -29.333333 -2769.000000 1670.000000 --45.666667 -29.333333 -3079.000000 1670.000000 --45.500000 -29.333333 -3410.000000 1670.000000 --45.333333 -29.333333 -3516.000000 1670.000000 --45.166667 -29.333333 -3586.000000 1670.000000 --45.000000 -29.333333 -3618.000000 1670.000000 --44.833333 -29.333333 -3648.000000 1670.000000 --44.666667 -29.333333 -3679.000000 1670.000000 --44.500000 -29.333333 -3720.000000 1670.000000 --44.333333 -29.333333 -3679.000000 1670.000000 --44.166667 -29.333333 -3741.000000 1670.000000 --44.000000 -29.333333 -3836.000000 1670.000000 --43.833333 -29.333333 -3847.000000 1670.000000 --43.666667 -29.333333 -3905.000000 1670.000000 --43.500000 -29.333333 -3945.000000 1670.000000 --43.333333 -29.333333 -3999.000000 1670.000000 --43.166667 -29.333333 -4022.000000 1670.000000 --43.000000 -29.333333 -4032.000000 1670.000000 --42.833333 -29.333333 -4044.000000 1670.000000 --42.666667 -29.333333 -3998.000000 1670.000000 --42.500000 -29.333333 -3965.000000 1670.000000 --42.333333 -29.333333 -4008.000000 1670.000000 --42.166667 -29.333333 -3971.000000 1670.000000 --42.000000 -29.333333 -3893.000000 1670.000000 --41.833333 -29.333333 -4137.000000 1670.000000 --41.666667 -29.333333 -3812.000000 1670.000000 --41.500000 -29.333333 -3801.000000 1670.000000 --41.333333 -29.333333 -3700.000000 1670.000000 --41.166667 -29.333333 -3775.000000 1670.000000 --41.000000 -29.333333 -3710.000000 1670.000000 --40.833333 -29.333333 -3825.000000 1670.000000 --40.666667 -29.333333 -3735.000000 1670.000000 --40.500000 -29.333333 -3766.000000 1670.000000 --40.333333 -29.333333 -3887.000000 1670.000000 --40.166667 -29.333333 -4170.000000 1670.000000 --40.000000 -29.333333 -3981.000000 1670.000000 --65.000000 -29.500000 187.000000 2670.000000 --64.833333 -29.500000 180.000000 2670.000000 --64.666667 -29.500000 153.000000 2670.000000 --64.500000 -29.500000 119.000000 2670.000000 --64.333333 -29.500000 123.000000 2670.000000 --64.166667 -29.500000 271.000000 2670.000000 --64.000000 -29.500000 443.000000 2670.000000 --63.833333 -29.500000 533.000000 2670.000000 --63.666667 -29.500000 504.000000 2670.000000 --63.500000 -29.500000 284.000000 2670.000000 --63.333333 -29.500000 130.000000 2670.000000 --63.166667 -29.500000 87.000000 2670.000000 --63.000000 -29.500000 84.000000 2670.000000 --62.833333 -29.500000 81.000000 2670.000000 --62.666667 -29.500000 83.000000 2670.000000 --62.500000 -29.500000 81.000000 2670.000000 --62.333333 -29.500000 79.000000 2670.000000 --62.166667 -29.500000 78.000000 2670.000000 --62.000000 -29.500000 75.000000 2670.000000 --61.833333 -29.500000 82.000000 2670.000000 --61.666667 -29.500000 69.000000 2670.000000 --61.500000 -29.500000 68.000000 2670.000000 --61.333333 -29.500000 65.000000 2670.000000 --61.166667 -29.500000 62.000000 2670.000000 --61.000000 -29.500000 59.000000 2670.000000 --60.833333 -29.500000 57.000000 2670.000000 --60.666667 -29.500000 53.000000 2670.000000 --60.500000 -29.500000 56.000000 2670.000000 --60.333333 -29.500000 61.000000 2670.000000 --60.166667 -29.500000 59.000000 2670.000000 --60.000000 -29.500000 57.000000 2670.000000 --59.833333 -29.500000 43.000000 2670.000000 --59.666667 -29.500000 30.000000 2670.000000 --59.500000 -29.500000 30.000000 2670.000000 --59.333333 -29.500000 36.000000 2670.000000 --59.166667 -29.500000 43.000000 2670.000000 --59.000000 -29.500000 44.000000 2670.000000 --58.833333 -29.500000 43.000000 2670.000000 --58.666667 -29.500000 67.000000 2670.000000 --58.500000 -29.500000 77.000000 2670.000000 --58.333333 -29.500000 83.000000 2670.000000 --58.166667 -29.500000 109.000000 2670.000000 --58.000000 -29.500000 70.000000 2670.000000 --57.833333 -29.500000 71.000000 2670.000000 --57.666667 -29.500000 73.000000 2670.000000 --57.500000 -29.500000 53.000000 2670.000000 --57.333333 -29.500000 65.000000 2670.000000 --57.166667 -29.500000 72.000000 2670.000000 --57.000000 -29.500000 68.000000 2670.000000 --56.833333 -29.500000 47.000000 2670.000000 --56.666667 -29.500000 81.000000 2670.000000 --56.500000 -29.500000 62.000000 2670.000000 --56.333333 -29.500000 67.000000 2670.000000 --56.166667 -29.500000 89.000000 2670.000000 --56.000000 -29.500000 91.000000 2670.000000 --55.833333 -29.500000 119.000000 2670.000000 --55.666667 -29.500000 67.000000 2670.000000 --55.500000 -29.500000 156.000000 2670.000000 --55.333333 -29.500000 128.000000 2670.000000 --55.166667 -29.500000 104.000000 2670.000000 --55.000000 -29.500000 261.000000 2670.000000 --54.833333 -29.500000 131.000000 2670.000000 --54.666667 -29.500000 118.000000 2670.000000 --54.500000 -29.500000 292.000000 2670.000000 --54.333333 -29.500000 208.000000 2670.000000 --54.166667 -29.500000 263.000000 2670.000000 --54.000000 -29.500000 339.000000 2670.000000 --53.833333 -29.500000 479.000000 2670.000000 --53.666667 -29.500000 491.000000 2670.000000 --53.500000 -29.500000 288.000000 2670.000000 --53.333333 -29.500000 236.000000 2670.000000 --53.166667 -29.500000 251.000000 2670.000000 --53.000000 -29.500000 569.000000 2670.000000 --52.833333 -29.500000 440.000000 2670.000000 --52.666667 -29.500000 524.000000 2670.000000 --52.500000 -29.500000 270.000000 2670.000000 --52.333333 -29.500000 260.000000 2670.000000 --52.166667 -29.500000 144.000000 2670.000000 --52.000000 -29.500000 61.000000 2670.000000 --51.833333 -29.500000 84.000000 2670.000000 --51.666667 -29.500000 458.000000 2670.000000 --51.500000 -29.500000 373.000000 2670.000000 --51.333333 -29.500000 33.000000 2670.000000 --51.166667 -29.500000 157.000000 2670.000000 --51.000000 -29.500000 466.000000 2670.000000 --50.833333 -29.500000 361.000000 2670.000000 --50.666667 -29.500000 292.000000 2670.000000 --50.500000 -29.500000 667.000000 2670.000000 --50.333333 -29.500000 855.000000 2670.000000 --50.166667 -29.500000 437.000000 2670.000000 --50.000000 -29.500000 252.000000 2670.000000 --49.833333 -29.500000 -8.000000 1670.000000 --49.666667 -29.500000 -33.000000 1670.000000 --49.500000 -29.500000 -41.000000 1670.000000 --49.333333 -29.500000 -51.000000 1670.000000 --49.166667 -29.500000 -53.000000 1670.000000 --49.000000 -29.500000 -86.000000 1670.000000 --48.833333 -29.500000 -96.000000 1670.000000 --48.666667 -29.500000 -124.000000 1670.000000 --48.500000 -29.500000 -125.000000 1670.000000 --48.333333 -29.500000 -151.000000 1670.000000 --48.166667 -29.500000 -205.000000 1670.000000 --48.000000 -29.500000 -359.000000 1670.000000 --47.833333 -29.500000 -556.000000 1670.000000 --47.666667 -29.500000 -948.000000 1670.000000 --47.500000 -29.500000 -1230.000000 1670.000000 --47.333333 -29.500000 -1539.000000 1670.000000 --47.166667 -29.500000 -1840.000000 1670.000000 --47.000000 -29.500000 -1956.000000 1670.000000 --46.833333 -29.500000 -2085.000000 1670.000000 --46.666667 -29.500000 -2198.000000 1670.000000 --46.500000 -29.500000 -2361.000000 1670.000000 --46.333333 -29.500000 -2432.000000 1670.000000 --46.166667 -29.500000 -2402.000000 1670.000000 --46.000000 -29.500000 -2650.000000 1670.000000 --45.833333 -29.500000 -2795.000000 1670.000000 --45.666667 -29.500000 -3280.000000 1670.000000 --45.500000 -29.500000 -3470.000000 1670.000000 --45.333333 -29.500000 -3526.000000 1670.000000 --45.166667 -29.500000 -3566.000000 1670.000000 --45.000000 -29.500000 -3604.000000 1670.000000 --44.833333 -29.500000 -3650.000000 1670.000000 --44.666667 -29.500000 -3644.000000 1670.000000 --44.500000 -29.500000 -3629.000000 1670.000000 --44.333333 -29.500000 -3644.000000 1670.000000 --44.166667 -29.500000 -3731.000000 1670.000000 --44.000000 -29.500000 -3791.000000 1670.000000 --43.833333 -29.500000 -3822.000000 1670.000000 --43.666667 -29.500000 -3869.000000 1670.000000 --43.500000 -29.500000 -3949.000000 1670.000000 --43.333333 -29.500000 -4004.000000 1670.000000 --43.166667 -29.500000 -4123.000000 1670.000000 --43.000000 -29.500000 -4002.000000 1670.000000 --42.833333 -29.500000 -4026.000000 1670.000000 --42.666667 -29.500000 -4027.000000 1670.000000 --42.500000 -29.500000 -4012.000000 1670.000000 --42.333333 -29.500000 -4019.000000 1670.000000 --42.166667 -29.500000 -3962.000000 1670.000000 --42.000000 -29.500000 -3957.000000 1670.000000 --41.833333 -29.500000 -4001.000000 1670.000000 --41.666667 -29.500000 -3775.000000 1670.000000 --41.500000 -29.500000 -3737.000000 1670.000000 --41.333333 -29.500000 -3777.000000 1670.000000 --41.166667 -29.500000 -3949.000000 1670.000000 --41.000000 -29.500000 -3977.000000 1670.000000 --40.833333 -29.500000 -4040.000000 1670.000000 --40.666667 -29.500000 -3800.000000 1670.000000 --40.500000 -29.500000 -4014.000000 1670.000000 --40.333333 -29.500000 -4121.000000 1670.000000 --40.166667 -29.500000 -3714.000000 1670.000000 --40.000000 -29.500000 -3696.000000 1670.000000 --65.000000 -29.666667 181.000000 2670.000000 --64.833333 -29.666667 180.000000 2670.000000 --64.666667 -29.666667 194.000000 2670.000000 --64.500000 -29.666667 126.000000 2670.000000 --64.333333 -29.666667 179.000000 2670.000000 --64.166667 -29.666667 404.000000 2670.000000 --64.000000 -29.666667 618.000000 2670.000000 --63.833333 -29.666667 632.000000 2670.000000 --63.666667 -29.666667 514.000000 2670.000000 --63.500000 -29.666667 253.000000 2670.000000 --63.333333 -29.666667 100.000000 2670.000000 --63.166667 -29.666667 83.000000 2670.000000 --63.000000 -29.666667 81.000000 2670.000000 --62.833333 -29.666667 80.000000 2670.000000 --62.666667 -29.666667 79.000000 2670.000000 --62.500000 -29.666667 77.000000 2670.000000 --62.333333 -29.666667 75.000000 2670.000000 --62.166667 -29.666667 78.000000 2670.000000 --62.000000 -29.666667 84.000000 2670.000000 --61.833333 -29.666667 84.000000 2670.000000 --61.666667 -29.666667 70.000000 2670.000000 --61.500000 -29.666667 64.000000 2670.000000 --61.333333 -29.666667 63.000000 2670.000000 --61.166667 -29.666667 60.000000 2670.000000 --61.000000 -29.666667 58.000000 2670.000000 --60.833333 -29.666667 55.000000 2670.000000 --60.666667 -29.666667 55.000000 2670.000000 --60.500000 -29.666667 60.000000 2670.000000 --60.333333 -29.666667 59.000000 2670.000000 --60.166667 -29.666667 63.000000 2670.000000 --60.000000 -29.666667 42.000000 2670.000000 --59.833333 -29.666667 34.000000 2670.000000 --59.666667 -29.666667 31.000000 2670.000000 --59.500000 -29.666667 29.000000 2670.000000 --59.333333 -29.666667 39.000000 2670.000000 --59.166667 -29.666667 41.000000 2670.000000 --59.000000 -29.666667 44.000000 2670.000000 --58.833333 -29.666667 42.000000 2670.000000 --58.666667 -29.666667 60.000000 2670.000000 --58.500000 -29.666667 79.000000 2670.000000 --58.333333 -29.666667 86.000000 2670.000000 --58.166667 -29.666667 95.000000 2670.000000 --58.000000 -29.666667 81.000000 2670.000000 --57.833333 -29.666667 56.000000 2670.000000 --57.666667 -29.666667 67.000000 2670.000000 --57.500000 -29.666667 68.000000 2670.000000 --57.333333 -29.666667 76.000000 2670.000000 --57.166667 -29.666667 66.000000 2670.000000 --57.000000 -29.666667 48.000000 2670.000000 --56.833333 -29.666667 62.000000 2670.000000 --56.666667 -29.666667 81.000000 2670.000000 --56.500000 -29.666667 104.000000 2670.000000 --56.333333 -29.666667 71.000000 2670.000000 --56.166667 -29.666667 88.000000 2670.000000 --56.000000 -29.666667 120.000000 2670.000000 --55.833333 -29.666667 84.000000 2670.000000 --55.666667 -29.666667 124.000000 2670.000000 --55.500000 -29.666667 120.000000 2670.000000 --55.333333 -29.666667 119.000000 2670.000000 --55.166667 -29.666667 136.000000 2670.000000 --55.000000 -29.666667 93.000000 2670.000000 --54.833333 -29.666667 87.000000 2670.000000 --54.666667 -29.666667 112.000000 2670.000000 --54.500000 -29.666667 94.000000 2670.000000 --54.333333 -29.666667 127.000000 2670.000000 --54.166667 -29.666667 135.000000 2670.000000 --54.000000 -29.666667 149.000000 2670.000000 --53.833333 -29.666667 134.000000 2670.000000 --53.666667 -29.666667 83.000000 2670.000000 --53.500000 -29.666667 275.000000 2670.000000 --53.333333 -29.666667 38.000000 2670.000000 --53.166667 -29.666667 122.000000 2670.000000 --53.000000 -29.666667 328.000000 2670.000000 --52.833333 -29.666667 93.000000 2670.000000 --52.666667 -29.666667 73.000000 2670.000000 --52.500000 -29.666667 112.000000 2670.000000 --52.333333 -29.666667 56.000000 2670.000000 --52.166667 -29.666667 47.000000 2670.000000 --52.000000 -29.666667 16.000000 2670.000000 --51.833333 -29.666667 81.000000 2670.000000 --51.666667 -29.666667 74.000000 2670.000000 --51.500000 -29.666667 131.000000 2670.000000 --51.333333 -29.666667 69.000000 2670.000000 --51.166667 -29.666667 92.000000 2670.000000 --51.000000 -29.666667 30.000000 2670.000000 --50.833333 -29.666667 37.000000 2670.000000 --50.666667 -29.666667 34.000000 2670.000000 --50.500000 -29.666667 343.000000 2670.000000 --50.333333 -29.666667 809.000000 2670.000000 --50.166667 -29.666667 127.000000 2670.000000 --50.000000 -29.666667 7.000000 2670.000000 --49.833333 -29.666667 -34.000000 1670.000000 --49.666667 -29.666667 -42.000000 1670.000000 --49.500000 -29.666667 -48.000000 1670.000000 --49.333333 -29.666667 -59.000000 1670.000000 --49.166667 -29.666667 -83.000000 1670.000000 --49.000000 -29.666667 -104.000000 1670.000000 --48.833333 -29.666667 -121.000000 1670.000000 --48.666667 -29.666667 -119.000000 1670.000000 --48.500000 -29.666667 -145.000000 1670.000000 --48.333333 -29.666667 -169.000000 1670.000000 --48.166667 -29.666667 -247.000000 1670.000000 --48.000000 -29.666667 -359.000000 1670.000000 --47.833333 -29.666667 -493.000000 1670.000000 --47.666667 -29.666667 -938.000000 1670.000000 --47.500000 -29.666667 -1223.000000 1670.000000 --47.333333 -29.666667 -1563.000000 1670.000000 --47.166667 -29.666667 -1832.000000 1670.000000 --47.000000 -29.666667 -2053.000000 1670.000000 --46.833333 -29.666667 -2212.000000 1670.000000 --46.666667 -29.666667 -2273.000000 1670.000000 --46.500000 -29.666667 -2298.000000 1670.000000 --46.333333 -29.666667 -2411.000000 1670.000000 --46.166667 -29.666667 -2568.000000 1670.000000 --46.000000 -29.666667 -2626.000000 1670.000000 --45.833333 -29.666667 -3050.000000 1670.000000 --45.666667 -29.666667 -3258.000000 1670.000000 --45.500000 -29.666667 -3409.000000 1670.000000 --45.333333 -29.666667 -3541.000000 1670.000000 --45.166667 -29.666667 -3500.000000 1670.000000 --45.000000 -29.666667 -3583.000000 1670.000000 --44.833333 -29.666667 -3604.000000 1670.000000 --44.666667 -29.666667 -3626.000000 1670.000000 --44.500000 -29.666667 -3594.000000 1670.000000 --44.333333 -29.666667 -3623.000000 1670.000000 --44.166667 -29.666667 -3680.000000 1670.000000 --44.000000 -29.666667 -3755.000000 1670.000000 --43.833333 -29.666667 -3796.000000 1670.000000 --43.666667 -29.666667 -3872.000000 1670.000000 --43.500000 -29.666667 -3914.000000 1670.000000 --43.333333 -29.666667 -4021.000000 1670.000000 --43.166667 -29.666667 -4139.000000 1670.000000 --43.000000 -29.666667 -4017.000000 1670.000000 --42.833333 -29.666667 -4013.000000 1670.000000 --42.666667 -29.666667 -4017.000000 1670.000000 --42.500000 -29.666667 -4018.000000 1670.000000 --42.333333 -29.666667 -4005.000000 1670.000000 --42.166667 -29.666667 -3950.000000 1670.000000 --42.000000 -29.666667 -3901.000000 1670.000000 --41.833333 -29.666667 -3961.000000 1670.000000 --41.666667 -29.666667 -3738.000000 1670.000000 --41.500000 -29.666667 -3728.000000 1670.000000 --41.333333 -29.666667 -3803.000000 1670.000000 --41.166667 -29.666667 -3718.000000 1670.000000 --41.000000 -29.666667 -3669.000000 1670.000000 --40.833333 -29.666667 -3629.000000 1670.000000 --40.666667 -29.666667 -3743.000000 1670.000000 --40.500000 -29.666667 -4180.000000 1670.000000 --40.333333 -29.666667 -3725.000000 1670.000000 --40.166667 -29.666667 -3514.000000 1670.000000 --40.000000 -29.666667 -3502.000000 1670.000000 --65.000000 -29.833333 182.000000 2670.000000 --64.833333 -29.833333 178.000000 2670.000000 --64.666667 -29.833333 191.000000 2670.000000 --64.500000 -29.833333 233.000000 2670.000000 --64.333333 -29.833333 276.000000 2670.000000 --64.166667 -29.833333 726.000000 2670.000000 --64.000000 -29.833333 708.000000 2670.000000 --63.833333 -29.833333 614.000000 2670.000000 --63.666667 -29.833333 387.000000 2670.000000 --63.500000 -29.833333 196.000000 2670.000000 --63.333333 -29.833333 95.000000 2670.000000 --63.166667 -29.833333 79.000000 2670.000000 --63.000000 -29.833333 79.000000 2670.000000 --62.833333 -29.833333 78.000000 2670.000000 --62.666667 -29.833333 77.000000 2670.000000 --62.500000 -29.833333 74.000000 2670.000000 --62.333333 -29.833333 74.000000 2670.000000 --62.166667 -29.833333 94.000000 2670.000000 --62.000000 -29.833333 90.000000 2670.000000 --61.833333 -29.833333 82.000000 2670.000000 --61.666667 -29.833333 78.000000 2670.000000 --61.500000 -29.833333 68.000000 2670.000000 --61.333333 -29.833333 67.000000 2670.000000 --61.166667 -29.833333 63.000000 2670.000000 --61.000000 -29.833333 55.000000 2670.000000 --60.833333 -29.833333 56.000000 2670.000000 --60.666667 -29.833333 53.000000 2670.000000 --60.500000 -29.833333 55.000000 2670.000000 --60.333333 -29.833333 58.000000 2670.000000 --60.166667 -29.833333 58.000000 2670.000000 --60.000000 -29.833333 35.000000 2670.000000 --59.833333 -29.833333 34.000000 2670.000000 --59.666667 -29.833333 29.000000 2670.000000 --59.500000 -29.833333 28.000000 2670.000000 --59.333333 -29.833333 39.000000 2670.000000 --59.166667 -29.833333 42.000000 2670.000000 --59.000000 -29.833333 40.000000 2670.000000 --58.833333 -29.833333 50.000000 2670.000000 --58.666667 -29.833333 60.000000 2670.000000 --58.500000 -29.833333 74.000000 2670.000000 --58.333333 -29.833333 86.000000 2670.000000 --58.166667 -29.833333 92.000000 2670.000000 --58.000000 -29.833333 66.000000 2670.000000 --57.833333 -29.833333 67.000000 2670.000000 --57.666667 -29.833333 48.000000 2670.000000 --57.500000 -29.833333 62.000000 2670.000000 --57.333333 -29.833333 50.000000 2670.000000 --57.166667 -29.833333 52.000000 2670.000000 --57.000000 -29.833333 91.000000 2670.000000 --56.833333 -29.833333 155.000000 2670.000000 --56.666667 -29.833333 104.000000 2670.000000 --56.500000 -29.833333 119.000000 2670.000000 --56.333333 -29.833333 93.000000 2670.000000 --56.166667 -29.833333 129.000000 2670.000000 --56.000000 -29.833333 118.000000 2670.000000 --55.833333 -29.833333 106.000000 2670.000000 --55.666667 -29.833333 106.000000 2670.000000 --55.500000 -29.833333 104.000000 2670.000000 --55.333333 -29.833333 148.000000 2670.000000 --55.166667 -29.833333 97.000000 2670.000000 --55.000000 -29.833333 108.000000 2670.000000 --54.833333 -29.833333 85.000000 2670.000000 --54.666667 -29.833333 88.000000 2670.000000 --54.500000 -29.833333 131.000000 2670.000000 --54.333333 -29.833333 132.000000 2670.000000 --54.166667 -29.833333 88.000000 2670.000000 --54.000000 -29.833333 105.000000 2670.000000 --53.833333 -29.833333 80.000000 2670.000000 --53.666667 -29.833333 53.000000 2670.000000 --53.500000 -29.833333 89.000000 2670.000000 --53.333333 -29.833333 53.000000 2670.000000 --53.166667 -29.833333 62.000000 2670.000000 --53.000000 -29.833333 63.000000 2670.000000 --52.833333 -29.833333 80.000000 2670.000000 --52.666667 -29.833333 44.000000 2670.000000 --52.500000 -29.833333 39.000000 2670.000000 --52.333333 -29.833333 65.000000 2670.000000 --52.166667 -29.833333 53.000000 2670.000000 --52.000000 -29.833333 71.000000 2670.000000 --51.833333 -29.833333 11.000000 2670.000000 --51.666667 -29.833333 39.000000 2670.000000 --51.500000 -29.833333 70.000000 2670.000000 --51.333333 -29.833333 6.000000 2670.000000 --51.166667 -29.833333 18.000000 2670.000000 --51.000000 -29.833333 87.000000 2670.000000 --50.833333 -29.833333 81.000000 2670.000000 --50.666667 -29.833333 48.000000 2670.000000 --50.500000 -29.833333 62.000000 2670.000000 --50.333333 -29.833333 268.000000 2670.000000 --50.166667 -29.833333 2.000000 2670.000000 --50.000000 -29.833333 -28.000000 1670.000000 --49.833333 -29.833333 -40.000000 1670.000000 --49.666667 -29.833333 -47.000000 1670.000000 --49.500000 -29.833333 -59.000000 1670.000000 --49.333333 -29.833333 -79.000000 1670.000000 --49.166667 -29.833333 -88.000000 1670.000000 --49.000000 -29.833333 -118.000000 1670.000000 --48.833333 -29.833333 -110.000000 1670.000000 --48.666667 -29.833333 -139.000000 1670.000000 --48.500000 -29.833333 -104.000000 1670.000000 --48.333333 -29.833333 -206.000000 1670.000000 --48.166667 -29.833333 -358.000000 1670.000000 --48.000000 -29.833333 -368.000000 1670.000000 --47.833333 -29.833333 -451.000000 1670.000000 --47.666667 -29.833333 -830.000000 1670.000000 --47.500000 -29.833333 -1250.000000 1670.000000 --47.333333 -29.833333 -1517.000000 1670.000000 --47.166667 -29.833333 -1809.000000 1670.000000 --47.000000 -29.833333 -2044.000000 1670.000000 --46.833333 -29.833333 -2248.000000 1670.000000 --46.666667 -29.833333 -2367.000000 1670.000000 --46.500000 -29.833333 -2394.000000 1670.000000 --46.333333 -29.833333 -2498.000000 1670.000000 --46.166667 -29.833333 -2317.000000 1670.000000 --46.000000 -29.833333 -2772.000000 1670.000000 --45.833333 -29.833333 -3172.000000 1670.000000 --45.666667 -29.833333 -3352.000000 1670.000000 --45.500000 -29.833333 -3393.000000 1670.000000 --45.333333 -29.833333 -3532.000000 1670.000000 --45.166667 -29.833333 -3550.000000 1670.000000 --45.000000 -29.833333 -3538.000000 1670.000000 --44.833333 -29.833333 -3559.000000 1670.000000 --44.666667 -29.833333 -3566.000000 1670.000000 --44.500000 -29.833333 -3560.000000 1670.000000 --44.333333 -29.833333 -3582.000000 1670.000000 --44.166667 -29.833333 -3614.000000 1670.000000 --44.000000 -29.833333 -3684.000000 1670.000000 --43.833333 -29.833333 -3759.000000 1670.000000 --43.666667 -29.833333 -3899.000000 1670.000000 --43.500000 -29.833333 -3906.000000 1670.000000 --43.333333 -29.833333 -3950.000000 1670.000000 --43.166667 -29.833333 -3933.000000 1670.000000 --43.000000 -29.833333 -4010.000000 1670.000000 --42.833333 -29.833333 -4032.000000 1670.000000 --42.666667 -29.833333 -3987.000000 1670.000000 --42.500000 -29.833333 -3947.000000 1670.000000 --42.333333 -29.833333 -3922.000000 1670.000000 --42.166667 -29.833333 -3905.000000 1670.000000 --42.000000 -29.833333 -3871.000000 1670.000000 --41.833333 -29.833333 -3855.000000 1670.000000 --41.666667 -29.833333 -3745.000000 1670.000000 --41.500000 -29.833333 -3653.000000 1670.000000 --41.333333 -29.833333 -3884.000000 1670.000000 --41.166667 -29.833333 -3562.000000 1670.000000 --41.000000 -29.833333 -3450.000000 1670.000000 --40.833333 -29.833333 -3318.000000 1670.000000 --40.666667 -29.833333 -3478.000000 1670.000000 --40.500000 -29.833333 -4139.000000 1670.000000 --40.333333 -29.833333 -4028.000000 1670.000000 --40.166667 -29.833333 -3428.000000 1670.000000 --40.000000 -29.833333 -3141.000000 1670.000000 --65.000000 -30.000000 179.000000 2670.000000 --64.833333 -30.000000 179.000000 2670.000000 --64.666667 -30.000000 178.000000 2670.000000 --64.500000 -30.000000 304.000000 2670.000000 --64.333333 -30.000000 492.000000 2670.000000 --64.166667 -30.000000 891.000000 2670.000000 --64.000000 -30.000000 737.000000 2670.000000 --63.833333 -30.000000 534.000000 2670.000000 --63.666667 -30.000000 278.000000 2670.000000 --63.500000 -30.000000 183.000000 2670.000000 --63.333333 -30.000000 94.000000 2670.000000 --63.166667 -30.000000 77.000000 2670.000000 --63.000000 -30.000000 76.000000 2670.000000 --62.833333 -30.000000 75.000000 2670.000000 --62.666667 -30.000000 74.000000 2670.000000 --62.500000 -30.000000 74.000000 2670.000000 --62.333333 -30.000000 73.000000 2670.000000 --62.166667 -30.000000 92.000000 2670.000000 --62.000000 -30.000000 89.000000 2670.000000 --61.833333 -30.000000 90.000000 2670.000000 --61.666667 -30.000000 86.000000 2670.000000 --61.500000 -30.000000 78.000000 2670.000000 --61.333333 -30.000000 64.000000 2670.000000 --61.166667 -30.000000 67.000000 2670.000000 --61.000000 -30.000000 55.000000 2670.000000 --60.833333 -30.000000 62.000000 2670.000000 --60.666667 -30.000000 51.000000 2670.000000 --60.500000 -30.000000 56.000000 2670.000000 --60.333333 -30.000000 63.000000 2670.000000 --60.166667 -30.000000 46.000000 2670.000000 --60.000000 -30.000000 33.000000 2670.000000 --59.833333 -30.000000 30.000000 2670.000000 --59.666667 -30.000000 28.000000 2670.000000 --59.500000 -30.000000 41.000000 2670.000000 --59.333333 -30.000000 39.000000 2670.000000 --59.166667 -30.000000 36.000000 2670.000000 --59.000000 -30.000000 42.000000 2670.000000 --58.833333 -30.000000 67.000000 2670.000000 --58.666667 -30.000000 71.000000 2670.000000 --58.500000 -30.000000 74.000000 2670.000000 --58.333333 -30.000000 78.000000 2670.000000 --58.166667 -30.000000 69.000000 2670.000000 --58.000000 -30.000000 92.000000 2670.000000 --57.833333 -30.000000 77.000000 2670.000000 --57.666667 -30.000000 44.000000 2670.000000 --57.500000 -30.000000 60.000000 2670.000000 --57.333333 -30.000000 44.000000 2670.000000 --57.166667 -30.000000 80.000000 2670.000000 --57.000000 -30.000000 78.000000 2670.000000 --56.833333 -30.000000 72.000000 2670.000000 --56.666667 -30.000000 137.000000 2670.000000 --56.500000 -30.000000 149.000000 2670.000000 --56.333333 -30.000000 183.000000 2670.000000 --56.166667 -30.000000 174.000000 2670.000000 --56.000000 -30.000000 163.000000 2670.000000 --55.833333 -30.000000 96.000000 2670.000000 --55.666667 -30.000000 127.000000 2670.000000 --55.500000 -30.000000 140.000000 2670.000000 --55.333333 -30.000000 155.000000 2670.000000 --55.166667 -30.000000 162.000000 2670.000000 --55.000000 -30.000000 120.000000 2670.000000 --54.833333 -30.000000 126.000000 2670.000000 --54.666667 -30.000000 124.000000 2670.000000 --54.500000 -30.000000 168.000000 2670.000000 --54.333333 -30.000000 149.000000 2670.000000 --54.166667 -30.000000 131.000000 2670.000000 --54.000000 -30.000000 70.000000 2670.000000 --53.833333 -30.000000 54.000000 2670.000000 --53.666667 -30.000000 81.000000 2670.000000 --53.500000 -30.000000 106.000000 2670.000000 --53.333333 -30.000000 37.000000 2670.000000 --53.166667 -30.000000 34.000000 2670.000000 --53.000000 -30.000000 30.000000 2670.000000 --52.833333 -30.000000 59.000000 2670.000000 --52.666667 -30.000000 18.000000 2670.000000 --52.500000 -30.000000 94.000000 2670.000000 --52.333333 -30.000000 49.000000 2670.000000 --52.166667 -30.000000 37.000000 2670.000000 --52.000000 -30.000000 41.000000 2670.000000 --51.833333 -30.000000 42.000000 2670.000000 --51.666667 -30.000000 23.000000 2670.000000 --51.500000 -30.000000 21.000000 2670.000000 --51.333333 -30.000000 6.000000 2670.000000 --51.166667 -30.000000 11.000000 2670.000000 --51.000000 -30.000000 34.000000 2670.000000 --50.833333 -30.000000 5.000000 2670.000000 --50.666667 -30.000000 56.000000 2670.000000 --50.500000 -30.000000 8.000000 2670.000000 --50.333333 -30.000000 15.000000 2670.000000 --50.166667 -30.000000 2.000000 2670.000000 --50.000000 -30.000000 -31.000000 1670.000000 --49.833333 -30.000000 -43.000000 1670.000000 --49.666667 -30.000000 -51.000000 1670.000000 --49.500000 -30.000000 -61.000000 1670.000000 --49.333333 -30.000000 -91.000000 1670.000000 --49.166667 -30.000000 -111.000000 1670.000000 --49.000000 -30.000000 -116.000000 1670.000000 --48.833333 -30.000000 -136.000000 1670.000000 --48.666667 -30.000000 -146.000000 1670.000000 --48.500000 -30.000000 -176.000000 1670.000000 --48.333333 -30.000000 -197.000000 1670.000000 --48.166667 -30.000000 -305.000000 1670.000000 --48.000000 -30.000000 -340.000000 1670.000000 --47.833333 -30.000000 -517.000000 1670.000000 --47.666667 -30.000000 -839.000000 1670.000000 --47.500000 -30.000000 -1362.000000 1670.000000 --47.333333 -30.000000 -1557.000000 1670.000000 --47.166667 -30.000000 -1787.000000 1670.000000 --47.000000 -30.000000 -2081.000000 1670.000000 --46.833333 -30.000000 -2289.000000 1670.000000 --46.666667 -30.000000 -2425.000000 1670.000000 --46.500000 -30.000000 -2472.000000 1670.000000 --46.333333 -30.000000 -2490.000000 1670.000000 --46.166667 -30.000000 -2597.000000 1670.000000 --46.000000 -30.000000 -2920.000000 1670.000000 --45.833333 -30.000000 -3194.000000 1670.000000 --45.666667 -30.000000 -3453.000000 1670.000000 --45.500000 -30.000000 -3521.000000 1670.000000 --45.333333 -30.000000 -3595.000000 1670.000000 --45.166667 -30.000000 -3501.000000 1670.000000 --45.000000 -30.000000 -3509.000000 1670.000000 --44.833333 -30.000000 -3526.000000 1670.000000 --44.666667 -30.000000 -3547.000000 1670.000000 --44.500000 -30.000000 -3534.000000 1670.000000 --44.333333 -30.000000 -3543.000000 1670.000000 --44.166667 -30.000000 -3585.000000 1670.000000 --44.000000 -30.000000 -3632.000000 1670.000000 --43.833333 -30.000000 -3683.000000 1670.000000 --43.666667 -30.000000 -3828.000000 1670.000000 --43.500000 -30.000000 -3944.000000 1670.000000 --43.333333 -30.000000 -3860.000000 1670.000000 --43.166667 -30.000000 -3885.000000 1670.000000 --43.000000 -30.000000 -3993.000000 1670.000000 --42.833333 -30.000000 -3902.000000 1670.000000 --42.666667 -30.000000 -3889.000000 1670.000000 --42.500000 -30.000000 -3929.000000 1670.000000 --42.333333 -30.000000 -3876.000000 1670.000000 --42.166667 -30.000000 -3875.000000 1670.000000 --42.000000 -30.000000 -3893.000000 1670.000000 --41.833333 -30.000000 -3851.000000 1670.000000 --41.666667 -30.000000 -3755.000000 1670.000000 --41.500000 -30.000000 -3642.000000 1670.000000 --41.333333 -30.000000 -3705.000000 1670.000000 --41.166667 -30.000000 -3658.000000 1670.000000 --41.000000 -30.000000 -3218.000000 1670.000000 --40.833333 -30.000000 -3322.000000 1670.000000 --40.666667 -30.000000 -2966.000000 1670.000000 --40.500000 -30.000000 -3783.000000 1670.000000 --40.333333 -30.000000 -4147.000000 1670.000000 --40.166667 -30.000000 -3529.000000 1670.000000 --40.000000 -30.000000 -3195.000000 1670.000000 --65.000000 -30.166667 179.000000 2670.000000 --64.833333 -30.166667 189.000000 2670.000000 --64.666667 -30.166667 227.000000 2670.000000 --64.500000 -30.166667 379.000000 2670.000000 --64.333333 -30.166667 650.000000 2670.000000 --64.166667 -30.166667 880.000000 2670.000000 --64.000000 -30.166667 696.000000 2670.000000 --63.833333 -30.166667 405.000000 2670.000000 --63.666667 -30.166667 263.000000 2670.000000 --63.500000 -30.166667 153.000000 2670.000000 --63.333333 -30.166667 76.000000 2670.000000 --63.166667 -30.166667 75.000000 2670.000000 --63.000000 -30.166667 75.000000 2670.000000 --62.833333 -30.166667 73.000000 2670.000000 --62.666667 -30.166667 72.000000 2670.000000 --62.500000 -30.166667 71.000000 2670.000000 --62.333333 -30.166667 69.000000 2670.000000 --62.166667 -30.166667 80.000000 2670.000000 --62.000000 -30.166667 89.000000 2670.000000 --61.833333 -30.166667 92.000000 2670.000000 --61.666667 -30.166667 89.000000 2670.000000 --61.500000 -30.166667 85.000000 2670.000000 --61.333333 -30.166667 75.000000 2670.000000 --61.166667 -30.166667 70.000000 2670.000000 --61.000000 -30.166667 47.000000 2670.000000 --60.833333 -30.166667 59.000000 2670.000000 --60.666667 -30.166667 48.000000 2670.000000 --60.500000 -30.166667 56.000000 2670.000000 --60.333333 -30.166667 56.000000 2670.000000 --60.166667 -30.166667 28.000000 2670.000000 --60.000000 -30.166667 27.000000 2670.000000 --59.833333 -30.166667 24.000000 2670.000000 --59.666667 -30.166667 27.000000 2670.000000 --59.500000 -30.166667 36.000000 2670.000000 --59.333333 -30.166667 36.000000 2670.000000 --59.166667 -30.166667 35.000000 2670.000000 --59.000000 -30.166667 52.000000 2670.000000 --58.833333 -30.166667 66.000000 2670.000000 --58.666667 -30.166667 56.000000 2670.000000 --58.500000 -30.166667 68.000000 2670.000000 --58.333333 -30.166667 78.000000 2670.000000 --58.166667 -30.166667 77.000000 2670.000000 --58.000000 -30.166667 66.000000 2670.000000 --57.833333 -30.166667 68.000000 2670.000000 --57.666667 -30.166667 51.000000 2670.000000 --57.500000 -30.166667 48.000000 2670.000000 --57.333333 -30.166667 64.000000 2670.000000 --57.166667 -30.166667 56.000000 2670.000000 --57.000000 -30.166667 68.000000 2670.000000 --56.833333 -30.166667 90.000000 2670.000000 --56.666667 -30.166667 106.000000 2670.000000 --56.500000 -30.166667 120.000000 2670.000000 --56.333333 -30.166667 163.000000 2670.000000 --56.166667 -30.166667 166.000000 2670.000000 --56.000000 -30.166667 210.000000 2670.000000 --55.833333 -30.166667 155.000000 2670.000000 --55.666667 -30.166667 102.000000 2670.000000 --55.500000 -30.166667 154.000000 2670.000000 --55.333333 -30.166667 130.000000 2670.000000 --55.166667 -30.166667 133.000000 2670.000000 --55.000000 -30.166667 118.000000 2670.000000 --54.833333 -30.166667 124.000000 2670.000000 --54.666667 -30.166667 126.000000 2670.000000 --54.500000 -30.166667 146.000000 2670.000000 --54.333333 -30.166667 110.000000 2670.000000 --54.166667 -30.166667 84.000000 2670.000000 --54.000000 -30.166667 69.000000 2670.000000 --53.833333 -30.166667 139.000000 2670.000000 --53.666667 -30.166667 110.000000 2670.000000 --53.500000 -30.166667 96.000000 2670.000000 --53.333333 -30.166667 49.000000 2670.000000 --53.166667 -30.166667 62.000000 2670.000000 --53.000000 -30.166667 44.000000 2670.000000 --52.833333 -30.166667 48.000000 2670.000000 --52.666667 -30.166667 44.000000 2670.000000 --52.500000 -30.166667 24.000000 2670.000000 --52.333333 -30.166667 66.000000 2670.000000 --52.166667 -30.166667 58.000000 2670.000000 --52.000000 -30.166667 108.000000 2670.000000 --51.833333 -30.166667 66.000000 2670.000000 --51.666667 -30.166667 125.000000 2670.000000 --51.500000 -30.166667 86.000000 2670.000000 --51.333333 -30.166667 8.000000 2670.000000 --51.166667 -30.166667 12.000000 2670.000000 --51.000000 -30.166667 117.000000 2670.000000 --50.833333 -30.166667 38.000000 2670.000000 --50.666667 -30.166667 2.000000 2670.000000 --50.500000 -30.166667 9.000000 2670.000000 --50.333333 -30.166667 15.000000 2670.000000 --50.166667 -30.166667 -15.000000 1670.000000 --50.000000 -30.166667 -36.000000 1670.000000 --49.833333 -30.166667 -45.000000 1670.000000 --49.666667 -30.166667 -57.000000 1670.000000 --49.500000 -30.166667 -84.000000 1670.000000 --49.333333 -30.166667 -107.000000 1670.000000 --49.166667 -30.166667 -123.000000 1670.000000 --49.000000 -30.166667 -171.000000 1670.000000 --48.833333 -30.166667 -166.000000 1670.000000 --48.666667 -30.166667 -243.000000 1670.000000 --48.500000 -30.166667 -272.000000 1670.000000 --48.333333 -30.166667 -228.000000 1670.000000 --48.166667 -30.166667 -313.000000 1670.000000 --48.000000 -30.166667 -396.000000 1670.000000 --47.833333 -30.166667 -539.000000 1670.000000 --47.666667 -30.166667 -905.000000 1670.000000 --47.500000 -30.166667 -1292.000000 1670.000000 --47.333333 -30.166667 -1553.000000 1670.000000 --47.166667 -30.166667 -2033.000000 1670.000000 --47.000000 -30.166667 -2275.000000 1670.000000 --46.833333 -30.166667 -2383.000000 1670.000000 --46.666667 -30.166667 -2373.000000 1670.000000 --46.500000 -30.166667 -2457.000000 1670.000000 --46.333333 -30.166667 -2540.000000 1670.000000 --46.166667 -30.166667 -2721.000000 1670.000000 --46.000000 -30.166667 -3050.000000 1670.000000 --45.833333 -30.166667 -3224.000000 1670.000000 --45.666667 -30.166667 -3308.000000 1670.000000 --45.500000 -30.166667 -3542.000000 1670.000000 --45.333333 -30.166667 -3507.000000 1670.000000 --45.166667 -30.166667 -3490.000000 1670.000000 --45.000000 -30.166667 -3462.000000 1670.000000 --44.833333 -30.166667 -3502.000000 1670.000000 --44.666667 -30.166667 -3515.000000 1670.000000 --44.500000 -30.166667 -3510.000000 1670.000000 --44.333333 -30.166667 -3506.000000 1670.000000 --44.166667 -30.166667 -3532.000000 1670.000000 --44.000000 -30.166667 -3585.000000 1670.000000 --43.833333 -30.166667 -3598.000000 1670.000000 --43.666667 -30.166667 -3751.000000 1670.000000 --43.500000 -30.166667 -3972.000000 1670.000000 --43.333333 -30.166667 -3841.000000 1670.000000 --43.166667 -30.166667 -3844.000000 1670.000000 --43.000000 -30.166667 -3874.000000 1670.000000 --42.833333 -30.166667 -3876.000000 1670.000000 --42.666667 -30.166667 -3893.000000 1670.000000 --42.500000 -30.166667 -3893.000000 1670.000000 --42.333333 -30.166667 -3877.000000 1670.000000 --42.166667 -30.166667 -3864.000000 1670.000000 --42.000000 -30.166667 -3846.000000 1670.000000 --41.833333 -30.166667 -3797.000000 1670.000000 --41.666667 -30.166667 -3769.000000 1670.000000 --41.500000 -30.166667 -3837.000000 1670.000000 --41.333333 -30.166667 -3749.000000 1670.000000 --41.166667 -30.166667 -3884.000000 1670.000000 --41.000000 -30.166667 -3443.000000 1670.000000 --40.833333 -30.166667 -3159.000000 1670.000000 --40.666667 -30.166667 -3477.000000 1670.000000 --40.500000 -30.166667 -4214.000000 1670.000000 --40.333333 -30.166667 -3730.000000 1670.000000 --40.166667 -30.166667 -3110.000000 1670.000000 --40.000000 -30.166667 -3429.000000 1670.000000 --65.000000 -30.333333 246.000000 2670.000000 --64.833333 -30.333333 269.000000 2670.000000 --64.666667 -30.333333 347.000000 2670.000000 --64.500000 -30.333333 493.000000 2670.000000 --64.333333 -30.333333 671.000000 2670.000000 --64.166667 -30.333333 844.000000 2670.000000 --64.000000 -30.333333 546.000000 2670.000000 --63.833333 -30.333333 380.000000 2670.000000 --63.666667 -30.333333 239.000000 2670.000000 --63.500000 -30.333333 136.000000 2670.000000 --63.333333 -30.333333 69.000000 2670.000000 --63.166667 -30.333333 71.000000 2670.000000 --63.000000 -30.333333 72.000000 2670.000000 --62.833333 -30.333333 70.000000 2670.000000 --62.666667 -30.333333 69.000000 2670.000000 --62.500000 -30.333333 69.000000 2670.000000 --62.333333 -30.333333 69.000000 2670.000000 --62.166667 -30.333333 79.000000 2670.000000 --62.000000 -30.333333 93.000000 2670.000000 --61.833333 -30.333333 91.000000 2670.000000 --61.666667 -30.333333 91.000000 2670.000000 --61.500000 -30.333333 85.000000 2670.000000 --61.333333 -30.333333 78.000000 2670.000000 --61.166667 -30.333333 69.000000 2670.000000 --61.000000 -30.333333 65.000000 2670.000000 --60.833333 -30.333333 58.000000 2670.000000 --60.666667 -30.333333 52.000000 2670.000000 --60.500000 -30.333333 51.000000 2670.000000 --60.333333 -30.333333 58.000000 2670.000000 --60.166667 -30.333333 29.000000 2670.000000 --60.000000 -30.333333 26.000000 2670.000000 --59.833333 -30.333333 22.000000 2670.000000 --59.666667 -30.333333 23.000000 2670.000000 --59.500000 -30.333333 29.000000 2670.000000 --59.333333 -30.333333 33.000000 2670.000000 --59.166667 -30.333333 41.000000 2670.000000 --59.000000 -30.333333 63.000000 2670.000000 --58.833333 -30.333333 64.000000 2670.000000 --58.666667 -30.333333 66.000000 2670.000000 --58.500000 -30.333333 70.000000 2670.000000 --58.333333 -30.333333 77.000000 2670.000000 --58.166667 -30.333333 67.000000 2670.000000 --58.000000 -30.333333 55.000000 2670.000000 --57.833333 -30.333333 62.000000 2670.000000 --57.666667 -30.333333 52.000000 2670.000000 --57.500000 -30.333333 72.000000 2670.000000 --57.333333 -30.333333 49.000000 2670.000000 --57.166667 -30.333333 61.000000 2670.000000 --57.000000 -30.333333 72.000000 2670.000000 --56.833333 -30.333333 117.000000 2670.000000 --56.666667 -30.333333 122.000000 2670.000000 --56.500000 -30.333333 114.000000 2670.000000 --56.333333 -30.333333 177.000000 2670.000000 --56.166667 -30.333333 226.000000 2670.000000 --56.000000 -30.333333 218.000000 2670.000000 --55.833333 -30.333333 209.000000 2670.000000 --55.666667 -30.333333 130.000000 2670.000000 --55.500000 -30.333333 183.000000 2670.000000 --55.333333 -30.333333 155.000000 2670.000000 --55.166667 -30.333333 154.000000 2670.000000 --55.000000 -30.333333 134.000000 2670.000000 --54.833333 -30.333333 99.000000 2670.000000 --54.666667 -30.333333 139.000000 2670.000000 --54.500000 -30.333333 122.000000 2670.000000 --54.333333 -30.333333 113.000000 2670.000000 --54.166667 -30.333333 150.000000 2670.000000 --54.000000 -30.333333 139.000000 2670.000000 --53.833333 -30.333333 202.000000 2670.000000 --53.666667 -30.333333 214.000000 2670.000000 --53.500000 -30.333333 121.000000 2670.000000 --53.333333 -30.333333 142.000000 2670.000000 --53.166667 -30.333333 51.000000 2670.000000 --53.000000 -30.333333 91.000000 2670.000000 --52.833333 -30.333333 74.000000 2670.000000 --52.666667 -30.333333 136.000000 2670.000000 --52.500000 -30.333333 100.000000 2670.000000 --52.333333 -30.333333 91.000000 2670.000000 --52.166667 -30.333333 208.000000 2670.000000 --52.000000 -30.333333 206.000000 2670.000000 --51.833333 -30.333333 250.000000 2670.000000 --51.666667 -30.333333 258.000000 2670.000000 --51.500000 -30.333333 111.000000 2670.000000 --51.333333 -30.333333 11.000000 2670.000000 --51.166667 -30.333333 -1.000000 1670.000000 --51.000000 -30.333333 70.000000 2670.000000 --50.833333 -30.333333 -1.000000 1670.000000 --50.666667 -30.333333 -1.000000 1670.000000 --50.500000 -30.333333 5.000000 2670.000000 --50.333333 -30.333333 7.000000 2670.000000 --50.166667 -30.333333 -20.000000 1670.000000 --50.000000 -30.333333 -39.000000 1670.000000 --49.833333 -30.333333 -59.000000 1670.000000 --49.666667 -30.333333 -76.000000 1670.000000 --49.500000 -30.333333 -102.000000 1670.000000 --49.333333 -30.333333 -122.000000 1670.000000 --49.166667 -30.333333 -117.000000 1670.000000 --49.000000 -30.333333 -144.000000 1670.000000 --48.833333 -30.333333 -164.000000 1670.000000 --48.666667 -30.333333 -198.000000 1670.000000 --48.500000 -30.333333 -244.000000 1670.000000 --48.333333 -30.333333 -272.000000 1670.000000 --48.166667 -30.333333 -352.000000 1670.000000 --48.000000 -30.333333 -443.000000 1670.000000 --47.833333 -30.333333 -655.000000 1670.000000 --47.666667 -30.333333 -1046.000000 1670.000000 --47.500000 -30.333333 -1405.000000 1670.000000 --47.333333 -30.333333 -1723.000000 1670.000000 --47.166667 -30.333333 -2103.000000 1670.000000 --47.000000 -30.333333 -2124.000000 1670.000000 --46.833333 -30.333333 -2276.000000 1670.000000 --46.666667 -30.333333 -2518.000000 1670.000000 --46.500000 -30.333333 -2591.000000 1670.000000 --46.333333 -30.333333 -2678.000000 1670.000000 --46.166667 -30.333333 -2911.000000 1670.000000 --46.000000 -30.333333 -3142.000000 1670.000000 --45.833333 -30.333333 -3282.000000 1670.000000 --45.666667 -30.333333 -3341.000000 1670.000000 --45.500000 -30.333333 -3522.000000 1670.000000 --45.333333 -30.333333 -3486.000000 1670.000000 --45.166667 -30.333333 -3430.000000 1670.000000 --45.000000 -30.333333 -3434.000000 1670.000000 --44.833333 -30.333333 -3438.000000 1670.000000 --44.666667 -30.333333 -3466.000000 1670.000000 --44.500000 -30.333333 -3466.000000 1670.000000 --44.333333 -30.333333 -3446.000000 1670.000000 --44.166667 -30.333333 -3468.000000 1670.000000 --44.000000 -30.333333 -3493.000000 1670.000000 --43.833333 -30.333333 -3532.000000 1670.000000 --43.666667 -30.333333 -3663.000000 1670.000000 --43.500000 -30.333333 -3846.000000 1670.000000 --43.333333 -30.333333 -3805.000000 1670.000000 --43.166667 -30.333333 -3900.000000 1670.000000 --43.000000 -30.333333 -3859.000000 1670.000000 --42.833333 -30.333333 -3877.000000 1670.000000 --42.666667 -30.333333 -3862.000000 1670.000000 --42.500000 -30.333333 -3951.000000 1670.000000 --42.333333 -30.333333 -3873.000000 1670.000000 --42.166667 -30.333333 -3836.000000 1670.000000 --42.000000 -30.333333 -3827.000000 1670.000000 --41.833333 -30.333333 -3816.000000 1670.000000 --41.666667 -30.333333 -3784.000000 1670.000000 --41.500000 -30.333333 -3801.000000 1670.000000 --41.333333 -30.333333 -3636.000000 1670.000000 --41.166667 -30.333333 -3824.000000 1670.000000 --41.000000 -30.333333 -3729.000000 1670.000000 --40.833333 -30.333333 -3865.000000 1670.000000 --40.666667 -30.333333 -4338.000000 1670.000000 --40.500000 -30.333333 -3741.000000 1670.000000 --40.333333 -30.333333 -3461.000000 1670.000000 --40.166667 -30.333333 -3231.000000 1670.000000 --40.000000 -30.333333 -3004.000000 1670.000000 --65.000000 -30.500000 322.000000 2670.000000 --64.833333 -30.500000 376.000000 2670.000000 --64.666667 -30.500000 536.000000 2670.000000 --64.500000 -30.500000 746.000000 2670.000000 --64.333333 -30.500000 845.000000 2670.000000 --64.166667 -30.500000 730.000000 2670.000000 --64.000000 -30.500000 488.000000 2670.000000 --63.833333 -30.500000 348.000000 2670.000000 --63.666667 -30.500000 224.000000 2670.000000 --63.500000 -30.500000 130.000000 2670.000000 --63.333333 -30.500000 74.000000 2670.000000 --63.166667 -30.500000 69.000000 2670.000000 --63.000000 -30.500000 69.000000 2670.000000 --62.833333 -30.500000 69.000000 2670.000000 --62.666667 -30.500000 69.000000 2670.000000 --62.500000 -30.500000 69.000000 2670.000000 --62.333333 -30.500000 69.000000 2670.000000 --62.166667 -30.500000 95.000000 2670.000000 --62.000000 -30.500000 94.000000 2670.000000 --61.833333 -30.500000 95.000000 2670.000000 --61.666667 -30.500000 94.000000 2670.000000 --61.500000 -30.500000 88.000000 2670.000000 --61.333333 -30.500000 76.000000 2670.000000 --61.166667 -30.500000 59.000000 2670.000000 --61.000000 -30.500000 52.000000 2670.000000 --60.833333 -30.500000 62.000000 2670.000000 --60.666667 -30.500000 42.000000 2670.000000 --60.500000 -30.500000 52.000000 2670.000000 --60.333333 -30.500000 27.000000 2670.000000 --60.166667 -30.500000 25.000000 2670.000000 --60.000000 -30.500000 26.000000 2670.000000 --59.833333 -30.500000 22.000000 2670.000000 --59.666667 -30.500000 23.000000 2670.000000 --59.500000 -30.500000 32.000000 2670.000000 --59.333333 -30.500000 54.000000 2670.000000 --59.166667 -30.500000 68.000000 2670.000000 --59.000000 -30.500000 63.000000 2670.000000 --58.833333 -30.500000 56.000000 2670.000000 --58.666667 -30.500000 62.000000 2670.000000 --58.500000 -30.500000 69.000000 2670.000000 --58.333333 -30.500000 70.000000 2670.000000 --58.166667 -30.500000 59.000000 2670.000000 --58.000000 -30.500000 63.000000 2670.000000 --57.833333 -30.500000 40.000000 2670.000000 --57.666667 -30.500000 72.000000 2670.000000 --57.500000 -30.500000 86.000000 2670.000000 --57.333333 -30.500000 86.000000 2670.000000 --57.166667 -30.500000 89.000000 2670.000000 --57.000000 -30.500000 103.000000 2670.000000 --56.833333 -30.500000 148.000000 2670.000000 --56.666667 -30.500000 134.000000 2670.000000 --56.500000 -30.500000 189.000000 2670.000000 --56.333333 -30.500000 105.000000 2670.000000 --56.166667 -30.500000 168.000000 2670.000000 --56.000000 -30.500000 179.000000 2670.000000 --55.833333 -30.500000 238.000000 2670.000000 --55.666667 -30.500000 234.000000 2670.000000 --55.500000 -30.500000 188.000000 2670.000000 --55.333333 -30.500000 180.000000 2670.000000 --55.166667 -30.500000 133.000000 2670.000000 --55.000000 -30.500000 108.000000 2670.000000 --54.833333 -30.500000 169.000000 2670.000000 --54.666667 -30.500000 113.000000 2670.000000 --54.500000 -30.500000 152.000000 2670.000000 --54.333333 -30.500000 136.000000 2670.000000 --54.166667 -30.500000 267.000000 2670.000000 --54.000000 -30.500000 336.000000 2670.000000 --53.833333 -30.500000 425.000000 2670.000000 --53.666667 -30.500000 300.000000 2670.000000 --53.500000 -30.500000 364.000000 2670.000000 --53.333333 -30.500000 158.000000 2670.000000 --53.166667 -30.500000 96.000000 2670.000000 --53.000000 -30.500000 322.000000 2670.000000 --52.833333 -30.500000 154.000000 2670.000000 --52.666667 -30.500000 289.000000 2670.000000 --52.500000 -30.500000 353.000000 2670.000000 --52.333333 -30.500000 347.000000 2670.000000 --52.166667 -30.500000 367.000000 2670.000000 --52.000000 -30.500000 505.000000 2670.000000 --51.833333 -30.500000 357.000000 2670.000000 --51.666667 -30.500000 131.000000 2670.000000 --51.500000 -30.500000 106.000000 2670.000000 --51.333333 -30.500000 53.000000 2670.000000 --51.166667 -30.500000 -1.000000 1670.000000 --51.000000 -30.500000 -4.000000 1670.000000 --50.833333 -30.500000 -2.000000 1670.000000 --50.666667 -30.500000 1.000000 2670.000000 --50.500000 -30.500000 9.000000 2670.000000 --50.333333 -30.500000 0.000000 2670.000000 --50.166667 -30.500000 -25.000000 1670.000000 --50.000000 -30.500000 -50.000000 1670.000000 --49.833333 -30.500000 -71.000000 1670.000000 --49.666667 -30.500000 -98.000000 1670.000000 --49.500000 -30.500000 -129.000000 1670.000000 --49.333333 -30.500000 -123.000000 1670.000000 --49.166667 -30.500000 -129.000000 1670.000000 --49.000000 -30.500000 -144.000000 1670.000000 --48.833333 -30.500000 -103.000000 1670.000000 --48.666667 -30.500000 -206.000000 1670.000000 --48.500000 -30.500000 -407.000000 1670.000000 --48.333333 -30.500000 -418.000000 1670.000000 --48.166667 -30.500000 -485.000000 1670.000000 --48.000000 -30.500000 -581.000000 1670.000000 --47.833333 -30.500000 -815.000000 1670.000000 --47.666667 -30.500000 -1149.000000 1670.000000 --47.500000 -30.500000 -1714.000000 1670.000000 --47.333333 -30.500000 -2021.000000 1670.000000 --47.166667 -30.500000 -2219.000000 1670.000000 --47.000000 -30.500000 -2396.000000 1670.000000 --46.833333 -30.500000 -2741.000000 1670.000000 --46.666667 -30.500000 -3081.000000 1670.000000 --46.500000 -30.500000 -3172.000000 1670.000000 --46.333333 -30.500000 -3080.000000 1670.000000 --46.166667 -30.500000 -3210.000000 1670.000000 --46.000000 -30.500000 -3207.000000 1670.000000 --45.833333 -30.500000 -3246.000000 1670.000000 --45.666667 -30.500000 -3369.000000 1670.000000 --45.500000 -30.500000 -3492.000000 1670.000000 --45.333333 -30.500000 -3457.000000 1670.000000 --45.166667 -30.500000 -3497.000000 1670.000000 --45.000000 -30.500000 -3416.000000 1670.000000 --44.833333 -30.500000 -3401.000000 1670.000000 --44.666667 -30.500000 -3440.000000 1670.000000 --44.500000 -30.500000 -3456.000000 1670.000000 --44.333333 -30.500000 -3444.000000 1670.000000 --44.166667 -30.500000 -3440.000000 1670.000000 --44.000000 -30.500000 -3489.000000 1670.000000 --43.833333 -30.500000 -3470.000000 1670.000000 --43.666667 -30.500000 -3523.000000 1670.000000 --43.500000 -30.500000 -3810.000000 1670.000000 --43.333333 -30.500000 -3846.000000 1670.000000 --43.166667 -30.500000 -3888.000000 1670.000000 --43.000000 -30.500000 -3889.000000 1670.000000 --42.833333 -30.500000 -3833.000000 1670.000000 --42.666667 -30.500000 -3829.000000 1670.000000 --42.500000 -30.500000 -3874.000000 1670.000000 --42.333333 -30.500000 -3869.000000 1670.000000 --42.166667 -30.500000 -3831.000000 1670.000000 --42.000000 -30.500000 -3842.000000 1670.000000 --41.833333 -30.500000 -3735.000000 1670.000000 --41.666667 -30.500000 -3758.000000 1670.000000 --41.500000 -30.500000 -3673.000000 1670.000000 --41.333333 -30.500000 -3684.000000 1670.000000 --41.166667 -30.500000 -3906.000000 1670.000000 --41.000000 -30.500000 -3711.000000 1670.000000 --40.833333 -30.500000 -3785.000000 1670.000000 --40.666667 -30.500000 -3913.000000 1670.000000 --40.500000 -30.500000 -3858.000000 1670.000000 --40.333333 -30.500000 -3889.000000 1670.000000 --40.166667 -30.500000 -3960.000000 1670.000000 --40.000000 -30.500000 -3979.000000 1670.000000 --65.000000 -30.666667 413.000000 2670.000000 --64.833333 -30.666667 451.000000 2670.000000 --64.666667 -30.666667 621.000000 2670.000000 --64.500000 -30.666667 952.000000 2670.000000 --64.333333 -30.666667 1027.000000 2670.000000 --64.166667 -30.666667 657.000000 2670.000000 --64.000000 -30.666667 469.000000 2670.000000 --63.833333 -30.666667 329.000000 2670.000000 --63.666667 -30.666667 214.000000 2670.000000 --63.500000 -30.666667 119.000000 2670.000000 --63.333333 -30.666667 86.000000 2670.000000 --63.166667 -30.666667 77.000000 2670.000000 --63.000000 -30.666667 69.000000 2670.000000 --62.833333 -30.666667 69.000000 2670.000000 --62.666667 -30.666667 69.000000 2670.000000 --62.500000 -30.666667 69.000000 2670.000000 --62.333333 -30.666667 69.000000 2670.000000 --62.166667 -30.666667 97.000000 2670.000000 --62.000000 -30.666667 97.000000 2670.000000 --61.833333 -30.666667 97.000000 2670.000000 --61.666667 -30.666667 94.000000 2670.000000 --61.500000 -30.666667 87.000000 2670.000000 --61.333333 -30.666667 76.000000 2670.000000 --61.166667 -30.666667 66.000000 2670.000000 --61.000000 -30.666667 46.000000 2670.000000 --60.833333 -30.666667 55.000000 2670.000000 --60.666667 -30.666667 51.000000 2670.000000 --60.500000 -30.666667 57.000000 2670.000000 --60.333333 -30.666667 23.000000 2670.000000 --60.166667 -30.666667 23.000000 2670.000000 --60.000000 -30.666667 24.000000 2670.000000 --59.833333 -30.666667 21.000000 2670.000000 --59.666667 -30.666667 22.000000 2670.000000 --59.500000 -30.666667 53.000000 2670.000000 --59.333333 -30.666667 59.000000 2670.000000 --59.166667 -30.666667 64.000000 2670.000000 --59.000000 -30.666667 54.000000 2670.000000 --58.833333 -30.666667 55.000000 2670.000000 --58.666667 -30.666667 74.000000 2670.000000 --58.500000 -30.666667 73.000000 2670.000000 --58.333333 -30.666667 73.000000 2670.000000 --58.166667 -30.666667 67.000000 2670.000000 --58.000000 -30.666667 44.000000 2670.000000 --57.833333 -30.666667 32.000000 2670.000000 --57.666667 -30.666667 73.000000 2670.000000 --57.500000 -30.666667 90.000000 2670.000000 --57.333333 -30.666667 136.000000 2670.000000 --57.166667 -30.666667 116.000000 2670.000000 --57.000000 -30.666667 112.000000 2670.000000 --56.833333 -30.666667 139.000000 2670.000000 --56.666667 -30.666667 214.000000 2670.000000 --56.500000 -30.666667 290.000000 2670.000000 --56.333333 -30.666667 145.000000 2670.000000 --56.166667 -30.666667 132.000000 2670.000000 --56.000000 -30.666667 212.000000 2670.000000 --55.833333 -30.666667 281.000000 2670.000000 --55.666667 -30.666667 201.000000 2670.000000 --55.500000 -30.666667 248.000000 2670.000000 --55.333333 -30.666667 173.000000 2670.000000 --55.166667 -30.666667 119.000000 2670.000000 --55.000000 -30.666667 164.000000 2670.000000 --54.833333 -30.666667 145.000000 2670.000000 --54.666667 -30.666667 115.000000 2670.000000 --54.500000 -30.666667 144.000000 2670.000000 --54.333333 -30.666667 201.000000 2670.000000 --54.166667 -30.666667 241.000000 2670.000000 --54.000000 -30.666667 301.000000 2670.000000 --53.833333 -30.666667 248.000000 2670.000000 --53.666667 -30.666667 274.000000 2670.000000 --53.500000 -30.666667 281.000000 2670.000000 --53.333333 -30.666667 119.000000 2670.000000 --53.166667 -30.666667 141.000000 2670.000000 --53.000000 -30.666667 265.000000 2670.000000 --52.833333 -30.666667 372.000000 2670.000000 --52.666667 -30.666667 315.000000 2670.000000 --52.500000 -30.666667 394.000000 2670.000000 --52.333333 -30.666667 202.000000 2670.000000 --52.166667 -30.666667 274.000000 2670.000000 --52.000000 -30.666667 271.000000 2670.000000 --51.833333 -30.666667 187.000000 2670.000000 --51.666667 -30.666667 90.000000 2670.000000 --51.500000 -30.666667 27.000000 2670.000000 --51.333333 -30.666667 -1.000000 1670.000000 --51.166667 -30.666667 -6.000000 1670.000000 --51.000000 -30.666667 -6.000000 1670.000000 --50.833333 -30.666667 -5.000000 1670.000000 --50.666667 -30.666667 5.000000 2670.000000 --50.500000 -30.666667 14.000000 2670.000000 --50.333333 -30.666667 -21.000000 1670.000000 --50.166667 -30.666667 -45.000000 1670.000000 --50.000000 -30.666667 -71.000000 1670.000000 --49.833333 -30.666667 -105.000000 1670.000000 --49.666667 -30.666667 -105.000000 1670.000000 --49.500000 -30.666667 -130.000000 1670.000000 --49.333333 -30.666667 -149.000000 1670.000000 --49.166667 -30.666667 -167.000000 1670.000000 --49.000000 -30.666667 -89.000000 1670.000000 --48.833333 -30.666667 -331.000000 1670.000000 --48.666667 -30.666667 -981.000000 1670.000000 --48.500000 -30.666667 -1106.000000 1670.000000 --48.333333 -30.666667 -1222.000000 1670.000000 --48.166667 -30.666667 -1466.000000 1670.000000 --48.000000 -30.666667 -1730.000000 1670.000000 --47.833333 -30.666667 -2170.000000 1670.000000 --47.666667 -30.666667 -2446.000000 1670.000000 --47.500000 -30.666667 -2460.000000 1670.000000 --47.333333 -30.666667 -2664.000000 1670.000000 --47.166667 -30.666667 -2818.000000 1670.000000 --47.000000 -30.666667 -3092.000000 1670.000000 --46.833333 -30.666667 -3099.000000 1670.000000 --46.666667 -30.666667 -3064.000000 1670.000000 --46.500000 -30.666667 -3207.000000 1670.000000 --46.333333 -30.666667 -3242.000000 1670.000000 --46.166667 -30.666667 -3264.000000 1670.000000 --46.000000 -30.666667 -3267.000000 1670.000000 --45.833333 -30.666667 -3313.000000 1670.000000 --45.666667 -30.666667 -3440.000000 1670.000000 --45.500000 -30.666667 -3471.000000 1670.000000 --45.333333 -30.666667 -3499.000000 1670.000000 --45.166667 -30.666667 -3384.000000 1670.000000 --45.000000 -30.666667 -3422.000000 1670.000000 --44.833333 -30.666667 -3416.000000 1670.000000 --44.666667 -30.666667 -3429.000000 1670.000000 --44.500000 -30.666667 -3381.000000 1670.000000 --44.333333 -30.666667 -3407.000000 1670.000000 --44.166667 -30.666667 -3378.000000 1670.000000 --44.000000 -30.666667 -3463.000000 1670.000000 --43.833333 -30.666667 -3438.000000 1670.000000 --43.666667 -30.666667 -3465.000000 1670.000000 --43.500000 -30.666667 -3544.000000 1670.000000 --43.333333 -30.666667 -3842.000000 1670.000000 --43.166667 -30.666667 -3961.000000 1670.000000 --43.000000 -30.666667 -3919.000000 1670.000000 --42.833333 -30.666667 -3915.000000 1670.000000 --42.666667 -30.666667 -3760.000000 1670.000000 --42.500000 -30.666667 -3832.000000 1670.000000 --42.333333 -30.666667 -3844.000000 1670.000000 --42.166667 -30.666667 -3818.000000 1670.000000 --42.000000 -30.666667 -3815.000000 1670.000000 --41.833333 -30.666667 -3818.000000 1670.000000 --41.666667 -30.666667 -3735.000000 1670.000000 --41.500000 -30.666667 -3664.000000 1670.000000 --41.333333 -30.666667 -3606.000000 1670.000000 --41.166667 -30.666667 -3790.000000 1670.000000 --41.000000 -30.666667 -3681.000000 1670.000000 --40.833333 -30.666667 -3733.000000 1670.000000 --40.666667 -30.666667 -3601.000000 1670.000000 --40.500000 -30.666667 -3749.000000 1670.000000 --40.333333 -30.666667 -4111.000000 1670.000000 --40.166667 -30.666667 -4006.000000 1670.000000 --40.000000 -30.666667 -3875.000000 1670.000000 --65.000000 -30.833333 545.000000 2670.000000 --64.833333 -30.833333 684.000000 2670.000000 --64.666667 -30.833333 594.000000 2670.000000 --64.500000 -30.833333 1163.000000 2670.000000 --64.333333 -30.833333 1078.000000 2670.000000 --64.166667 -30.833333 697.000000 2670.000000 --64.000000 -30.833333 467.000000 2670.000000 --63.833333 -30.833333 305.000000 2670.000000 --63.666667 -30.833333 198.000000 2670.000000 --63.500000 -30.833333 127.000000 2670.000000 --63.333333 -30.833333 103.000000 2670.000000 --63.166667 -30.833333 97.000000 2670.000000 --63.000000 -30.833333 88.000000 2670.000000 --62.833333 -30.833333 69.000000 2670.000000 --62.666667 -30.833333 69.000000 2670.000000 --62.500000 -30.833333 69.000000 2670.000000 --62.333333 -30.833333 69.000000 2670.000000 --62.166667 -30.833333 102.000000 2670.000000 --62.000000 -30.833333 99.000000 2670.000000 --61.833333 -30.833333 99.000000 2670.000000 --61.666667 -30.833333 98.000000 2670.000000 --61.500000 -30.833333 93.000000 2670.000000 --61.333333 -30.833333 79.000000 2670.000000 --61.166667 -30.833333 61.000000 2670.000000 --61.000000 -30.833333 54.000000 2670.000000 --60.833333 -30.833333 37.000000 2670.000000 --60.666667 -30.833333 55.000000 2670.000000 --60.500000 -30.833333 32.000000 2670.000000 --60.333333 -30.833333 21.000000 2670.000000 --60.166667 -30.833333 21.000000 2670.000000 --60.000000 -30.833333 23.000000 2670.000000 --59.833333 -30.833333 15.000000 2670.000000 --59.666667 -30.833333 57.000000 2670.000000 --59.500000 -30.833333 48.000000 2670.000000 --59.333333 -30.833333 43.000000 2670.000000 --59.166667 -30.833333 58.000000 2670.000000 --59.000000 -30.833333 51.000000 2670.000000 --58.833333 -30.833333 71.000000 2670.000000 --58.666667 -30.833333 75.000000 2670.000000 --58.500000 -30.833333 63.000000 2670.000000 --58.333333 -30.833333 64.000000 2670.000000 --58.166667 -30.833333 62.000000 2670.000000 --58.000000 -30.833333 62.000000 2670.000000 --57.833333 -30.833333 39.000000 2670.000000 --57.666667 -30.833333 66.000000 2670.000000 --57.500000 -30.833333 84.000000 2670.000000 --57.333333 -30.833333 114.000000 2670.000000 --57.166667 -30.833333 126.000000 2670.000000 --57.000000 -30.833333 148.000000 2670.000000 --56.833333 -30.833333 157.000000 2670.000000 --56.666667 -30.833333 168.000000 2670.000000 --56.500000 -30.833333 211.000000 2670.000000 --56.333333 -30.833333 193.000000 2670.000000 --56.166667 -30.833333 234.000000 2670.000000 --56.000000 -30.833333 205.000000 2670.000000 --55.833333 -30.833333 252.000000 2670.000000 --55.666667 -30.833333 320.000000 2670.000000 --55.500000 -30.833333 218.000000 2670.000000 --55.333333 -30.833333 160.000000 2670.000000 --55.166667 -30.833333 154.000000 2670.000000 --55.000000 -30.833333 149.000000 2670.000000 --54.833333 -30.833333 160.000000 2670.000000 --54.666667 -30.833333 127.000000 2670.000000 --54.500000 -30.833333 280.000000 2670.000000 --54.333333 -30.833333 269.000000 2670.000000 --54.166667 -30.833333 318.000000 2670.000000 --54.000000 -30.833333 356.000000 2670.000000 --53.833333 -30.833333 240.000000 2670.000000 --53.666667 -30.833333 154.000000 2670.000000 --53.500000 -30.833333 235.000000 2670.000000 --53.333333 -30.833333 240.000000 2670.000000 --53.166667 -30.833333 327.000000 2670.000000 --53.000000 -30.833333 255.000000 2670.000000 --52.833333 -30.833333 251.000000 2670.000000 --52.666667 -30.833333 290.000000 2670.000000 --52.500000 -30.833333 90.000000 2670.000000 --52.333333 -30.833333 166.000000 2670.000000 --52.166667 -30.833333 122.000000 2670.000000 --52.000000 -30.833333 155.000000 2670.000000 --51.833333 -30.833333 43.000000 2670.000000 --51.666667 -30.833333 20.000000 2670.000000 --51.500000 -30.833333 9.000000 2670.000000 --51.333333 -30.833333 -5.000000 1670.000000 --51.166667 -30.833333 -6.000000 1670.000000 --51.000000 -30.833333 -6.000000 1670.000000 --50.833333 -30.833333 -1.000000 1670.000000 --50.666667 -30.833333 17.000000 2670.000000 --50.500000 -30.833333 -18.000000 1670.000000 --50.333333 -30.833333 -43.000000 1670.000000 --50.166667 -30.833333 -73.000000 1670.000000 --50.000000 -30.833333 -100.000000 1670.000000 --49.833333 -30.833333 -115.000000 1670.000000 --49.666667 -30.833333 -112.000000 1670.000000 --49.500000 -30.833333 -89.000000 1670.000000 --49.333333 -30.833333 -170.000000 1670.000000 --49.166667 -30.833333 -211.000000 1670.000000 --49.000000 -30.833333 -862.000000 1670.000000 --48.833333 -30.833333 -1384.000000 1670.000000 --48.666667 -30.833333 -1476.000000 1670.000000 --48.500000 -30.833333 -1725.000000 1670.000000 --48.333333 -30.833333 -2029.000000 1670.000000 --48.166667 -30.833333 -2309.000000 1670.000000 --48.000000 -30.833333 -2526.000000 1670.000000 --47.833333 -30.833333 -2607.000000 1670.000000 --47.666667 -30.833333 -2771.000000 1670.000000 --47.500000 -30.833333 -2880.000000 1670.000000 --47.333333 -30.833333 -2947.000000 1670.000000 --47.166667 -30.833333 -3105.000000 1670.000000 --47.000000 -30.833333 -3181.000000 1670.000000 --46.833333 -30.833333 -3103.000000 1670.000000 --46.666667 -30.833333 -3225.000000 1670.000000 --46.500000 -30.833333 -3294.000000 1670.000000 --46.333333 -30.833333 -3344.000000 1670.000000 --46.166667 -30.833333 -3258.000000 1670.000000 --46.000000 -30.833333 -3330.000000 1670.000000 --45.833333 -30.833333 -3396.000000 1670.000000 --45.666667 -30.833333 -3475.000000 1670.000000 --45.500000 -30.833333 -3489.000000 1670.000000 --45.333333 -30.833333 -3533.000000 1670.000000 --45.166667 -30.833333 -3472.000000 1670.000000 --45.000000 -30.833333 -3451.000000 1670.000000 --44.833333 -30.833333 -3429.000000 1670.000000 --44.666667 -30.833333 -3374.000000 1670.000000 --44.500000 -30.833333 -3422.000000 1670.000000 --44.333333 -30.833333 -3450.000000 1670.000000 --44.166667 -30.833333 -3374.000000 1670.000000 --44.000000 -30.833333 -3463.000000 1670.000000 --43.833333 -30.833333 -3398.000000 1670.000000 --43.666667 -30.833333 -3406.000000 1670.000000 --43.500000 -30.833333 -3573.000000 1670.000000 --43.333333 -30.833333 -3812.000000 1670.000000 --43.166667 -30.833333 -3937.000000 1670.000000 --43.000000 -30.833333 -3943.000000 1670.000000 --42.833333 -30.833333 -3812.000000 1670.000000 --42.666667 -30.833333 -3815.000000 1670.000000 --42.500000 -30.833333 -3839.000000 1670.000000 --42.333333 -30.833333 -3792.000000 1670.000000 --42.166667 -30.833333 -3804.000000 1670.000000 --42.000000 -30.833333 -3803.000000 1670.000000 --41.833333 -30.833333 -3783.000000 1670.000000 --41.666667 -30.833333 -3724.000000 1670.000000 --41.500000 -30.833333 -3611.000000 1670.000000 --41.333333 -30.833333 -3590.000000 1670.000000 --41.166667 -30.833333 -3806.000000 1670.000000 --41.000000 -30.833333 -3219.000000 1670.000000 --40.833333 -30.833333 -3591.000000 1670.000000 --40.666667 -30.833333 -3838.000000 1670.000000 --40.500000 -30.833333 -4088.000000 1670.000000 --40.333333 -30.833333 -4089.000000 1670.000000 --40.166667 -30.833333 -3784.000000 1670.000000 --40.000000 -30.833333 -3854.000000 1670.000000 --65.000000 -31.000000 721.000000 2670.000000 --64.833333 -31.000000 1019.000000 2670.000000 --64.666667 -31.000000 925.000000 2670.000000 --64.500000 -31.000000 1123.000000 2670.000000 --64.333333 -31.000000 1007.000000 2670.000000 --64.166667 -31.000000 571.000000 2670.000000 --64.000000 -31.000000 444.000000 2670.000000 --63.833333 -31.000000 319.000000 2670.000000 --63.666667 -31.000000 218.000000 2670.000000 --63.500000 -31.000000 160.000000 2670.000000 --63.333333 -31.000000 133.000000 2670.000000 --63.166667 -31.000000 120.000000 2670.000000 --63.000000 -31.000000 99.000000 2670.000000 --62.833333 -31.000000 90.000000 2670.000000 --62.666667 -31.000000 84.000000 2670.000000 --62.500000 -31.000000 80.000000 2670.000000 --62.333333 -31.000000 105.000000 2670.000000 --62.166667 -31.000000 103.000000 2670.000000 --62.000000 -31.000000 103.000000 2670.000000 --61.833333 -31.000000 102.000000 2670.000000 --61.666667 -31.000000 98.000000 2670.000000 --61.500000 -31.000000 94.000000 2670.000000 --61.333333 -31.000000 77.000000 2670.000000 --61.166667 -31.000000 61.000000 2670.000000 --61.000000 -31.000000 51.000000 2670.000000 --60.833333 -31.000000 29.000000 2670.000000 --60.666667 -31.000000 50.000000 2670.000000 --60.500000 -31.000000 26.000000 2670.000000 --60.333333 -31.000000 18.000000 2670.000000 --60.166667 -31.000000 19.000000 2670.000000 --60.000000 -31.000000 15.000000 2670.000000 --59.833333 -31.000000 57.000000 2670.000000 --59.666667 -31.000000 28.000000 2670.000000 --59.500000 -31.000000 57.000000 2670.000000 --59.333333 -31.000000 55.000000 2670.000000 --59.166667 -31.000000 64.000000 2670.000000 --59.000000 -31.000000 70.000000 2670.000000 --58.833333 -31.000000 64.000000 2670.000000 --58.666667 -31.000000 66.000000 2670.000000 --58.500000 -31.000000 57.000000 2670.000000 --58.333333 -31.000000 61.000000 2670.000000 --58.166667 -31.000000 57.000000 2670.000000 --58.000000 -31.000000 53.000000 2670.000000 --57.833333 -31.000000 42.000000 2670.000000 --57.666667 -31.000000 67.000000 2670.000000 --57.500000 -31.000000 47.000000 2670.000000 --57.333333 -31.000000 94.000000 2670.000000 --57.166667 -31.000000 73.000000 2670.000000 --57.000000 -31.000000 140.000000 2670.000000 --56.833333 -31.000000 140.000000 2670.000000 --56.666667 -31.000000 184.000000 2670.000000 --56.500000 -31.000000 184.000000 2670.000000 --56.333333 -31.000000 220.000000 2670.000000 --56.166667 -31.000000 292.000000 2670.000000 --56.000000 -31.000000 262.000000 2670.000000 --55.833333 -31.000000 331.000000 2670.000000 --55.666667 -31.000000 214.000000 2670.000000 --55.500000 -31.000000 212.000000 2670.000000 --55.333333 -31.000000 155.000000 2670.000000 --55.166667 -31.000000 133.000000 2670.000000 --55.000000 -31.000000 145.000000 2670.000000 --54.833333 -31.000000 155.000000 2670.000000 --54.666667 -31.000000 133.000000 2670.000000 --54.500000 -31.000000 222.000000 2670.000000 --54.333333 -31.000000 306.000000 2670.000000 --54.166667 -31.000000 361.000000 2670.000000 --54.000000 -31.000000 317.000000 2670.000000 --53.833333 -31.000000 323.000000 2670.000000 --53.666667 -31.000000 285.000000 2670.000000 --53.500000 -31.000000 214.000000 2670.000000 --53.333333 -31.000000 133.000000 2670.000000 --53.166667 -31.000000 159.000000 2670.000000 --53.000000 -31.000000 235.000000 2670.000000 --52.833333 -31.000000 226.000000 2670.000000 --52.666667 -31.000000 70.000000 2670.000000 --52.500000 -31.000000 85.000000 2670.000000 --52.333333 -31.000000 61.000000 2670.000000 --52.166667 -31.000000 31.000000 2670.000000 --52.000000 -31.000000 22.000000 2670.000000 --51.833333 -31.000000 18.000000 2670.000000 --51.666667 -31.000000 12.000000 2670.000000 --51.500000 -31.000000 3.000000 2670.000000 --51.333333 -31.000000 -6.000000 1670.000000 --51.166667 -31.000000 -5.000000 1670.000000 --51.000000 -31.000000 -1.000000 1670.000000 --50.833333 -31.000000 12.000000 2670.000000 --50.666667 -31.000000 -6.000000 1670.000000 --50.500000 -31.000000 -40.000000 1670.000000 --50.333333 -31.000000 -73.000000 1670.000000 --50.166667 -31.000000 -97.000000 1670.000000 --50.000000 -31.000000 -110.000000 1670.000000 --49.833333 -31.000000 -130.000000 1670.000000 --49.666667 -31.000000 -171.000000 1670.000000 --49.500000 -31.000000 -157.000000 1670.000000 --49.333333 -31.000000 -340.000000 1670.000000 --49.166667 -31.000000 -1096.000000 1670.000000 --49.000000 -31.000000 -1567.000000 1670.000000 --48.833333 -31.000000 -1759.000000 1670.000000 --48.666667 -31.000000 -2002.000000 1670.000000 --48.500000 -31.000000 -2264.000000 1670.000000 --48.333333 -31.000000 -2518.000000 1670.000000 --48.166667 -31.000000 -2606.000000 1670.000000 --48.000000 -31.000000 -2768.000000 1670.000000 --47.833333 -31.000000 -2662.000000 1670.000000 --47.666667 -31.000000 -2817.000000 1670.000000 --47.500000 -31.000000 -2941.000000 1670.000000 --47.333333 -31.000000 -3094.000000 1670.000000 --47.166667 -31.000000 -3239.000000 1670.000000 --47.000000 -31.000000 -3312.000000 1670.000000 --46.833333 -31.000000 -3204.000000 1670.000000 --46.666667 -31.000000 -3363.000000 1670.000000 --46.500000 -31.000000 -3384.000000 1670.000000 --46.333333 -31.000000 -3388.000000 1670.000000 --46.166667 -31.000000 -3299.000000 1670.000000 --46.000000 -31.000000 -3375.000000 1670.000000 --45.833333 -31.000000 -3468.000000 1670.000000 --45.666667 -31.000000 -3465.000000 1670.000000 --45.500000 -31.000000 -3512.000000 1670.000000 --45.333333 -31.000000 -3544.000000 1670.000000 --45.166667 -31.000000 -3512.000000 1670.000000 --45.000000 -31.000000 -3497.000000 1670.000000 --44.833333 -31.000000 -3504.000000 1670.000000 --44.666667 -31.000000 -3432.000000 1670.000000 --44.500000 -31.000000 -3453.000000 1670.000000 --44.333333 -31.000000 -3451.000000 1670.000000 --44.166667 -31.000000 -3394.000000 1670.000000 --44.000000 -31.000000 -3352.000000 1670.000000 --43.833333 -31.000000 -3461.000000 1670.000000 --43.666667 -31.000000 -3384.000000 1670.000000 --43.500000 -31.000000 -3592.000000 1670.000000 --43.333333 -31.000000 -3838.000000 1670.000000 --43.166667 -31.000000 -3956.000000 1670.000000 --43.000000 -31.000000 -3848.000000 1670.000000 --42.833333 -31.000000 -3902.000000 1670.000000 --42.666667 -31.000000 -3786.000000 1670.000000 --42.500000 -31.000000 -3771.000000 1670.000000 --42.333333 -31.000000 -3726.000000 1670.000000 --42.166667 -31.000000 -3762.000000 1670.000000 --42.000000 -31.000000 -3765.000000 1670.000000 --41.833333 -31.000000 -3732.000000 1670.000000 --41.666667 -31.000000 -3794.000000 1670.000000 --41.500000 -31.000000 -3697.000000 1670.000000 --41.333333 -31.000000 -3707.000000 1670.000000 --41.166667 -31.000000 -3902.000000 1670.000000 --41.000000 -31.000000 -3651.000000 1670.000000 --40.833333 -31.000000 -3748.000000 1670.000000 --40.666667 -31.000000 -3991.000000 1670.000000 --40.500000 -31.000000 -3858.000000 1670.000000 --40.333333 -31.000000 -3782.000000 1670.000000 --40.166667 -31.000000 -3702.000000 1670.000000 --40.000000 -31.000000 -3744.000000 1670.000000 --65.000000 -31.166667 980.000000 2670.000000 --64.833333 -31.166667 1592.000000 2670.000000 --64.666667 -31.166667 1327.000000 2670.000000 --64.500000 -31.166667 839.000000 2670.000000 --64.333333 -31.166667 783.000000 2670.000000 --64.166667 -31.166667 533.000000 2670.000000 --64.000000 -31.166667 398.000000 2670.000000 --63.833333 -31.166667 305.000000 2670.000000 --63.666667 -31.166667 234.000000 2670.000000 --63.500000 -31.166667 184.000000 2670.000000 --63.333333 -31.166667 162.000000 2670.000000 --63.166667 -31.166667 138.000000 2670.000000 --63.000000 -31.166667 123.000000 2670.000000 --62.833333 -31.166667 106.000000 2670.000000 --62.666667 -31.166667 96.000000 2670.000000 --62.500000 -31.166667 89.000000 2670.000000 --62.333333 -31.166667 109.000000 2670.000000 --62.166667 -31.166667 109.000000 2670.000000 --62.000000 -31.166667 106.000000 2670.000000 --61.833333 -31.166667 100.000000 2670.000000 --61.666667 -31.166667 103.000000 2670.000000 --61.500000 -31.166667 97.000000 2670.000000 --61.333333 -31.166667 69.000000 2670.000000 --61.166667 -31.166667 57.000000 2670.000000 --61.000000 -31.166667 49.000000 2670.000000 --60.833333 -31.166667 26.000000 2670.000000 --60.666667 -31.166667 25.000000 2670.000000 --60.500000 -31.166667 19.000000 2670.000000 --60.333333 -31.166667 17.000000 2670.000000 --60.166667 -31.166667 20.000000 2670.000000 --60.000000 -31.166667 16.000000 2670.000000 --59.833333 -31.166667 61.000000 2670.000000 --59.666667 -31.166667 58.000000 2670.000000 --59.500000 -31.166667 57.000000 2670.000000 --59.333333 -31.166667 66.000000 2670.000000 --59.166667 -31.166667 72.000000 2670.000000 --59.000000 -31.166667 60.000000 2670.000000 --58.833333 -31.166667 50.000000 2670.000000 --58.666667 -31.166667 59.000000 2670.000000 --58.500000 -31.166667 60.000000 2670.000000 --58.333333 -31.166667 64.000000 2670.000000 --58.166667 -31.166667 53.000000 2670.000000 --58.000000 -31.166667 34.000000 2670.000000 --57.833333 -31.166667 50.000000 2670.000000 --57.666667 -31.166667 69.000000 2670.000000 --57.500000 -31.166667 79.000000 2670.000000 --57.333333 -31.166667 65.000000 2670.000000 --57.166667 -31.166667 70.000000 2670.000000 --57.000000 -31.166667 97.000000 2670.000000 --56.833333 -31.166667 90.000000 2670.000000 --56.666667 -31.166667 109.000000 2670.000000 --56.500000 -31.166667 200.000000 2670.000000 --56.333333 -31.166667 224.000000 2670.000000 --56.166667 -31.166667 252.000000 2670.000000 --56.000000 -31.166667 295.000000 2670.000000 --55.833333 -31.166667 219.000000 2670.000000 --55.666667 -31.166667 198.000000 2670.000000 --55.500000 -31.166667 170.000000 2670.000000 --55.333333 -31.166667 182.000000 2670.000000 --55.166667 -31.166667 144.000000 2670.000000 --55.000000 -31.166667 168.000000 2670.000000 --54.833333 -31.166667 166.000000 2670.000000 --54.666667 -31.166667 148.000000 2670.000000 --54.500000 -31.166667 200.000000 2670.000000 --54.333333 -31.166667 283.000000 2670.000000 --54.166667 -31.166667 353.000000 2670.000000 --54.000000 -31.166667 350.000000 2670.000000 --53.833333 -31.166667 307.000000 2670.000000 --53.666667 -31.166667 331.000000 2670.000000 --53.500000 -31.166667 215.000000 2670.000000 --53.333333 -31.166667 203.000000 2670.000000 --53.166667 -31.166667 217.000000 2670.000000 --53.000000 -31.166667 159.000000 2670.000000 --52.833333 -31.166667 316.000000 2670.000000 --52.666667 -31.166667 297.000000 2670.000000 --52.500000 -31.166667 281.000000 2670.000000 --52.333333 -31.166667 227.000000 2670.000000 --52.166667 -31.166667 94.000000 2670.000000 --52.000000 -31.166667 49.000000 2670.000000 --51.833333 -31.166667 12.000000 2670.000000 --51.666667 -31.166667 4.000000 2670.000000 --51.500000 -31.166667 -5.000000 1670.000000 --51.333333 -31.166667 -6.000000 1670.000000 --51.166667 -31.166667 4.000000 2670.000000 --51.000000 -31.166667 2.000000 2670.000000 --50.833333 -31.166667 9.000000 2670.000000 --50.666667 -31.166667 -30.000000 1670.000000 --50.500000 -31.166667 -64.000000 1670.000000 --50.333333 -31.166667 -97.000000 1670.000000 --50.166667 -31.166667 -113.000000 1670.000000 --50.000000 -31.166667 -133.000000 1670.000000 --49.833333 -31.166667 -146.000000 1670.000000 --49.666667 -31.166667 -134.000000 1670.000000 --49.500000 -31.166667 -199.000000 1670.000000 --49.333333 -31.166667 -1252.000000 1670.000000 --49.166667 -31.166667 -1609.000000 1670.000000 --49.000000 -31.166667 -1905.000000 1670.000000 --48.833333 -31.166667 -2143.000000 1670.000000 --48.666667 -31.166667 -2335.000000 1670.000000 --48.500000 -31.166667 -2582.000000 1670.000000 --48.333333 -31.166667 -2667.000000 1670.000000 --48.166667 -31.166667 -2811.000000 1670.000000 --48.000000 -31.166667 -2722.000000 1670.000000 --47.833333 -31.166667 -2815.000000 1670.000000 --47.666667 -31.166667 -2966.000000 1670.000000 --47.500000 -31.166667 -3086.000000 1670.000000 --47.333333 -31.166667 -3122.000000 1670.000000 --47.166667 -31.166667 -3160.000000 1670.000000 --47.000000 -31.166667 -3239.000000 1670.000000 --46.833333 -31.166667 -3428.000000 1670.000000 --46.666667 -31.166667 -3436.000000 1670.000000 --46.500000 -31.166667 -3388.000000 1670.000000 --46.333333 -31.166667 -3301.000000 1670.000000 --46.166667 -31.166667 -3365.000000 1670.000000 --46.000000 -31.166667 -3413.000000 1670.000000 --45.833333 -31.166667 -3485.000000 1670.000000 --45.666667 -31.166667 -3546.000000 1670.000000 --45.500000 -31.166667 -3531.000000 1670.000000 --45.333333 -31.166667 -3548.000000 1670.000000 --45.166667 -31.166667 -3538.000000 1670.000000 --45.000000 -31.166667 -3527.000000 1670.000000 --44.833333 -31.166667 -3568.000000 1670.000000 --44.666667 -31.166667 -3519.000000 1670.000000 --44.500000 -31.166667 -3553.000000 1670.000000 --44.333333 -31.166667 -3575.000000 1670.000000 --44.166667 -31.166667 -3512.000000 1670.000000 --44.000000 -31.166667 -3446.000000 1670.000000 --43.833333 -31.166667 -3385.000000 1670.000000 --43.666667 -31.166667 -3414.000000 1670.000000 --43.500000 -31.166667 -3704.000000 1670.000000 --43.333333 -31.166667 -3931.000000 1670.000000 --43.166667 -31.166667 -3970.000000 1670.000000 --43.000000 -31.166667 -3873.000000 1670.000000 --42.833333 -31.166667 -3854.000000 1670.000000 --42.666667 -31.166667 -3891.000000 1670.000000 --42.500000 -31.166667 -3816.000000 1670.000000 --42.333333 -31.166667 -3677.000000 1670.000000 --42.166667 -31.166667 -3751.000000 1670.000000 --42.000000 -31.166667 -3816.000000 1670.000000 --41.833333 -31.166667 -3750.000000 1670.000000 --41.666667 -31.166667 -3701.000000 1670.000000 --41.500000 -31.166667 -3827.000000 1670.000000 --41.333333 -31.166667 -3845.000000 1670.000000 --41.166667 -31.166667 -4058.000000 1670.000000 --41.000000 -31.166667 -3994.000000 1670.000000 --40.833333 -31.166667 -3861.000000 1670.000000 --40.666667 -31.166667 -3790.000000 1670.000000 --40.500000 -31.166667 -3761.000000 1670.000000 --40.333333 -31.166667 -3762.000000 1670.000000 --40.166667 -31.166667 -3748.000000 1670.000000 --40.000000 -31.166667 -3697.000000 1670.000000 --65.000000 -31.333333 1161.000000 2670.000000 --64.833333 -31.333333 1740.000000 2670.000000 --64.666667 -31.333333 1299.000000 2670.000000 --64.500000 -31.333333 691.000000 2670.000000 --64.333333 -31.333333 496.000000 2670.000000 --64.166667 -31.333333 443.000000 2670.000000 --64.000000 -31.333333 371.000000 2670.000000 --63.833333 -31.333333 312.000000 2670.000000 --63.666667 -31.333333 258.000000 2670.000000 --63.500000 -31.333333 218.000000 2670.000000 --63.333333 -31.333333 187.000000 2670.000000 --63.166667 -31.333333 161.000000 2670.000000 --63.000000 -31.333333 138.000000 2670.000000 --62.833333 -31.333333 123.000000 2670.000000 --62.666667 -31.333333 107.000000 2670.000000 --62.500000 -31.333333 98.000000 2670.000000 --62.333333 -31.333333 111.000000 2670.000000 --62.166667 -31.333333 116.000000 2670.000000 --62.000000 -31.333333 106.000000 2670.000000 --61.833333 -31.333333 106.000000 2670.000000 --61.666667 -31.333333 100.000000 2670.000000 --61.500000 -31.333333 91.000000 2670.000000 --61.333333 -31.333333 63.000000 2670.000000 --61.166667 -31.333333 48.000000 2670.000000 --61.000000 -31.333333 32.000000 2670.000000 --60.833333 -31.333333 34.000000 2670.000000 --60.666667 -31.333333 21.000000 2670.000000 --60.500000 -31.333333 15.000000 2670.000000 --60.333333 -31.333333 16.000000 2670.000000 --60.166667 -31.333333 17.000000 2670.000000 --60.000000 -31.333333 76.000000 2670.000000 --59.833333 -31.333333 68.000000 2670.000000 --59.666667 -31.333333 61.000000 2670.000000 --59.500000 -31.333333 71.000000 2670.000000 --59.333333 -31.333333 67.000000 2670.000000 --59.166667 -31.333333 65.000000 2670.000000 --59.000000 -31.333333 50.000000 2670.000000 --58.833333 -31.333333 66.000000 2670.000000 --58.666667 -31.333333 65.000000 2670.000000 --58.500000 -31.333333 61.000000 2670.000000 --58.333333 -31.333333 45.000000 2670.000000 --58.166667 -31.333333 46.000000 2670.000000 --58.000000 -31.333333 21.000000 2670.000000 --57.833333 -31.333333 53.000000 2670.000000 --57.666667 -31.333333 62.000000 2670.000000 --57.500000 -31.333333 93.000000 2670.000000 --57.333333 -31.333333 104.000000 2670.000000 --57.166667 -31.333333 82.000000 2670.000000 --57.000000 -31.333333 87.000000 2670.000000 --56.833333 -31.333333 103.000000 2670.000000 --56.666667 -31.333333 221.000000 2670.000000 --56.500000 -31.333333 176.000000 2670.000000 --56.333333 -31.333333 189.000000 2670.000000 --56.166667 -31.333333 378.000000 2670.000000 --56.000000 -31.333333 255.000000 2670.000000 --55.833333 -31.333333 159.000000 2670.000000 --55.666667 -31.333333 169.000000 2670.000000 --55.500000 -31.333333 159.000000 2670.000000 --55.333333 -31.333333 188.000000 2670.000000 --55.166667 -31.333333 172.000000 2670.000000 --55.000000 -31.333333 198.000000 2670.000000 --54.833333 -31.333333 165.000000 2670.000000 --54.666667 -31.333333 185.000000 2670.000000 --54.500000 -31.333333 167.000000 2670.000000 --54.333333 -31.333333 158.000000 2670.000000 --54.166667 -31.333333 248.000000 2670.000000 --54.000000 -31.333333 225.000000 2670.000000 --53.833333 -31.333333 339.000000 2670.000000 --53.666667 -31.333333 350.000000 2670.000000 --53.500000 -31.333333 362.000000 2670.000000 --53.333333 -31.333333 283.000000 2670.000000 --53.166667 -31.333333 325.000000 2670.000000 --53.000000 -31.333333 396.000000 2670.000000 --52.833333 -31.333333 399.000000 2670.000000 --52.666667 -31.333333 405.000000 2670.000000 --52.500000 -31.333333 184.000000 2670.000000 --52.333333 -31.333333 110.000000 2670.000000 --52.166667 -31.333333 105.000000 2670.000000 --52.000000 -31.333333 17.000000 2670.000000 --51.833333 -31.333333 -2.000000 1670.000000 --51.666667 -31.333333 -6.000000 1670.000000 --51.500000 -31.333333 -6.000000 1670.000000 --51.333333 -31.333333 -5.000000 1670.000000 --51.166667 -31.333333 4.000000 2670.000000 --51.000000 -31.333333 -1.000000 1670.000000 --50.833333 -31.333333 -26.000000 1670.000000 --50.666667 -31.333333 -62.000000 1670.000000 --50.500000 -31.333333 -99.000000 1670.000000 --50.333333 -31.333333 -98.000000 1670.000000 --50.166667 -31.333333 -109.000000 1670.000000 --50.000000 -31.333333 -148.000000 1670.000000 --49.833333 -31.333333 -120.000000 1670.000000 --49.666667 -31.333333 -452.000000 1670.000000 --49.500000 -31.333333 -1250.000000 1670.000000 --49.333333 -31.333333 -1662.000000 1670.000000 --49.166667 -31.333333 -1850.000000 1670.000000 --49.000000 -31.333333 -2170.000000 1670.000000 --48.833333 -31.333333 -2359.000000 1670.000000 --48.666667 -31.333333 -2526.000000 1670.000000 --48.500000 -31.333333 -2717.000000 1670.000000 --48.333333 -31.333333 -2850.000000 1670.000000 --48.166667 -31.333333 -2828.000000 1670.000000 --48.000000 -31.333333 -2814.000000 1670.000000 --47.833333 -31.333333 -2911.000000 1670.000000 --47.666667 -31.333333 -3157.000000 1670.000000 --47.500000 -31.333333 -3236.000000 1670.000000 --47.333333 -31.333333 -3240.000000 1670.000000 --47.166667 -31.333333 -3244.000000 1670.000000 --47.000000 -31.333333 -3378.000000 1670.000000 --46.833333 -31.333333 -3367.000000 1670.000000 --46.666667 -31.333333 -3370.000000 1670.000000 --46.500000 -31.333333 -3304.000000 1670.000000 --46.333333 -31.333333 -3388.000000 1670.000000 --46.166667 -31.333333 -3416.000000 1670.000000 --46.000000 -31.333333 -3459.000000 1670.000000 --45.833333 -31.333333 -3494.000000 1670.000000 --45.666667 -31.333333 -3566.000000 1670.000000 --45.500000 -31.333333 -3572.000000 1670.000000 --45.333333 -31.333333 -3560.000000 1670.000000 --45.166667 -31.333333 -3548.000000 1670.000000 --45.000000 -31.333333 -3550.000000 1670.000000 --44.833333 -31.333333 -3569.000000 1670.000000 --44.666667 -31.333333 -3590.000000 1670.000000 --44.500000 -31.333333 -3599.000000 1670.000000 --44.333333 -31.333333 -3612.000000 1670.000000 --44.166667 -31.333333 -3572.000000 1670.000000 --44.000000 -31.333333 -3515.000000 1670.000000 --43.833333 -31.333333 -3499.000000 1670.000000 --43.666667 -31.333333 -3420.000000 1670.000000 --43.500000 -31.333333 -3592.000000 1670.000000 --43.333333 -31.333333 -3810.000000 1670.000000 --43.166667 -31.333333 -3694.000000 1670.000000 --43.000000 -31.333333 -3839.000000 1670.000000 --42.833333 -31.333333 -3791.000000 1670.000000 --42.666667 -31.333333 -3759.000000 1670.000000 --42.500000 -31.333333 -3894.000000 1670.000000 --42.333333 -31.333333 -3740.000000 1670.000000 --42.166667 -31.333333 -3707.000000 1670.000000 --42.000000 -31.333333 -3685.000000 1670.000000 --41.833333 -31.333333 -3763.000000 1670.000000 --41.666667 -31.333333 -3639.000000 1670.000000 --41.500000 -31.333333 -3845.000000 1670.000000 --41.333333 -31.333333 -3847.000000 1670.000000 --41.166667 -31.333333 -3957.000000 1670.000000 --41.000000 -31.333333 -3700.000000 1670.000000 --40.833333 -31.333333 -3868.000000 1670.000000 --40.666667 -31.333333 -3727.000000 1670.000000 --40.500000 -31.333333 -3699.000000 1670.000000 --40.333333 -31.333333 -3675.000000 1670.000000 --40.166667 -31.333333 -3654.000000 1670.000000 --40.000000 -31.333333 -3675.000000 1670.000000 --65.000000 -31.500000 1384.000000 2670.000000 --64.833333 -31.500000 2294.000000 2670.000000 --64.666667 -31.500000 1174.000000 2670.000000 --64.500000 -31.500000 875.000000 2670.000000 --64.333333 -31.500000 557.000000 2670.000000 --64.166667 -31.500000 439.000000 2670.000000 --64.000000 -31.500000 369.000000 2670.000000 --63.833333 -31.500000 320.000000 2670.000000 --63.666667 -31.500000 274.000000 2670.000000 --63.500000 -31.500000 237.000000 2670.000000 --63.333333 -31.500000 202.000000 2670.000000 --63.166667 -31.500000 171.000000 2670.000000 --63.000000 -31.500000 150.000000 2670.000000 --62.833333 -31.500000 129.000000 2670.000000 --62.666667 -31.500000 117.000000 2670.000000 --62.500000 -31.500000 107.000000 2670.000000 --62.333333 -31.500000 110.000000 2670.000000 --62.166667 -31.500000 108.000000 2670.000000 --62.000000 -31.500000 114.000000 2670.000000 --61.833333 -31.500000 106.000000 2670.000000 --61.666667 -31.500000 89.000000 2670.000000 --61.500000 -31.500000 76.000000 2670.000000 --61.333333 -31.500000 64.000000 2670.000000 --61.166667 -31.500000 51.000000 2670.000000 --61.000000 -31.500000 41.000000 2670.000000 --60.833333 -31.500000 27.000000 2670.000000 --60.666667 -31.500000 17.000000 2670.000000 --60.500000 -31.500000 15.000000 2670.000000 --60.333333 -31.500000 15.000000 2670.000000 --60.166667 -31.500000 68.000000 2670.000000 --60.000000 -31.500000 76.000000 2670.000000 --59.833333 -31.500000 85.000000 2670.000000 --59.666667 -31.500000 67.000000 2670.000000 --59.500000 -31.500000 68.000000 2670.000000 --59.333333 -31.500000 56.000000 2670.000000 --59.166667 -31.500000 62.000000 2670.000000 --59.000000 -31.500000 52.000000 2670.000000 --58.833333 -31.500000 69.000000 2670.000000 --58.666667 -31.500000 69.000000 2670.000000 --58.500000 -31.500000 67.000000 2670.000000 --58.333333 -31.500000 47.000000 2670.000000 --58.166667 -31.500000 38.000000 2670.000000 --58.000000 -31.500000 17.000000 2670.000000 --57.833333 -31.500000 45.000000 2670.000000 --57.666667 -31.500000 57.000000 2670.000000 --57.500000 -31.500000 81.000000 2670.000000 --57.333333 -31.500000 117.000000 2670.000000 --57.166667 -31.500000 123.000000 2670.000000 --57.000000 -31.500000 122.000000 2670.000000 --56.833333 -31.500000 133.000000 2670.000000 --56.666667 -31.500000 208.000000 2670.000000 --56.500000 -31.500000 164.000000 2670.000000 --56.333333 -31.500000 267.000000 2670.000000 --56.166667 -31.500000 203.000000 2670.000000 --56.000000 -31.500000 165.000000 2670.000000 --55.833333 -31.500000 165.000000 2670.000000 --55.666667 -31.500000 153.000000 2670.000000 --55.500000 -31.500000 165.000000 2670.000000 --55.333333 -31.500000 149.000000 2670.000000 --55.166667 -31.500000 173.000000 2670.000000 --55.000000 -31.500000 203.000000 2670.000000 --54.833333 -31.500000 198.000000 2670.000000 --54.666667 -31.500000 172.000000 2670.000000 --54.500000 -31.500000 150.000000 2670.000000 --54.333333 -31.500000 162.000000 2670.000000 --54.166667 -31.500000 151.000000 2670.000000 --54.000000 -31.500000 182.000000 2670.000000 --53.833333 -31.500000 168.000000 2670.000000 --53.666667 -31.500000 213.000000 2670.000000 --53.500000 -31.500000 332.000000 2670.000000 --53.333333 -31.500000 387.000000 2670.000000 --53.166667 -31.500000 314.000000 2670.000000 --53.000000 -31.500000 248.000000 2670.000000 --52.833333 -31.500000 287.000000 2670.000000 --52.666667 -31.500000 257.000000 2670.000000 --52.500000 -31.500000 152.000000 2670.000000 --52.333333 -31.500000 77.000000 2670.000000 --52.166667 -31.500000 13.000000 2670.000000 --52.000000 -31.500000 -1.000000 1670.000000 --51.833333 -31.500000 -5.000000 1670.000000 --51.666667 -31.500000 -6.000000 1670.000000 --51.500000 -31.500000 -3.000000 1670.000000 --51.333333 -31.500000 -1.000000 1670.000000 --51.166667 -31.500000 -2.000000 1670.000000 --51.000000 -31.500000 -21.000000 1670.000000 --50.833333 -31.500000 -49.000000 1670.000000 --50.666667 -31.500000 -69.000000 1670.000000 --50.500000 -31.500000 -93.000000 1670.000000 --50.333333 -31.500000 -116.000000 1670.000000 --50.166667 -31.500000 -67.000000 1670.000000 --50.000000 -31.500000 -157.000000 1670.000000 --49.833333 -31.500000 -261.000000 1670.000000 --49.666667 -31.500000 -1035.000000 1670.000000 --49.500000 -31.500000 -1685.000000 1670.000000 --49.333333 -31.500000 -2001.000000 1670.000000 --49.166667 -31.500000 -2210.000000 1670.000000 --49.000000 -31.500000 -2315.000000 1670.000000 --48.833333 -31.500000 -2415.000000 1670.000000 --48.666667 -31.500000 -2658.000000 1670.000000 --48.500000 -31.500000 -2800.000000 1670.000000 --48.333333 -31.500000 -2833.000000 1670.000000 --48.166667 -31.500000 -2914.000000 1670.000000 --48.000000 -31.500000 -2989.000000 1670.000000 --47.833333 -31.500000 -3020.000000 1670.000000 --47.666667 -31.500000 -3167.000000 1670.000000 --47.500000 -31.500000 -3355.000000 1670.000000 --47.333333 -31.500000 -3224.000000 1670.000000 --47.166667 -31.500000 -3299.000000 1670.000000 --47.000000 -31.500000 -3336.000000 1670.000000 --46.833333 -31.500000 -3385.000000 1670.000000 --46.666667 -31.500000 -3398.000000 1670.000000 --46.500000 -31.500000 -3393.000000 1670.000000 --46.333333 -31.500000 -3479.000000 1670.000000 --46.166667 -31.500000 -3528.000000 1670.000000 --46.000000 -31.500000 -3528.000000 1670.000000 --45.833333 -31.500000 -3568.000000 1670.000000 --45.666667 -31.500000 -3600.000000 1670.000000 --45.500000 -31.500000 -3610.000000 1670.000000 --45.333333 -31.500000 -3595.000000 1670.000000 --45.166667 -31.500000 -3589.000000 1670.000000 --45.000000 -31.500000 -3587.000000 1670.000000 --44.833333 -31.500000 -3592.000000 1670.000000 --44.666667 -31.500000 -3590.000000 1670.000000 --44.500000 -31.500000 -3652.000000 1670.000000 --44.333333 -31.500000 -3588.000000 1670.000000 --44.166667 -31.500000 -3643.000000 1670.000000 --44.000000 -31.500000 -3683.000000 1670.000000 --43.833333 -31.500000 -3679.000000 1670.000000 --43.666667 -31.500000 -3634.000000 1670.000000 --43.500000 -31.500000 -3763.000000 1670.000000 --43.333333 -31.500000 -3772.000000 1670.000000 --43.166667 -31.500000 -3797.000000 1670.000000 --43.000000 -31.500000 -3871.000000 1670.000000 --42.833333 -31.500000 -3805.000000 1670.000000 --42.666667 -31.500000 -3762.000000 1670.000000 --42.500000 -31.500000 -3712.000000 1670.000000 --42.333333 -31.500000 -3892.000000 1670.000000 --42.166667 -31.500000 -3669.000000 1670.000000 --42.000000 -31.500000 -3716.000000 1670.000000 --41.833333 -31.500000 -3613.000000 1670.000000 --41.666667 -31.500000 -3680.000000 1670.000000 --41.500000 -31.500000 -3699.000000 1670.000000 --41.333333 -31.500000 -4031.000000 1670.000000 --41.166667 -31.500000 -3834.000000 1670.000000 --41.000000 -31.500000 -3713.000000 1670.000000 --40.833333 -31.500000 -3674.000000 1670.000000 --40.666667 -31.500000 -3719.000000 1670.000000 --40.500000 -31.500000 -3680.000000 1670.000000 --40.333333 -31.500000 -3807.000000 1670.000000 --40.166667 -31.500000 -3683.000000 1670.000000 --40.000000 -31.500000 -3686.000000 1670.000000 --65.000000 -31.666667 1017.000000 2670.000000 --64.833333 -31.666667 2069.000000 2670.000000 --64.666667 -31.666667 1349.000000 2670.000000 --64.500000 -31.666667 848.000000 2670.000000 --64.333333 -31.666667 523.000000 2670.000000 --64.166667 -31.666667 401.000000 2670.000000 --64.000000 -31.666667 363.000000 2670.000000 --63.833333 -31.666667 322.000000 2670.000000 --63.666667 -31.666667 284.000000 2670.000000 --63.500000 -31.666667 247.000000 2670.000000 --63.333333 -31.666667 215.000000 2670.000000 --63.166667 -31.666667 184.000000 2670.000000 --63.000000 -31.666667 158.000000 2670.000000 --62.833333 -31.666667 141.000000 2670.000000 --62.666667 -31.666667 124.000000 2670.000000 --62.500000 -31.666667 114.000000 2670.000000 --62.333333 -31.666667 106.000000 2670.000000 --62.166667 -31.666667 108.000000 2670.000000 --62.000000 -31.666667 105.000000 2670.000000 --61.833333 -31.666667 115.000000 2670.000000 --61.666667 -31.666667 90.000000 2670.000000 --61.500000 -31.666667 62.000000 2670.000000 --61.333333 -31.666667 55.000000 2670.000000 --61.166667 -31.666667 43.000000 2670.000000 --61.000000 -31.666667 35.000000 2670.000000 --60.833333 -31.666667 20.000000 2670.000000 --60.666667 -31.666667 11.000000 2670.000000 --60.500000 -31.666667 12.000000 2670.000000 --60.333333 -31.666667 49.000000 2670.000000 --60.166667 -31.666667 91.000000 2670.000000 --60.000000 -31.666667 64.000000 2670.000000 --59.833333 -31.666667 85.000000 2670.000000 --59.666667 -31.666667 77.000000 2670.000000 --59.500000 -31.666667 52.000000 2670.000000 --59.333333 -31.666667 48.000000 2670.000000 --59.166667 -31.666667 42.000000 2670.000000 --59.000000 -31.666667 61.000000 2670.000000 --58.833333 -31.666667 50.000000 2670.000000 --58.666667 -31.666667 62.000000 2670.000000 --58.500000 -31.666667 66.000000 2670.000000 --58.333333 -31.666667 41.000000 2670.000000 --58.166667 -31.666667 30.000000 2670.000000 --58.000000 -31.666667 8.000000 2670.000000 --57.833333 -31.666667 60.000000 2670.000000 --57.666667 -31.666667 64.000000 2670.000000 --57.500000 -31.666667 67.000000 2670.000000 --57.333333 -31.666667 88.000000 2670.000000 --57.166667 -31.666667 134.000000 2670.000000 --57.000000 -31.666667 220.000000 2670.000000 --56.833333 -31.666667 245.000000 2670.000000 --56.666667 -31.666667 164.000000 2670.000000 --56.500000 -31.666667 209.000000 2670.000000 --56.333333 -31.666667 249.000000 2670.000000 --56.166667 -31.666667 167.000000 2670.000000 --56.000000 -31.666667 162.000000 2670.000000 --55.833333 -31.666667 141.000000 2670.000000 --55.666667 -31.666667 131.000000 2670.000000 --55.500000 -31.666667 112.000000 2670.000000 --55.333333 -31.666667 249.000000 2670.000000 --55.166667 -31.666667 249.000000 2670.000000 --55.000000 -31.666667 215.000000 2670.000000 --54.833333 -31.666667 174.000000 2670.000000 --54.666667 -31.666667 155.000000 2670.000000 --54.500000 -31.666667 136.000000 2670.000000 --54.333333 -31.666667 138.000000 2670.000000 --54.166667 -31.666667 169.000000 2670.000000 --54.000000 -31.666667 138.000000 2670.000000 --53.833333 -31.666667 160.000000 2670.000000 --53.666667 -31.666667 169.000000 2670.000000 --53.500000 -31.666667 339.000000 2670.000000 --53.333333 -31.666667 331.000000 2670.000000 --53.166667 -31.666667 242.000000 2670.000000 --53.000000 -31.666667 213.000000 2670.000000 --52.833333 -31.666667 168.000000 2670.000000 --52.666667 -31.666667 82.000000 2670.000000 --52.500000 -31.666667 69.000000 2670.000000 --52.333333 -31.666667 23.000000 2670.000000 --52.166667 -31.666667 7.000000 2670.000000 --52.000000 -31.666667 -3.000000 1670.000000 --51.833333 -31.666667 -6.000000 1670.000000 --51.666667 -31.666667 -4.000000 1670.000000 --51.500000 -31.666667 5.000000 2670.000000 --51.333333 -31.666667 -3.000000 1670.000000 --51.166667 -31.666667 -18.000000 1670.000000 --51.000000 -31.666667 -39.000000 1670.000000 --50.833333 -31.666667 -59.000000 1670.000000 --50.666667 -31.666667 -81.000000 1670.000000 --50.500000 -31.666667 -91.000000 1670.000000 --50.333333 -31.666667 -129.000000 1670.000000 --50.166667 -31.666667 -139.000000 1670.000000 --50.000000 -31.666667 -135.000000 1670.000000 --49.833333 -31.666667 -755.000000 1670.000000 --49.666667 -31.666667 -1425.000000 1670.000000 --49.500000 -31.666667 -1844.000000 1670.000000 --49.333333 -31.666667 -2065.000000 1670.000000 --49.166667 -31.666667 -2157.000000 1670.000000 --49.000000 -31.666667 -2437.000000 1670.000000 --48.833333 -31.666667 -2649.000000 1670.000000 --48.666667 -31.666667 -2670.000000 1670.000000 --48.500000 -31.666667 -2752.000000 1670.000000 --48.333333 -31.666667 -2886.000000 1670.000000 --48.166667 -31.666667 -3035.000000 1670.000000 --48.000000 -31.666667 -3060.000000 1670.000000 --47.833333 -31.666667 -3125.000000 1670.000000 --47.666667 -31.666667 -3233.000000 1670.000000 --47.500000 -31.666667 -3208.000000 1670.000000 --47.333333 -31.666667 -3276.000000 1670.000000 --47.166667 -31.666667 -3293.000000 1670.000000 --47.000000 -31.666667 -3358.000000 1670.000000 --46.833333 -31.666667 -3405.000000 1670.000000 --46.666667 -31.666667 -3420.000000 1670.000000 --46.500000 -31.666667 -3478.000000 1670.000000 --46.333333 -31.666667 -3524.000000 1670.000000 --46.166667 -31.666667 -3610.000000 1670.000000 --46.000000 -31.666667 -3605.000000 1670.000000 --45.833333 -31.666667 -3645.000000 1670.000000 --45.666667 -31.666667 -3657.000000 1670.000000 --45.500000 -31.666667 -3646.000000 1670.000000 --45.333333 -31.666667 -3623.000000 1670.000000 --45.166667 -31.666667 -3617.000000 1670.000000 --45.000000 -31.666667 -3608.000000 1670.000000 --44.833333 -31.666667 -3621.000000 1670.000000 --44.666667 -31.666667 -3636.000000 1670.000000 --44.500000 -31.666667 -3663.000000 1670.000000 --44.333333 -31.666667 -3646.000000 1670.000000 --44.166667 -31.666667 -3658.000000 1670.000000 --44.000000 -31.666667 -3625.000000 1670.000000 --43.833333 -31.666667 -3722.000000 1670.000000 --43.666667 -31.666667 -3671.000000 1670.000000 --43.500000 -31.666667 -3776.000000 1670.000000 --43.333333 -31.666667 -3709.000000 1670.000000 --43.166667 -31.666667 -3585.000000 1670.000000 --43.000000 -31.666667 -3735.000000 1670.000000 --42.833333 -31.666667 -3287.000000 1670.000000 --42.666667 -31.666667 -3826.000000 1670.000000 --42.500000 -31.666667 -3642.000000 1670.000000 --42.333333 -31.666667 -3774.000000 1670.000000 --42.166667 -31.666667 -3773.000000 1670.000000 --42.000000 -31.666667 -3719.000000 1670.000000 --41.833333 -31.666667 -3660.000000 1670.000000 --41.666667 -31.666667 -3686.000000 1670.000000 --41.500000 -31.666667 -3678.000000 1670.000000 --41.333333 -31.666667 -3834.000000 1670.000000 --41.166667 -31.666667 -3660.000000 1670.000000 --41.000000 -31.666667 -3809.000000 1670.000000 --40.833333 -31.666667 -3695.000000 1670.000000 --40.666667 -31.666667 -3808.000000 1670.000000 --40.500000 -31.666667 -3711.000000 1670.000000 --40.333333 -31.666667 -3798.000000 1670.000000 --40.166667 -31.666667 -3701.000000 1670.000000 --40.000000 -31.666667 -3692.000000 1670.000000 --65.000000 -31.833333 863.000000 2670.000000 --64.833333 -31.833333 2152.000000 2670.000000 --64.666667 -31.833333 1039.000000 2670.000000 --64.500000 -31.833333 786.000000 2670.000000 --64.333333 -31.833333 467.000000 2670.000000 --64.166667 -31.833333 418.000000 2670.000000 --64.000000 -31.833333 366.000000 2670.000000 --63.833333 -31.833333 314.000000 2670.000000 --63.666667 -31.833333 275.000000 2670.000000 --63.500000 -31.833333 243.000000 2670.000000 --63.333333 -31.833333 212.000000 2670.000000 --63.166667 -31.833333 188.000000 2670.000000 --63.000000 -31.833333 162.000000 2670.000000 --62.833333 -31.833333 145.000000 2670.000000 --62.666667 -31.833333 129.000000 2670.000000 --62.500000 -31.833333 118.000000 2670.000000 --62.333333 -31.833333 106.000000 2670.000000 --62.166667 -31.833333 105.000000 2670.000000 --62.000000 -31.833333 104.000000 2670.000000 --61.833333 -31.833333 104.000000 2670.000000 --61.666667 -31.833333 84.000000 2670.000000 --61.500000 -31.833333 53.000000 2670.000000 --61.333333 -31.833333 53.000000 2670.000000 --61.166667 -31.833333 44.000000 2670.000000 --61.000000 -31.833333 34.000000 2670.000000 --60.833333 -31.833333 12.000000 2670.000000 --60.666667 -31.833333 12.000000 2670.000000 --60.500000 -31.833333 85.000000 2670.000000 --60.333333 -31.833333 59.000000 2670.000000 --60.166667 -31.833333 59.000000 2670.000000 --60.000000 -31.833333 85.000000 2670.000000 --59.833333 -31.833333 87.000000 2670.000000 --59.666667 -31.833333 69.000000 2670.000000 --59.500000 -31.833333 63.000000 2670.000000 --59.333333 -31.833333 68.000000 2670.000000 --59.166667 -31.833333 41.000000 2670.000000 --59.000000 -31.833333 47.000000 2670.000000 --58.833333 -31.833333 64.000000 2670.000000 --58.666667 -31.833333 70.000000 2670.000000 --58.500000 -31.833333 52.000000 2670.000000 --58.333333 -31.833333 31.000000 2670.000000 --58.166667 -31.833333 11.000000 2670.000000 --58.000000 -31.833333 34.000000 2670.000000 --57.833333 -31.833333 45.000000 2670.000000 --57.666667 -31.833333 70.000000 2670.000000 --57.500000 -31.833333 101.000000 2670.000000 --57.333333 -31.833333 127.000000 2670.000000 --57.166667 -31.833333 145.000000 2670.000000 --57.000000 -31.833333 163.000000 2670.000000 --56.833333 -31.833333 215.000000 2670.000000 --56.666667 -31.833333 235.000000 2670.000000 --56.500000 -31.833333 235.000000 2670.000000 --56.333333 -31.833333 229.000000 2670.000000 --56.166667 -31.833333 195.000000 2670.000000 --56.000000 -31.833333 154.000000 2670.000000 --55.833333 -31.833333 125.000000 2670.000000 --55.666667 -31.833333 133.000000 2670.000000 --55.500000 -31.833333 106.000000 2670.000000 --55.333333 -31.833333 133.000000 2670.000000 --55.166667 -31.833333 118.000000 2670.000000 --55.000000 -31.833333 151.000000 2670.000000 --54.833333 -31.833333 137.000000 2670.000000 --54.666667 -31.833333 149.000000 2670.000000 --54.500000 -31.833333 121.000000 2670.000000 --54.333333 -31.833333 144.000000 2670.000000 --54.166667 -31.833333 160.000000 2670.000000 --54.000000 -31.833333 155.000000 2670.000000 --53.833333 -31.833333 121.000000 2670.000000 --53.666667 -31.833333 248.000000 2670.000000 --53.500000 -31.833333 226.000000 2670.000000 --53.333333 -31.833333 153.000000 2670.000000 --53.166667 -31.833333 223.000000 2670.000000 --53.000000 -31.833333 63.000000 2670.000000 --52.833333 -31.833333 62.000000 2670.000000 --52.666667 -31.833333 56.000000 2670.000000 --52.500000 -31.833333 11.000000 2670.000000 --52.333333 -31.833333 1.000000 2670.000000 --52.166667 -31.833333 -1.000000 1670.000000 --52.000000 -31.833333 11.000000 2670.000000 --51.833333 -31.833333 -1.000000 1670.000000 --51.666667 -31.833333 -1.000000 1670.000000 --51.500000 -31.833333 -6.000000 1670.000000 --51.333333 -31.833333 -15.000000 1670.000000 --51.166667 -31.833333 -26.000000 1670.000000 --51.000000 -31.833333 -52.000000 1670.000000 --50.833333 -31.833333 -66.000000 1670.000000 --50.666667 -31.833333 -81.000000 1670.000000 --50.500000 -31.833333 -98.000000 1670.000000 --50.333333 -31.833333 -119.000000 1670.000000 --50.166667 -31.833333 -87.000000 1670.000000 --50.000000 -31.833333 -208.000000 1670.000000 --49.833333 -31.833333 -1310.000000 1670.000000 --49.666667 -31.833333 -1636.000000 1670.000000 --49.500000 -31.833333 -1952.000000 1670.000000 --49.333333 -31.833333 -2044.000000 1670.000000 --49.166667 -31.833333 -2275.000000 1670.000000 --49.000000 -31.833333 -2403.000000 1670.000000 --48.833333 -31.833333 -2672.000000 1670.000000 --48.666667 -31.833333 -2716.000000 1670.000000 --48.500000 -31.833333 -2835.000000 1670.000000 --48.333333 -31.833333 -2909.000000 1670.000000 --48.166667 -31.833333 -3026.000000 1670.000000 --48.000000 -31.833333 -3069.000000 1670.000000 --47.833333 -31.833333 -3141.000000 1670.000000 --47.666667 -31.833333 -3176.000000 1670.000000 --47.500000 -31.833333 -3246.000000 1670.000000 --47.333333 -31.833333 -3295.000000 1670.000000 --47.166667 -31.833333 -3366.000000 1670.000000 --47.000000 -31.833333 -3414.000000 1670.000000 --46.833333 -31.833333 -3474.000000 1670.000000 --46.666667 -31.833333 -3500.000000 1670.000000 --46.500000 -31.833333 -3567.000000 1670.000000 --46.333333 -31.833333 -3615.000000 1670.000000 --46.166667 -31.833333 -3658.000000 1670.000000 --46.000000 -31.833333 -3704.000000 1670.000000 --45.833333 -31.833333 -3732.000000 1670.000000 --45.666667 -31.833333 -3743.000000 1670.000000 --45.500000 -31.833333 -3745.000000 1670.000000 --45.333333 -31.833333 -3727.000000 1670.000000 --45.166667 -31.833333 -3692.000000 1670.000000 --45.000000 -31.833333 -3676.000000 1670.000000 --44.833333 -31.833333 -3675.000000 1670.000000 --44.666667 -31.833333 -3688.000000 1670.000000 --44.500000 -31.833333 -3651.000000 1670.000000 --44.333333 -31.833333 -3647.000000 1670.000000 --44.166667 -31.833333 -3696.000000 1670.000000 --44.000000 -31.833333 -3735.000000 1670.000000 --43.833333 -31.833333 -3773.000000 1670.000000 --43.666667 -31.833333 -3668.000000 1670.000000 --43.500000 -31.833333 -3792.000000 1670.000000 --43.333333 -31.833333 -3801.000000 1670.000000 --43.166667 -31.833333 -3750.000000 1670.000000 --43.000000 -31.833333 -3977.000000 1670.000000 --42.833333 -31.833333 -3806.000000 1670.000000 --42.666667 -31.833333 -3734.000000 1670.000000 --42.500000 -31.833333 -3667.000000 1670.000000 --42.333333 -31.833333 -3672.000000 1670.000000 --42.166667 -31.833333 -3957.000000 1670.000000 --42.000000 -31.833333 -3880.000000 1670.000000 --41.833333 -31.833333 -3809.000000 1670.000000 --41.666667 -31.833333 -3798.000000 1670.000000 --41.500000 -31.833333 -3828.000000 1670.000000 --41.333333 -31.833333 -3875.000000 1670.000000 --41.166667 -31.833333 -3907.000000 1670.000000 --41.000000 -31.833333 -3985.000000 1670.000000 --40.833333 -31.833333 -3895.000000 1670.000000 --40.666667 -31.833333 -3979.000000 1670.000000 --40.500000 -31.833333 -3958.000000 1670.000000 --40.333333 -31.833333 -4096.000000 1670.000000 --40.166667 -31.833333 -3756.000000 1670.000000 --40.000000 -31.833333 -3848.000000 1670.000000 --65.000000 -32.000000 1072.000000 2670.000000 --64.833333 -32.000000 1448.000000 2670.000000 --64.666667 -32.000000 978.000000 2670.000000 --64.500000 -32.000000 1120.000000 2670.000000 --64.333333 -32.000000 553.000000 2670.000000 --64.166667 -32.000000 453.000000 2670.000000 --64.000000 -32.000000 371.000000 2670.000000 --63.833333 -32.000000 317.000000 2670.000000 --63.666667 -32.000000 283.000000 2670.000000 --63.500000 -32.000000 247.000000 2670.000000 --63.333333 -32.000000 218.000000 2670.000000 --63.166667 -32.000000 193.000000 2670.000000 --63.000000 -32.000000 167.000000 2670.000000 --62.833333 -32.000000 145.000000 2670.000000 --62.666667 -32.000000 129.000000 2670.000000 --62.500000 -32.000000 116.000000 2670.000000 --62.333333 -32.000000 106.000000 2670.000000 --62.166667 -32.000000 99.000000 2670.000000 --62.000000 -32.000000 112.000000 2670.000000 --61.833333 -32.000000 109.000000 2670.000000 --61.666667 -32.000000 76.000000 2670.000000 --61.500000 -32.000000 51.000000 2670.000000 --61.333333 -32.000000 56.000000 2670.000000 --61.166667 -32.000000 43.000000 2670.000000 --61.000000 -32.000000 27.000000 2670.000000 --60.833333 -32.000000 9.000000 2670.000000 --60.666667 -32.000000 11.000000 2670.000000 --60.500000 -32.000000 58.000000 2670.000000 --60.333333 -32.000000 95.000000 2670.000000 --60.166667 -32.000000 102.000000 2670.000000 --60.000000 -32.000000 96.000000 2670.000000 --59.833333 -32.000000 73.000000 2670.000000 --59.666667 -32.000000 77.000000 2670.000000 --59.500000 -32.000000 64.000000 2670.000000 --59.333333 -32.000000 56.000000 2670.000000 --59.166667 -32.000000 45.000000 2670.000000 --59.000000 -32.000000 53.000000 2670.000000 --58.833333 -32.000000 62.000000 2670.000000 --58.666667 -32.000000 57.000000 2670.000000 --58.500000 -32.000000 55.000000 2670.000000 --58.333333 -32.000000 36.000000 2670.000000 --58.166667 -32.000000 8.000000 2670.000000 --58.000000 -32.000000 34.000000 2670.000000 --57.833333 -32.000000 68.000000 2670.000000 --57.666667 -32.000000 83.000000 2670.000000 --57.500000 -32.000000 72.000000 2670.000000 --57.333333 -32.000000 80.000000 2670.000000 --57.166667 -32.000000 80.000000 2670.000000 --57.000000 -32.000000 135.000000 2670.000000 --56.833333 -32.000000 166.000000 2670.000000 --56.666667 -32.000000 136.000000 2670.000000 --56.500000 -32.000000 202.000000 2670.000000 --56.333333 -32.000000 211.000000 2670.000000 --56.166667 -32.000000 256.000000 2670.000000 --56.000000 -32.000000 153.000000 2670.000000 --55.833333 -32.000000 142.000000 2670.000000 --55.666667 -32.000000 111.000000 2670.000000 --55.500000 -32.000000 101.000000 2670.000000 --55.333333 -32.000000 103.000000 2670.000000 --55.166667 -32.000000 141.000000 2670.000000 --55.000000 -32.000000 145.000000 2670.000000 --54.833333 -32.000000 138.000000 2670.000000 --54.666667 -32.000000 127.000000 2670.000000 --54.500000 -32.000000 116.000000 2670.000000 --54.333333 -32.000000 122.000000 2670.000000 --54.166667 -32.000000 132.000000 2670.000000 --54.000000 -32.000000 104.000000 2670.000000 --53.833333 -32.000000 94.000000 2670.000000 --53.666667 -32.000000 119.000000 2670.000000 --53.500000 -32.000000 312.000000 2670.000000 --53.333333 -32.000000 217.000000 2670.000000 --53.166667 -32.000000 180.000000 2670.000000 --53.000000 -32.000000 131.000000 2670.000000 --52.833333 -32.000000 81.000000 2670.000000 --52.666667 -32.000000 16.000000 2670.000000 --52.500000 -32.000000 2.000000 2670.000000 --52.333333 -32.000000 8.000000 2670.000000 --52.166667 -32.000000 8.000000 2670.000000 --52.000000 -32.000000 9.000000 2670.000000 --51.833333 -32.000000 -6.000000 1670.000000 --51.666667 -32.000000 -11.000000 1670.000000 --51.500000 -32.000000 -16.000000 1670.000000 --51.333333 -32.000000 -22.000000 1670.000000 --51.166667 -32.000000 -51.000000 1670.000000 --51.000000 -32.000000 -62.000000 1670.000000 --50.833333 -32.000000 -71.000000 1670.000000 --50.666667 -32.000000 -89.000000 1670.000000 --50.500000 -32.000000 -100.000000 1670.000000 --50.333333 -32.000000 -115.000000 1670.000000 --50.166667 -32.000000 -158.000000 1670.000000 --50.000000 -32.000000 -822.000000 1670.000000 --49.833333 -32.000000 -1434.000000 1670.000000 --49.666667 -32.000000 -1823.000000 1670.000000 --49.500000 -32.000000 -2060.000000 1670.000000 --49.333333 -32.000000 -2233.000000 1670.000000 --49.166667 -32.000000 -2387.000000 1670.000000 --49.000000 -32.000000 -2553.000000 1670.000000 --48.833333 -32.000000 -2671.000000 1670.000000 --48.666667 -32.000000 -2804.000000 1670.000000 --48.500000 -32.000000 -2908.000000 1670.000000 --48.333333 -32.000000 -2988.000000 1670.000000 --48.166667 -32.000000 -3034.000000 1670.000000 --48.000000 -32.000000 -3110.000000 1670.000000 --47.833333 -32.000000 -3167.000000 1670.000000 --47.666667 -32.000000 -3228.000000 1670.000000 --47.500000 -32.000000 -3301.000000 1670.000000 --47.333333 -32.000000 -3350.000000 1670.000000 --47.166667 -32.000000 -3426.000000 1670.000000 --47.000000 -32.000000 -3484.000000 1670.000000 --46.833333 -32.000000 -3542.000000 1670.000000 --46.666667 -32.000000 -3603.000000 1670.000000 --46.500000 -32.000000 -3649.000000 1670.000000 --46.333333 -32.000000 -3698.000000 1670.000000 --46.166667 -32.000000 -3739.000000 1670.000000 --46.000000 -32.000000 -3779.000000 1670.000000 --45.833333 -32.000000 -3823.000000 1670.000000 --45.666667 -32.000000 -3858.000000 1670.000000 --45.500000 -32.000000 -3878.000000 1670.000000 --45.333333 -32.000000 -3878.000000 1670.000000 --45.166667 -32.000000 -3870.000000 1670.000000 --45.000000 -32.000000 -3833.000000 1670.000000 --44.833333 -32.000000 -3822.000000 1670.000000 --44.666667 -32.000000 -3799.000000 1670.000000 --44.500000 -32.000000 -3752.000000 1670.000000 --44.333333 -32.000000 -3717.000000 1670.000000 --44.166667 -32.000000 -3717.000000 1670.000000 --44.000000 -32.000000 -3697.000000 1670.000000 --43.833333 -32.000000 -3722.000000 1670.000000 --43.666667 -32.000000 -3847.000000 1670.000000 --43.500000 -32.000000 -3847.000000 1670.000000 --43.333333 -32.000000 -3746.000000 1670.000000 --43.166667 -32.000000 -3858.000000 1670.000000 --43.000000 -32.000000 -3856.000000 1670.000000 --42.833333 -32.000000 -3804.000000 1670.000000 --42.666667 -32.000000 -3839.000000 1670.000000 --42.500000 -32.000000 -3769.000000 1670.000000 --42.333333 -32.000000 -3781.000000 1670.000000 --42.166667 -32.000000 -3839.000000 1670.000000 --42.000000 -32.000000 -3880.000000 1670.000000 --41.833333 -32.000000 -3746.000000 1670.000000 --41.666667 -32.000000 -3664.000000 1670.000000 --41.500000 -32.000000 -3717.000000 1670.000000 --41.333333 -32.000000 -3869.000000 1670.000000 --41.166667 -32.000000 -3974.000000 1670.000000 --41.000000 -32.000000 -4029.000000 1670.000000 --40.833333 -32.000000 -4082.000000 1670.000000 --40.666667 -32.000000 -4039.000000 1670.000000 --40.500000 -32.000000 -4345.000000 1670.000000 --40.333333 -32.000000 -4280.000000 1670.000000 --40.166667 -32.000000 -3959.000000 1670.000000 --40.000000 -32.000000 -3996.000000 1670.000000 --65.000000 -32.166667 1090.000000 2670.000000 --64.833333 -32.166667 1326.000000 2670.000000 --64.666667 -32.166667 880.000000 2670.000000 --64.500000 -32.166667 544.000000 2670.000000 --64.333333 -32.166667 487.000000 2670.000000 --64.166667 -32.166667 392.000000 2670.000000 --64.000000 -32.166667 354.000000 2670.000000 --63.833333 -32.166667 324.000000 2670.000000 --63.666667 -32.166667 284.000000 2670.000000 --63.500000 -32.166667 252.000000 2670.000000 --63.333333 -32.166667 221.000000 2670.000000 --63.166667 -32.166667 193.000000 2670.000000 --63.000000 -32.166667 167.000000 2670.000000 --62.833333 -32.166667 147.000000 2670.000000 --62.666667 -32.166667 132.000000 2670.000000 --62.500000 -32.166667 116.000000 2670.000000 --62.333333 -32.166667 104.000000 2670.000000 --62.166667 -32.166667 96.000000 2670.000000 --62.000000 -32.166667 119.000000 2670.000000 --61.833333 -32.166667 110.000000 2670.000000 --61.666667 -32.166667 79.000000 2670.000000 --61.500000 -32.166667 52.000000 2670.000000 --61.333333 -32.166667 38.000000 2670.000000 --61.166667 -32.166667 42.000000 2670.000000 --61.000000 -32.166667 29.000000 2670.000000 --60.833333 -32.166667 9.000000 2670.000000 --60.666667 -32.166667 11.000000 2670.000000 --60.500000 -32.166667 98.000000 2670.000000 --60.333333 -32.166667 85.000000 2670.000000 --60.166667 -32.166667 103.000000 2670.000000 --60.000000 -32.166667 62.000000 2670.000000 --59.833333 -32.166667 70.000000 2670.000000 --59.666667 -32.166667 59.000000 2670.000000 --59.500000 -32.166667 67.000000 2670.000000 --59.333333 -32.166667 68.000000 2670.000000 --59.166667 -32.166667 55.000000 2670.000000 --59.000000 -32.166667 38.000000 2670.000000 --58.833333 -32.166667 64.000000 2670.000000 --58.666667 -32.166667 42.000000 2670.000000 --58.500000 -32.166667 45.000000 2670.000000 --58.333333 -32.166667 28.000000 2670.000000 --58.166667 -32.166667 6.000000 2670.000000 --58.000000 -32.166667 33.000000 2670.000000 --57.833333 -32.166667 39.000000 2670.000000 --57.666667 -32.166667 31.000000 2670.000000 --57.500000 -32.166667 37.000000 2670.000000 --57.333333 -32.166667 47.000000 2670.000000 --57.166667 -32.166667 50.000000 2670.000000 --57.000000 -32.166667 87.000000 2670.000000 --56.833333 -32.166667 97.000000 2670.000000 --56.666667 -32.166667 156.000000 2670.000000 --56.500000 -32.166667 141.000000 2670.000000 --56.333333 -32.166667 162.000000 2670.000000 --56.166667 -32.166667 134.000000 2670.000000 --56.000000 -32.166667 114.000000 2670.000000 --55.833333 -32.166667 114.000000 2670.000000 --55.666667 -32.166667 114.000000 2670.000000 --55.500000 -32.166667 94.000000 2670.000000 --55.333333 -32.166667 117.000000 2670.000000 --55.166667 -32.166667 106.000000 2670.000000 --55.000000 -32.166667 113.000000 2670.000000 --54.833333 -32.166667 117.000000 2670.000000 --54.666667 -32.166667 132.000000 2670.000000 --54.500000 -32.166667 144.000000 2670.000000 --54.333333 -32.166667 155.000000 2670.000000 --54.166667 -32.166667 172.000000 2670.000000 --54.000000 -32.166667 119.000000 2670.000000 --53.833333 -32.166667 185.000000 2670.000000 --53.666667 -32.166667 154.000000 2670.000000 --53.500000 -32.166667 114.000000 2670.000000 --53.333333 -32.166667 160.000000 2670.000000 --53.166667 -32.166667 71.000000 2670.000000 --53.000000 -32.166667 37.000000 2670.000000 --52.833333 -32.166667 5.000000 2670.000000 --52.666667 -32.166667 -1.000000 1670.000000 --52.500000 -32.166667 1.000000 2670.000000 --52.333333 -32.166667 10.000000 2670.000000 --52.166667 -32.166667 6.000000 2670.000000 --52.000000 -32.166667 -9.000000 1670.000000 --51.833333 -32.166667 -20.000000 1670.000000 --51.666667 -32.166667 -19.000000 1670.000000 --51.500000 -32.166667 -19.000000 1670.000000 --51.333333 -32.166667 -45.000000 1670.000000 --51.166667 -32.166667 -59.000000 1670.000000 --51.000000 -32.166667 -67.000000 1670.000000 --50.833333 -32.166667 -79.000000 1670.000000 --50.666667 -32.166667 -85.000000 1670.000000 --50.500000 -32.166667 -92.000000 1670.000000 --50.333333 -32.166667 -92.000000 1670.000000 --50.166667 -32.166667 -280.000000 1670.000000 --50.000000 -32.166667 -648.000000 1670.000000 --49.833333 -32.166667 -1532.000000 1670.000000 --49.666667 -32.166667 -1882.000000 1670.000000 --49.500000 -32.166667 -2066.000000 1670.000000 --49.333333 -32.166667 -2284.000000 1670.000000 --49.166667 -32.166667 -2396.000000 1670.000000 --49.000000 -32.166667 -2646.000000 1670.000000 --48.833333 -32.166667 -2752.000000 1670.000000 --48.666667 -32.166667 -2798.000000 1670.000000 --48.500000 -32.166667 -2915.000000 1670.000000 --48.333333 -32.166667 -2996.000000 1670.000000 --48.166667 -32.166667 -3073.000000 1670.000000 --48.000000 -32.166667 -3147.000000 1670.000000 --47.833333 -32.166667 -3245.000000 1670.000000 --47.666667 -32.166667 -3325.000000 1670.000000 --47.500000 -32.166667 -3391.000000 1670.000000 --47.333333 -32.166667 -3462.000000 1670.000000 --47.166667 -32.166667 -3526.000000 1670.000000 --47.000000 -32.166667 -3599.000000 1670.000000 --46.833333 -32.166667 -3658.000000 1670.000000 --46.666667 -32.166667 -3706.000000 1670.000000 --46.500000 -32.166667 -3762.000000 1670.000000 --46.333333 -32.166667 -3809.000000 1670.000000 --46.166667 -32.166667 -3855.000000 1670.000000 --46.000000 -32.166667 -3897.000000 1670.000000 --45.833333 -32.166667 -3916.000000 1670.000000 --45.666667 -32.166667 -3943.000000 1670.000000 --45.500000 -32.166667 -3954.000000 1670.000000 --45.333333 -32.166667 -3996.000000 1670.000000 --45.166667 -32.166667 -4014.000000 1670.000000 --45.000000 -32.166667 -4005.000000 1670.000000 --44.833333 -32.166667 -3963.000000 1670.000000 --44.666667 -32.166667 -3939.000000 1670.000000 --44.500000 -32.166667 -3890.000000 1670.000000 --44.333333 -32.166667 -3875.000000 1670.000000 --44.166667 -32.166667 -3805.000000 1670.000000 --44.000000 -32.166667 -3804.000000 1670.000000 --43.833333 -32.166667 -3746.000000 1670.000000 --43.666667 -32.166667 -3757.000000 1670.000000 --43.500000 -32.166667 -3830.000000 1670.000000 --43.333333 -32.166667 -3845.000000 1670.000000 --43.166667 -32.166667 -3854.000000 1670.000000 --43.000000 -32.166667 -3970.000000 1670.000000 --42.833333 -32.166667 -3949.000000 1670.000000 --42.666667 -32.166667 -3934.000000 1670.000000 --42.500000 -32.166667 -3774.000000 1670.000000 --42.333333 -32.166667 -3755.000000 1670.000000 --42.166667 -32.166667 -3821.000000 1670.000000 --42.000000 -32.166667 -3819.000000 1670.000000 --41.833333 -32.166667 -3759.000000 1670.000000 --41.666667 -32.166667 -3842.000000 1670.000000 --41.500000 -32.166667 -3918.000000 1670.000000 --41.333333 -32.166667 -4107.000000 1670.000000 --41.166667 -32.166667 -4339.000000 1670.000000 --41.000000 -32.166667 -4267.000000 1670.000000 --40.833333 -32.166667 -4327.000000 1670.000000 --40.666667 -32.166667 -4161.000000 1670.000000 --40.500000 -32.166667 -4192.000000 1670.000000 --40.333333 -32.166667 -4250.000000 1670.000000 --40.166667 -32.166667 -4219.000000 1670.000000 --40.000000 -32.166667 -4231.000000 1670.000000 --65.000000 -32.333333 928.000000 2670.000000 --64.833333 -32.333333 1451.000000 2670.000000 --64.666667 -32.333333 904.000000 2670.000000 --64.500000 -32.333333 601.000000 2670.000000 --64.333333 -32.333333 616.000000 2670.000000 --64.166667 -32.333333 460.000000 2670.000000 --64.000000 -32.333333 359.000000 2670.000000 --63.833333 -32.333333 313.000000 2670.000000 --63.666667 -32.333333 282.000000 2670.000000 --63.500000 -32.333333 250.000000 2670.000000 --63.333333 -32.333333 220.000000 2670.000000 --63.166667 -32.333333 192.000000 2670.000000 --63.000000 -32.333333 164.000000 2670.000000 --62.833333 -32.333333 145.000000 2670.000000 --62.666667 -32.333333 130.000000 2670.000000 --62.500000 -32.333333 119.000000 2670.000000 --62.333333 -32.333333 111.000000 2670.000000 --62.166667 -32.333333 98.000000 2670.000000 --62.000000 -32.333333 96.000000 2670.000000 --61.833333 -32.333333 111.000000 2670.000000 --61.666667 -32.333333 106.000000 2670.000000 --61.500000 -32.333333 71.000000 2670.000000 --61.333333 -32.333333 54.000000 2670.000000 --61.166667 -32.333333 28.000000 2670.000000 --61.000000 -32.333333 29.000000 2670.000000 --60.833333 -32.333333 5.000000 2670.000000 --60.666667 -32.333333 11.000000 2670.000000 --60.500000 -32.333333 10.000000 2670.000000 --60.333333 -32.333333 82.000000 2670.000000 --60.166667 -32.333333 97.000000 2670.000000 --60.000000 -32.333333 92.000000 2670.000000 --59.833333 -32.333333 65.000000 2670.000000 --59.666667 -32.333333 53.000000 2670.000000 --59.500000 -32.333333 73.000000 2670.000000 --59.333333 -32.333333 67.000000 2670.000000 --59.166667 -32.333333 49.000000 2670.000000 --59.000000 -32.333333 54.000000 2670.000000 --58.833333 -32.333333 50.000000 2670.000000 --58.666667 -32.333333 47.000000 2670.000000 --58.500000 -32.333333 35.000000 2670.000000 --58.333333 -32.333333 26.000000 2670.000000 --58.166667 -32.333333 17.000000 2670.000000 --58.000000 -32.333333 52.000000 2670.000000 --57.833333 -32.333333 63.000000 2670.000000 --57.666667 -32.333333 80.000000 2670.000000 --57.500000 -32.333333 85.000000 2670.000000 --57.333333 -32.333333 76.000000 2670.000000 --57.166667 -32.333333 85.000000 2670.000000 --57.000000 -32.333333 146.000000 2670.000000 --56.833333 -32.333333 131.000000 2670.000000 --56.666667 -32.333333 135.000000 2670.000000 --56.500000 -32.333333 118.000000 2670.000000 --56.333333 -32.333333 159.000000 2670.000000 --56.166667 -32.333333 176.000000 2670.000000 --56.000000 -32.333333 112.000000 2670.000000 --55.833333 -32.333333 94.000000 2670.000000 --55.666667 -32.333333 104.000000 2670.000000 --55.500000 -32.333333 95.000000 2670.000000 --55.333333 -32.333333 107.000000 2670.000000 --55.166667 -32.333333 127.000000 2670.000000 --55.000000 -32.333333 122.000000 2670.000000 --54.833333 -32.333333 101.000000 2670.000000 --54.666667 -32.333333 128.000000 2670.000000 --54.500000 -32.333333 145.000000 2670.000000 --54.333333 -32.333333 147.000000 2670.000000 --54.166667 -32.333333 108.000000 2670.000000 --54.000000 -32.333333 102.000000 2670.000000 --53.833333 -32.333333 110.000000 2670.000000 --53.666667 -32.333333 46.000000 2670.000000 --53.500000 -32.333333 45.000000 2670.000000 --53.333333 -32.333333 81.000000 2670.000000 --53.166667 -32.333333 55.000000 2670.000000 --53.000000 -32.333333 13.000000 2670.000000 --52.833333 -32.333333 6.000000 2670.000000 --52.666667 -32.333333 4.000000 2670.000000 --52.500000 -32.333333 6.000000 2670.000000 --52.333333 -32.333333 6.000000 2670.000000 --52.166667 -32.333333 -7.000000 1670.000000 --52.000000 -32.333333 -21.000000 1670.000000 --51.833333 -32.333333 -22.000000 1670.000000 --51.666667 -32.333333 -24.000000 1670.000000 --51.500000 -32.333333 -36.000000 1670.000000 --51.333333 -32.333333 -56.000000 1670.000000 --51.166667 -32.333333 -60.000000 1670.000000 --51.000000 -32.333333 -78.000000 1670.000000 --50.833333 -32.333333 -72.000000 1670.000000 --50.666667 -32.333333 -79.000000 1670.000000 --50.500000 -32.333333 -98.000000 1670.000000 --50.333333 -32.333333 -145.000000 1670.000000 --50.166667 -32.333333 -721.000000 1670.000000 --50.000000 -32.333333 -1177.000000 1670.000000 --49.833333 -32.333333 -1606.000000 1670.000000 --49.666667 -32.333333 -1831.000000 1670.000000 --49.500000 -32.333333 -2022.000000 1670.000000 --49.333333 -32.333333 -2251.000000 1670.000000 --49.166667 -32.333333 -2316.000000 1670.000000 --49.000000 -32.333333 -2506.000000 1670.000000 --48.833333 -32.333333 -2782.000000 1670.000000 --48.666667 -32.333333 -2845.000000 1670.000000 --48.500000 -32.333333 -2931.000000 1670.000000 --48.333333 -32.333333 -3026.000000 1670.000000 --48.166667 -32.333333 -3113.000000 1670.000000 --48.000000 -32.333333 -3257.000000 1670.000000 --47.833333 -32.333333 -3304.000000 1670.000000 --47.666667 -32.333333 -3395.000000 1670.000000 --47.500000 -32.333333 -3475.000000 1670.000000 --47.333333 -32.333333 -3554.000000 1670.000000 --47.166667 -32.333333 -3626.000000 1670.000000 --47.000000 -32.333333 -3695.000000 1670.000000 --46.833333 -32.333333 -3757.000000 1670.000000 --46.666667 -32.333333 -3800.000000 1670.000000 --46.500000 -32.333333 -3862.000000 1670.000000 --46.333333 -32.333333 -3894.000000 1670.000000 --46.166667 -32.333333 -3929.000000 1670.000000 --46.000000 -32.333333 -3967.000000 1670.000000 --45.833333 -32.333333 -3978.000000 1670.000000 --45.666667 -32.333333 -3997.000000 1670.000000 --45.500000 -32.333333 -4016.000000 1670.000000 --45.333333 -32.333333 -4049.000000 1670.000000 --45.166667 -32.333333 -4071.000000 1670.000000 --45.000000 -32.333333 -4072.000000 1670.000000 --44.833333 -32.333333 -4065.000000 1670.000000 --44.666667 -32.333333 -4061.000000 1670.000000 --44.500000 -32.333333 -4079.000000 1670.000000 --44.333333 -32.333333 -4073.000000 1670.000000 --44.166667 -32.333333 -4026.000000 1670.000000 --44.000000 -32.333333 -3938.000000 1670.000000 --43.833333 -32.333333 -3847.000000 1670.000000 --43.666667 -32.333333 -3906.000000 1670.000000 --43.500000 -32.333333 -3893.000000 1670.000000 --43.333333 -32.333333 -3922.000000 1670.000000 --43.166667 -32.333333 -3916.000000 1670.000000 --43.000000 -32.333333 -3906.000000 1670.000000 --42.833333 -32.333333 -4036.000000 1670.000000 --42.666667 -32.333333 -3992.000000 1670.000000 --42.500000 -32.333333 -3937.000000 1670.000000 --42.333333 -32.333333 -3987.000000 1670.000000 --42.166667 -32.333333 -3951.000000 1670.000000 --42.000000 -32.333333 -3875.000000 1670.000000 --41.833333 -32.333333 -4006.000000 1670.000000 --41.666667 -32.333333 -4178.000000 1670.000000 --41.500000 -32.333333 -4228.000000 1670.000000 --41.333333 -32.333333 -4324.000000 1670.000000 --41.166667 -32.333333 -4362.000000 1670.000000 --41.000000 -32.333333 -4469.000000 1670.000000 --40.833333 -32.333333 -4481.000000 1670.000000 --40.666667 -32.333333 -4414.000000 1670.000000 --40.500000 -32.333333 -3788.000000 1670.000000 --40.333333 -32.333333 -4526.000000 1670.000000 --40.166667 -32.333333 -4317.000000 1670.000000 --40.000000 -32.333333 -4381.000000 1670.000000 --65.000000 -32.500000 917.000000 2670.000000 --64.833333 -32.500000 1575.000000 2670.000000 --64.666667 -32.500000 902.000000 2670.000000 --64.500000 -32.500000 688.000000 2670.000000 --64.333333 -32.500000 672.000000 2670.000000 --64.166667 -32.500000 488.000000 2670.000000 --64.000000 -32.500000 382.000000 2670.000000 --63.833333 -32.500000 288.000000 2670.000000 --63.666667 -32.500000 256.000000 2670.000000 --63.500000 -32.500000 233.000000 2670.000000 --63.333333 -32.500000 207.000000 2670.000000 --63.166667 -32.500000 186.000000 2670.000000 --63.000000 -32.500000 163.000000 2670.000000 --62.833333 -32.500000 144.000000 2670.000000 --62.666667 -32.500000 128.000000 2670.000000 --62.500000 -32.500000 118.000000 2670.000000 --62.333333 -32.500000 115.000000 2670.000000 --62.166667 -32.500000 113.000000 2670.000000 --62.000000 -32.500000 88.000000 2670.000000 --61.833333 -32.500000 119.000000 2670.000000 --61.666667 -32.500000 109.000000 2670.000000 --61.500000 -32.500000 94.000000 2670.000000 --61.333333 -32.500000 65.000000 2670.000000 --61.166667 -32.500000 37.000000 2670.000000 --61.000000 -32.500000 38.000000 2670.000000 --60.833333 -32.500000 23.000000 2670.000000 --60.666667 -32.500000 8.000000 2670.000000 --60.500000 -32.500000 7.000000 2670.000000 --60.333333 -32.500000 12.000000 2670.000000 --60.166667 -32.500000 47.000000 2670.000000 --60.000000 -32.500000 89.000000 2670.000000 --59.833333 -32.500000 57.000000 2670.000000 --59.666667 -32.500000 57.000000 2670.000000 --59.500000 -32.500000 52.000000 2670.000000 --59.333333 -32.500000 55.000000 2670.000000 --59.166667 -32.500000 49.000000 2670.000000 --59.000000 -32.500000 51.000000 2670.000000 --58.833333 -32.500000 53.000000 2670.000000 --58.666667 -32.500000 27.000000 2670.000000 --58.500000 -32.500000 27.000000 2670.000000 --58.333333 -32.500000 18.000000 2670.000000 --58.166667 -32.500000 16.000000 2670.000000 --58.000000 -32.500000 38.000000 2670.000000 --57.833333 -32.500000 66.000000 2670.000000 --57.666667 -32.500000 79.000000 2670.000000 --57.500000 -32.500000 79.000000 2670.000000 --57.333333 -32.500000 94.000000 2670.000000 --57.166667 -32.500000 88.000000 2670.000000 --57.000000 -32.500000 137.000000 2670.000000 --56.833333 -32.500000 144.000000 2670.000000 --56.666667 -32.500000 132.000000 2670.000000 --56.500000 -32.500000 104.000000 2670.000000 --56.333333 -32.500000 125.000000 2670.000000 --56.166667 -32.500000 159.000000 2670.000000 --56.000000 -32.500000 133.000000 2670.000000 --55.833333 -32.500000 95.000000 2670.000000 --55.666667 -32.500000 77.000000 2670.000000 --55.500000 -32.500000 80.000000 2670.000000 --55.333333 -32.500000 90.000000 2670.000000 --55.166667 -32.500000 105.000000 2670.000000 --55.000000 -32.500000 112.000000 2670.000000 --54.833333 -32.500000 127.000000 2670.000000 --54.666667 -32.500000 144.000000 2670.000000 --54.500000 -32.500000 147.000000 2670.000000 --54.333333 -32.500000 108.000000 2670.000000 --54.166667 -32.500000 103.000000 2670.000000 --54.000000 -32.500000 114.000000 2670.000000 --53.833333 -32.500000 144.000000 2670.000000 --53.666667 -32.500000 59.000000 2670.000000 --53.500000 -32.500000 16.000000 2670.000000 --53.333333 -32.500000 53.000000 2670.000000 --53.166667 -32.500000 16.000000 2670.000000 --53.000000 -32.500000 4.000000 2670.000000 --52.833333 -32.500000 -18.000000 1670.000000 --52.666667 -32.500000 -9.000000 1670.000000 --52.500000 -32.500000 5.000000 2670.000000 --52.333333 -32.500000 -2.000000 1670.000000 --52.166667 -32.500000 -12.000000 1670.000000 --52.000000 -32.500000 -22.000000 1670.000000 --51.833333 -32.500000 -28.000000 1670.000000 --51.666667 -32.500000 -35.000000 1670.000000 --51.500000 -32.500000 -48.000000 1670.000000 --51.333333 -32.500000 -53.000000 1670.000000 --51.166667 -32.500000 -63.000000 1670.000000 --51.000000 -32.500000 -65.000000 1670.000000 --50.833333 -32.500000 -68.000000 1670.000000 --50.666667 -32.500000 -81.000000 1670.000000 --50.500000 -32.500000 -96.000000 1670.000000 --50.333333 -32.500000 -232.000000 1670.000000 --50.166667 -32.500000 -916.000000 1670.000000 --50.000000 -32.500000 -1219.000000 1670.000000 --49.833333 -32.500000 -1485.000000 1670.000000 --49.666667 -32.500000 -1736.000000 1670.000000 --49.500000 -32.500000 -1861.000000 1670.000000 --49.333333 -32.500000 -2048.000000 1670.000000 --49.166667 -32.500000 -2292.000000 1670.000000 --49.000000 -32.500000 -2461.000000 1670.000000 --48.833333 -32.500000 -2899.000000 1670.000000 --48.666667 -32.500000 -2889.000000 1670.000000 --48.500000 -32.500000 -2942.000000 1670.000000 --48.333333 -32.500000 -3083.000000 1670.000000 --48.166667 -32.500000 -3213.000000 1670.000000 --48.000000 -32.500000 -3284.000000 1670.000000 --47.833333 -32.500000 -3388.000000 1670.000000 --47.666667 -32.500000 -3453.000000 1670.000000 --47.500000 -32.500000 -3541.000000 1670.000000 --47.333333 -32.500000 -3626.000000 1670.000000 --47.166667 -32.500000 -3692.000000 1670.000000 --47.000000 -32.500000 -3762.000000 1670.000000 --46.833333 -32.500000 -3811.000000 1670.000000 --46.666667 -32.500000 -3848.000000 1670.000000 --46.500000 -32.500000 -3885.000000 1670.000000 --46.333333 -32.500000 -3925.000000 1670.000000 --46.166667 -32.500000 -3945.000000 1670.000000 --46.000000 -32.500000 -3980.000000 1670.000000 --45.833333 -32.500000 -4011.000000 1670.000000 --45.666667 -32.500000 -4031.000000 1670.000000 --45.500000 -32.500000 -4083.000000 1670.000000 --45.333333 -32.500000 -4103.000000 1670.000000 --45.166667 -32.500000 -4102.000000 1670.000000 --45.000000 -32.500000 -4127.000000 1670.000000 --44.833333 -32.500000 -4164.000000 1670.000000 --44.666667 -32.500000 -4117.000000 1670.000000 --44.500000 -32.500000 -4240.000000 1670.000000 --44.333333 -32.500000 -4096.000000 1670.000000 --44.166667 -32.500000 -4144.000000 1670.000000 --44.000000 -32.500000 -4141.000000 1670.000000 --43.833333 -32.500000 -4093.000000 1670.000000 --43.666667 -32.500000 -4061.000000 1670.000000 --43.500000 -32.500000 -4101.000000 1670.000000 --43.333333 -32.500000 -4002.000000 1670.000000 --43.166667 -32.500000 -4164.000000 1670.000000 --43.000000 -32.500000 -4125.000000 1670.000000 --42.833333 -32.500000 -4182.000000 1670.000000 --42.666667 -32.500000 -4116.000000 1670.000000 --42.500000 -32.500000 -4146.000000 1670.000000 --42.333333 -32.500000 -4124.000000 1670.000000 --42.166667 -32.500000 -4096.000000 1670.000000 --42.000000 -32.500000 -4087.000000 1670.000000 --41.833333 -32.500000 -4167.000000 1670.000000 --41.666667 -32.500000 -4277.000000 1670.000000 --41.500000 -32.500000 -4401.000000 1670.000000 --41.333333 -32.500000 -4400.000000 1670.000000 --41.166667 -32.500000 -4420.000000 1670.000000 --41.000000 -32.500000 -4472.000000 1670.000000 --40.833333 -32.500000 -4411.000000 1670.000000 --40.666667 -32.500000 -4514.000000 1670.000000 --40.500000 -32.500000 -4105.000000 1670.000000 --40.333333 -32.500000 -4196.000000 1670.000000 --40.166667 -32.500000 -4402.000000 1670.000000 --40.000000 -32.500000 -4337.000000 1670.000000 --65.000000 -32.666667 1001.000000 2670.000000 --64.833333 -32.666667 1203.000000 2670.000000 --64.666667 -32.666667 820.000000 2670.000000 --64.500000 -32.666667 684.000000 2670.000000 --64.333333 -32.666667 579.000000 2670.000000 --64.166667 -32.666667 458.000000 2670.000000 --64.000000 -32.666667 364.000000 2670.000000 --63.833333 -32.666667 295.000000 2670.000000 --63.666667 -32.666667 244.000000 2670.000000 --63.500000 -32.666667 211.000000 2670.000000 --63.333333 -32.666667 190.000000 2670.000000 --63.166667 -32.666667 172.000000 2670.000000 --63.000000 -32.666667 157.000000 2670.000000 --62.833333 -32.666667 140.000000 2670.000000 --62.666667 -32.666667 126.000000 2670.000000 --62.500000 -32.666667 116.000000 2670.000000 --62.333333 -32.666667 115.000000 2670.000000 --62.166667 -32.666667 111.000000 2670.000000 --62.000000 -32.666667 89.000000 2670.000000 --61.833333 -32.666667 91.000000 2670.000000 --61.666667 -32.666667 113.000000 2670.000000 --61.500000 -32.666667 94.000000 2670.000000 --61.333333 -32.666667 73.000000 2670.000000 --61.166667 -32.666667 53.000000 2670.000000 --61.000000 -32.666667 38.000000 2670.000000 --60.833333 -32.666667 31.000000 2670.000000 --60.666667 -32.666667 9.000000 2670.000000 --60.500000 -32.666667 7.000000 2670.000000 --60.333333 -32.666667 5.000000 2670.000000 --60.166667 -32.666667 5.000000 2670.000000 --60.000000 -32.666667 70.000000 2670.000000 --59.833333 -32.666667 42.000000 2670.000000 --59.666667 -32.666667 74.000000 2670.000000 --59.500000 -32.666667 49.000000 2670.000000 --59.333333 -32.666667 58.000000 2670.000000 --59.166667 -32.666667 34.000000 2670.000000 --59.000000 -32.666667 32.000000 2670.000000 --58.833333 -32.666667 57.000000 2670.000000 --58.666667 -32.666667 39.000000 2670.000000 --58.500000 -32.666667 20.000000 2670.000000 --58.333333 -32.666667 37.000000 2670.000000 --58.166667 -32.666667 3.000000 2670.000000 --58.000000 -32.666667 36.000000 2670.000000 --57.833333 -32.666667 43.000000 2670.000000 --57.666667 -32.666667 68.000000 2670.000000 --57.500000 -32.666667 85.000000 2670.000000 --57.333333 -32.666667 84.000000 2670.000000 --57.166667 -32.666667 57.000000 2670.000000 --57.000000 -32.666667 105.000000 2670.000000 --56.833333 -32.666667 118.000000 2670.000000 --56.666667 -32.666667 85.000000 2670.000000 --56.500000 -32.666667 117.000000 2670.000000 --56.333333 -32.666667 78.000000 2670.000000 --56.166667 -32.666667 90.000000 2670.000000 --56.000000 -32.666667 73.000000 2670.000000 --55.833333 -32.666667 76.000000 2670.000000 --55.666667 -32.666667 102.000000 2670.000000 --55.500000 -32.666667 129.000000 2670.000000 --55.333333 -32.666667 105.000000 2670.000000 --55.166667 -32.666667 155.000000 2670.000000 --55.000000 -32.666667 156.000000 2670.000000 --54.833333 -32.666667 157.000000 2670.000000 --54.666667 -32.666667 263.000000 2670.000000 --54.500000 -32.666667 226.000000 2670.000000 --54.333333 -32.666667 229.000000 2670.000000 --54.166667 -32.666667 144.000000 2670.000000 --54.000000 -32.666667 55.000000 2670.000000 --53.833333 -32.666667 46.000000 2670.000000 --53.666667 -32.666667 50.000000 2670.000000 --53.500000 -32.666667 16.000000 2670.000000 --53.333333 -32.666667 13.000000 2670.000000 --53.166667 -32.666667 -12.000000 1670.000000 --53.000000 -32.666667 -12.000000 1670.000000 --52.833333 -32.666667 -6.000000 1670.000000 --52.666667 -32.666667 -7.000000 1670.000000 --52.500000 -32.666667 5.000000 2670.000000 --52.333333 -32.666667 -5.000000 1670.000000 --52.166667 -32.666667 -14.000000 1670.000000 --52.000000 -32.666667 -22.000000 1670.000000 --51.833333 -32.666667 -33.000000 1670.000000 --51.666667 -32.666667 -42.000000 1670.000000 --51.500000 -32.666667 -49.000000 1670.000000 --51.333333 -32.666667 -58.000000 1670.000000 --51.166667 -32.666667 -60.000000 1670.000000 --51.000000 -32.666667 -63.000000 1670.000000 --50.833333 -32.666667 -103.000000 1670.000000 --50.666667 -32.666667 -186.000000 1670.000000 --50.500000 -32.666667 -129.000000 1670.000000 --50.333333 -32.666667 -464.000000 1670.000000 --50.166667 -32.666667 -926.000000 1670.000000 --50.000000 -32.666667 -1148.000000 1670.000000 --49.833333 -32.666667 -1342.000000 1670.000000 --49.666667 -32.666667 -1599.000000 1670.000000 --49.500000 -32.666667 -1782.000000 1670.000000 --49.333333 -32.666667 -1960.000000 1670.000000 --49.166667 -32.666667 -2186.000000 1670.000000 --49.000000 -32.666667 -2638.000000 1670.000000 --48.833333 -32.666667 -2864.000000 1670.000000 --48.666667 -32.666667 -2869.000000 1670.000000 --48.500000 -32.666667 -3090.000000 1670.000000 --48.333333 -32.666667 -3129.000000 1670.000000 --48.166667 -32.666667 -3219.000000 1670.000000 --48.000000 -32.666667 -3358.000000 1670.000000 --47.833333 -32.666667 -3411.000000 1670.000000 --47.666667 -32.666667 -3490.000000 1670.000000 --47.500000 -32.666667 -3573.000000 1670.000000 --47.333333 -32.666667 -3656.000000 1670.000000 --47.166667 -32.666667 -3720.000000 1670.000000 --47.000000 -32.666667 -3773.000000 1670.000000 --46.833333 -32.666667 -3802.000000 1670.000000 --46.666667 -32.666667 -3841.000000 1670.000000 --46.500000 -32.666667 -3889.000000 1670.000000 --46.333333 -32.666667 -3942.000000 1670.000000 --46.166667 -32.666667 -3968.000000 1670.000000 --46.000000 -32.666667 -4002.000000 1670.000000 --45.833333 -32.666667 -4031.000000 1670.000000 --45.666667 -32.666667 -4079.000000 1670.000000 --45.500000 -32.666667 -4093.000000 1670.000000 --45.333333 -32.666667 -4101.000000 1670.000000 --45.166667 -32.666667 -4124.000000 1670.000000 --45.000000 -32.666667 -4140.000000 1670.000000 --44.833333 -32.666667 -4179.000000 1670.000000 --44.666667 -32.666667 -4171.000000 1670.000000 --44.500000 -32.666667 -4233.000000 1670.000000 --44.333333 -32.666667 -4179.000000 1670.000000 --44.166667 -32.666667 -4235.000000 1670.000000 --44.000000 -32.666667 -4228.000000 1670.000000 --43.833333 -32.666667 -4220.000000 1670.000000 --43.666667 -32.666667 -4224.000000 1670.000000 --43.500000 -32.666667 -4175.000000 1670.000000 --43.333333 -32.666667 -4240.000000 1670.000000 --43.166667 -32.666667 -4252.000000 1670.000000 --43.000000 -32.666667 -4293.000000 1670.000000 --42.833333 -32.666667 -4313.000000 1670.000000 --42.666667 -32.666667 -4261.000000 1670.000000 --42.500000 -32.666667 -4247.000000 1670.000000 --42.333333 -32.666667 -4294.000000 1670.000000 --42.166667 -32.666667 -4293.000000 1670.000000 --42.000000 -32.666667 -4315.000000 1670.000000 --41.833333 -32.666667 -4341.000000 1670.000000 --41.666667 -32.666667 -4384.000000 1670.000000 --41.500000 -32.666667 -4417.000000 1670.000000 --41.333333 -32.666667 -4492.000000 1670.000000 --41.166667 -32.666667 -4467.000000 1670.000000 --41.000000 -32.666667 -4509.000000 1670.000000 --40.833333 -32.666667 -4462.000000 1670.000000 --40.666667 -32.666667 -4567.000000 1670.000000 --40.500000 -32.666667 -4535.000000 1670.000000 --40.333333 -32.666667 -4396.000000 1670.000000 --40.166667 -32.666667 -4484.000000 1670.000000 --40.000000 -32.666667 -4591.000000 1670.000000 --65.000000 -32.833333 1002.000000 2670.000000 --64.833333 -32.833333 896.000000 2670.000000 --64.666667 -32.833333 691.000000 2670.000000 --64.500000 -32.833333 649.000000 2670.000000 --64.333333 -32.833333 533.000000 2670.000000 --64.166667 -32.833333 429.000000 2670.000000 --64.000000 -32.833333 343.000000 2670.000000 --63.833333 -32.833333 282.000000 2670.000000 --63.666667 -32.833333 231.000000 2670.000000 --63.500000 -32.833333 191.000000 2670.000000 --63.333333 -32.833333 180.000000 2670.000000 --63.166667 -32.833333 162.000000 2670.000000 --63.000000 -32.833333 146.000000 2670.000000 --62.833333 -32.833333 133.000000 2670.000000 --62.666667 -32.833333 121.000000 2670.000000 --62.500000 -32.833333 115.000000 2670.000000 --62.333333 -32.833333 109.000000 2670.000000 --62.166667 -32.833333 108.000000 2670.000000 --62.000000 -32.833333 102.000000 2670.000000 --61.833333 -32.833333 86.000000 2670.000000 --61.666667 -32.833333 116.000000 2670.000000 --61.500000 -32.833333 100.000000 2670.000000 --61.333333 -32.833333 76.000000 2670.000000 --61.166667 -32.833333 48.000000 2670.000000 --61.000000 -32.833333 43.000000 2670.000000 --60.833333 -32.833333 29.000000 2670.000000 --60.666667 -32.833333 8.000000 2670.000000 --60.500000 -32.833333 6.000000 2670.000000 --60.333333 -32.833333 6.000000 2670.000000 --60.166667 -32.833333 4.000000 2670.000000 --60.000000 -32.833333 5.000000 2670.000000 --59.833333 -32.833333 11.000000 2670.000000 --59.666667 -32.833333 57.000000 2670.000000 --59.500000 -32.833333 29.000000 2670.000000 --59.333333 -32.833333 61.000000 2670.000000 --59.166667 -32.833333 19.000000 2670.000000 --59.000000 -32.833333 43.000000 2670.000000 --58.833333 -32.833333 46.000000 2670.000000 --58.666667 -32.833333 43.000000 2670.000000 --58.500000 -32.833333 9.000000 2670.000000 --58.333333 -32.833333 40.000000 2670.000000 --58.166667 -32.833333 1.000000 2670.000000 --58.000000 -32.833333 27.000000 2670.000000 --57.833333 -32.833333 66.000000 2670.000000 --57.666667 -32.833333 53.000000 2670.000000 --57.500000 -32.833333 37.000000 2670.000000 --57.333333 -32.833333 41.000000 2670.000000 --57.166667 -32.833333 104.000000 2670.000000 --57.000000 -32.833333 120.000000 2670.000000 --56.833333 -32.833333 74.000000 2670.000000 --56.666667 -32.833333 59.000000 2670.000000 --56.500000 -32.833333 70.000000 2670.000000 --56.333333 -32.833333 78.000000 2670.000000 --56.166667 -32.833333 82.000000 2670.000000 --56.000000 -32.833333 113.000000 2670.000000 --55.833333 -32.833333 112.000000 2670.000000 --55.666667 -32.833333 120.000000 2670.000000 --55.500000 -32.833333 103.000000 2670.000000 --55.333333 -32.833333 130.000000 2670.000000 --55.166667 -32.833333 156.000000 2670.000000 --55.000000 -32.833333 169.000000 2670.000000 --54.833333 -32.833333 286.000000 2670.000000 --54.666667 -32.833333 293.000000 2670.000000 --54.500000 -32.833333 309.000000 2670.000000 --54.333333 -32.833333 141.000000 2670.000000 --54.166667 -32.833333 89.000000 2670.000000 --54.000000 -32.833333 39.000000 2670.000000 --53.833333 -32.833333 28.000000 2670.000000 --53.666667 -32.833333 17.000000 2670.000000 --53.500000 -32.833333 8.000000 2670.000000 --53.333333 -32.833333 4.000000 2670.000000 --53.166667 -32.833333 -3.000000 1670.000000 --53.000000 -32.833333 2.000000 2670.000000 --52.833333 -32.833333 -10.000000 1670.000000 --52.666667 -32.833333 7.000000 2670.000000 --52.500000 -32.833333 7.000000 2670.000000 --52.333333 -32.833333 -9.000000 1670.000000 --52.166667 -32.833333 -19.000000 1670.000000 --52.000000 -32.833333 -26.000000 1670.000000 --51.833333 -32.833333 -39.000000 1670.000000 --51.666667 -32.833333 -48.000000 1670.000000 --51.500000 -32.833333 -57.000000 1670.000000 --51.333333 -32.833333 -77.000000 1670.000000 --51.166667 -32.833333 -64.000000 1670.000000 --51.000000 -32.833333 -68.000000 1670.000000 --50.833333 -32.833333 -71.000000 1670.000000 --50.666667 -32.833333 -228.000000 1670.000000 --50.500000 -32.833333 -134.000000 1670.000000 --50.333333 -32.833333 -610.000000 1670.000000 --50.166667 -32.833333 -884.000000 1670.000000 --50.000000 -32.833333 -1074.000000 1670.000000 --49.833333 -32.833333 -1216.000000 1670.000000 --49.666667 -32.833333 -1448.000000 1670.000000 --49.500000 -32.833333 -1682.000000 1670.000000 --49.333333 -32.833333 -1856.000000 1670.000000 --49.166667 -32.833333 -2260.000000 1670.000000 --49.000000 -32.833333 -2807.000000 1670.000000 --48.833333 -32.833333 -2856.000000 1670.000000 --48.666667 -32.833333 -2978.000000 1670.000000 --48.500000 -32.833333 -3074.000000 1670.000000 --48.333333 -32.833333 -3169.000000 1670.000000 --48.166667 -32.833333 -3267.000000 1670.000000 --48.000000 -32.833333 -3368.000000 1670.000000 --47.833333 -32.833333 -3433.000000 1670.000000 --47.666667 -32.833333 -3514.000000 1670.000000 --47.500000 -32.833333 -3579.000000 1670.000000 --47.333333 -32.833333 -3651.000000 1670.000000 --47.166667 -32.833333 -3703.000000 1670.000000 --47.000000 -32.833333 -3749.000000 1670.000000 --46.833333 -32.833333 -3792.000000 1670.000000 --46.666667 -32.833333 -3830.000000 1670.000000 --46.500000 -32.833333 -3889.000000 1670.000000 --46.333333 -32.833333 -3942.000000 1670.000000 --46.166667 -32.833333 -3971.000000 1670.000000 --46.000000 -32.833333 -4012.000000 1670.000000 --45.833333 -32.833333 -4042.000000 1670.000000 --45.666667 -32.833333 -4078.000000 1670.000000 --45.500000 -32.833333 -4113.000000 1670.000000 --45.333333 -32.833333 -4132.000000 1670.000000 --45.166667 -32.833333 -4134.000000 1670.000000 --45.000000 -32.833333 -4161.000000 1670.000000 --44.833333 -32.833333 -4194.000000 1670.000000 --44.666667 -32.833333 -4207.000000 1670.000000 --44.500000 -32.833333 -4238.000000 1670.000000 --44.333333 -32.833333 -4215.000000 1670.000000 --44.166667 -32.833333 -4273.000000 1670.000000 --44.000000 -32.833333 -4251.000000 1670.000000 --43.833333 -32.833333 -4196.000000 1670.000000 --43.666667 -32.833333 -4317.000000 1670.000000 --43.500000 -32.833333 -4273.000000 1670.000000 --43.333333 -32.833333 -4335.000000 1670.000000 --43.166667 -32.833333 -4325.000000 1670.000000 --43.000000 -32.833333 -4336.000000 1670.000000 --42.833333 -32.833333 -4352.000000 1670.000000 --42.666667 -32.833333 -4352.000000 1670.000000 --42.500000 -32.833333 -4370.000000 1670.000000 --42.333333 -32.833333 -4359.000000 1670.000000 --42.166667 -32.833333 -4401.000000 1670.000000 --42.000000 -32.833333 -4451.000000 1670.000000 --41.833333 -32.833333 -4455.000000 1670.000000 --41.666667 -32.833333 -4498.000000 1670.000000 --41.500000 -32.833333 -4516.000000 1670.000000 --41.333333 -32.833333 -4511.000000 1670.000000 --41.166667 -32.833333 -4384.000000 1670.000000 --41.000000 -32.833333 -4552.000000 1670.000000 --40.833333 -32.833333 -4607.000000 1670.000000 --40.666667 -32.833333 -4642.000000 1670.000000 --40.500000 -32.833333 -4774.000000 1670.000000 --40.333333 -32.833333 -4722.000000 1670.000000 --40.166667 -32.833333 -4812.000000 1670.000000 --40.000000 -32.833333 -4718.000000 1670.000000 --65.000000 -33.000000 1374.000000 2670.000000 --64.833333 -33.000000 800.000000 2670.000000 --64.666667 -33.000000 606.000000 2670.000000 --64.500000 -33.000000 548.000000 2670.000000 --64.333333 -33.000000 486.000000 2670.000000 --64.166667 -33.000000 404.000000 2670.000000 --64.000000 -33.000000 318.000000 2670.000000 --63.833333 -33.000000 275.000000 2670.000000 --63.666667 -33.000000 229.000000 2670.000000 --63.500000 -33.000000 195.000000 2670.000000 --63.333333 -33.000000 164.000000 2670.000000 --63.166667 -33.000000 153.000000 2670.000000 --63.000000 -33.000000 137.000000 2670.000000 --62.833333 -33.000000 125.000000 2670.000000 --62.666667 -33.000000 116.000000 2670.000000 --62.500000 -33.000000 116.000000 2670.000000 --62.333333 -33.000000 112.000000 2670.000000 --62.166667 -33.000000 106.000000 2670.000000 --62.000000 -33.000000 102.000000 2670.000000 --61.833333 -33.000000 81.000000 2670.000000 --61.666667 -33.000000 125.000000 2670.000000 --61.500000 -33.000000 76.000000 2670.000000 --61.333333 -33.000000 50.000000 2670.000000 --61.166667 -33.000000 73.000000 2670.000000 --61.000000 -33.000000 66.000000 2670.000000 --60.833333 -33.000000 34.000000 2670.000000 --60.666667 -33.000000 38.000000 2670.000000 --60.500000 -33.000000 8.000000 2670.000000 --60.333333 -33.000000 6.000000 2670.000000 --60.166667 -33.000000 5.000000 2670.000000 --60.000000 -33.000000 5.000000 2670.000000 --59.833333 -33.000000 5.000000 2670.000000 --59.666667 -33.000000 6.000000 2670.000000 --59.500000 -33.000000 16.000000 2670.000000 --59.333333 -33.000000 44.000000 2670.000000 --59.166667 -33.000000 16.000000 2670.000000 --59.000000 -33.000000 62.000000 2670.000000 --58.833333 -33.000000 34.000000 2670.000000 --58.666667 -33.000000 14.000000 2670.000000 --58.500000 -33.000000 4.000000 2670.000000 --58.333333 -33.000000 23.000000 2670.000000 --58.166667 -33.000000 1.000000 2670.000000 --58.000000 -33.000000 37.000000 2670.000000 --57.833333 -33.000000 17.000000 2670.000000 --57.666667 -33.000000 46.000000 2670.000000 --57.500000 -33.000000 40.000000 2670.000000 --57.333333 -33.000000 53.000000 2670.000000 --57.166667 -33.000000 52.000000 2670.000000 --57.000000 -33.000000 55.000000 2670.000000 --56.833333 -33.000000 55.000000 2670.000000 --56.666667 -33.000000 99.000000 2670.000000 --56.500000 -33.000000 110.000000 2670.000000 --56.333333 -33.000000 85.000000 2670.000000 --56.166667 -33.000000 100.000000 2670.000000 --56.000000 -33.000000 112.000000 2670.000000 --55.833333 -33.000000 139.000000 2670.000000 --55.666667 -33.000000 121.000000 2670.000000 --55.500000 -33.000000 168.000000 2670.000000 --55.333333 -33.000000 156.000000 2670.000000 --55.166667 -33.000000 201.000000 2670.000000 --55.000000 -33.000000 266.000000 2670.000000 --54.833333 -33.000000 132.000000 2670.000000 --54.666667 -33.000000 133.000000 2670.000000 --54.500000 -33.000000 98.000000 2670.000000 --54.333333 -33.000000 109.000000 2670.000000 --54.166667 -33.000000 79.000000 2670.000000 --54.000000 -33.000000 36.000000 2670.000000 --53.833333 -33.000000 17.000000 2670.000000 --53.666667 -33.000000 12.000000 2670.000000 --53.500000 -33.000000 -19.000000 1670.000000 --53.333333 -33.000000 -19.000000 1670.000000 --53.166667 -33.000000 5.000000 2670.000000 --53.000000 -33.000000 2.000000 2670.000000 --52.833333 -33.000000 8.000000 2670.000000 --52.666667 -33.000000 -9.000000 1670.000000 --52.500000 -33.000000 -3.000000 1670.000000 --52.333333 -33.000000 -13.000000 1670.000000 --52.166667 -33.000000 -21.000000 1670.000000 --52.000000 -33.000000 -33.000000 1670.000000 --51.833333 -33.000000 -47.000000 1670.000000 --51.666667 -33.000000 -57.000000 1670.000000 --51.500000 -33.000000 -62.000000 1670.000000 --51.333333 -33.000000 -65.000000 1670.000000 --51.166667 -33.000000 -55.000000 1670.000000 --51.000000 -33.000000 -74.000000 1670.000000 --50.833333 -33.000000 -86.000000 1670.000000 --50.666667 -33.000000 -133.000000 1670.000000 --50.500000 -33.000000 -148.000000 1670.000000 --50.333333 -33.000000 -538.000000 1670.000000 --50.166667 -33.000000 -842.000000 1670.000000 --50.000000 -33.000000 -1007.000000 1670.000000 --49.833333 -33.000000 -1187.000000 1670.000000 --49.666667 -33.000000 -1368.000000 1670.000000 --49.500000 -33.000000 -1583.000000 1670.000000 --49.333333 -33.000000 -1881.000000 1670.000000 --49.166667 -33.000000 -2485.000000 1670.000000 --49.000000 -33.000000 -2890.000000 1670.000000 --48.833333 -33.000000 -2951.000000 1670.000000 --48.666667 -33.000000 -3122.000000 1670.000000 --48.500000 -33.000000 -3141.000000 1670.000000 --48.333333 -33.000000 -3209.000000 1670.000000 --48.166667 -33.000000 -3320.000000 1670.000000 --48.000000 -33.000000 -3404.000000 1670.000000 --47.833333 -33.000000 -3439.000000 1670.000000 --47.666667 -33.000000 -3514.000000 1670.000000 --47.500000 -33.000000 -3585.000000 1670.000000 --47.333333 -33.000000 -3642.000000 1670.000000 --47.166667 -33.000000 -3686.000000 1670.000000 --47.000000 -33.000000 -3744.000000 1670.000000 --46.833333 -33.000000 -3790.000000 1670.000000 --46.666667 -33.000000 -3832.000000 1670.000000 --46.500000 -33.000000 -3879.000000 1670.000000 --46.333333 -33.000000 -3906.000000 1670.000000 --46.166667 -33.000000 -3957.000000 1670.000000 --46.000000 -33.000000 -4005.000000 1670.000000 --45.833333 -33.000000 -4028.000000 1670.000000 --45.666667 -33.000000 -4068.000000 1670.000000 --45.500000 -33.000000 -4100.000000 1670.000000 --45.333333 -33.000000 -4154.000000 1670.000000 --45.166667 -33.000000 -4146.000000 1670.000000 --45.000000 -33.000000 -4265.000000 1670.000000 --44.833333 -33.000000 -4156.000000 1670.000000 --44.666667 -33.000000 -4172.000000 1670.000000 --44.500000 -33.000000 -4246.000000 1670.000000 --44.333333 -33.000000 -4267.000000 1670.000000 --44.166667 -33.000000 -4283.000000 1670.000000 --44.000000 -33.000000 -4297.000000 1670.000000 --43.833333 -33.000000 -4316.000000 1670.000000 --43.666667 -33.000000 -4320.000000 1670.000000 --43.500000 -33.000000 -4333.000000 1670.000000 --43.333333 -33.000000 -4388.000000 1670.000000 --43.166667 -33.000000 -4378.000000 1670.000000 --43.000000 -33.000000 -4390.000000 1670.000000 --42.833333 -33.000000 -4404.000000 1670.000000 --42.666667 -33.000000 -4416.000000 1670.000000 --42.500000 -33.000000 -4430.000000 1670.000000 --42.333333 -33.000000 -4457.000000 1670.000000 --42.166667 -33.000000 -4469.000000 1670.000000 --42.000000 -33.000000 -4482.000000 1670.000000 --41.833333 -33.000000 -4514.000000 1670.000000 --41.666667 -33.000000 -4525.000000 1670.000000 --41.500000 -33.000000 -4532.000000 1670.000000 --41.333333 -33.000000 -4496.000000 1670.000000 --41.166667 -33.000000 -4481.000000 1670.000000 --41.000000 -33.000000 -4471.000000 1670.000000 --40.833333 -33.000000 -4724.000000 1670.000000 --40.666667 -33.000000 -4742.000000 1670.000000 --40.500000 -33.000000 -4741.000000 1670.000000 --40.333333 -33.000000 -4766.000000 1670.000000 --40.166667 -33.000000 -4723.000000 1670.000000 --40.000000 -33.000000 -4723.000000 1670.000000 --65.000000 -33.166667 856.000000 2670.000000 --64.833333 -33.166667 712.000000 2670.000000 --64.666667 -33.166667 601.000000 2670.000000 --64.500000 -33.166667 478.000000 2670.000000 --64.333333 -33.166667 421.000000 2670.000000 --64.166667 -33.166667 360.000000 2670.000000 --64.000000 -33.166667 307.000000 2670.000000 --63.833333 -33.166667 258.000000 2670.000000 --63.666667 -33.166667 218.000000 2670.000000 --63.500000 -33.166667 183.000000 2670.000000 --63.333333 -33.166667 158.000000 2670.000000 --63.166667 -33.166667 137.000000 2670.000000 --63.000000 -33.166667 130.000000 2670.000000 --62.833333 -33.166667 123.000000 2670.000000 --62.666667 -33.166667 110.000000 2670.000000 --62.500000 -33.166667 119.000000 2670.000000 --62.333333 -33.166667 112.000000 2670.000000 --62.166667 -33.166667 113.000000 2670.000000 --62.000000 -33.166667 101.000000 2670.000000 --61.833333 -33.166667 97.000000 2670.000000 --61.666667 -33.166667 90.000000 2670.000000 --61.500000 -33.166667 93.000000 2670.000000 --61.333333 -33.166667 91.000000 2670.000000 --61.166667 -33.166667 84.000000 2670.000000 --61.000000 -33.166667 54.000000 2670.000000 --60.833333 -33.166667 62.000000 2670.000000 --60.666667 -33.166667 37.000000 2670.000000 --60.500000 -33.166667 27.000000 2670.000000 --60.333333 -33.166667 5.000000 2670.000000 --60.166667 -33.166667 5.000000 2670.000000 --60.000000 -33.166667 4.000000 2670.000000 --59.833333 -33.166667 1.000000 2670.000000 --59.666667 -33.166667 3.000000 2670.000000 --59.500000 -33.166667 5.000000 2670.000000 --59.333333 -33.166667 8.000000 2670.000000 --59.166667 -33.166667 7.000000 2670.000000 --59.000000 -33.166667 16.000000 2670.000000 --58.833333 -33.166667 39.000000 2670.000000 --58.666667 -33.166667 30.000000 2670.000000 --58.500000 -33.166667 15.000000 2670.000000 --58.333333 -33.166667 26.000000 2670.000000 --58.166667 -33.166667 30.000000 2670.000000 --58.000000 -33.166667 32.000000 2670.000000 --57.833333 -33.166667 56.000000 2670.000000 --57.666667 -33.166667 63.000000 2670.000000 --57.500000 -33.166667 49.000000 2670.000000 --57.333333 -33.166667 58.000000 2670.000000 --57.166667 -33.166667 47.000000 2670.000000 --57.000000 -33.166667 41.000000 2670.000000 --56.833333 -33.166667 74.000000 2670.000000 --56.666667 -33.166667 86.000000 2670.000000 --56.500000 -33.166667 107.000000 2670.000000 --56.333333 -33.166667 98.000000 2670.000000 --56.166667 -33.166667 97.000000 2670.000000 --56.000000 -33.166667 125.000000 2670.000000 --55.833333 -33.166667 143.000000 2670.000000 --55.666667 -33.166667 156.000000 2670.000000 --55.500000 -33.166667 172.000000 2670.000000 --55.333333 -33.166667 172.000000 2670.000000 --55.166667 -33.166667 216.000000 2670.000000 --55.000000 -33.166667 169.000000 2670.000000 --54.833333 -33.166667 80.000000 2670.000000 --54.666667 -33.166667 62.000000 2670.000000 --54.500000 -33.166667 66.000000 2670.000000 --54.333333 -33.166667 82.000000 2670.000000 --54.166667 -33.166667 61.000000 2670.000000 --54.000000 -33.166667 19.000000 2670.000000 --53.833333 -33.166667 10.000000 2670.000000 --53.666667 -33.166667 2.000000 2670.000000 --53.500000 -33.166667 -42.000000 1670.000000 --53.333333 -33.166667 4.000000 2670.000000 --53.166667 -33.166667 7.000000 2670.000000 --53.000000 -33.166667 15.000000 2670.000000 --52.833333 -33.166667 -8.000000 1670.000000 --52.666667 -33.166667 -1.000000 1670.000000 --52.500000 -33.166667 -9.000000 1670.000000 --52.333333 -33.166667 -17.000000 1670.000000 --52.166667 -33.166667 -27.000000 1670.000000 --52.000000 -33.166667 -44.000000 1670.000000 --51.833333 -33.166667 -58.000000 1670.000000 --51.666667 -33.166667 -58.000000 1670.000000 --51.500000 -33.166667 -60.000000 1670.000000 --51.333333 -33.166667 -63.000000 1670.000000 --51.166667 -33.166667 -69.000000 1670.000000 --51.000000 -33.166667 -85.000000 1670.000000 --50.833333 -33.166667 -111.000000 1670.000000 --50.666667 -33.166667 -128.000000 1670.000000 --50.500000 -33.166667 -300.000000 1670.000000 --50.333333 -33.166667 -580.000000 1670.000000 --50.166667 -33.166667 -824.000000 1670.000000 --50.000000 -33.166667 -915.000000 1670.000000 --49.833333 -33.166667 -1100.000000 1670.000000 --49.666667 -33.166667 -1353.000000 1670.000000 --49.500000 -33.166667 -1588.000000 1670.000000 --49.333333 -33.166667 -2169.000000 1670.000000 --49.166667 -33.166667 -2716.000000 1670.000000 --49.000000 -33.166667 -2937.000000 1670.000000 --48.833333 -33.166667 -3012.000000 1670.000000 --48.666667 -33.166667 -3070.000000 1670.000000 --48.500000 -33.166667 -3185.000000 1670.000000 --48.333333 -33.166667 -3253.000000 1670.000000 --48.166667 -33.166667 -3282.000000 1670.000000 --48.000000 -33.166667 -3394.000000 1670.000000 --47.833333 -33.166667 -3448.000000 1670.000000 --47.666667 -33.166667 -3505.000000 1670.000000 --47.500000 -33.166667 -3577.000000 1670.000000 --47.333333 -33.166667 -3642.000000 1670.000000 --47.166667 -33.166667 -3663.000000 1670.000000 --47.000000 -33.166667 -3726.000000 1670.000000 --46.833333 -33.166667 -3795.000000 1670.000000 --46.666667 -33.166667 -3837.000000 1670.000000 --46.500000 -33.166667 -3868.000000 1670.000000 --46.333333 -33.166667 -3904.000000 1670.000000 --46.166667 -33.166667 -3946.000000 1670.000000 --46.000000 -33.166667 -3978.000000 1670.000000 --45.833333 -33.166667 -3999.000000 1670.000000 --45.666667 -33.166667 -4024.000000 1670.000000 --45.500000 -33.166667 -4044.000000 1670.000000 --45.333333 -33.166667 -4120.000000 1670.000000 --45.166667 -33.166667 -4146.000000 1670.000000 --45.000000 -33.166667 -4183.000000 1670.000000 --44.833333 -33.166667 -4264.000000 1670.000000 --44.666667 -33.166667 -4187.000000 1670.000000 --44.500000 -33.166667 -4236.000000 1670.000000 --44.333333 -33.166667 -4229.000000 1670.000000 --44.166667 -33.166667 -4260.000000 1670.000000 --44.000000 -33.166667 -4265.000000 1670.000000 --43.833333 -33.166667 -4275.000000 1670.000000 --43.666667 -33.166667 -4396.000000 1670.000000 --43.500000 -33.166667 -4349.000000 1670.000000 --43.333333 -33.166667 -4385.000000 1670.000000 --43.166667 -33.166667 -4424.000000 1670.000000 --43.000000 -33.166667 -4404.000000 1670.000000 --42.833333 -33.166667 -4432.000000 1670.000000 --42.666667 -33.166667 -4455.000000 1670.000000 --42.500000 -33.166667 -4469.000000 1670.000000 --42.333333 -33.166667 -4501.000000 1670.000000 --42.166667 -33.166667 -4519.000000 1670.000000 --42.000000 -33.166667 -4527.000000 1670.000000 --41.833333 -33.166667 -4558.000000 1670.000000 --41.666667 -33.166667 -4569.000000 1670.000000 --41.500000 -33.166667 -4584.000000 1670.000000 --41.333333 -33.166667 -4590.000000 1670.000000 --41.166667 -33.166667 -4575.000000 1670.000000 --41.000000 -33.166667 -4602.000000 1670.000000 --40.833333 -33.166667 -4669.000000 1670.000000 --40.666667 -33.166667 -4749.000000 1670.000000 --40.500000 -33.166667 -4630.000000 1670.000000 --40.333333 -33.166667 -4731.000000 1670.000000 --40.166667 -33.166667 -4618.000000 1670.000000 --40.000000 -33.166667 -4546.000000 1670.000000 --65.000000 -33.333333 677.000000 2670.000000 --64.833333 -33.333333 629.000000 2670.000000 --64.666667 -33.333333 519.000000 2670.000000 --64.500000 -33.333333 439.000000 2670.000000 --64.333333 -33.333333 357.000000 2670.000000 --64.166667 -33.333333 325.000000 2670.000000 --64.000000 -33.333333 281.000000 2670.000000 --63.833333 -33.333333 241.000000 2670.000000 --63.666667 -33.333333 205.000000 2670.000000 --63.500000 -33.333333 179.000000 2670.000000 --63.333333 -33.333333 153.000000 2670.000000 --63.166667 -33.333333 133.000000 2670.000000 --63.000000 -33.333333 117.000000 2670.000000 --62.833333 -33.333333 112.000000 2670.000000 --62.666667 -33.333333 113.000000 2670.000000 --62.500000 -33.333333 118.000000 2670.000000 --62.333333 -33.333333 114.000000 2670.000000 --62.166667 -33.333333 118.000000 2670.000000 --62.000000 -33.333333 110.000000 2670.000000 --61.833333 -33.333333 105.000000 2670.000000 --61.666667 -33.333333 104.000000 2670.000000 --61.500000 -33.333333 91.000000 2670.000000 --61.333333 -33.333333 81.000000 2670.000000 --61.166667 -33.333333 91.000000 2670.000000 --61.000000 -33.333333 79.000000 2670.000000 --60.833333 -33.333333 60.000000 2670.000000 --60.666667 -33.333333 42.000000 2670.000000 --60.500000 -33.333333 38.000000 2670.000000 --60.333333 -33.333333 29.000000 2670.000000 --60.166667 -33.333333 4.000000 2670.000000 --60.000000 -33.333333 4.000000 2670.000000 --59.833333 -33.333333 3.000000 2670.000000 --59.666667 -33.333333 3.000000 2670.000000 --59.500000 -33.333333 4.000000 2670.000000 --59.333333 -33.333333 4.000000 2670.000000 --59.166667 -33.333333 5.000000 2670.000000 --59.000000 -33.333333 5.000000 2670.000000 --58.833333 -33.333333 4.000000 2670.000000 --58.666667 -33.333333 30.000000 2670.000000 --58.500000 -33.333333 11.000000 2670.000000 --58.333333 -33.333333 25.000000 2670.000000 --58.166667 -33.333333 32.000000 2670.000000 --58.000000 -33.333333 33.000000 2670.000000 --57.833333 -33.333333 37.000000 2670.000000 --57.666667 -33.333333 63.000000 2670.000000 --57.500000 -33.333333 97.000000 2670.000000 --57.333333 -33.333333 62.000000 2670.000000 --57.166667 -33.333333 92.000000 2670.000000 --57.000000 -33.333333 82.000000 2670.000000 --56.833333 -33.333333 70.000000 2670.000000 --56.666667 -33.333333 78.000000 2670.000000 --56.500000 -33.333333 91.000000 2670.000000 --56.333333 -33.333333 86.000000 2670.000000 --56.166667 -33.333333 113.000000 2670.000000 --56.000000 -33.333333 129.000000 2670.000000 --55.833333 -33.333333 121.000000 2670.000000 --55.666667 -33.333333 128.000000 2670.000000 --55.500000 -33.333333 144.000000 2670.000000 --55.333333 -33.333333 192.000000 2670.000000 --55.166667 -33.333333 262.000000 2670.000000 --55.000000 -33.333333 159.000000 2670.000000 --54.833333 -33.333333 86.000000 2670.000000 --54.666667 -33.333333 79.000000 2670.000000 --54.500000 -33.333333 79.000000 2670.000000 --54.333333 -33.333333 25.000000 2670.000000 --54.166667 -33.333333 21.000000 2670.000000 --54.000000 -33.333333 15.000000 2670.000000 --53.833333 -33.333333 11.000000 2670.000000 --53.666667 -33.333333 4.000000 2670.000000 --53.500000 -33.333333 -80.000000 1670.000000 --53.333333 -33.333333 8.000000 2670.000000 --53.166667 -33.333333 18.000000 2670.000000 --53.000000 -33.333333 -3.000000 1670.000000 --52.833333 -33.333333 -1.000000 1670.000000 --52.666667 -33.333333 -11.000000 1670.000000 --52.500000 -33.333333 -17.000000 1670.000000 --52.333333 -33.333333 -21.000000 1670.000000 --52.166667 -33.333333 -41.000000 1670.000000 --52.000000 -33.333333 -56.000000 1670.000000 --51.833333 -33.333333 -64.000000 1670.000000 --51.666667 -33.333333 -54.000000 1670.000000 --51.500000 -33.333333 -73.000000 1670.000000 --51.333333 -33.333333 -75.000000 1670.000000 --51.166667 -33.333333 -87.000000 1670.000000 --51.000000 -33.333333 -111.000000 1670.000000 --50.833333 -33.333333 -149.000000 1670.000000 --50.666667 -33.333333 -232.000000 1670.000000 --50.500000 -33.333333 -463.000000 1670.000000 --50.333333 -33.333333 -657.000000 1670.000000 --50.166667 -33.333333 -919.000000 1670.000000 --50.000000 -33.333333 -1056.000000 1670.000000 --49.833333 -33.333333 -1305.000000 1670.000000 --49.666667 -33.333333 -1398.000000 1670.000000 --49.500000 -33.333333 -1956.000000 1670.000000 --49.333333 -33.333333 -2429.000000 1670.000000 --49.166667 -33.333333 -2924.000000 1670.000000 --49.000000 -33.333333 -2916.000000 1670.000000 --48.833333 -33.333333 -3075.000000 1670.000000 --48.666667 -33.333333 -3110.000000 1670.000000 --48.500000 -33.333333 -3182.000000 1670.000000 --48.333333 -33.333333 -3248.000000 1670.000000 --48.166667 -33.333333 -3287.000000 1670.000000 --48.000000 -33.333333 -3375.000000 1670.000000 --47.833333 -33.333333 -3430.000000 1670.000000 --47.666667 -33.333333 -3515.000000 1670.000000 --47.500000 -33.333333 -3594.000000 1670.000000 --47.333333 -33.333333 -3661.000000 1670.000000 --47.166667 -33.333333 -3645.000000 1670.000000 --47.000000 -33.333333 -3697.000000 1670.000000 --46.833333 -33.333333 -3795.000000 1670.000000 --46.666667 -33.333333 -3839.000000 1670.000000 --46.500000 -33.333333 -3883.000000 1670.000000 --46.333333 -33.333333 -3906.000000 1670.000000 --46.166667 -33.333333 -3943.000000 1670.000000 --46.000000 -33.333333 -3959.000000 1670.000000 --45.833333 -33.333333 -3975.000000 1670.000000 --45.666667 -33.333333 -3977.000000 1670.000000 --45.500000 -33.333333 -4022.000000 1670.000000 --45.333333 -33.333333 -4030.000000 1670.000000 --45.166667 -33.333333 -4050.000000 1670.000000 --45.000000 -33.333333 -4101.000000 1670.000000 --44.833333 -33.333333 -4192.000000 1670.000000 --44.666667 -33.333333 -4166.000000 1670.000000 --44.500000 -33.333333 -4172.000000 1670.000000 --44.333333 -33.333333 -4205.000000 1670.000000 --44.166667 -33.333333 -4224.000000 1670.000000 --44.000000 -33.333333 -4284.000000 1670.000000 --43.833333 -33.333333 -4258.000000 1670.000000 --43.666667 -33.333333 -4304.000000 1670.000000 --43.500000 -33.333333 -4339.000000 1670.000000 --43.333333 -33.333333 -4388.000000 1670.000000 --43.166667 -33.333333 -4408.000000 1670.000000 --43.000000 -33.333333 -4443.000000 1670.000000 --42.833333 -33.333333 -4462.000000 1670.000000 --42.666667 -33.333333 -4478.000000 1670.000000 --42.500000 -33.333333 -4484.000000 1670.000000 --42.333333 -33.333333 -4515.000000 1670.000000 --42.166667 -33.333333 -4549.000000 1670.000000 --42.000000 -33.333333 -4559.000000 1670.000000 --41.833333 -33.333333 -4588.000000 1670.000000 --41.666667 -33.333333 -4569.000000 1670.000000 --41.500000 -33.333333 -4608.000000 1670.000000 --41.333333 -33.333333 -4626.000000 1670.000000 --41.166667 -33.333333 -4691.000000 1670.000000 --41.000000 -33.333333 -4570.000000 1670.000000 --40.833333 -33.333333 -4663.000000 1670.000000 --40.666667 -33.333333 -4699.000000 1670.000000 --40.500000 -33.333333 -4735.000000 1670.000000 --40.333333 -33.333333 -4734.000000 1670.000000 --40.166667 -33.333333 -4706.000000 1670.000000 --40.000000 -33.333333 -4727.000000 1670.000000 --65.000000 -33.500000 553.000000 2670.000000 --64.833333 -33.500000 502.000000 2670.000000 --64.666667 -33.500000 433.000000 2670.000000 --64.500000 -33.500000 365.000000 2670.000000 --64.333333 -33.500000 306.000000 2670.000000 --64.166667 -33.500000 287.000000 2670.000000 --64.000000 -33.500000 288.000000 2670.000000 --63.833333 -33.500000 211.000000 2670.000000 --63.666667 -33.500000 183.000000 2670.000000 --63.500000 -33.500000 165.000000 2670.000000 --63.333333 -33.500000 143.000000 2670.000000 --63.166667 -33.500000 124.000000 2670.000000 --63.000000 -33.500000 122.000000 2670.000000 --62.833333 -33.500000 120.000000 2670.000000 --62.666667 -33.500000 122.000000 2670.000000 --62.500000 -33.500000 127.000000 2670.000000 --62.333333 -33.500000 119.000000 2670.000000 --62.166667 -33.500000 117.000000 2670.000000 --62.000000 -33.500000 109.000000 2670.000000 --61.833333 -33.500000 110.000000 2670.000000 --61.666667 -33.500000 108.000000 2670.000000 --61.500000 -33.500000 106.000000 2670.000000 --61.333333 -33.500000 97.000000 2670.000000 --61.166667 -33.500000 92.000000 2670.000000 --61.000000 -33.500000 88.000000 2670.000000 --60.833333 -33.500000 74.000000 2670.000000 --60.666667 -33.500000 66.000000 2670.000000 --60.500000 -33.500000 55.000000 2670.000000 --60.333333 -33.500000 53.000000 2670.000000 --60.166667 -33.500000 25.000000 2670.000000 --60.000000 -33.500000 13.000000 2670.000000 --59.833333 -33.500000 3.000000 2670.000000 --59.666667 -33.500000 3.000000 2670.000000 --59.500000 -33.500000 2.000000 2670.000000 --59.333333 -33.500000 2.000000 2670.000000 --59.166667 -33.500000 2.000000 2670.000000 --59.000000 -33.500000 2.000000 2670.000000 --58.833333 -33.500000 5.000000 2670.000000 --58.666667 -33.500000 2.000000 2670.000000 --58.500000 -33.500000 -1.000000 1670.000000 --58.333333 -33.500000 11.000000 2670.000000 --58.166667 -33.500000 19.000000 2670.000000 --58.000000 -33.500000 69.000000 2670.000000 --57.833333 -33.500000 92.000000 2670.000000 --57.666667 -33.500000 90.000000 2670.000000 --57.500000 -33.500000 112.000000 2670.000000 --57.333333 -33.500000 88.000000 2670.000000 --57.166667 -33.500000 96.000000 2670.000000 --57.000000 -33.500000 116.000000 2670.000000 --56.833333 -33.500000 101.000000 2670.000000 --56.666667 -33.500000 94.000000 2670.000000 --56.500000 -33.500000 88.000000 2670.000000 --56.333333 -33.500000 112.000000 2670.000000 --56.166667 -33.500000 102.000000 2670.000000 --56.000000 -33.500000 96.000000 2670.000000 --55.833333 -33.500000 117.000000 2670.000000 --55.666667 -33.500000 149.000000 2670.000000 --55.500000 -33.500000 182.000000 2670.000000 --55.333333 -33.500000 192.000000 2670.000000 --55.166667 -33.500000 267.000000 2670.000000 --55.000000 -33.500000 181.000000 2670.000000 --54.833333 -33.500000 177.000000 2670.000000 --54.666667 -33.500000 70.000000 2670.000000 --54.500000 -33.500000 52.000000 2670.000000 --54.333333 -33.500000 27.000000 2670.000000 --54.166667 -33.500000 19.000000 2670.000000 --54.000000 -33.500000 16.000000 2670.000000 --53.833333 -33.500000 12.000000 2670.000000 --53.666667 -33.500000 6.000000 2670.000000 --53.500000 -33.500000 -100.000000 1670.000000 --53.333333 -33.500000 23.000000 2670.000000 --53.166667 -33.500000 13.000000 2670.000000 --53.000000 -33.500000 -3.000000 1670.000000 --52.833333 -33.500000 -19.000000 1670.000000 --52.666667 -33.500000 -20.000000 1670.000000 --52.500000 -33.500000 -20.000000 1670.000000 --52.333333 -33.500000 -21.000000 1670.000000 --52.166667 -33.500000 -55.000000 1670.000000 --52.000000 -33.500000 -64.000000 1670.000000 --51.833333 -33.500000 -52.000000 1670.000000 --51.666667 -33.500000 -70.000000 1670.000000 --51.500000 -33.500000 -91.000000 1670.000000 --51.333333 -33.500000 -105.000000 1670.000000 --51.166667 -33.500000 -124.000000 1670.000000 --51.000000 -33.500000 -166.000000 1670.000000 --50.833333 -33.500000 -227.000000 1670.000000 --50.666667 -33.500000 -524.000000 1670.000000 --50.500000 -33.500000 -768.000000 1670.000000 --50.333333 -33.500000 -977.000000 1670.000000 --50.166667 -33.500000 -1149.000000 1670.000000 --50.000000 -33.500000 -1368.000000 1670.000000 --49.833333 -33.500000 -1554.000000 1670.000000 --49.666667 -33.500000 -2076.000000 1670.000000 --49.500000 -33.500000 -2333.000000 1670.000000 --49.333333 -33.500000 -2746.000000 1670.000000 --49.166667 -33.500000 -2970.000000 1670.000000 --49.000000 -33.500000 -2968.000000 1670.000000 --48.833333 -33.500000 -3046.000000 1670.000000 --48.666667 -33.500000 -3127.000000 1670.000000 --48.500000 -33.500000 -3204.000000 1670.000000 --48.333333 -33.500000 -3264.000000 1670.000000 --48.166667 -33.500000 -3323.000000 1670.000000 --48.000000 -33.500000 -3378.000000 1670.000000 --47.833333 -33.500000 -3427.000000 1670.000000 --47.666667 -33.500000 -3559.000000 1670.000000 --47.500000 -33.500000 -3652.000000 1670.000000 --47.333333 -33.500000 -3721.000000 1670.000000 --47.166667 -33.500000 -3705.000000 1670.000000 --47.000000 -33.500000 -3753.000000 1670.000000 --46.833333 -33.500000 -3840.000000 1670.000000 --46.666667 -33.500000 -3881.000000 1670.000000 --46.500000 -33.500000 -3912.000000 1670.000000 --46.333333 -33.500000 -3916.000000 1670.000000 --46.166667 -33.500000 -3941.000000 1670.000000 --46.000000 -33.500000 -3966.000000 1670.000000 --45.833333 -33.500000 -3984.000000 1670.000000 --45.666667 -33.500000 -4036.000000 1670.000000 --45.500000 -33.500000 -4058.000000 1670.000000 --45.333333 -33.500000 -4086.000000 1670.000000 --45.166667 -33.500000 -4131.000000 1670.000000 --45.000000 -33.500000 -4124.000000 1670.000000 --44.833333 -33.500000 -4151.000000 1670.000000 --44.666667 -33.500000 -4176.000000 1670.000000 --44.500000 -33.500000 -4212.000000 1670.000000 --44.333333 -33.500000 -4192.000000 1670.000000 --44.166667 -33.500000 -4158.000000 1670.000000 --44.000000 -33.500000 -4172.000000 1670.000000 --43.833333 -33.500000 -4195.000000 1670.000000 --43.666667 -33.500000 -4206.000000 1670.000000 --43.500000 -33.500000 -4295.000000 1670.000000 --43.333333 -33.500000 -4334.000000 1670.000000 --43.166667 -33.500000 -4358.000000 1670.000000 --43.000000 -33.500000 -4434.000000 1670.000000 --42.833333 -33.500000 -4471.000000 1670.000000 --42.666667 -33.500000 -4516.000000 1670.000000 --42.500000 -33.500000 -4532.000000 1670.000000 --42.333333 -33.500000 -4512.000000 1670.000000 --42.166667 -33.500000 -4543.000000 1670.000000 --42.000000 -33.500000 -4559.000000 1670.000000 --41.833333 -33.500000 -4560.000000 1670.000000 --41.666667 -33.500000 -4576.000000 1670.000000 --41.500000 -33.500000 -4557.000000 1670.000000 --41.333333 -33.500000 -4572.000000 1670.000000 --41.166667 -33.500000 -4582.000000 1670.000000 --41.000000 -33.500000 -4502.000000 1670.000000 --40.833333 -33.500000 -4618.000000 1670.000000 --40.666667 -33.500000 -4683.000000 1670.000000 --40.500000 -33.500000 -4573.000000 1670.000000 --40.333333 -33.500000 -4688.000000 1670.000000 --40.166667 -33.500000 -4579.000000 1670.000000 --40.000000 -33.500000 -4582.000000 1670.000000 --65.000000 -33.666667 446.000000 2670.000000 --64.833333 -33.666667 419.000000 2670.000000 --64.666667 -33.666667 369.000000 2670.000000 --64.500000 -33.666667 312.000000 2670.000000 --64.333333 -33.666667 263.000000 2670.000000 --64.166667 -33.666667 245.000000 2670.000000 --64.000000 -33.666667 249.000000 2670.000000 --63.833333 -33.666667 188.000000 2670.000000 --63.666667 -33.666667 161.000000 2670.000000 --63.500000 -33.666667 143.000000 2670.000000 --63.333333 -33.666667 131.000000 2670.000000 --63.166667 -33.666667 125.000000 2670.000000 --63.000000 -33.666667 126.000000 2670.000000 --62.833333 -33.666667 124.000000 2670.000000 --62.666667 -33.666667 128.000000 2670.000000 --62.500000 -33.666667 120.000000 2670.000000 --62.333333 -33.666667 119.000000 2670.000000 --62.166667 -33.666667 117.000000 2670.000000 --62.000000 -33.666667 114.000000 2670.000000 --61.833333 -33.666667 110.000000 2670.000000 --61.666667 -33.666667 105.000000 2670.000000 --61.500000 -33.666667 89.000000 2670.000000 --61.333333 -33.666667 99.000000 2670.000000 --61.166667 -33.666667 94.000000 2670.000000 --61.000000 -33.666667 86.000000 2670.000000 --60.833333 -33.666667 83.000000 2670.000000 --60.666667 -33.666667 68.000000 2670.000000 --60.500000 -33.666667 52.000000 2670.000000 --60.333333 -33.666667 46.000000 2670.000000 --60.166667 -33.666667 58.000000 2670.000000 --60.000000 -33.666667 38.000000 2670.000000 --59.833333 -33.666667 27.000000 2670.000000 --59.666667 -33.666667 9.000000 2670.000000 --59.500000 -33.666667 3.000000 2670.000000 --59.333333 -33.666667 2.000000 2670.000000 --59.166667 -33.666667 3.000000 2670.000000 --59.000000 -33.666667 1.000000 2670.000000 --58.833333 -33.666667 2.000000 2670.000000 --58.666667 -33.666667 1.000000 2670.000000 --58.500000 -33.666667 -1.000000 1670.000000 --58.333333 -33.666667 12.000000 2670.000000 --58.166667 -33.666667 42.000000 2670.000000 --58.000000 -33.666667 38.000000 2670.000000 --57.833333 -33.666667 88.000000 2670.000000 --57.666667 -33.666667 96.000000 2670.000000 --57.500000 -33.666667 123.000000 2670.000000 --57.333333 -33.666667 114.000000 2670.000000 --57.166667 -33.666667 98.000000 2670.000000 --57.000000 -33.666667 127.000000 2670.000000 --56.833333 -33.666667 141.000000 2670.000000 --56.666667 -33.666667 134.000000 2670.000000 --56.500000 -33.666667 106.000000 2670.000000 --56.333333 -33.666667 132.000000 2670.000000 --56.166667 -33.666667 114.000000 2670.000000 --56.000000 -33.666667 155.000000 2670.000000 --55.833333 -33.666667 132.000000 2670.000000 --55.666667 -33.666667 158.000000 2670.000000 --55.500000 -33.666667 168.000000 2670.000000 --55.333333 -33.666667 196.000000 2670.000000 --55.166667 -33.666667 140.000000 2670.000000 --55.000000 -33.666667 107.000000 2670.000000 --54.833333 -33.666667 153.000000 2670.000000 --54.666667 -33.666667 66.000000 2670.000000 --54.500000 -33.666667 36.000000 2670.000000 --54.333333 -33.666667 33.000000 2670.000000 --54.166667 -33.666667 21.000000 2670.000000 --54.000000 -33.666667 16.000000 2670.000000 --53.833333 -33.666667 11.000000 2670.000000 --53.666667 -33.666667 7.000000 2670.000000 --53.500000 -33.666667 8.000000 2670.000000 --53.333333 -33.666667 14.000000 2670.000000 --53.166667 -33.666667 -13.000000 1670.000000 --53.000000 -33.666667 -20.000000 1670.000000 --52.833333 -33.666667 -21.000000 1670.000000 --52.666667 -33.666667 -20.000000 1670.000000 --52.500000 -33.666667 -20.000000 1670.000000 --52.333333 -33.666667 -44.000000 1670.000000 --52.166667 -33.666667 -70.000000 1670.000000 --52.000000 -33.666667 -49.000000 1670.000000 --51.833333 -33.666667 -58.000000 1670.000000 --51.666667 -33.666667 -76.000000 1670.000000 --51.500000 -33.666667 -118.000000 1670.000000 --51.333333 -33.666667 -189.000000 1670.000000 --51.166667 -33.666667 -287.000000 1670.000000 --51.000000 -33.666667 -583.000000 1670.000000 --50.833333 -33.666667 -728.000000 1670.000000 --50.666667 -33.666667 -927.000000 1670.000000 --50.500000 -33.666667 -1097.000000 1670.000000 --50.333333 -33.666667 -1307.000000 1670.000000 --50.166667 -33.666667 -1613.000000 1670.000000 --50.000000 -33.666667 -1896.000000 1670.000000 --49.833333 -33.666667 -2321.000000 1670.000000 --49.666667 -33.666667 -2690.000000 1670.000000 --49.500000 -33.666667 -2744.000000 1670.000000 --49.333333 -33.666667 -2981.000000 1670.000000 --49.166667 -33.666667 -2924.000000 1670.000000 --49.000000 -33.666667 -3020.000000 1670.000000 --48.833333 -33.666667 -3092.000000 1670.000000 --48.666667 -33.666667 -3157.000000 1670.000000 --48.500000 -33.666667 -3246.000000 1670.000000 --48.333333 -33.666667 -3347.000000 1670.000000 --48.166667 -33.666667 -3423.000000 1670.000000 --48.000000 -33.666667 -3527.000000 1670.000000 --47.833333 -33.666667 -3641.000000 1670.000000 --47.666667 -33.666667 -3701.000000 1670.000000 --47.500000 -33.666667 -3796.000000 1670.000000 --47.333333 -33.666667 -3852.000000 1670.000000 --47.166667 -33.666667 -3882.000000 1670.000000 --47.000000 -33.666667 -3920.000000 1670.000000 --46.833333 -33.666667 -3950.000000 1670.000000 --46.666667 -33.666667 -3996.000000 1670.000000 --46.500000 -33.666667 -4028.000000 1670.000000 --46.333333 -33.666667 -4074.000000 1670.000000 --46.166667 -33.666667 -4101.000000 1670.000000 --46.000000 -33.666667 -4104.000000 1670.000000 --45.833333 -33.666667 -4094.000000 1670.000000 --45.666667 -33.666667 -4108.000000 1670.000000 --45.500000 -33.666667 -4110.000000 1670.000000 --45.333333 -33.666667 -4163.000000 1670.000000 --45.166667 -33.666667 -4179.000000 1670.000000 --45.000000 -33.666667 -4188.000000 1670.000000 --44.833333 -33.666667 -4194.000000 1670.000000 --44.666667 -33.666667 -4206.000000 1670.000000 --44.500000 -33.666667 -4232.000000 1670.000000 --44.333333 -33.666667 -4288.000000 1670.000000 --44.166667 -33.666667 -4273.000000 1670.000000 --44.000000 -33.666667 -4248.000000 1670.000000 --43.833333 -33.666667 -4279.000000 1670.000000 --43.666667 -33.666667 -4305.000000 1670.000000 --43.500000 -33.666667 -4292.000000 1670.000000 --43.333333 -33.666667 -4332.000000 1670.000000 --43.166667 -33.666667 -4342.000000 1670.000000 --43.000000 -33.666667 -4370.000000 1670.000000 --42.833333 -33.666667 -4418.000000 1670.000000 --42.666667 -33.666667 -4442.000000 1670.000000 --42.500000 -33.666667 -4411.000000 1670.000000 --42.333333 -33.666667 -4452.000000 1670.000000 --42.166667 -33.666667 -4489.000000 1670.000000 --42.000000 -33.666667 -4510.000000 1670.000000 --41.833333 -33.666667 -4548.000000 1670.000000 --41.666667 -33.666667 -4563.000000 1670.000000 --41.500000 -33.666667 -4612.000000 1670.000000 --41.333333 -33.666667 -4644.000000 1670.000000 --41.166667 -33.666667 -4616.000000 1670.000000 --41.000000 -33.666667 -4537.000000 1670.000000 --40.833333 -33.666667 -4570.000000 1670.000000 --40.666667 -33.666667 -4598.000000 1670.000000 --40.500000 -33.666667 -4430.000000 1670.000000 --40.333333 -33.666667 -4566.000000 1670.000000 --40.166667 -33.666667 -4704.000000 1670.000000 --40.000000 -33.666667 -4506.000000 1670.000000 --65.000000 -33.833333 389.000000 2670.000000 --64.833333 -33.833333 352.000000 2670.000000 --64.666667 -33.833333 317.000000 2670.000000 --64.500000 -33.833333 279.000000 2670.000000 --64.333333 -33.833333 234.000000 2670.000000 --64.166667 -33.833333 217.000000 2670.000000 --64.000000 -33.833333 212.000000 2670.000000 --63.833333 -33.833333 178.000000 2670.000000 --63.666667 -33.833333 153.000000 2670.000000 --63.500000 -33.833333 135.000000 2670.000000 --63.333333 -33.833333 128.000000 2670.000000 --63.166667 -33.833333 129.000000 2670.000000 --63.000000 -33.833333 127.000000 2670.000000 --62.833333 -33.833333 126.000000 2670.000000 --62.666667 -33.833333 124.000000 2670.000000 --62.500000 -33.833333 124.000000 2670.000000 --62.333333 -33.833333 122.000000 2670.000000 --62.166667 -33.833333 113.000000 2670.000000 --62.000000 -33.833333 110.000000 2670.000000 --61.833333 -33.833333 109.000000 2670.000000 --61.666667 -33.833333 111.000000 2670.000000 --61.500000 -33.833333 106.000000 2670.000000 --61.333333 -33.833333 97.000000 2670.000000 --61.166667 -33.833333 83.000000 2670.000000 --61.000000 -33.833333 87.000000 2670.000000 --60.833333 -33.833333 76.000000 2670.000000 --60.666667 -33.833333 76.000000 2670.000000 --60.500000 -33.833333 80.000000 2670.000000 --60.333333 -33.833333 61.000000 2670.000000 --60.166667 -33.833333 58.000000 2670.000000 --60.000000 -33.833333 44.000000 2670.000000 --59.833333 -33.833333 34.000000 2670.000000 --59.666667 -33.833333 10.000000 2670.000000 --59.500000 -33.833333 27.000000 2670.000000 --59.333333 -33.833333 2.000000 2670.000000 --59.166667 -33.833333 2.000000 2670.000000 --59.000000 -33.833333 3.000000 2670.000000 --58.833333 -33.833333 3.000000 2670.000000 --58.666667 -33.833333 2.000000 2670.000000 --58.500000 -33.833333 6.000000 2670.000000 --58.333333 -33.833333 31.000000 2670.000000 --58.166667 -33.833333 53.000000 2670.000000 --58.000000 -33.833333 82.000000 2670.000000 --57.833333 -33.833333 75.000000 2670.000000 --57.666667 -33.833333 88.000000 2670.000000 --57.500000 -33.833333 131.000000 2670.000000 --57.333333 -33.833333 160.000000 2670.000000 --57.166667 -33.833333 128.000000 2670.000000 --57.000000 -33.833333 157.000000 2670.000000 --56.833333 -33.833333 111.000000 2670.000000 --56.666667 -33.833333 131.000000 2670.000000 --56.500000 -33.833333 140.000000 2670.000000 --56.333333 -33.833333 148.000000 2670.000000 --56.166667 -33.833333 94.000000 2670.000000 --56.000000 -33.833333 116.000000 2670.000000 --55.833333 -33.833333 154.000000 2670.000000 --55.666667 -33.833333 182.000000 2670.000000 --55.500000 -33.833333 215.000000 2670.000000 --55.333333 -33.833333 227.000000 2670.000000 --55.166667 -33.833333 212.000000 2670.000000 --55.000000 -33.833333 85.000000 2670.000000 --54.833333 -33.833333 65.000000 2670.000000 --54.666667 -33.833333 52.000000 2670.000000 --54.500000 -33.833333 49.000000 2670.000000 --54.333333 -33.833333 51.000000 2670.000000 --54.166667 -33.833333 27.000000 2670.000000 --54.000000 -33.833333 29.000000 2670.000000 --53.833333 -33.833333 15.000000 2670.000000 --53.666667 -33.833333 6.000000 2670.000000 --53.500000 -33.833333 16.000000 2670.000000 --53.333333 -33.833333 -13.000000 1670.000000 --53.166667 -33.833333 -20.000000 1670.000000 --53.000000 -33.833333 -20.000000 1670.000000 --52.833333 -33.833333 -25.000000 1670.000000 --52.666667 -33.833333 -28.000000 1670.000000 --52.500000 -33.833333 -35.000000 1670.000000 --52.333333 -33.833333 -77.000000 1670.000000 --52.166667 -33.833333 -45.000000 1670.000000 --52.000000 -33.833333 -51.000000 1670.000000 --51.833333 -33.833333 -69.000000 1670.000000 --51.666667 -33.833333 -100.000000 1670.000000 --51.500000 -33.833333 -171.000000 1670.000000 --51.333333 -33.833333 -692.000000 1670.000000 --51.166667 -33.833333 -860.000000 1670.000000 --51.000000 -33.833333 -1236.000000 1670.000000 --50.833333 -33.833333 -1380.000000 1670.000000 --50.666667 -33.833333 -1399.000000 1670.000000 --50.500000 -33.833333 -1521.000000 1670.000000 --50.333333 -33.833333 -1760.000000 1670.000000 --50.166667 -33.833333 -2170.000000 1670.000000 --50.000000 -33.833333 -2353.000000 1670.000000 --49.833333 -33.833333 -2588.000000 1670.000000 --49.666667 -33.833333 -2752.000000 1670.000000 --49.500000 -33.833333 -2800.000000 1670.000000 --49.333333 -33.833333 -2923.000000 1670.000000 --49.166667 -33.833333 -2993.000000 1670.000000 --49.000000 -33.833333 -3138.000000 1670.000000 --48.833333 -33.833333 -3110.000000 1670.000000 --48.666667 -33.833333 -3271.000000 1670.000000 --48.500000 -33.833333 -3386.000000 1670.000000 --48.333333 -33.833333 -3501.000000 1670.000000 --48.166667 -33.833333 -3597.000000 1670.000000 --48.000000 -33.833333 -3736.000000 1670.000000 --47.833333 -33.833333 -3851.000000 1670.000000 --47.666667 -33.833333 -3956.000000 1670.000000 --47.500000 -33.833333 -4029.000000 1670.000000 --47.333333 -33.833333 -4097.000000 1670.000000 --47.166667 -33.833333 -4136.000000 1670.000000 --47.000000 -33.833333 -4192.000000 1670.000000 --46.833333 -33.833333 -4197.000000 1670.000000 --46.666667 -33.833333 -4181.000000 1670.000000 --46.500000 -33.833333 -4192.000000 1670.000000 --46.333333 -33.833333 -4212.000000 1670.000000 --46.166667 -33.833333 -4235.000000 1670.000000 --46.000000 -33.833333 -4298.000000 1670.000000 --45.833333 -33.833333 -4290.000000 1670.000000 --45.666667 -33.833333 -4297.000000 1670.000000 --45.500000 -33.833333 -4295.000000 1670.000000 --45.333333 -33.833333 -4301.000000 1670.000000 --45.166667 -33.833333 -4356.000000 1670.000000 --45.000000 -33.833333 -4282.000000 1670.000000 --44.833333 -33.833333 -4316.000000 1670.000000 --44.666667 -33.833333 -4331.000000 1670.000000 --44.500000 -33.833333 -4317.000000 1670.000000 --44.333333 -33.833333 -4317.000000 1670.000000 --44.166667 -33.833333 -4342.000000 1670.000000 --44.000000 -33.833333 -4419.000000 1670.000000 --43.833333 -33.833333 -4342.000000 1670.000000 --43.666667 -33.833333 -4460.000000 1670.000000 --43.500000 -33.833333 -4365.000000 1670.000000 --43.333333 -33.833333 -4413.000000 1670.000000 --43.166667 -33.833333 -4381.000000 1670.000000 --43.000000 -33.833333 -4444.000000 1670.000000 --42.833333 -33.833333 -4430.000000 1670.000000 --42.666667 -33.833333 -4474.000000 1670.000000 --42.500000 -33.833333 -4480.000000 1670.000000 --42.333333 -33.833333 -4518.000000 1670.000000 --42.166667 -33.833333 -4508.000000 1670.000000 --42.000000 -33.833333 -4543.000000 1670.000000 --41.833333 -33.833333 -4551.000000 1670.000000 --41.666667 -33.833333 -4599.000000 1670.000000 --41.500000 -33.833333 -4581.000000 1670.000000 --41.333333 -33.833333 -4615.000000 1670.000000 --41.166667 -33.833333 -4600.000000 1670.000000 --41.000000 -33.833333 -4611.000000 1670.000000 --40.833333 -33.833333 -4599.000000 1670.000000 --40.666667 -33.833333 -4463.000000 1670.000000 --40.500000 -33.833333 -4717.000000 1670.000000 --40.333333 -33.833333 -4741.000000 1670.000000 --40.166667 -33.833333 -4775.000000 1670.000000 --40.000000 -33.833333 -4562.000000 1670.000000 --65.000000 -34.000000 352.000000 2670.000000 --64.833333 -34.000000 322.000000 2670.000000 --64.666667 -34.000000 286.000000 2670.000000 --64.500000 -34.000000 254.000000 2670.000000 --64.333333 -34.000000 220.000000 2670.000000 --64.166667 -34.000000 199.000000 2670.000000 --64.000000 -34.000000 186.000000 2670.000000 --63.833333 -34.000000 164.000000 2670.000000 --63.666667 -34.000000 150.000000 2670.000000 --63.500000 -34.000000 138.000000 2670.000000 --63.333333 -34.000000 130.000000 2670.000000 --63.166667 -34.000000 133.000000 2670.000000 --63.000000 -34.000000 131.000000 2670.000000 --62.833333 -34.000000 129.000000 2670.000000 --62.666667 -34.000000 119.000000 2670.000000 --62.500000 -34.000000 122.000000 2670.000000 --62.333333 -34.000000 124.000000 2670.000000 --62.166667 -34.000000 117.000000 2670.000000 --62.000000 -34.000000 116.000000 2670.000000 --61.833333 -34.000000 106.000000 2670.000000 --61.666667 -34.000000 97.000000 2670.000000 --61.500000 -34.000000 102.000000 2670.000000 --61.333333 -34.000000 101.000000 2670.000000 --61.166667 -34.000000 98.000000 2670.000000 --61.000000 -34.000000 70.000000 2670.000000 --60.833333 -34.000000 81.000000 2670.000000 --60.666667 -34.000000 78.000000 2670.000000 --60.500000 -34.000000 61.000000 2670.000000 --60.333333 -34.000000 46.000000 2670.000000 --60.166667 -34.000000 53.000000 2670.000000 --60.000000 -34.000000 56.000000 2670.000000 --59.833333 -34.000000 30.000000 2670.000000 --59.666667 -34.000000 32.000000 2670.000000 --59.500000 -34.000000 30.000000 2670.000000 --59.333333 -34.000000 5.000000 2670.000000 --59.166667 -34.000000 25.000000 2670.000000 --59.000000 -34.000000 2.000000 2670.000000 --58.833333 -34.000000 3.000000 2670.000000 --58.666667 -34.000000 3.000000 2670.000000 --58.500000 -34.000000 4.000000 2670.000000 --58.333333 -34.000000 -1.000000 1670.000000 --58.166667 -34.000000 29.000000 2670.000000 --58.000000 -34.000000 58.000000 2670.000000 --57.833333 -34.000000 87.000000 2670.000000 --57.666667 -34.000000 106.000000 2670.000000 --57.500000 -34.000000 99.000000 2670.000000 --57.333333 -34.000000 124.000000 2670.000000 --57.166667 -34.000000 115.000000 2670.000000 --57.000000 -34.000000 123.000000 2670.000000 --56.833333 -34.000000 69.000000 2670.000000 --56.666667 -34.000000 98.000000 2670.000000 --56.500000 -34.000000 122.000000 2670.000000 --56.333333 -34.000000 88.000000 2670.000000 --56.166667 -34.000000 71.000000 2670.000000 --56.000000 -34.000000 96.000000 2670.000000 --55.833333 -34.000000 129.000000 2670.000000 --55.666667 -34.000000 153.000000 2670.000000 --55.500000 -34.000000 156.000000 2670.000000 --55.333333 -34.000000 219.000000 2670.000000 --55.166667 -34.000000 197.000000 2670.000000 --55.000000 -34.000000 227.000000 2670.000000 --54.833333 -34.000000 190.000000 2670.000000 --54.666667 -34.000000 164.000000 2670.000000 --54.500000 -34.000000 67.000000 2670.000000 --54.333333 -34.000000 93.000000 2670.000000 --54.166667 -34.000000 46.000000 2670.000000 --54.000000 -34.000000 117.000000 2670.000000 --53.833333 -34.000000 28.000000 2670.000000 --53.666667 -34.000000 4.000000 2670.000000 --53.500000 -34.000000 -4.000000 1670.000000 --53.333333 -34.000000 -20.000000 1670.000000 --53.166667 -34.000000 -21.000000 1670.000000 --53.000000 -34.000000 -19.000000 1670.000000 --52.833333 -34.000000 -34.000000 1670.000000 --52.666667 -34.000000 -47.000000 1670.000000 --52.500000 -34.000000 -57.000000 1670.000000 --52.333333 -34.000000 -49.000000 1670.000000 --52.166667 -34.000000 -69.000000 1670.000000 --52.000000 -34.000000 -44.000000 1670.000000 --51.833333 -34.000000 -57.000000 1670.000000 --51.666667 -34.000000 -177.000000 1670.000000 --51.500000 -34.000000 -669.000000 1670.000000 --51.333333 -34.000000 -888.000000 1670.000000 --51.166667 -34.000000 -1396.000000 1670.000000 --51.000000 -34.000000 -1788.000000 1670.000000 --50.833333 -34.000000 -1991.000000 1670.000000 --50.666667 -34.000000 -1901.000000 1670.000000 --50.500000 -34.000000 -1976.000000 1670.000000 --50.333333 -34.000000 -2144.000000 1670.000000 --50.166667 -34.000000 -2457.000000 1670.000000 --50.000000 -34.000000 -2671.000000 1670.000000 --49.833333 -34.000000 -2845.000000 1670.000000 --49.666667 -34.000000 -2852.000000 1670.000000 --49.500000 -34.000000 -2795.000000 1670.000000 --49.333333 -34.000000 -2980.000000 1670.000000 --49.166667 -34.000000 -3101.000000 1670.000000 --49.000000 -34.000000 -3181.000000 1670.000000 --48.833333 -34.000000 -3333.000000 1670.000000 --48.666667 -34.000000 -3353.000000 1670.000000 --48.500000 -34.000000 -3456.000000 1670.000000 --48.333333 -34.000000 -3580.000000 1670.000000 --48.166667 -34.000000 -3700.000000 1670.000000 --48.000000 -34.000000 -3783.000000 1670.000000 --47.833333 -34.000000 -3915.000000 1670.000000 --47.666667 -34.000000 -4017.000000 1670.000000 --47.500000 -34.000000 -4138.000000 1670.000000 --47.333333 -34.000000 -4208.000000 1670.000000 --47.166667 -34.000000 -4310.000000 1670.000000 --47.000000 -34.000000 -4340.000000 1670.000000 --46.833333 -34.000000 -4385.000000 1670.000000 --46.666667 -34.000000 -4425.000000 1670.000000 --46.500000 -34.000000 -4450.000000 1670.000000 --46.333333 -34.000000 -4476.000000 1670.000000 --46.166667 -34.000000 -4501.000000 1670.000000 --46.000000 -34.000000 -4506.000000 1670.000000 --45.833333 -34.000000 -4501.000000 1670.000000 --45.666667 -34.000000 -4488.000000 1670.000000 --45.500000 -34.000000 -4514.000000 1670.000000 --45.333333 -34.000000 -4520.000000 1670.000000 --45.166667 -34.000000 -4496.000000 1670.000000 --45.000000 -34.000000 -4482.000000 1670.000000 --44.833333 -34.000000 -4429.000000 1670.000000 --44.666667 -34.000000 -4459.000000 1670.000000 --44.500000 -34.000000 -4457.000000 1670.000000 --44.333333 -34.000000 -4480.000000 1670.000000 --44.166667 -34.000000 -4513.000000 1670.000000 --44.000000 -34.000000 -4486.000000 1670.000000 --43.833333 -34.000000 -4508.000000 1670.000000 --43.666667 -34.000000 -4436.000000 1670.000000 --43.500000 -34.000000 -4494.000000 1670.000000 --43.333333 -34.000000 -4445.000000 1670.000000 --43.166667 -34.000000 -4448.000000 1670.000000 --43.000000 -34.000000 -4496.000000 1670.000000 --42.833333 -34.000000 -4495.000000 1670.000000 --42.666667 -34.000000 -4510.000000 1670.000000 --42.500000 -34.000000 -4532.000000 1670.000000 --42.333333 -34.000000 -4560.000000 1670.000000 --42.166667 -34.000000 -4579.000000 1670.000000 --42.000000 -34.000000 -4572.000000 1670.000000 --41.833333 -34.000000 -4576.000000 1670.000000 --41.666667 -34.000000 -4621.000000 1670.000000 --41.500000 -34.000000 -4613.000000 1670.000000 --41.333333 -34.000000 -4617.000000 1670.000000 --41.166667 -34.000000 -4625.000000 1670.000000 --41.000000 -34.000000 -4640.000000 1670.000000 --40.833333 -34.000000 -4566.000000 1670.000000 --40.666667 -34.000000 -4529.000000 1670.000000 --40.500000 -34.000000 -4599.000000 1670.000000 --40.333333 -34.000000 -4765.000000 1670.000000 --40.166667 -34.000000 -4748.000000 1670.000000 --40.000000 -34.000000 -4748.000000 1670.000000 --65.000000 -34.166667 329.000000 2670.000000 --64.833333 -34.166667 298.000000 2670.000000 --64.666667 -34.166667 270.000000 2670.000000 --64.500000 -34.166667 244.000000 2670.000000 --64.333333 -34.166667 221.000000 2670.000000 --64.166667 -34.166667 194.000000 2670.000000 --64.000000 -34.166667 176.000000 2670.000000 --63.833333 -34.166667 158.000000 2670.000000 --63.666667 -34.166667 148.000000 2670.000000 --63.500000 -34.166667 142.000000 2670.000000 --63.333333 -34.166667 136.000000 2670.000000 --63.166667 -34.166667 132.000000 2670.000000 --63.000000 -34.166667 128.000000 2670.000000 --62.833333 -34.166667 128.000000 2670.000000 --62.666667 -34.166667 122.000000 2670.000000 --62.500000 -34.166667 118.000000 2670.000000 --62.333333 -34.166667 115.000000 2670.000000 --62.166667 -34.166667 113.000000 2670.000000 --62.000000 -34.166667 105.000000 2670.000000 --61.833333 -34.166667 101.000000 2670.000000 --61.666667 -34.166667 92.000000 2670.000000 --61.500000 -34.166667 86.000000 2670.000000 --61.333333 -34.166667 91.000000 2670.000000 --61.166667 -34.166667 98.000000 2670.000000 --61.000000 -34.166667 80.000000 2670.000000 --60.833333 -34.166667 65.000000 2670.000000 --60.666667 -34.166667 76.000000 2670.000000 --60.500000 -34.166667 57.000000 2670.000000 --60.333333 -34.166667 72.000000 2670.000000 --60.166667 -34.166667 56.000000 2670.000000 --60.000000 -34.166667 43.000000 2670.000000 --59.833333 -34.166667 43.000000 2670.000000 --59.666667 -34.166667 45.000000 2670.000000 --59.500000 -34.166667 45.000000 2670.000000 --59.333333 -34.166667 16.000000 2670.000000 --59.166667 -34.166667 30.000000 2670.000000 --59.000000 -34.166667 4.000000 2670.000000 --58.833333 -34.166667 6.000000 2670.000000 --58.666667 -34.166667 4.000000 2670.000000 --58.500000 -34.166667 6.000000 2670.000000 --58.333333 -34.166667 -1.000000 1670.000000 --58.166667 -34.166667 12.000000 2670.000000 --58.000000 -34.166667 75.000000 2670.000000 --57.833333 -34.166667 35.000000 2670.000000 --57.666667 -34.166667 78.000000 2670.000000 --57.500000 -34.166667 106.000000 2670.000000 --57.333333 -34.166667 72.000000 2670.000000 --57.166667 -34.166667 61.000000 2670.000000 --57.000000 -34.166667 115.000000 2670.000000 --56.833333 -34.166667 62.000000 2670.000000 --56.666667 -34.166667 60.000000 2670.000000 --56.500000 -34.166667 88.000000 2670.000000 --56.333333 -34.166667 67.000000 2670.000000 --56.166667 -34.166667 97.000000 2670.000000 --56.000000 -34.166667 85.000000 2670.000000 --55.833333 -34.166667 58.000000 2670.000000 --55.666667 -34.166667 87.000000 2670.000000 --55.500000 -34.166667 103.000000 2670.000000 --55.333333 -34.166667 117.000000 2670.000000 --55.166667 -34.166667 299.000000 2670.000000 --55.000000 -34.166667 225.000000 2670.000000 --54.833333 -34.166667 153.000000 2670.000000 --54.666667 -34.166667 91.000000 2670.000000 --54.500000 -34.166667 82.000000 2670.000000 --54.333333 -34.166667 84.000000 2670.000000 --54.166667 -34.166667 131.000000 2670.000000 --54.000000 -34.166667 78.000000 2670.000000 --53.833333 -34.166667 36.000000 2670.000000 --53.666667 -34.166667 -1.000000 1670.000000 --53.500000 -34.166667 -18.000000 1670.000000 --53.333333 -34.166667 -20.000000 1670.000000 --53.166667 -34.166667 -26.000000 1670.000000 --53.000000 -34.166667 -46.000000 1670.000000 --52.833333 -34.166667 -49.000000 1670.000000 --52.666667 -34.166667 -65.000000 1670.000000 --52.500000 -34.166667 -40.000000 1670.000000 --52.333333 -34.166667 -46.000000 1670.000000 --52.166667 -34.166667 -87.000000 1670.000000 --52.000000 -34.166667 -92.000000 1670.000000 --51.833333 -34.166667 -92.000000 1670.000000 --51.666667 -34.166667 -692.000000 1670.000000 --51.500000 -34.166667 -776.000000 1670.000000 --51.333333 -34.166667 -1117.000000 1670.000000 --51.166667 -34.166667 -1559.000000 1670.000000 --51.000000 -34.166667 -2027.000000 1670.000000 --50.833333 -34.166667 -2246.000000 1670.000000 --50.666667 -34.166667 -2280.000000 1670.000000 --50.500000 -34.166667 -2465.000000 1670.000000 --50.333333 -34.166667 -2504.000000 1670.000000 --50.166667 -34.166667 -2558.000000 1670.000000 --50.000000 -34.166667 -2770.000000 1670.000000 --49.833333 -34.166667 -2889.000000 1670.000000 --49.666667 -34.166667 -2929.000000 1670.000000 --49.500000 -34.166667 -3141.000000 1670.000000 --49.333333 -34.166667 -3145.000000 1670.000000 --49.166667 -34.166667 -3244.000000 1670.000000 --49.000000 -34.166667 -3371.000000 1670.000000 --48.833333 -34.166667 -3415.000000 1670.000000 --48.666667 -34.166667 -3476.000000 1670.000000 --48.500000 -34.166667 -3613.000000 1670.000000 --48.333333 -34.166667 -3738.000000 1670.000000 --48.166667 -34.166667 -3824.000000 1670.000000 --48.000000 -34.166667 -4003.000000 1670.000000 --47.833333 -34.166667 -4072.000000 1670.000000 --47.666667 -34.166667 -4124.000000 1670.000000 --47.500000 -34.166667 -4222.000000 1670.000000 --47.333333 -34.166667 -4271.000000 1670.000000 --47.166667 -34.166667 -4351.000000 1670.000000 --47.000000 -34.166667 -4431.000000 1670.000000 --46.833333 -34.166667 -4513.000000 1670.000000 --46.666667 -34.166667 -4564.000000 1670.000000 --46.500000 -34.166667 -4614.000000 1670.000000 --46.333333 -34.166667 -4624.000000 1670.000000 --46.166667 -34.166667 -4646.000000 1670.000000 --46.000000 -34.166667 -4655.000000 1670.000000 --45.833333 -34.166667 -4666.000000 1670.000000 --45.666667 -34.166667 -4654.000000 1670.000000 --45.500000 -34.166667 -4655.000000 1670.000000 --45.333333 -34.166667 -4654.000000 1670.000000 --45.166667 -34.166667 -4632.000000 1670.000000 --45.000000 -34.166667 -4643.000000 1670.000000 --44.833333 -34.166667 -4565.000000 1670.000000 --44.666667 -34.166667 -4632.000000 1670.000000 --44.500000 -34.166667 -4676.000000 1670.000000 --44.333333 -34.166667 -4675.000000 1670.000000 --44.166667 -34.166667 -4693.000000 1670.000000 --44.000000 -34.166667 -4595.000000 1670.000000 --43.833333 -34.166667 -4566.000000 1670.000000 --43.666667 -34.166667 -4539.000000 1670.000000 --43.500000 -34.166667 -4533.000000 1670.000000 --43.333333 -34.166667 -4514.000000 1670.000000 --43.166667 -34.166667 -4537.000000 1670.000000 --43.000000 -34.166667 -4577.000000 1670.000000 --42.833333 -34.166667 -4566.000000 1670.000000 --42.666667 -34.166667 -4569.000000 1670.000000 --42.500000 -34.166667 -4570.000000 1670.000000 --42.333333 -34.166667 -4585.000000 1670.000000 --42.166667 -34.166667 -4616.000000 1670.000000 --42.000000 -34.166667 -4620.000000 1670.000000 --41.833333 -34.166667 -4633.000000 1670.000000 --41.666667 -34.166667 -4629.000000 1670.000000 --41.500000 -34.166667 -4656.000000 1670.000000 --41.333333 -34.166667 -4633.000000 1670.000000 --41.166667 -34.166667 -4674.000000 1670.000000 --41.000000 -34.166667 -4582.000000 1670.000000 --40.833333 -34.166667 -4553.000000 1670.000000 --40.666667 -34.166667 -4614.000000 1670.000000 --40.500000 -34.166667 -4707.000000 1670.000000 --40.333333 -34.166667 -4754.000000 1670.000000 --40.166667 -34.166667 -4695.000000 1670.000000 --40.000000 -34.166667 -4873.000000 1670.000000 --65.000000 -34.333333 309.000000 2670.000000 --64.833333 -34.333333 281.000000 2670.000000 --64.666667 -34.333333 257.000000 2670.000000 --64.500000 -34.333333 235.000000 2670.000000 --64.333333 -34.333333 214.000000 2670.000000 --64.166667 -34.333333 190.000000 2670.000000 --64.000000 -34.333333 172.000000 2670.000000 --63.833333 -34.333333 157.000000 2670.000000 --63.666667 -34.333333 147.000000 2670.000000 --63.500000 -34.333333 142.000000 2670.000000 --63.333333 -34.333333 138.000000 2670.000000 --63.166667 -34.333333 132.000000 2670.000000 --63.000000 -34.333333 127.000000 2670.000000 --62.833333 -34.333333 121.000000 2670.000000 --62.666667 -34.333333 112.000000 2670.000000 --62.500000 -34.333333 108.000000 2670.000000 --62.333333 -34.333333 103.000000 2670.000000 --62.166667 -34.333333 103.000000 2670.000000 --62.000000 -34.333333 104.000000 2670.000000 --61.833333 -34.333333 97.000000 2670.000000 --61.666667 -34.333333 95.000000 2670.000000 --61.500000 -34.333333 93.000000 2670.000000 --61.333333 -34.333333 84.000000 2670.000000 --61.166667 -34.333333 85.000000 2670.000000 --61.000000 -34.333333 72.000000 2670.000000 --60.833333 -34.333333 65.000000 2670.000000 --60.666667 -34.333333 70.000000 2670.000000 --60.500000 -34.333333 62.000000 2670.000000 --60.333333 -34.333333 59.000000 2670.000000 --60.166667 -34.333333 67.000000 2670.000000 --60.000000 -34.333333 54.000000 2670.000000 --59.833333 -34.333333 50.000000 2670.000000 --59.666667 -34.333333 50.000000 2670.000000 --59.500000 -34.333333 48.000000 2670.000000 --59.333333 -34.333333 39.000000 2670.000000 --59.166667 -34.333333 19.000000 2670.000000 --59.000000 -34.333333 27.000000 2670.000000 --58.833333 -34.333333 17.000000 2670.000000 --58.666667 -34.333333 3.000000 2670.000000 --58.500000 -34.333333 3.000000 2670.000000 --58.333333 -34.333333 -1.000000 1670.000000 --58.166667 -34.333333 -1.000000 1670.000000 --58.000000 -34.333333 -1.000000 1670.000000 --57.833333 -34.333333 37.000000 2670.000000 --57.666667 -34.333333 53.000000 2670.000000 --57.500000 -34.333333 47.000000 2670.000000 --57.333333 -34.333333 15.000000 2670.000000 --57.166667 -34.333333 49.000000 2670.000000 --57.000000 -34.333333 67.000000 2670.000000 --56.833333 -34.333333 64.000000 2670.000000 --56.666667 -34.333333 31.000000 2670.000000 --56.500000 -34.333333 49.000000 2670.000000 --56.333333 -34.333333 19.000000 2670.000000 --56.166667 -34.333333 35.000000 2670.000000 --56.000000 -34.333333 34.000000 2670.000000 --55.833333 -34.333333 60.000000 2670.000000 --55.666667 -34.333333 85.000000 2670.000000 --55.500000 -34.333333 90.000000 2670.000000 --55.333333 -34.333333 156.000000 2670.000000 --55.166667 -34.333333 180.000000 2670.000000 --55.000000 -34.333333 285.000000 2670.000000 --54.833333 -34.333333 137.000000 2670.000000 --54.666667 -34.333333 355.000000 2670.000000 --54.500000 -34.333333 116.000000 2670.000000 --54.333333 -34.333333 101.000000 2670.000000 --54.166667 -34.333333 57.000000 2670.000000 --54.000000 -34.333333 3.000000 2670.000000 --53.833333 -34.333333 3.000000 2670.000000 --53.666667 -34.333333 -19.000000 1670.000000 --53.500000 -34.333333 -20.000000 1670.000000 --53.333333 -34.333333 -25.000000 1670.000000 --53.166667 -34.333333 -38.000000 1670.000000 --53.000000 -34.333333 -62.000000 1670.000000 --52.833333 -34.333333 -45.000000 1670.000000 --52.666667 -34.333333 -38.000000 1670.000000 --52.500000 -34.333333 -67.000000 1670.000000 --52.333333 -34.333333 -81.000000 1670.000000 --52.166667 -34.333333 -108.000000 1670.000000 --52.000000 -34.333333 -126.000000 1670.000000 --51.833333 -34.333333 -308.000000 1670.000000 --51.666667 -34.333333 -550.000000 1670.000000 --51.500000 -34.333333 -1066.000000 1670.000000 --51.333333 -34.333333 -1551.000000 1670.000000 --51.166667 -34.333333 -1959.000000 1670.000000 --51.000000 -34.333333 -2290.000000 1670.000000 --50.833333 -34.333333 -2452.000000 1670.000000 --50.666667 -34.333333 -2561.000000 1670.000000 --50.500000 -34.333333 -2666.000000 1670.000000 --50.333333 -34.333333 -2780.000000 1670.000000 --50.166667 -34.333333 -2836.000000 1670.000000 --50.000000 -34.333333 -2941.000000 1670.000000 --49.833333 -34.333333 -2991.000000 1670.000000 --49.666667 -34.333333 -3144.000000 1670.000000 --49.500000 -34.333333 -3381.000000 1670.000000 --49.333333 -34.333333 -3438.000000 1670.000000 --49.166667 -34.333333 -3644.000000 1670.000000 --49.000000 -34.333333 -3625.000000 1670.000000 --48.833333 -34.333333 -3644.000000 1670.000000 --48.666667 -34.333333 -3699.000000 1670.000000 --48.500000 -34.333333 -3855.000000 1670.000000 --48.333333 -34.333333 -3940.000000 1670.000000 --48.166667 -34.333333 -4038.000000 1670.000000 --48.000000 -34.333333 -4232.000000 1670.000000 --47.833333 -34.333333 -4255.000000 1670.000000 --47.666667 -34.333333 -4350.000000 1670.000000 --47.500000 -34.333333 -4389.000000 1670.000000 --47.333333 -34.333333 -4438.000000 1670.000000 --47.166667 -34.333333 -4455.000000 1670.000000 --47.000000 -34.333333 -4490.000000 1670.000000 --46.833333 -34.333333 -4529.000000 1670.000000 --46.666667 -34.333333 -4600.000000 1670.000000 --46.500000 -34.333333 -4637.000000 1670.000000 --46.333333 -34.333333 -4666.000000 1670.000000 --46.166667 -34.333333 -4675.000000 1670.000000 --46.000000 -34.333333 -4702.000000 1670.000000 --45.833333 -34.333333 -4736.000000 1670.000000 --45.666667 -34.333333 -4742.000000 1670.000000 --45.500000 -34.333333 -4759.000000 1670.000000 --45.333333 -34.333333 -4756.000000 1670.000000 --45.166667 -34.333333 -4743.000000 1670.000000 --45.000000 -34.333333 -4754.000000 1670.000000 --44.833333 -34.333333 -4713.000000 1670.000000 --44.666667 -34.333333 -4713.000000 1670.000000 --44.500000 -34.333333 -4757.000000 1670.000000 --44.333333 -34.333333 -4718.000000 1670.000000 --44.166667 -34.333333 -4723.000000 1670.000000 --44.000000 -34.333333 -4682.000000 1670.000000 --43.833333 -34.333333 -4674.000000 1670.000000 --43.666667 -34.333333 -4646.000000 1670.000000 --43.500000 -34.333333 -4632.000000 1670.000000 --43.333333 -34.333333 -4636.000000 1670.000000 --43.166667 -34.333333 -4643.000000 1670.000000 --43.000000 -34.333333 -4620.000000 1670.000000 --42.833333 -34.333333 -4619.000000 1670.000000 --42.666667 -34.333333 -4621.000000 1670.000000 --42.500000 -34.333333 -4620.000000 1670.000000 --42.333333 -34.333333 -4620.000000 1670.000000 --42.166667 -34.333333 -4643.000000 1670.000000 --42.000000 -34.333333 -4650.000000 1670.000000 --41.833333 -34.333333 -4653.000000 1670.000000 --41.666667 -34.333333 -4642.000000 1670.000000 --41.500000 -34.333333 -4648.000000 1670.000000 --41.333333 -34.333333 -4670.000000 1670.000000 --41.166667 -34.333333 -4635.000000 1670.000000 --41.000000 -34.333333 -4655.000000 1670.000000 --40.833333 -34.333333 -4555.000000 1670.000000 --40.666667 -34.333333 -4615.000000 1670.000000 --40.500000 -34.333333 -4786.000000 1670.000000 --40.333333 -34.333333 -4785.000000 1670.000000 --40.166667 -34.333333 -4826.000000 1670.000000 --40.000000 -34.333333 -4669.000000 1670.000000 --65.000000 -34.500000 287.000000 2670.000000 --64.833333 -34.500000 262.000000 2670.000000 --64.666667 -34.500000 238.000000 2670.000000 --64.500000 -34.500000 217.000000 2670.000000 --64.333333 -34.500000 191.000000 2670.000000 --64.166667 -34.500000 178.000000 2670.000000 --64.000000 -34.500000 162.000000 2670.000000 --63.833333 -34.500000 149.000000 2670.000000 --63.666667 -34.500000 145.000000 2670.000000 --63.500000 -34.500000 141.000000 2670.000000 --63.333333 -34.500000 137.000000 2670.000000 --63.166667 -34.500000 132.000000 2670.000000 --63.000000 -34.500000 126.000000 2670.000000 --62.833333 -34.500000 122.000000 2670.000000 --62.666667 -34.500000 119.000000 2670.000000 --62.500000 -34.500000 111.000000 2670.000000 --62.333333 -34.500000 112.000000 2670.000000 --62.166667 -34.500000 108.000000 2670.000000 --62.000000 -34.500000 106.000000 2670.000000 --61.833333 -34.500000 102.000000 2670.000000 --61.666667 -34.500000 91.000000 2670.000000 --61.500000 -34.500000 87.000000 2670.000000 --61.333333 -34.500000 83.000000 2670.000000 --61.166667 -34.500000 75.000000 2670.000000 --61.000000 -34.500000 85.000000 2670.000000 --60.833333 -34.500000 78.000000 2670.000000 --60.666667 -34.500000 71.000000 2670.000000 --60.500000 -34.500000 72.000000 2670.000000 --60.333333 -34.500000 68.000000 2670.000000 --60.166667 -34.500000 64.000000 2670.000000 --60.000000 -34.500000 50.000000 2670.000000 --59.833333 -34.500000 55.000000 2670.000000 --59.666667 -34.500000 53.000000 2670.000000 --59.500000 -34.500000 50.000000 2670.000000 --59.333333 -34.500000 42.000000 2670.000000 --59.166667 -34.500000 27.000000 2670.000000 --59.000000 -34.500000 13.000000 2670.000000 --58.833333 -34.500000 27.000000 2670.000000 --58.666667 -34.500000 20.000000 2670.000000 --58.500000 -34.500000 23.000000 2670.000000 --58.333333 -34.500000 -1.000000 1670.000000 --58.166667 -34.500000 -1.000000 1670.000000 --58.000000 -34.500000 -1.000000 1670.000000 --57.833333 -34.500000 -1.000000 1670.000000 --57.666667 -34.500000 -1.000000 1670.000000 --57.500000 -34.500000 -1.000000 1670.000000 --57.333333 -34.500000 -1.000000 1670.000000 --57.166667 -34.500000 -1.000000 1670.000000 --57.000000 -34.500000 11.000000 2670.000000 --56.833333 -34.500000 26.000000 2670.000000 --56.666667 -34.500000 16.000000 2670.000000 --56.500000 -34.500000 33.000000 2670.000000 --56.333333 -34.500000 16.000000 2670.000000 --56.166667 -34.500000 40.000000 2670.000000 --56.000000 -34.500000 61.000000 2670.000000 --55.833333 -34.500000 71.000000 2670.000000 --55.666667 -34.500000 51.000000 2670.000000 --55.500000 -34.500000 37.000000 2670.000000 --55.333333 -34.500000 215.000000 2670.000000 --55.166667 -34.500000 292.000000 2670.000000 --55.000000 -34.500000 156.000000 2670.000000 --54.833333 -34.500000 137.000000 2670.000000 --54.666667 -34.500000 85.000000 2670.000000 --54.500000 -34.500000 102.000000 2670.000000 --54.333333 -34.500000 18.000000 2670.000000 --54.166667 -34.500000 51.000000 2670.000000 --54.000000 -34.500000 13.000000 2670.000000 --53.833333 -34.500000 -23.000000 1670.000000 --53.666667 -34.500000 -31.000000 1670.000000 --53.500000 -34.500000 -35.000000 1670.000000 --53.333333 -34.500000 -42.000000 1670.000000 --53.166667 -34.500000 -55.000000 1670.000000 --53.000000 -34.500000 -53.000000 1670.000000 --52.833333 -34.500000 -84.000000 1670.000000 --52.666667 -34.500000 -63.000000 1670.000000 --52.500000 -34.500000 -72.000000 1670.000000 --52.333333 -34.500000 -83.000000 1670.000000 --52.166667 -34.500000 -125.000000 1670.000000 --52.000000 -34.500000 -208.000000 1670.000000 --51.833333 -34.500000 -448.000000 1670.000000 --51.666667 -34.500000 -1076.000000 1670.000000 --51.500000 -34.500000 -1407.000000 1670.000000 --51.333333 -34.500000 -1776.000000 1670.000000 --51.166667 -34.500000 -2116.000000 1670.000000 --51.000000 -34.500000 -2490.000000 1670.000000 --50.833333 -34.500000 -2822.000000 1670.000000 --50.666667 -34.500000 -2857.000000 1670.000000 --50.500000 -34.500000 -2972.000000 1670.000000 --50.333333 -34.500000 -3009.000000 1670.000000 --50.166667 -34.500000 -3138.000000 1670.000000 --50.000000 -34.500000 -3196.000000 1670.000000 --49.833333 -34.500000 -3309.000000 1670.000000 --49.666667 -34.500000 -3542.000000 1670.000000 --49.500000 -34.500000 -3556.000000 1670.000000 --49.333333 -34.500000 -3592.000000 1670.000000 --49.166667 -34.500000 -3738.000000 1670.000000 --49.000000 -34.500000 -3784.000000 1670.000000 --48.833333 -34.500000 -3923.000000 1670.000000 --48.666667 -34.500000 -4017.000000 1670.000000 --48.500000 -34.500000 -4143.000000 1670.000000 --48.333333 -34.500000 -4189.000000 1670.000000 --48.166667 -34.500000 -4264.000000 1670.000000 --48.000000 -34.500000 -4384.000000 1670.000000 --47.833333 -34.500000 -4462.000000 1670.000000 --47.666667 -34.500000 -4521.000000 1670.000000 --47.500000 -34.500000 -4566.000000 1670.000000 --47.333333 -34.500000 -4588.000000 1670.000000 --47.166667 -34.500000 -4608.000000 1670.000000 --47.000000 -34.500000 -4621.000000 1670.000000 --46.833333 -34.500000 -4633.000000 1670.000000 --46.666667 -34.500000 -4613.000000 1670.000000 --46.500000 -34.500000 -4650.000000 1670.000000 --46.333333 -34.500000 -4695.000000 1670.000000 --46.166667 -34.500000 -4737.000000 1670.000000 --46.000000 -34.500000 -4768.000000 1670.000000 --45.833333 -34.500000 -4764.000000 1670.000000 --45.666667 -34.500000 -4779.000000 1670.000000 --45.500000 -34.500000 -4785.000000 1670.000000 --45.333333 -34.500000 -4801.000000 1670.000000 --45.166667 -34.500000 -4803.000000 1670.000000 --45.000000 -34.500000 -4796.000000 1670.000000 --44.833333 -34.500000 -4783.000000 1670.000000 --44.666667 -34.500000 -4774.000000 1670.000000 --44.500000 -34.500000 -4761.000000 1670.000000 --44.333333 -34.500000 -4771.000000 1670.000000 --44.166667 -34.500000 -4748.000000 1670.000000 --44.000000 -34.500000 -4749.000000 1670.000000 --43.833333 -34.500000 -4748.000000 1670.000000 --43.666667 -34.500000 -4735.000000 1670.000000 --43.500000 -34.500000 -4732.000000 1670.000000 --43.333333 -34.500000 -4705.000000 1670.000000 --43.166667 -34.500000 -4712.000000 1670.000000 --43.000000 -34.500000 -4703.000000 1670.000000 --42.833333 -34.500000 -4670.000000 1670.000000 --42.666667 -34.500000 -4667.000000 1670.000000 --42.500000 -34.500000 -4664.000000 1670.000000 --42.333333 -34.500000 -4665.000000 1670.000000 --42.166667 -34.500000 -4677.000000 1670.000000 --42.000000 -34.500000 -4687.000000 1670.000000 --41.833333 -34.500000 -4682.000000 1670.000000 --41.666667 -34.500000 -4671.000000 1670.000000 --41.500000 -34.500000 -4670.000000 1670.000000 --41.333333 -34.500000 -4683.000000 1670.000000 --41.166667 -34.500000 -4670.000000 1670.000000 --41.000000 -34.500000 -4725.000000 1670.000000 --40.833333 -34.500000 -4672.000000 1670.000000 --40.666667 -34.500000 -4645.000000 1670.000000 --40.500000 -34.500000 -4731.000000 1670.000000 --40.333333 -34.500000 -4863.000000 1670.000000 --40.166667 -34.500000 -4845.000000 1670.000000 --40.000000 -34.500000 -4837.000000 1670.000000 --65.000000 -34.666667 269.000000 2670.000000 --64.833333 -34.666667 249.000000 2670.000000 --64.666667 -34.666667 231.000000 2670.000000 --64.500000 -34.666667 203.000000 2670.000000 --64.333333 -34.666667 182.000000 2670.000000 --64.166667 -34.666667 162.000000 2670.000000 --64.000000 -34.666667 150.000000 2670.000000 --63.833333 -34.666667 145.000000 2670.000000 --63.666667 -34.666667 139.000000 2670.000000 --63.500000 -34.666667 129.000000 2670.000000 --63.333333 -34.666667 132.000000 2670.000000 --63.166667 -34.666667 128.000000 2670.000000 --63.000000 -34.666667 121.000000 2670.000000 --62.833333 -34.666667 116.000000 2670.000000 --62.666667 -34.666667 113.000000 2670.000000 --62.500000 -34.666667 108.000000 2670.000000 --62.333333 -34.666667 103.000000 2670.000000 --62.166667 -34.666667 102.000000 2670.000000 --62.000000 -34.666667 100.000000 2670.000000 --61.833333 -34.666667 94.000000 2670.000000 --61.666667 -34.666667 91.000000 2670.000000 --61.500000 -34.666667 87.000000 2670.000000 --61.333333 -34.666667 79.000000 2670.000000 --61.166667 -34.666667 80.000000 2670.000000 --61.000000 -34.666667 77.000000 2670.000000 --60.833333 -34.666667 77.000000 2670.000000 --60.666667 -34.666667 66.000000 2670.000000 --60.500000 -34.666667 67.000000 2670.000000 --60.333333 -34.666667 66.000000 2670.000000 --60.166667 -34.666667 59.000000 2670.000000 --60.000000 -34.666667 54.000000 2670.000000 --59.833333 -34.666667 51.000000 2670.000000 --59.666667 -34.666667 47.000000 2670.000000 --59.500000 -34.666667 34.000000 2670.000000 --59.333333 -34.666667 33.000000 2670.000000 --59.166667 -34.666667 33.000000 2670.000000 --59.000000 -34.666667 24.000000 2670.000000 --58.833333 -34.666667 27.000000 2670.000000 --58.666667 -34.666667 30.000000 2670.000000 --58.500000 -34.666667 21.000000 2670.000000 --58.333333 -34.666667 6.000000 2670.000000 --58.166667 -34.666667 -1.000000 1670.000000 --58.000000 -34.666667 -1.000000 1670.000000 --57.833333 -34.666667 -1.000000 1670.000000 --57.666667 -34.666667 -1.000000 1670.000000 --57.500000 -34.666667 -1.000000 1670.000000 --57.333333 -34.666667 -1.000000 1670.000000 --57.166667 -34.666667 -1.000000 1670.000000 --57.000000 -34.666667 -1.000000 1670.000000 --56.833333 -34.666667 3.000000 2670.000000 --56.666667 -34.666667 19.000000 2670.000000 --56.500000 -34.666667 -3.000000 1670.000000 --56.333333 -34.666667 21.000000 2670.000000 --56.166667 -34.666667 51.000000 2670.000000 --56.000000 -34.666667 35.000000 2670.000000 --55.833333 -34.666667 45.000000 2670.000000 --55.666667 -34.666667 20.000000 2670.000000 --55.500000 -34.666667 37.000000 2670.000000 --55.333333 -34.666667 336.000000 2670.000000 --55.166667 -34.666667 85.000000 2670.000000 --55.000000 -34.666667 81.000000 2670.000000 --54.833333 -34.666667 46.000000 2670.000000 --54.666667 -34.666667 61.000000 2670.000000 --54.500000 -34.666667 31.000000 2670.000000 --54.333333 -34.666667 7.000000 2670.000000 --54.166667 -34.666667 1.000000 2670.000000 --54.000000 -34.666667 -20.000000 1670.000000 --53.833333 -34.666667 -38.000000 1670.000000 --53.666667 -34.666667 -44.000000 1670.000000 --53.500000 -34.666667 -47.000000 1670.000000 --53.333333 -34.666667 -65.000000 1670.000000 --53.166667 -34.666667 -39.000000 1670.000000 --53.000000 -34.666667 -38.000000 1670.000000 --52.833333 -34.666667 -76.000000 1670.000000 --52.666667 -34.666667 -67.000000 1670.000000 --52.500000 -34.666667 -37.000000 1670.000000 --52.333333 -34.666667 -94.000000 1670.000000 --52.166667 -34.666667 -126.000000 1670.000000 --52.000000 -34.666667 -438.000000 1670.000000 --51.833333 -34.666667 -1038.000000 1670.000000 --51.666667 -34.666667 -1396.000000 1670.000000 --51.500000 -34.666667 -1747.000000 1670.000000 --51.333333 -34.666667 -1987.000000 1670.000000 --51.166667 -34.666667 -2170.000000 1670.000000 --51.000000 -34.666667 -2372.000000 1670.000000 --50.833333 -34.666667 -2976.000000 1670.000000 --50.666667 -34.666667 -3064.000000 1670.000000 --50.500000 -34.666667 -3137.000000 1670.000000 --50.333333 -34.666667 -3225.000000 1670.000000 --50.166667 -34.666667 -3295.000000 1670.000000 --50.000000 -34.666667 -3386.000000 1670.000000 --49.833333 -34.666667 -3479.000000 1670.000000 --49.666667 -34.666667 -3462.000000 1670.000000 --49.500000 -34.666667 -3625.000000 1670.000000 --49.333333 -34.666667 -3747.000000 1670.000000 --49.166667 -34.666667 -3880.000000 1670.000000 --49.000000 -34.666667 -3953.000000 1670.000000 --48.833333 -34.666667 -4082.000000 1670.000000 --48.666667 -34.666667 -4225.000000 1670.000000 --48.500000 -34.666667 -4312.000000 1670.000000 --48.333333 -34.666667 -4357.000000 1670.000000 --48.166667 -34.666667 -4508.000000 1670.000000 --48.000000 -34.666667 -4598.000000 1670.000000 --47.833333 -34.666667 -4612.000000 1670.000000 --47.666667 -34.666667 -4631.000000 1670.000000 --47.500000 -34.666667 -4674.000000 1670.000000 --47.333333 -34.666667 -4686.000000 1670.000000 --47.166667 -34.666667 -4730.000000 1670.000000 --47.000000 -34.666667 -4719.000000 1670.000000 --46.833333 -34.666667 -4716.000000 1670.000000 --46.666667 -34.666667 -4704.000000 1670.000000 --46.500000 -34.666667 -4664.000000 1670.000000 --46.333333 -34.666667 -4674.000000 1670.000000 --46.166667 -34.666667 -4727.000000 1670.000000 --46.000000 -34.666667 -4766.000000 1670.000000 --45.833333 -34.666667 -4786.000000 1670.000000 --45.666667 -34.666667 -4792.000000 1670.000000 --45.500000 -34.666667 -4822.000000 1670.000000 --45.333333 -34.666667 -4833.000000 1670.000000 --45.166667 -34.666667 -4806.000000 1670.000000 --45.000000 -34.666667 -4792.000000 1670.000000 --44.833333 -34.666667 -4818.000000 1670.000000 --44.666667 -34.666667 -4819.000000 1670.000000 --44.500000 -34.666667 -4809.000000 1670.000000 --44.333333 -34.666667 -4798.000000 1670.000000 --44.166667 -34.666667 -4791.000000 1670.000000 --44.000000 -34.666667 -4794.000000 1670.000000 --43.833333 -34.666667 -4804.000000 1670.000000 --43.666667 -34.666667 -4796.000000 1670.000000 --43.500000 -34.666667 -4775.000000 1670.000000 --43.333333 -34.666667 -4785.000000 1670.000000 --43.166667 -34.666667 -4749.000000 1670.000000 --43.000000 -34.666667 -4757.000000 1670.000000 --42.833333 -34.666667 -4735.000000 1670.000000 --42.666667 -34.666667 -4723.000000 1670.000000 --42.500000 -34.666667 -4724.000000 1670.000000 --42.333333 -34.666667 -4726.000000 1670.000000 --42.166667 -34.666667 -4700.000000 1670.000000 --42.000000 -34.666667 -4715.000000 1670.000000 --41.833333 -34.666667 -4701.000000 1670.000000 --41.666667 -34.666667 -4701.000000 1670.000000 --41.500000 -34.666667 -4695.000000 1670.000000 --41.333333 -34.666667 -4689.000000 1670.000000 --41.166667 -34.666667 -4713.000000 1670.000000 --41.000000 -34.666667 -4703.000000 1670.000000 --40.833333 -34.666667 -4750.000000 1670.000000 --40.666667 -34.666667 -4662.000000 1670.000000 --40.500000 -34.666667 -4747.000000 1670.000000 --40.333333 -34.666667 -4792.000000 1670.000000 --40.166667 -34.666667 -4902.000000 1670.000000 --40.000000 -34.666667 -4880.000000 1670.000000 --65.000000 -34.833333 267.000000 2670.000000 --64.833333 -34.833333 233.000000 2670.000000 --64.666667 -34.833333 230.000000 2670.000000 --64.500000 -34.833333 201.000000 2670.000000 --64.333333 -34.833333 175.000000 2670.000000 --64.166667 -34.833333 159.000000 2670.000000 --64.000000 -34.833333 148.000000 2670.000000 --63.833333 -34.833333 141.000000 2670.000000 --63.666667 -34.833333 132.000000 2670.000000 --63.500000 -34.833333 127.000000 2670.000000 --63.333333 -34.833333 122.000000 2670.000000 --63.166667 -34.833333 121.000000 2670.000000 --63.000000 -34.833333 119.000000 2670.000000 --62.833333 -34.833333 117.000000 2670.000000 --62.666667 -34.833333 113.000000 2670.000000 --62.500000 -34.833333 109.000000 2670.000000 --62.333333 -34.833333 105.000000 2670.000000 --62.166667 -34.833333 114.000000 2670.000000 --62.000000 -34.833333 100.000000 2670.000000 --61.833333 -34.833333 107.000000 2670.000000 --61.666667 -34.833333 93.000000 2670.000000 --61.500000 -34.833333 84.000000 2670.000000 --61.333333 -34.833333 81.000000 2670.000000 --61.166667 -34.833333 77.000000 2670.000000 --61.000000 -34.833333 77.000000 2670.000000 --60.833333 -34.833333 74.000000 2670.000000 --60.666667 -34.833333 63.000000 2670.000000 --60.500000 -34.833333 55.000000 2670.000000 --60.333333 -34.833333 60.000000 2670.000000 --60.166667 -34.833333 54.000000 2670.000000 --60.000000 -34.833333 56.000000 2670.000000 --59.833333 -34.833333 49.000000 2670.000000 --59.666667 -34.833333 48.000000 2670.000000 --59.500000 -34.833333 41.000000 2670.000000 --59.333333 -34.833333 37.000000 2670.000000 --59.166667 -34.833333 40.000000 2670.000000 --59.000000 -34.833333 34.000000 2670.000000 --58.833333 -34.833333 25.000000 2670.000000 --58.666667 -34.833333 20.000000 2670.000000 --58.500000 -34.833333 15.000000 2670.000000 --58.333333 -34.833333 20.000000 2670.000000 --58.166667 -34.833333 22.000000 2670.000000 --58.000000 -34.833333 2.000000 2670.000000 --57.833333 -34.833333 -1.000000 1670.000000 --57.666667 -34.833333 -1.000000 1670.000000 --57.500000 -34.833333 -1.000000 1670.000000 --57.333333 -34.833333 -1.000000 1670.000000 --57.166667 -34.833333 -1.000000 1670.000000 --57.000000 -34.833333 -1.000000 1670.000000 --56.833333 -34.833333 -1.000000 1670.000000 --56.666667 -34.833333 -1.000000 1670.000000 --56.500000 -34.833333 -1.000000 1670.000000 --56.333333 -34.833333 38.000000 2670.000000 --56.166667 -34.833333 33.000000 2670.000000 --56.000000 -34.833333 15.000000 2670.000000 --55.833333 -34.833333 -2.000000 1670.000000 --55.666667 -34.833333 -3.000000 1670.000000 --55.500000 -34.833333 -1.000000 1670.000000 --55.333333 -34.833333 -1.000000 1670.000000 --55.166667 -34.833333 13.000000 2670.000000 --55.000000 -34.833333 28.000000 2670.000000 --54.833333 -34.833333 32.000000 2670.000000 --54.666667 -34.833333 4.000000 2670.000000 --54.500000 -34.833333 -18.000000 1670.000000 --54.333333 -34.833333 -23.000000 1670.000000 --54.166667 -34.833333 -22.000000 1670.000000 --54.000000 -34.833333 -31.000000 1670.000000 --53.833333 -34.833333 -42.000000 1670.000000 --53.666667 -34.833333 -61.000000 1670.000000 --53.500000 -34.833333 -35.000000 1670.000000 --53.333333 -34.833333 -49.000000 1670.000000 --53.166667 -34.833333 -49.000000 1670.000000 --53.000000 -34.833333 -49.000000 1670.000000 --52.833333 -34.833333 -63.000000 1670.000000 --52.666667 -34.833333 -82.000000 1670.000000 --52.500000 -34.833333 -112.000000 1670.000000 --52.333333 -34.833333 -108.000000 1670.000000 --52.166667 -34.833333 -204.000000 1670.000000 --52.000000 -34.833333 -881.000000 1670.000000 --51.833333 -34.833333 -1303.000000 1670.000000 --51.666667 -34.833333 -1717.000000 1670.000000 --51.500000 -34.833333 -1973.000000 1670.000000 --51.333333 -34.833333 -2251.000000 1670.000000 --51.166667 -34.833333 -2508.000000 1670.000000 --51.000000 -34.833333 -2756.000000 1670.000000 --50.833333 -34.833333 -2699.000000 1670.000000 --50.666667 -34.833333 -3199.000000 1670.000000 --50.500000 -34.833333 -3237.000000 1670.000000 --50.333333 -34.833333 -3515.000000 1670.000000 --50.166667 -34.833333 -3427.000000 1670.000000 --50.000000 -34.833333 -3581.000000 1670.000000 --49.833333 -34.833333 -3746.000000 1670.000000 --49.666667 -34.833333 -3773.000000 1670.000000 --49.500000 -34.833333 -3871.000000 1670.000000 --49.333333 -34.833333 -3957.000000 1670.000000 --49.166667 -34.833333 -4243.000000 1670.000000 --49.000000 -34.833333 -4190.000000 1670.000000 --48.833333 -34.833333 -4311.000000 1670.000000 --48.666667 -34.833333 -4430.000000 1670.000000 --48.500000 -34.833333 -4530.000000 1670.000000 --48.333333 -34.833333 -4537.000000 1670.000000 --48.166667 -34.833333 -4586.000000 1670.000000 --48.000000 -34.833333 -4641.000000 1670.000000 --47.833333 -34.833333 -4675.000000 1670.000000 --47.666667 -34.833333 -4696.000000 1670.000000 --47.500000 -34.833333 -4720.000000 1670.000000 --47.333333 -34.833333 -4750.000000 1670.000000 --47.166667 -34.833333 -4765.000000 1670.000000 --47.000000 -34.833333 -4782.000000 1670.000000 --46.833333 -34.833333 -4772.000000 1670.000000 --46.666667 -34.833333 -4762.000000 1670.000000 --46.500000 -34.833333 -4742.000000 1670.000000 --46.333333 -34.833333 -4714.000000 1670.000000 --46.166667 -34.833333 -4717.000000 1670.000000 --46.000000 -34.833333 -4743.000000 1670.000000 --45.833333 -34.833333 -4795.000000 1670.000000 --45.666667 -34.833333 -4816.000000 1670.000000 --45.500000 -34.833333 -4828.000000 1670.000000 --45.333333 -34.833333 -4836.000000 1670.000000 --45.166667 -34.833333 -4825.000000 1670.000000 --45.000000 -34.833333 -4825.000000 1670.000000 --44.833333 -34.833333 -4836.000000 1670.000000 --44.666667 -34.833333 -4847.000000 1670.000000 --44.500000 -34.833333 -4836.000000 1670.000000 --44.333333 -34.833333 -4843.000000 1670.000000 --44.166667 -34.833333 -4848.000000 1670.000000 --44.000000 -34.833333 -4852.000000 1670.000000 --43.833333 -34.833333 -4842.000000 1670.000000 --43.666667 -34.833333 -4830.000000 1670.000000 --43.500000 -34.833333 -4832.000000 1670.000000 --43.333333 -34.833333 -4804.000000 1670.000000 --43.166667 -34.833333 -4794.000000 1670.000000 --43.000000 -34.833333 -4802.000000 1670.000000 --42.833333 -34.833333 -4779.000000 1670.000000 --42.666667 -34.833333 -4778.000000 1670.000000 --42.500000 -34.833333 -4760.000000 1670.000000 --42.333333 -34.833333 -4760.000000 1670.000000 --42.166667 -34.833333 -4747.000000 1670.000000 --42.000000 -34.833333 -4733.000000 1670.000000 --41.833333 -34.833333 -4740.000000 1670.000000 --41.666667 -34.833333 -4730.000000 1670.000000 --41.500000 -34.833333 -4724.000000 1670.000000 --41.333333 -34.833333 -4708.000000 1670.000000 --41.166667 -34.833333 -4723.000000 1670.000000 --41.000000 -34.833333 -4733.000000 1670.000000 --40.833333 -34.833333 -4732.000000 1670.000000 --40.666667 -34.833333 -4716.000000 1670.000000 --40.500000 -34.833333 -4699.000000 1670.000000 --40.333333 -34.833333 -4763.000000 1670.000000 --40.166667 -34.833333 -4804.000000 1670.000000 --40.000000 -34.833333 -4945.000000 1670.000000 --65.000000 -35.000000 269.000000 2670.000000 --64.833333 -35.000000 261.000000 2670.000000 --64.666667 -35.000000 233.000000 2670.000000 --64.500000 -35.000000 196.000000 2670.000000 --64.333333 -35.000000 179.000000 2670.000000 --64.166667 -35.000000 157.000000 2670.000000 --64.000000 -35.000000 145.000000 2670.000000 --63.833333 -35.000000 137.000000 2670.000000 --63.666667 -35.000000 126.000000 2670.000000 --63.500000 -35.000000 125.000000 2670.000000 --63.333333 -35.000000 121.000000 2670.000000 --63.166667 -35.000000 116.000000 2670.000000 --63.000000 -35.000000 114.000000 2670.000000 --62.833333 -35.000000 114.000000 2670.000000 --62.666667 -35.000000 110.000000 2670.000000 --62.500000 -35.000000 105.000000 2670.000000 --62.333333 -35.000000 105.000000 2670.000000 --62.166667 -35.000000 128.000000 2670.000000 --62.000000 -35.000000 109.000000 2670.000000 --61.833333 -35.000000 99.000000 2670.000000 --61.666667 -35.000000 89.000000 2670.000000 --61.500000 -35.000000 82.000000 2670.000000 --61.333333 -35.000000 77.000000 2670.000000 --61.166667 -35.000000 73.000000 2670.000000 --61.000000 -35.000000 70.000000 2670.000000 --60.833333 -35.000000 63.000000 2670.000000 --60.666667 -35.000000 64.000000 2670.000000 --60.500000 -35.000000 55.000000 2670.000000 --60.333333 -35.000000 55.000000 2670.000000 --60.166667 -35.000000 48.000000 2670.000000 --60.000000 -35.000000 46.000000 2670.000000 --59.833333 -35.000000 50.000000 2670.000000 --59.666667 -35.000000 44.000000 2670.000000 --59.500000 -35.000000 44.000000 2670.000000 --59.333333 -35.000000 35.000000 2670.000000 --59.166667 -35.000000 34.000000 2670.000000 --59.000000 -35.000000 37.000000 2670.000000 --58.833333 -35.000000 31.000000 2670.000000 --58.666667 -35.000000 23.000000 2670.000000 --58.500000 -35.000000 25.000000 2670.000000 --58.333333 -35.000000 22.000000 2670.000000 --58.166667 -35.000000 24.000000 2670.000000 --58.000000 -35.000000 25.000000 2670.000000 --57.833333 -35.000000 6.000000 2670.000000 --57.666667 -35.000000 5.000000 2670.000000 --57.500000 -35.000000 -1.000000 1670.000000 --57.333333 -35.000000 -1.000000 1670.000000 --57.166667 -35.000000 -1.000000 1670.000000 --57.000000 -35.000000 -1.000000 1670.000000 --56.833333 -35.000000 -1.000000 1670.000000 --56.666667 -35.000000 -2.000000 1670.000000 --56.500000 -35.000000 -3.000000 1670.000000 --56.333333 -35.000000 -3.000000 1670.000000 --56.166667 -35.000000 -4.000000 1670.000000 --56.000000 -35.000000 -7.000000 1670.000000 --55.833333 -35.000000 -10.000000 1670.000000 --55.666667 -35.000000 -12.000000 1670.000000 --55.500000 -35.000000 -15.000000 1670.000000 --55.333333 -35.000000 -19.000000 1670.000000 --55.166667 -35.000000 -21.000000 1670.000000 --55.000000 -35.000000 -18.000000 1670.000000 --54.833333 -35.000000 -21.000000 1670.000000 --54.666667 -35.000000 -21.000000 1670.000000 --54.500000 -35.000000 -25.000000 1670.000000 --54.333333 -35.000000 -25.000000 1670.000000 --54.166667 -35.000000 -27.000000 1670.000000 --54.000000 -35.000000 -32.000000 1670.000000 --53.833333 -35.000000 -41.000000 1670.000000 --53.666667 -35.000000 -39.000000 1670.000000 --53.500000 -35.000000 -39.000000 1670.000000 --53.333333 -35.000000 -41.000000 1670.000000 --53.166667 -35.000000 -48.000000 1670.000000 --53.000000 -35.000000 -48.000000 1670.000000 --52.833333 -35.000000 -68.000000 1670.000000 --52.666667 -35.000000 -103.000000 1670.000000 --52.500000 -35.000000 -153.000000 1670.000000 --52.333333 -35.000000 -170.000000 1670.000000 --52.166667 -35.000000 -663.000000 1670.000000 --52.000000 -35.000000 -1148.000000 1670.000000 --51.833333 -35.000000 -1485.000000 1670.000000 --51.666667 -35.000000 -1815.000000 1670.000000 --51.500000 -35.000000 -2103.000000 1670.000000 --51.333333 -35.000000 -2311.000000 1670.000000 --51.166667 -35.000000 -2503.000000 1670.000000 --51.000000 -35.000000 -2714.000000 1670.000000 --50.833333 -35.000000 -2868.000000 1670.000000 --50.666667 -35.000000 -2942.000000 1670.000000 --50.500000 -35.000000 -3442.000000 1670.000000 --50.333333 -35.000000 -3519.000000 1670.000000 --50.166667 -35.000000 -3590.000000 1670.000000 --50.000000 -35.000000 -3661.000000 1670.000000 --49.833333 -35.000000 -3793.000000 1670.000000 --49.666667 -35.000000 -3858.000000 1670.000000 --49.500000 -35.000000 -4042.000000 1670.000000 --49.333333 -35.000000 -4192.000000 1670.000000 --49.166667 -35.000000 -4296.000000 1670.000000 --49.000000 -35.000000 -4316.000000 1670.000000 --48.833333 -35.000000 -4414.000000 1670.000000 --48.666667 -35.000000 -4530.000000 1670.000000 --48.500000 -35.000000 -4574.000000 1670.000000 --48.333333 -35.000000 -4604.000000 1670.000000 --48.166667 -35.000000 -4637.000000 1670.000000 --48.000000 -35.000000 -4697.000000 1670.000000 --47.833333 -35.000000 -4714.000000 1670.000000 --47.666667 -35.000000 -4725.000000 1670.000000 --47.500000 -35.000000 -4765.000000 1670.000000 --47.333333 -35.000000 -4787.000000 1670.000000 --47.166667 -35.000000 -4798.000000 1670.000000 --47.000000 -35.000000 -4815.000000 1670.000000 --46.833333 -35.000000 -4819.000000 1670.000000 --46.666667 -35.000000 -4804.000000 1670.000000 --46.500000 -35.000000 -4800.000000 1670.000000 --46.333333 -35.000000 -4786.000000 1670.000000 --46.166667 -35.000000 -4752.000000 1670.000000 --46.000000 -35.000000 -4755.000000 1670.000000 --45.833333 -35.000000 -4783.000000 1670.000000 --45.666667 -35.000000 -4822.000000 1670.000000 --45.500000 -35.000000 -4839.000000 1670.000000 --45.333333 -35.000000 -4842.000000 1670.000000 --45.166667 -35.000000 -4848.000000 1670.000000 --45.000000 -35.000000 -4854.000000 1670.000000 --44.833333 -35.000000 -4851.000000 1670.000000 --44.666667 -35.000000 -4854.000000 1670.000000 --44.500000 -35.000000 -4850.000000 1670.000000 --44.333333 -35.000000 -4859.000000 1670.000000 --44.166667 -35.000000 -4867.000000 1670.000000 --44.000000 -35.000000 -4867.000000 1670.000000 --43.833333 -35.000000 -4865.000000 1670.000000 --43.666667 -35.000000 -4861.000000 1670.000000 --43.500000 -35.000000 -4845.000000 1670.000000 --43.333333 -35.000000 -4839.000000 1670.000000 --43.166667 -35.000000 -4831.000000 1670.000000 --43.000000 -35.000000 -4819.000000 1670.000000 --42.833333 -35.000000 -4814.000000 1670.000000 --42.666667 -35.000000 -4804.000000 1670.000000 --42.500000 -35.000000 -4795.000000 1670.000000 --42.333333 -35.000000 -4784.000000 1670.000000 --42.166667 -35.000000 -4775.000000 1670.000000 --42.000000 -35.000000 -4777.000000 1670.000000 --41.833333 -35.000000 -4770.000000 1670.000000 --41.666667 -35.000000 -4772.000000 1670.000000 --41.500000 -35.000000 -4767.000000 1670.000000 --41.333333 -35.000000 -4760.000000 1670.000000 --41.166667 -35.000000 -4761.000000 1670.000000 --41.000000 -35.000000 -4771.000000 1670.000000 --40.833333 -35.000000 -4755.000000 1670.000000 --40.666667 -35.000000 -4748.000000 1670.000000 --40.500000 -35.000000 -4574.000000 1670.000000 --40.333333 -35.000000 -4731.000000 1670.000000 --40.166667 -35.000000 -4809.000000 1670.000000 --40.000000 -35.000000 -4859.000000 1670.000000 diff --git a/dep/tesseroids/cookbook/dem_brasil/sample-dem-ggt.png b/dep/tesseroids/cookbook/dem_brasil/sample-dem-ggt.png deleted file mode 100755 index 484cc81..0000000 Binary files a/dep/tesseroids/cookbook/dem_brasil/sample-dem-ggt.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/dem_brasil/sample-dem-tess.txt b/dep/tesseroids/cookbook/dem_brasil/sample-dem-tess.txt deleted file mode 100755 index f9f8e7b..0000000 --- a/dep/tesseroids/cookbook/dem_brasil/sample-dem-tess.txt +++ /dev/null @@ -1,22806 +0,0 @@ -# Tesseroid model generated by tessmodgen 1.1dev: -# local time: Wed May 9 19:08:12 2012 -# grid spacing: 0.166667 deg lon / 0.166667 deg lat -# reference level (depth): 0 -# density: read from input --65.0833335 -64.9166665 -10.0833335 -9.9166665 157 0 2670 --64.9166665 -64.7499995 -10.0833335 -9.9166665 168 0 2670 --64.7500005 -64.5833335 -10.0833335 -9.9166665 177 0 2670 --64.5833335 -64.4166665 -10.0833335 -9.9166665 197 0 2670 --64.4166665 -64.2499995 -10.0833335 -9.9166665 144 0 2670 --64.2500005 -64.0833335 -10.0833335 -9.9166665 178 0 2670 --64.0833335 -63.9166665 -10.0833335 -9.9166665 166 0 2670 --63.9166665 -63.7499995 -10.0833335 -9.9166665 164 0 2670 --63.7500005 -63.5833335 -10.0833335 -9.9166665 189 0 2670 --63.5833335 -63.4166665 -10.0833335 -9.9166665 210 0 2670 --63.4166665 -63.2499995 -10.0833335 -9.9166665 187 0 2670 --63.2500005 -63.0833335 -10.0833335 -9.9166665 141 0 2670 --63.0833335 -62.9166665 -10.0833335 -9.9166665 156 0 2670 --62.9166665 -62.7499995 -10.0833335 -9.9166665 158 0 2670 --62.7500005 -62.5833335 -10.0833335 -9.9166665 225 0 2670 --62.5833335 -62.4166665 -10.0833335 -9.9166665 176 0 2670 --62.4166665 -62.2499995 -10.0833335 -9.9166665 196 0 2670 --62.2500005 -62.0833335 -10.0833335 -9.9166665 183 0 2670 --62.0833335 -61.9166665 -10.0833335 -9.9166665 149 0 2670 --61.9166665 -61.7499995 -10.0833335 -9.9166665 191 0 2670 --61.7500005 -61.5833335 -10.0833335 -9.9166665 158 0 2670 --61.5833335 -61.4166665 -10.0833335 -9.9166665 187 0 2670 --61.4166665 -61.2499995 -10.0833335 -9.9166665 189 0 2670 --61.2500005 -61.0833335 -10.0833335 -9.9166665 191 0 2670 --61.0833335 -60.9166665 -10.0833335 -9.9166665 169 0 2670 --60.9166665 -60.7499995 -10.0833335 -9.9166665 143 0 2670 --60.7500005 -60.5833335 -10.0833335 -9.9166665 157 0 2670 --60.5833335 -60.4166665 -10.0833335 -9.9166665 146 0 2670 --60.4166665 -60.2499995 -10.0833335 -9.9166665 188 0 2670 --60.2500005 -60.0833335 -10.0833335 -9.9166665 178 0 2670 --60.0833335 -59.9166665 -10.0833335 -9.9166665 198 0 2670 --59.9166665 -59.7499995 -10.0833335 -9.9166665 233 0 2670 --59.7500005 -59.5833335 -10.0833335 -9.9166665 211 0 2670 --59.5833335 -59.4166665 -10.0833335 -9.9166665 189 0 2670 --59.4166665 -59.2499995 -10.0833335 -9.9166665 145 0 2670 --59.2500005 -59.0833335 -10.0833335 -9.9166665 138 0 2670 --59.0833335 -58.9166665 -10.0833335 -9.9166665 142 0 2670 --58.9166665 -58.7499995 -10.0833335 -9.9166665 172 0 2670 --58.7500005 -58.5833335 -10.0833335 -9.9166665 215 0 2670 --58.5833335 -58.4166665 -10.0833335 -9.9166665 287 0 2670 --58.4166665 -58.2499995 -10.0833335 -9.9166665 254 0 2670 --58.2500005 -58.0833335 -10.0833335 -9.9166665 234 0 2670 --58.0833335 -57.9166665 -10.0833335 -9.9166665 277 0 2670 --57.9166665 -57.7499995 -10.0833335 -9.9166665 273 0 2670 --57.7500005 -57.5833335 -10.0833335 -9.9166665 245 0 2670 --57.5833335 -57.4166665 -10.0833335 -9.9166665 270 0 2670 --57.4166665 -57.2499995 -10.0833335 -9.9166665 269 0 2670 --57.2500005 -57.0833335 -10.0833335 -9.9166665 253 0 2670 --57.0833335 -56.9166665 -10.0833335 -9.9166665 223 0 2670 --56.9166665 -56.7499995 -10.0833335 -9.9166665 248 0 2670 --56.7500005 -56.5833335 -10.0833335 -9.9166665 253 0 2670 --56.5833335 -56.4166665 -10.0833335 -9.9166665 271 0 2670 --56.4166665 -56.2499995 -10.0833335 -9.9166665 277 0 2670 --56.2500005 -56.0833335 -10.0833335 -9.9166665 301 0 2670 --56.0833335 -55.9166665 -10.0833335 -9.9166665 282 0 2670 --55.9166665 -55.7499995 -10.0833335 -9.9166665 285 0 2670 --55.7500005 -55.5833335 -10.0833335 -9.9166665 275 0 2670 --55.5833335 -55.4166665 -10.0833335 -9.9166665 263 0 2670 --55.4166665 -55.2499995 -10.0833335 -9.9166665 277 0 2670 --55.2500005 -55.0833335 -10.0833335 -9.9166665 269 0 2670 --55.0833335 -54.9166665 -10.0833335 -9.9166665 261 0 2670 --54.9166665 -54.7499995 -10.0833335 -9.9166665 311 0 2670 --54.7500005 -54.5833335 -10.0833335 -9.9166665 302 0 2670 --54.5833335 -54.4166665 -10.0833335 -9.9166665 312 0 2670 --54.4166665 -54.2499995 -10.0833335 -9.9166665 407 0 2670 --54.2500005 -54.0833335 -10.0833335 -9.9166665 353 0 2670 --54.0833335 -53.9166665 -10.0833335 -9.9166665 337 0 2670 --53.9166665 -53.7499995 -10.0833335 -9.9166665 364 0 2670 --53.7500005 -53.5833335 -10.0833335 -9.9166665 305 0 2670 --53.5833335 -53.4166665 -10.0833335 -9.9166665 341 0 2670 --53.4166665 -53.2499995 -10.0833335 -9.9166665 302 0 2670 --53.2500005 -53.0833335 -10.0833335 -9.9166665 327 0 2670 --53.0833335 -52.9166665 -10.0833335 -9.9166665 326 0 2670 --52.9166665 -52.7499995 -10.0833335 -9.9166665 301 0 2670 --52.7500005 -52.5833335 -10.0833335 -9.9166665 325 0 2670 --52.5833335 -52.4166665 -10.0833335 -9.9166665 288 0 2670 --52.4166665 -52.2499995 -10.0833335 -9.9166665 271 0 2670 --52.2500005 -52.0833335 -10.0833335 -9.9166665 285 0 2670 --52.0833335 -51.9166665 -10.0833335 -9.9166665 295 0 2670 --51.9166665 -51.7499995 -10.0833335 -9.9166665 308 0 2670 --51.7500005 -51.5833335 -10.0833335 -9.9166665 380 0 2670 --51.5833335 -51.4166665 -10.0833335 -9.9166665 375 0 2670 --51.4166665 -51.2499995 -10.0833335 -9.9166665 352 0 2670 --51.2500005 -51.0833335 -10.0833335 -9.9166665 261 0 2670 --51.0833335 -50.9166665 -10.0833335 -9.9166665 223 0 2670 --50.9166665 -50.7499995 -10.0833335 -9.9166665 198 0 2670 --50.7500005 -50.5833335 -10.0833335 -9.9166665 197 0 2670 --50.5833335 -50.4166665 -10.0833335 -9.9166665 185 0 2670 --50.4166665 -50.2499995 -10.0833335 -9.9166665 175 0 2670 --50.2500005 -50.0833335 -10.0833335 -9.9166665 177 0 2670 --50.0833335 -49.9166665 -10.0833335 -9.9166665 171 0 2670 --49.9166665 -49.7499995 -10.0833335 -9.9166665 186 0 2670 --49.7500005 -49.5833335 -10.0833335 -9.9166665 179 0 2670 --49.5833335 -49.4166665 -10.0833335 -9.9166665 195 0 2670 --49.4166665 -49.2499995 -10.0833335 -9.9166665 196 0 2670 --49.2500005 -49.0833335 -10.0833335 -9.9166665 261 0 2670 --49.0833335 -48.9166665 -10.0833335 -9.9166665 276 0 2670 --48.9166665 -48.7499995 -10.0833335 -9.9166665 339 0 2670 --48.7500005 -48.5833335 -10.0833335 -9.9166665 295 0 2670 --48.5833335 -48.4166665 -10.0833335 -9.9166665 238 0 2670 --48.4166665 -48.2499995 -10.0833335 -9.9166665 207 0 2670 --48.2500005 -48.0833335 -10.0833335 -9.9166665 569 0 2670 --48.0833335 -47.9166665 -10.0833335 -9.9166665 318 0 2670 --47.9166665 -47.7499995 -10.0833335 -9.9166665 243 0 2670 --47.7500005 -47.5833335 -10.0833335 -9.9166665 312 0 2670 --47.5833335 -47.4166665 -10.0833335 -9.9166665 248 0 2670 --47.4166665 -47.2499995 -10.0833335 -9.9166665 287 0 2670 --47.2500005 -47.0833335 -10.0833335 -9.9166665 280 0 2670 --47.0833335 -46.9166665 -10.0833335 -9.9166665 280 0 2670 --46.9166665 -46.7499995 -10.0833335 -9.9166665 333 0 2670 --46.7500005 -46.5833335 -10.0833335 -9.9166665 471 0 2670 --46.5833335 -46.4166665 -10.0833335 -9.9166665 620 0 2670 --46.4166665 -46.2499995 -10.0833335 -9.9166665 444 0 2670 --46.2500005 -46.0833335 -10.0833335 -9.9166665 462 0 2670 --46.0833335 -45.9166665 -10.0833335 -9.9166665 521 0 2670 --45.9166665 -45.7499995 -10.0833335 -9.9166665 445 0 2670 --45.7500005 -45.5833335 -10.0833335 -9.9166665 454 0 2670 --45.5833335 -45.4166665 -10.0833335 -9.9166665 481 0 2670 --45.4166665 -45.2499995 -10.0833335 -9.9166665 496 0 2670 --45.2500005 -45.0833335 -10.0833335 -9.9166665 487 0 2670 --45.0833335 -44.9166665 -10.0833335 -9.9166665 430 0 2670 --44.9166665 -44.7499995 -10.0833335 -9.9166665 476 0 2670 --44.7500005 -44.5833335 -10.0833335 -9.9166665 364 0 2670 --44.5833335 -44.4166665 -10.0833335 -9.9166665 370 0 2670 --44.4166665 -44.2499995 -10.0833335 -9.9166665 359 0 2670 --44.2500005 -44.0833335 -10.0833335 -9.9166665 374 0 2670 --44.0833335 -43.9166665 -10.0833335 -9.9166665 389 0 2670 --43.9166665 -43.7499995 -10.0833335 -9.9166665 462 0 2670 --43.7500005 -43.5833335 -10.0833335 -9.9166665 547 0 2670 --43.5833335 -43.4166665 -10.0833335 -9.9166665 470 0 2670 --43.4166665 -43.2499995 -10.0833335 -9.9166665 480 0 2670 --43.2500005 -43.0833335 -10.0833335 -9.9166665 438 0 2670 --43.0833335 -42.9166665 -10.0833335 -9.9166665 421 0 2670 --42.9166665 -42.7499995 -10.0833335 -9.9166665 412 0 2670 --42.7500005 -42.5833335 -10.0833335 -9.9166665 408 0 2670 --42.5833335 -42.4166665 -10.0833335 -9.9166665 402 0 2670 --42.4166665 -42.2499995 -10.0833335 -9.9166665 395 0 2670 --42.2500005 -42.0833335 -10.0833335 -9.9166665 403 0 2670 --42.0833335 -41.9166665 -10.0833335 -9.9166665 621 0 2670 --41.9166665 -41.7499995 -10.0833335 -9.9166665 829 0 2670 --41.7500005 -41.5833335 -10.0833335 -9.9166665 611 0 2670 --41.5833335 -41.4166665 -10.0833335 -9.9166665 455 0 2670 --41.4166665 -41.2499995 -10.0833335 -9.9166665 748 0 2670 --41.2500005 -41.0833335 -10.0833335 -9.9166665 822 0 2670 --41.0833335 -40.9166665 -10.0833335 -9.9166665 754 0 2670 --40.9166665 -40.7499995 -10.0833335 -9.9166665 604 0 2670 --40.7500005 -40.5833335 -10.0833335 -9.9166665 527 0 2670 --40.5833335 -40.4166665 -10.0833335 -9.9166665 712 0 2670 --40.4166665 -40.2499995 -10.0833335 -9.9166665 578 0 2670 --40.2500005 -40.0833335 -10.0833335 -9.9166665 486 0 2670 --40.0833335 -39.9166665 -10.0833335 -9.9166665 461 0 2670 --65.0833335 -64.9166665 -10.2500005 -10.0833335 179 0 2670 --64.9166665 -64.7499995 -10.2500005 -10.0833335 177 0 2670 --64.7500005 -64.5833335 -10.2500005 -10.0833335 192 0 2670 --64.5833335 -64.4166665 -10.2500005 -10.0833335 173 0 2670 --64.4166665 -64.2499995 -10.2500005 -10.0833335 162 0 2670 --64.2500005 -64.0833335 -10.2500005 -10.0833335 159 0 2670 --64.0833335 -63.9166665 -10.2500005 -10.0833335 162 0 2670 --63.9166665 -63.7499995 -10.2500005 -10.0833335 167 0 2670 --63.7500005 -63.5833335 -10.2500005 -10.0833335 182 0 2670 --63.5833335 -63.4166665 -10.2500005 -10.0833335 191 0 2670 --63.4166665 -63.2499995 -10.2500005 -10.0833335 167 0 2670 --63.2500005 -63.0833335 -10.2500005 -10.0833335 148 0 2670 --63.0833335 -62.9166665 -10.2500005 -10.0833335 181 0 2670 --62.9166665 -62.7499995 -10.2500005 -10.0833335 134 0 2670 --62.7500005 -62.5833335 -10.2500005 -10.0833335 244 0 2670 --62.5833335 -62.4166665 -10.2500005 -10.0833335 222 0 2670 --62.4166665 -62.2499995 -10.2500005 -10.0833335 201 0 2670 --62.2500005 -62.0833335 -10.2500005 -10.0833335 155 0 2670 --62.0833335 -61.9166665 -10.2500005 -10.0833335 142 0 2670 --61.9166665 -61.7499995 -10.2500005 -10.0833335 170 0 2670 --61.7500005 -61.5833335 -10.2500005 -10.0833335 207 0 2670 --61.5833335 -61.4166665 -10.2500005 -10.0833335 325 0 2670 --61.4166665 -61.2499995 -10.2500005 -10.0833335 254 0 2670 --61.2500005 -61.0833335 -10.2500005 -10.0833335 233 0 2670 --61.0833335 -60.9166665 -10.2500005 -10.0833335 182 0 2670 --60.9166665 -60.7499995 -10.2500005 -10.0833335 153 0 2670 --60.7500005 -60.5833335 -10.2500005 -10.0833335 130 0 2670 --60.5833335 -60.4166665 -10.2500005 -10.0833335 158 0 2670 --60.4166665 -60.2499995 -10.2500005 -10.0833335 172 0 2670 --60.2500005 -60.0833335 -10.2500005 -10.0833335 164 0 2670 --60.0833335 -59.9166665 -10.2500005 -10.0833335 243 0 2670 --59.9166665 -59.7499995 -10.2500005 -10.0833335 204 0 2670 --59.7500005 -59.5833335 -10.2500005 -10.0833335 160 0 2670 --59.5833335 -59.4166665 -10.2500005 -10.0833335 241 0 2670 --59.4166665 -59.2499995 -10.2500005 -10.0833335 244 0 2670 --59.2500005 -59.0833335 -10.2500005 -10.0833335 174 0 2670 --59.0833335 -58.9166665 -10.2500005 -10.0833335 175 0 2670 --58.9166665 -58.7499995 -10.2500005 -10.0833335 179 0 2670 --58.7500005 -58.5833335 -10.2500005 -10.0833335 249 0 2670 --58.5833335 -58.4166665 -10.2500005 -10.0833335 235 0 2670 --58.4166665 -58.2499995 -10.2500005 -10.0833335 205 0 2670 --58.2500005 -58.0833335 -10.2500005 -10.0833335 229 0 2670 --58.0833335 -57.9166665 -10.2500005 -10.0833335 249 0 2670 --57.9166665 -57.7499995 -10.2500005 -10.0833335 299 0 2670 --57.7500005 -57.5833335 -10.2500005 -10.0833335 269 0 2670 --57.5833335 -57.4166665 -10.2500005 -10.0833335 288 0 2670 --57.4166665 -57.2499995 -10.2500005 -10.0833335 308 0 2670 --57.2500005 -57.0833335 -10.2500005 -10.0833335 295 0 2670 --57.0833335 -56.9166665 -10.2500005 -10.0833335 265 0 2670 --56.9166665 -56.7499995 -10.2500005 -10.0833335 287 0 2670 --56.7500005 -56.5833335 -10.2500005 -10.0833335 291 0 2670 --56.5833335 -56.4166665 -10.2500005 -10.0833335 271 0 2670 --56.4166665 -56.2499995 -10.2500005 -10.0833335 289 0 2670 --56.2500005 -56.0833335 -10.2500005 -10.0833335 312 0 2670 --56.0833335 -55.9166665 -10.2500005 -10.0833335 279 0 2670 --55.9166665 -55.7499995 -10.2500005 -10.0833335 285 0 2670 --55.7500005 -55.5833335 -10.2500005 -10.0833335 283 0 2670 --55.5833335 -55.4166665 -10.2500005 -10.0833335 287 0 2670 --55.4166665 -55.2499995 -10.2500005 -10.0833335 251 0 2670 --55.2500005 -55.0833335 -10.2500005 -10.0833335 249 0 2670 --55.0833335 -54.9166665 -10.2500005 -10.0833335 267 0 2670 --54.9166665 -54.7499995 -10.2500005 -10.0833335 269 0 2670 --54.7500005 -54.5833335 -10.2500005 -10.0833335 356 0 2670 --54.5833335 -54.4166665 -10.2500005 -10.0833335 374 0 2670 --54.4166665 -54.2499995 -10.2500005 -10.0833335 466 0 2670 --54.2500005 -54.0833335 -10.2500005 -10.0833335 375 0 2670 --54.0833335 -53.9166665 -10.2500005 -10.0833335 386 0 2670 --53.9166665 -53.7499995 -10.2500005 -10.0833335 366 0 2670 --53.7500005 -53.5833335 -10.2500005 -10.0833335 356 0 2670 --53.5833335 -53.4166665 -10.2500005 -10.0833335 314 0 2670 --53.4166665 -53.2499995 -10.2500005 -10.0833335 337 0 2670 --53.2500005 -53.0833335 -10.2500005 -10.0833335 293 0 2670 --53.0833335 -52.9166665 -10.2500005 -10.0833335 267 0 2670 --52.9166665 -52.7499995 -10.2500005 -10.0833335 325 0 2670 --52.7500005 -52.5833335 -10.2500005 -10.0833335 306 0 2670 --52.5833335 -52.4166665 -10.2500005 -10.0833335 322 0 2670 --52.4166665 -52.2499995 -10.2500005 -10.0833335 307 0 2670 --52.2500005 -52.0833335 -10.2500005 -10.0833335 305 0 2670 --52.0833335 -51.9166665 -10.2500005 -10.0833335 271 0 2670 --51.9166665 -51.7499995 -10.2500005 -10.0833335 300 0 2670 --51.7500005 -51.5833335 -10.2500005 -10.0833335 295 0 2670 --51.5833335 -51.4166665 -10.2500005 -10.0833335 310 0 2670 --51.4166665 -51.2499995 -10.2500005 -10.0833335 364 0 2670 --51.2500005 -51.0833335 -10.2500005 -10.0833335 245 0 2670 --51.0833335 -50.9166665 -10.2500005 -10.0833335 203 0 2670 --50.9166665 -50.7499995 -10.2500005 -10.0833335 246 0 2670 --50.7500005 -50.5833335 -10.2500005 -10.0833335 220 0 2670 --50.5833335 -50.4166665 -10.2500005 -10.0833335 178 0 2670 --50.4166665 -50.2499995 -10.2500005 -10.0833335 174 0 2670 --50.2500005 -50.0833335 -10.2500005 -10.0833335 173 0 2670 --50.0833335 -49.9166665 -10.2500005 -10.0833335 182 0 2670 --49.9166665 -49.7499995 -10.2500005 -10.0833335 183 0 2670 --49.7500005 -49.5833335 -10.2500005 -10.0833335 192 0 2670 --49.5833335 -49.4166665 -10.2500005 -10.0833335 205 0 2670 --49.4166665 -49.2499995 -10.2500005 -10.0833335 205 0 2670 --49.2500005 -49.0833335 -10.2500005 -10.0833335 267 0 2670 --49.0833335 -48.9166665 -10.2500005 -10.0833335 260 0 2670 --48.9166665 -48.7499995 -10.2500005 -10.0833335 471 0 2670 --48.7500005 -48.5833335 -10.2500005 -10.0833335 386 0 2670 --48.5833335 -48.4166665 -10.2500005 -10.0833335 271 0 2670 --48.4166665 -48.2499995 -10.2500005 -10.0833335 259 0 2670 --48.2500005 -48.0833335 -10.2500005 -10.0833335 668 0 2670 --48.0833335 -47.9166665 -10.2500005 -10.0833335 393 0 2670 --47.9166665 -47.7499995 -10.2500005 -10.0833335 300 0 2670 --47.7500005 -47.5833335 -10.2500005 -10.0833335 356 0 2670 --47.5833335 -47.4166665 -10.2500005 -10.0833335 309 0 2670 --47.4166665 -47.2499995 -10.2500005 -10.0833335 257 0 2670 --47.2500005 -47.0833335 -10.2500005 -10.0833335 361 0 2670 --47.0833335 -46.9166665 -10.2500005 -10.0833335 322 0 2670 --46.9166665 -46.7499995 -10.2500005 -10.0833335 335 0 2670 --46.7500005 -46.5833335 -10.2500005 -10.0833335 379 0 2670 --46.5833335 -46.4166665 -10.2500005 -10.0833335 494 0 2670 --46.4166665 -46.2499995 -10.2500005 -10.0833335 610 0 2670 --46.2500005 -46.0833335 -10.2500005 -10.0833335 694 0 2670 --46.0833335 -45.9166665 -10.2500005 -10.0833335 755 0 2670 --45.9166665 -45.7499995 -10.2500005 -10.0833335 441 0 2670 --45.7500005 -45.5833335 -10.2500005 -10.0833335 805 0 2670 --45.5833335 -45.4166665 -10.2500005 -10.0833335 489 0 2670 --45.4166665 -45.2499995 -10.2500005 -10.0833335 601 0 2670 --45.2500005 -45.0833335 -10.2500005 -10.0833335 505 0 2670 --45.0833335 -44.9166665 -10.2500005 -10.0833335 465 0 2670 --44.9166665 -44.7499995 -10.2500005 -10.0833335 397 0 2670 --44.7500005 -44.5833335 -10.2500005 -10.0833335 370 0 2670 --44.5833335 -44.4166665 -10.2500005 -10.0833335 379 0 2670 --44.4166665 -44.2499995 -10.2500005 -10.0833335 634 0 2670 --44.2500005 -44.0833335 -10.2500005 -10.0833335 407 0 2670 --44.0833335 -43.9166665 -10.2500005 -10.0833335 496 0 2670 --43.9166665 -43.7499995 -10.2500005 -10.0833335 494 0 2670 --43.7500005 -43.5833335 -10.2500005 -10.0833335 533 0 2670 --43.5833335 -43.4166665 -10.2500005 -10.0833335 486 0 2670 --43.4166665 -43.2499995 -10.2500005 -10.0833335 528 0 2670 --43.2500005 -43.0833335 -10.2500005 -10.0833335 468 0 2670 --43.0833335 -42.9166665 -10.2500005 -10.0833335 462 0 2670 --42.9166665 -42.7499995 -10.2500005 -10.0833335 433 0 2670 --42.7500005 -42.5833335 -10.2500005 -10.0833335 405 0 2670 --42.5833335 -42.4166665 -10.2500005 -10.0833335 394 0 2670 --42.4166665 -42.2499995 -10.2500005 -10.0833335 446 0 2670 --42.2500005 -42.0833335 -10.2500005 -10.0833335 396 0 2670 --42.0833335 -41.9166665 -10.2500005 -10.0833335 401 0 2670 --41.9166665 -41.7499995 -10.2500005 -10.0833335 448 0 2670 --41.7500005 -41.5833335 -10.2500005 -10.0833335 432 0 2670 --41.5833335 -41.4166665 -10.2500005 -10.0833335 683 0 2670 --41.4166665 -41.2499995 -10.2500005 -10.0833335 873 0 2670 --41.2500005 -41.0833335 -10.2500005 -10.0833335 1153 0 2670 --41.0833335 -40.9166665 -10.2500005 -10.0833335 696 0 2670 --40.9166665 -40.7499995 -10.2500005 -10.0833335 528 0 2670 --40.7500005 -40.5833335 -10.2500005 -10.0833335 554 0 2670 --40.5833335 -40.4166665 -10.2500005 -10.0833335 767 0 2670 --40.4166665 -40.2499995 -10.2500005 -10.0833335 804 0 2670 --40.2500005 -40.0833335 -10.2500005 -10.0833335 645 0 2670 --40.0833335 -39.9166665 -10.2500005 -10.0833335 485 0 2670 --65.0833335 -64.9166665 -10.4166665 -10.2499995 161 0 2670 --64.9166665 -64.7499995 -10.4166665 -10.2499995 173 0 2670 --64.7500005 -64.5833335 -10.4166665 -10.2499995 203 0 2670 --64.5833335 -64.4166665 -10.4166665 -10.2499995 154 0 2670 --64.4166665 -64.2499995 -10.4166665 -10.2499995 218 0 2670 --64.2500005 -64.0833335 -10.4166665 -10.2499995 169 0 2670 --64.0833335 -63.9166665 -10.4166665 -10.2499995 215 0 2670 --63.9166665 -63.7499995 -10.4166665 -10.2499995 188 0 2670 --63.7500005 -63.5833335 -10.4166665 -10.2499995 160 0 2670 --63.5833335 -63.4166665 -10.4166665 -10.2499995 253 0 2670 --63.4166665 -63.2499995 -10.4166665 -10.2499995 170 0 2670 --63.2500005 -63.0833335 -10.4166665 -10.2499995 150 0 2670 --63.0833335 -62.9166665 -10.4166665 -10.2499995 165 0 2670 --62.9166665 -62.7499995 -10.4166665 -10.2499995 177 0 2670 --62.7500005 -62.5833335 -10.4166665 -10.2499995 228 0 2670 --62.5833335 -62.4166665 -10.4166665 -10.2499995 169 0 2670 --62.4166665 -62.2499995 -10.4166665 -10.2499995 142 0 2670 --62.2500005 -62.0833335 -10.4166665 -10.2499995 155 0 2670 --62.0833335 -61.9166665 -10.4166665 -10.2499995 181 0 2670 --61.9166665 -61.7499995 -10.4166665 -10.2499995 136 0 2670 --61.7500005 -61.5833335 -10.4166665 -10.2499995 260 0 2670 --61.5833335 -61.4166665 -10.4166665 -10.2499995 225 0 2670 --61.4166665 -61.2499995 -10.4166665 -10.2499995 301 0 2670 --61.2500005 -61.0833335 -10.4166665 -10.2499995 206 0 2670 --61.0833335 -60.9166665 -10.4166665 -10.2499995 146 0 2670 --60.9166665 -60.7499995 -10.4166665 -10.2499995 173 0 2670 --60.7500005 -60.5833335 -10.4166665 -10.2499995 162 0 2670 --60.5833335 -60.4166665 -10.4166665 -10.2499995 166 0 2670 --60.4166665 -60.2499995 -10.4166665 -10.2499995 175 0 2670 --60.2500005 -60.0833335 -10.4166665 -10.2499995 198 0 2670 --60.0833335 -59.9166665 -10.4166665 -10.2499995 314 0 2670 --59.9166665 -59.7499995 -10.4166665 -10.2499995 228 0 2670 --59.7500005 -59.5833335 -10.4166665 -10.2499995 220 0 2670 --59.5833335 -59.4166665 -10.4166665 -10.2499995 264 0 2670 --59.4166665 -59.2499995 -10.4166665 -10.2499995 320 0 2670 --59.2500005 -59.0833335 -10.4166665 -10.2499995 430 0 2670 --59.0833335 -58.9166665 -10.4166665 -10.2499995 383 0 2670 --58.9166665 -58.7499995 -10.4166665 -10.2499995 190 0 2670 --58.7500005 -58.5833335 -10.4166665 -10.2499995 226 0 2670 --58.5833335 -58.4166665 -10.4166665 -10.2499995 238 0 2670 --58.4166665 -58.2499995 -10.4166665 -10.2499995 217 0 2670 --58.2500005 -58.0833335 -10.4166665 -10.2499995 275 0 2670 --58.0833335 -57.9166665 -10.4166665 -10.2499995 315 0 2670 --57.9166665 -57.7499995 -10.4166665 -10.2499995 360 0 2670 --57.7500005 -57.5833335 -10.4166665 -10.2499995 377 0 2670 --57.5833335 -57.4166665 -10.4166665 -10.2499995 437 0 2670 --57.4166665 -57.2499995 -10.4166665 -10.2499995 341 0 2670 --57.2500005 -57.0833335 -10.4166665 -10.2499995 451 0 2670 --57.0833335 -56.9166665 -10.4166665 -10.2499995 284 0 2670 --56.9166665 -56.7499995 -10.4166665 -10.2499995 301 0 2670 --56.7500005 -56.5833335 -10.4166665 -10.2499995 309 0 2670 --56.5833335 -56.4166665 -10.4166665 -10.2499995 300 0 2670 --56.4166665 -56.2499995 -10.4166665 -10.2499995 347 0 2670 --56.2500005 -56.0833335 -10.4166665 -10.2499995 297 0 2670 --56.0833335 -55.9166665 -10.4166665 -10.2499995 290 0 2670 --55.9166665 -55.7499995 -10.4166665 -10.2499995 280 0 2670 --55.7500005 -55.5833335 -10.4166665 -10.2499995 253 0 2670 --55.5833335 -55.4166665 -10.4166665 -10.2499995 272 0 2670 --55.4166665 -55.2499995 -10.4166665 -10.2499995 297 0 2670 --55.2500005 -55.0833335 -10.4166665 -10.2499995 267 0 2670 --55.0833335 -54.9166665 -10.4166665 -10.2499995 282 0 2670 --54.9166665 -54.7499995 -10.4166665 -10.2499995 263 0 2670 --54.7500005 -54.5833335 -10.4166665 -10.2499995 288 0 2670 --54.5833335 -54.4166665 -10.4166665 -10.2499995 280 0 2670 --54.4166665 -54.2499995 -10.4166665 -10.2499995 330 0 2670 --54.2500005 -54.0833335 -10.4166665 -10.2499995 457 0 2670 --54.0833335 -53.9166665 -10.4166665 -10.2499995 469 0 2670 --53.9166665 -53.7499995 -10.4166665 -10.2499995 342 0 2670 --53.7500005 -53.5833335 -10.4166665 -10.2499995 344 0 2670 --53.5833335 -53.4166665 -10.4166665 -10.2499995 322 0 2670 --53.4166665 -53.2499995 -10.4166665 -10.2499995 341 0 2670 --53.2500005 -53.0833335 -10.4166665 -10.2499995 312 0 2670 --53.0833335 -52.9166665 -10.4166665 -10.2499995 268 0 2670 --52.9166665 -52.7499995 -10.4166665 -10.2499995 292 0 2670 --52.7500005 -52.5833335 -10.4166665 -10.2499995 318 0 2670 --52.5833335 -52.4166665 -10.4166665 -10.2499995 306 0 2670 --52.4166665 -52.2499995 -10.4166665 -10.2499995 283 0 2670 --52.2500005 -52.0833335 -10.4166665 -10.2499995 259 0 2670 --52.0833335 -51.9166665 -10.4166665 -10.2499995 264 0 2670 --51.9166665 -51.7499995 -10.4166665 -10.2499995 269 0 2670 --51.7500005 -51.5833335 -10.4166665 -10.2499995 319 0 2670 --51.5833335 -51.4166665 -10.4166665 -10.2499995 297 0 2670 --51.4166665 -51.2499995 -10.4166665 -10.2499995 300 0 2670 --51.2500005 -51.0833335 -10.4166665 -10.2499995 235 0 2670 --51.0833335 -50.9166665 -10.4166665 -10.2499995 220 0 2670 --50.9166665 -50.7499995 -10.4166665 -10.2499995 233 0 2670 --50.7500005 -50.5833335 -10.4166665 -10.2499995 198 0 2670 --50.5833335 -50.4166665 -10.4166665 -10.2499995 180 0 2670 --50.4166665 -50.2499995 -10.4166665 -10.2499995 176 0 2670 --50.2500005 -50.0833335 -10.4166665 -10.2499995 174 0 2670 --50.0833335 -49.9166665 -10.4166665 -10.2499995 175 0 2670 --49.9166665 -49.7499995 -10.4166665 -10.2499995 179 0 2670 --49.7500005 -49.5833335 -10.4166665 -10.2499995 186 0 2670 --49.5833335 -49.4166665 -10.4166665 -10.2499995 201 0 2670 --49.4166665 -49.2499995 -10.4166665 -10.2499995 202 0 2670 --49.2500005 -49.0833335 -10.4166665 -10.2499995 293 0 2670 --49.0833335 -48.9166665 -10.4166665 -10.2499995 345 0 2670 --48.9166665 -48.7499995 -10.4166665 -10.2499995 357 0 2670 --48.7500005 -48.5833335 -10.4166665 -10.2499995 245 0 2670 --48.5833335 -48.4166665 -10.4166665 -10.2499995 239 0 2670 --48.4166665 -48.2499995 -10.4166665 -10.2499995 245 0 2670 --48.2500005 -48.0833335 -10.4166665 -10.2499995 563 0 2670 --48.0833335 -47.9166665 -10.4166665 -10.2499995 373 0 2670 --47.9166665 -47.7499995 -10.4166665 -10.2499995 353 0 2670 --47.7500005 -47.5833335 -10.4166665 -10.2499995 341 0 2670 --47.5833335 -47.4166665 -10.4166665 -10.2499995 329 0 2670 --47.4166665 -47.2499995 -10.4166665 -10.2499995 330 0 2670 --47.2500005 -47.0833335 -10.4166665 -10.2499995 387 0 2670 --47.0833335 -46.9166665 -10.4166665 -10.2499995 421 0 2670 --46.9166665 -46.7499995 -10.4166665 -10.2499995 369 0 2670 --46.7500005 -46.5833335 -10.4166665 -10.2499995 408 0 2670 --46.5833335 -46.4166665 -10.4166665 -10.2499995 446 0 2670 --46.4166665 -46.2499995 -10.4166665 -10.2499995 631 0 2670 --46.2500005 -46.0833335 -10.4166665 -10.2499995 745 0 2670 --46.0833335 -45.9166665 -10.4166665 -10.2499995 798 0 2670 --45.9166665 -45.7499995 -10.4166665 -10.2499995 785 0 2670 --45.7500005 -45.5833335 -10.4166665 -10.2499995 793 0 2670 --45.5833335 -45.4166665 -10.4166665 -10.2499995 806 0 2670 --45.4166665 -45.2499995 -10.4166665 -10.2499995 515 0 2670 --45.2500005 -45.0833335 -10.4166665 -10.2499995 523 0 2670 --45.0833335 -44.9166665 -10.4166665 -10.2499995 452 0 2670 --44.9166665 -44.7499995 -10.4166665 -10.2499995 403 0 2670 --44.7500005 -44.5833335 -10.4166665 -10.2499995 393 0 2670 --44.5833335 -44.4166665 -10.4166665 -10.2499995 427 0 2670 --44.4166665 -44.2499995 -10.4166665 -10.2499995 524 0 2670 --44.2500005 -44.0833335 -10.4166665 -10.2499995 515 0 2670 --44.0833335 -43.9166665 -10.4166665 -10.2499995 555 0 2670 --43.9166665 -43.7499995 -10.4166665 -10.2499995 605 0 2670 --43.7500005 -43.5833335 -10.4166665 -10.2499995 645 0 2670 --43.5833335 -43.4166665 -10.4166665 -10.2499995 510 0 2670 --43.4166665 -43.2499995 -10.4166665 -10.2499995 514 0 2670 --43.2500005 -43.0833335 -10.4166665 -10.2499995 529 0 2670 --43.0833335 -42.9166665 -10.4166665 -10.2499995 509 0 2670 --42.9166665 -42.7499995 -10.4166665 -10.2499995 462 0 2670 --42.7500005 -42.5833335 -10.4166665 -10.2499995 422 0 2670 --42.5833335 -42.4166665 -10.4166665 -10.2499995 435 0 2670 --42.4166665 -42.2499995 -10.4166665 -10.2499995 396 0 2670 --42.2500005 -42.0833335 -10.4166665 -10.2499995 403 0 2670 --42.0833335 -41.9166665 -10.4166665 -10.2499995 410 0 2670 --41.9166665 -41.7499995 -10.4166665 -10.2499995 411 0 2670 --41.7500005 -41.5833335 -10.4166665 -10.2499995 561 0 2670 --41.5833335 -41.4166665 -10.4166665 -10.2499995 1131 0 2670 --41.4166665 -41.2499995 -10.4166665 -10.2499995 1003 0 2670 --41.2500005 -41.0833335 -10.4166665 -10.2499995 910 0 2670 --41.0833335 -40.9166665 -10.4166665 -10.2499995 752 0 2670 --40.9166665 -40.7499995 -10.4166665 -10.2499995 526 0 2670 --40.7500005 -40.5833335 -10.4166665 -10.2499995 563 0 2670 --40.5833335 -40.4166665 -10.4166665 -10.2499995 791 0 2670 --40.4166665 -40.2499995 -10.4166665 -10.2499995 731 0 2670 --40.2500005 -40.0833335 -10.4166665 -10.2499995 593 0 2670 --40.0833335 -39.9166665 -10.4166665 -10.2499995 435 0 2670 --65.0833335 -64.9166665 -10.5833335 -10.4166665 157 0 2670 --64.9166665 -64.7499995 -10.5833335 -10.4166665 167 0 2670 --64.7500005 -64.5833335 -10.5833335 -10.4166665 191 0 2670 --64.5833335 -64.4166665 -10.5833335 -10.4166665 192 0 2670 --64.4166665 -64.2499995 -10.5833335 -10.4166665 230 0 2670 --64.2500005 -64.0833335 -10.5833335 -10.4166665 296 0 2670 --64.0833335 -63.9166665 -10.5833335 -10.4166665 161 0 2670 --63.9166665 -63.7499995 -10.5833335 -10.4166665 259 0 2670 --63.7500005 -63.5833335 -10.5833335 -10.4166665 189 0 2670 --63.5833335 -63.4166665 -10.5833335 -10.4166665 268 0 2670 --63.4166665 -63.2499995 -10.5833335 -10.4166665 178 0 2670 --63.2500005 -63.0833335 -10.5833335 -10.4166665 186 0 2670 --63.0833335 -62.9166665 -10.5833335 -10.4166665 319 0 2670 --62.9166665 -62.7499995 -10.5833335 -10.4166665 231 0 2670 --62.7500005 -62.5833335 -10.5833335 -10.4166665 208 0 2670 --62.5833335 -62.4166665 -10.5833335 -10.4166665 166 0 2670 --62.4166665 -62.2499995 -10.5833335 -10.4166665 201 0 2670 --62.2500005 -62.0833335 -10.5833335 -10.4166665 178 0 2670 --62.0833335 -61.9166665 -10.5833335 -10.4166665 203 0 2670 --61.9166665 -61.7499995 -10.5833335 -10.4166665 203 0 2670 --61.7500005 -61.5833335 -10.5833335 -10.4166665 214 0 2670 --61.5833335 -61.4166665 -10.5833335 -10.4166665 240 0 2670 --61.4166665 -61.2499995 -10.5833335 -10.4166665 251 0 2670 --61.2500005 -61.0833335 -10.5833335 -10.4166665 170 0 2670 --61.0833335 -60.9166665 -10.5833335 -10.4166665 195 0 2670 --60.9166665 -60.7499995 -10.5833335 -10.4166665 202 0 2670 --60.7500005 -60.5833335 -10.5833335 -10.4166665 178 0 2670 --60.5833335 -60.4166665 -10.5833335 -10.4166665 216 0 2670 --60.4166665 -60.2499995 -10.5833335 -10.4166665 347 0 2670 --60.2500005 -60.0833335 -10.5833335 -10.4166665 298 0 2670 --60.0833335 -59.9166665 -10.5833335 -10.4166665 257 0 2670 --59.9166665 -59.7499995 -10.5833335 -10.4166665 269 0 2670 --59.7500005 -59.5833335 -10.5833335 -10.4166665 282 0 2670 --59.5833335 -59.4166665 -10.5833335 -10.4166665 274 0 2670 --59.4166665 -59.2499995 -10.5833335 -10.4166665 300 0 2670 --59.2500005 -59.0833335 -10.5833335 -10.4166665 394 0 2670 --59.0833335 -58.9166665 -10.5833335 -10.4166665 433 0 2670 --58.9166665 -58.7499995 -10.5833335 -10.4166665 356 0 2670 --58.7500005 -58.5833335 -10.5833335 -10.4166665 238 0 2670 --58.5833335 -58.4166665 -10.5833335 -10.4166665 341 0 2670 --58.4166665 -58.2499995 -10.5833335 -10.4166665 244 0 2670 --58.2500005 -58.0833335 -10.5833335 -10.4166665 271 0 2670 --58.0833335 -57.9166665 -10.5833335 -10.4166665 350 0 2670 --57.9166665 -57.7499995 -10.5833335 -10.4166665 381 0 2670 --57.7500005 -57.5833335 -10.5833335 -10.4166665 394 0 2670 --57.5833335 -57.4166665 -10.5833335 -10.4166665 367 0 2670 --57.4166665 -57.2499995 -10.5833335 -10.4166665 313 0 2670 --57.2500005 -57.0833335 -10.5833335 -10.4166665 324 0 2670 --57.0833335 -56.9166665 -10.5833335 -10.4166665 323 0 2670 --56.9166665 -56.7499995 -10.5833335 -10.4166665 336 0 2670 --56.7500005 -56.5833335 -10.5833335 -10.4166665 319 0 2670 --56.5833335 -56.4166665 -10.5833335 -10.4166665 397 0 2670 --56.4166665 -56.2499995 -10.5833335 -10.4166665 338 0 2670 --56.2500005 -56.0833335 -10.5833335 -10.4166665 319 0 2670 --56.0833335 -55.9166665 -10.5833335 -10.4166665 265 0 2670 --55.9166665 -55.7499995 -10.5833335 -10.4166665 269 0 2670 --55.7500005 -55.5833335 -10.5833335 -10.4166665 264 0 2670 --55.5833335 -55.4166665 -10.5833335 -10.4166665 286 0 2670 --55.4166665 -55.2499995 -10.5833335 -10.4166665 264 0 2670 --55.2500005 -55.0833335 -10.5833335 -10.4166665 284 0 2670 --55.0833335 -54.9166665 -10.5833335 -10.4166665 350 0 2670 --54.9166665 -54.7499995 -10.5833335 -10.4166665 416 0 2670 --54.7500005 -54.5833335 -10.5833335 -10.4166665 283 0 2670 --54.5833335 -54.4166665 -10.5833335 -10.4166665 312 0 2670 --54.4166665 -54.2499995 -10.5833335 -10.4166665 401 0 2670 --54.2500005 -54.0833335 -10.5833335 -10.4166665 439 0 2670 --54.0833335 -53.9166665 -10.5833335 -10.4166665 444 0 2670 --53.9166665 -53.7499995 -10.5833335 -10.4166665 378 0 2670 --53.7500005 -53.5833335 -10.5833335 -10.4166665 349 0 2670 --53.5833335 -53.4166665 -10.5833335 -10.4166665 315 0 2670 --53.4166665 -53.2499995 -10.5833335 -10.4166665 294 0 2670 --53.2500005 -53.0833335 -10.5833335 -10.4166665 314 0 2670 --53.0833335 -52.9166665 -10.5833335 -10.4166665 308 0 2670 --52.9166665 -52.7499995 -10.5833335 -10.4166665 302 0 2670 --52.7500005 -52.5833335 -10.5833335 -10.4166665 301 0 2670 --52.5833335 -52.4166665 -10.5833335 -10.4166665 309 0 2670 --52.4166665 -52.2499995 -10.5833335 -10.4166665 284 0 2670 --52.2500005 -52.0833335 -10.5833335 -10.4166665 266 0 2670 --52.0833335 -51.9166665 -10.5833335 -10.4166665 293 0 2670 --51.9166665 -51.7499995 -10.5833335 -10.4166665 280 0 2670 --51.7500005 -51.5833335 -10.5833335 -10.4166665 222 0 2670 --51.5833335 -51.4166665 -10.5833335 -10.4166665 318 0 2670 --51.4166665 -51.2499995 -10.5833335 -10.4166665 404 0 2670 --51.2500005 -51.0833335 -10.5833335 -10.4166665 409 0 2670 --51.0833335 -50.9166665 -10.5833335 -10.4166665 225 0 2670 --50.9166665 -50.7499995 -10.5833335 -10.4166665 279 0 2670 --50.7500005 -50.5833335 -10.5833335 -10.4166665 227 0 2670 --50.5833335 -50.4166665 -10.5833335 -10.4166665 176 0 2670 --50.4166665 -50.2499995 -10.5833335 -10.4166665 176 0 2670 --50.2500005 -50.0833335 -10.5833335 -10.4166665 176 0 2670 --50.0833335 -49.9166665 -10.5833335 -10.4166665 177 0 2670 --49.9166665 -49.7499995 -10.5833335 -10.4166665 178 0 2670 --49.7500005 -49.5833335 -10.5833335 -10.4166665 183 0 2670 --49.5833335 -49.4166665 -10.5833335 -10.4166665 193 0 2670 --49.4166665 -49.2499995 -10.5833335 -10.4166665 205 0 2670 --49.2500005 -49.0833335 -10.5833335 -10.4166665 265 0 2670 --49.0833335 -48.9166665 -10.5833335 -10.4166665 314 0 2670 --48.9166665 -48.7499995 -10.5833335 -10.4166665 268 0 2670 --48.7500005 -48.5833335 -10.5833335 -10.4166665 512 0 2670 --48.5833335 -48.4166665 -10.5833335 -10.4166665 337 0 2670 --48.4166665 -48.2499995 -10.5833335 -10.4166665 237 0 2670 --48.2500005 -48.0833335 -10.5833335 -10.4166665 367 0 2670 --48.0833335 -47.9166665 -10.5833335 -10.4166665 481 0 2670 --47.9166665 -47.7499995 -10.5833335 -10.4166665 288 0 2670 --47.7500005 -47.5833335 -10.5833335 -10.4166665 366 0 2670 --47.5833335 -47.4166665 -10.5833335 -10.4166665 342 0 2670 --47.4166665 -47.2499995 -10.5833335 -10.4166665 354 0 2670 --47.2500005 -47.0833335 -10.5833335 -10.4166665 322 0 2670 --47.0833335 -46.9166665 -10.5833335 -10.4166665 482 0 2670 --46.9166665 -46.7499995 -10.5833335 -10.4166665 411 0 2670 --46.7500005 -46.5833335 -10.5833335 -10.4166665 427 0 2670 --46.5833335 -46.4166665 -10.5833335 -10.4166665 495 0 2670 --46.4166665 -46.2499995 -10.5833335 -10.4166665 613 0 2670 --46.2500005 -46.0833335 -10.5833335 -10.4166665 748 0 2670 --46.0833335 -45.9166665 -10.5833335 -10.4166665 722 0 2670 --45.9166665 -45.7499995 -10.5833335 -10.4166665 775 0 2670 --45.7500005 -45.5833335 -10.5833335 -10.4166665 775 0 2670 --45.5833335 -45.4166665 -10.5833335 -10.4166665 798 0 2670 --45.4166665 -45.2499995 -10.5833335 -10.4166665 661 0 2670 --45.2500005 -45.0833335 -10.5833335 -10.4166665 470 0 2670 --45.0833335 -44.9166665 -10.5833335 -10.4166665 440 0 2670 --44.9166665 -44.7499995 -10.5833335 -10.4166665 406 0 2670 --44.7500005 -44.5833335 -10.5833335 -10.4166665 454 0 2670 --44.5833335 -44.4166665 -10.5833335 -10.4166665 478 0 2670 --44.4166665 -44.2499995 -10.5833335 -10.4166665 673 0 2670 --44.2500005 -44.0833335 -10.5833335 -10.4166665 508 0 2670 --44.0833335 -43.9166665 -10.5833335 -10.4166665 630 0 2670 --43.9166665 -43.7499995 -10.5833335 -10.4166665 612 0 2670 --43.7500005 -43.5833335 -10.5833335 -10.4166665 655 0 2670 --43.5833335 -43.4166665 -10.5833335 -10.4166665 505 0 2670 --43.4166665 -43.2499995 -10.5833335 -10.4166665 576 0 2670 --43.2500005 -43.0833335 -10.5833335 -10.4166665 541 0 2670 --43.0833335 -42.9166665 -10.5833335 -10.4166665 491 0 2670 --42.9166665 -42.7499995 -10.5833335 -10.4166665 486 0 2670 --42.7500005 -42.5833335 -10.5833335 -10.4166665 496 0 2670 --42.5833335 -42.4166665 -10.5833335 -10.4166665 411 0 2670 --42.4166665 -42.2499995 -10.5833335 -10.4166665 404 0 2670 --42.2500005 -42.0833335 -10.5833335 -10.4166665 408 0 2670 --42.0833335 -41.9166665 -10.5833335 -10.4166665 416 0 2670 --41.9166665 -41.7499995 -10.5833335 -10.4166665 437 0 2670 --41.7500005 -41.5833335 -10.5833335 -10.4166665 830 0 2670 --41.5833335 -41.4166665 -10.5833335 -10.4166665 1016 0 2670 --41.4166665 -41.2499995 -10.5833335 -10.4166665 825 0 2670 --41.2500005 -41.0833335 -10.5833335 -10.4166665 938 0 2670 --41.0833335 -40.9166665 -10.5833335 -10.4166665 550 0 2670 --40.9166665 -40.7499995 -10.5833335 -10.4166665 531 0 2670 --40.7500005 -40.5833335 -10.5833335 -10.4166665 623 0 2670 --40.5833335 -40.4166665 -10.5833335 -10.4166665 824 0 2670 --40.4166665 -40.2499995 -10.5833335 -10.4166665 565 0 2670 --40.2500005 -40.0833335 -10.5833335 -10.4166665 477 0 2670 --40.0833335 -39.9166665 -10.5833335 -10.4166665 408 0 2670 --65.0833335 -64.9166665 -10.7500005 -10.5833335 191 0 2670 --64.9166665 -64.7499995 -10.7500005 -10.5833335 260 0 2670 --64.7500005 -64.5833335 -10.7500005 -10.5833335 173 0 2670 --64.5833335 -64.4166665 -10.7500005 -10.5833335 189 0 2670 --64.4166665 -64.2499995 -10.7500005 -10.5833335 359 0 2670 --64.2500005 -64.0833335 -10.7500005 -10.5833335 311 0 2670 --64.0833335 -63.9166665 -10.7500005 -10.5833335 244 0 2670 --63.9166665 -63.7499995 -10.7500005 -10.5833335 263 0 2670 --63.7500005 -63.5833335 -10.7500005 -10.5833335 300 0 2670 --63.5833335 -63.4166665 -10.7500005 -10.5833335 380 0 2670 --63.4166665 -63.2499995 -10.7500005 -10.5833335 219 0 2670 --63.2500005 -63.0833335 -10.7500005 -10.5833335 203 0 2670 --63.0833335 -62.9166665 -10.7500005 -10.5833335 277 0 2670 --62.9166665 -62.7499995 -10.7500005 -10.5833335 206 0 2670 --62.7500005 -62.5833335 -10.7500005 -10.5833335 171 0 2670 --62.5833335 -62.4166665 -10.7500005 -10.5833335 188 0 2670 --62.4166665 -62.2499995 -10.7500005 -10.5833335 240 0 2670 --62.2500005 -62.0833335 -10.7500005 -10.5833335 200 0 2670 --62.0833335 -61.9166665 -10.7500005 -10.5833335 173 0 2670 --61.9166665 -61.7499995 -10.7500005 -10.5833335 134 0 2670 --61.7500005 -61.5833335 -10.7500005 -10.5833335 289 0 2670 --61.5833335 -61.4166665 -10.7500005 -10.5833335 278 0 2670 --61.4166665 -61.2499995 -10.7500005 -10.5833335 285 0 2670 --61.2500005 -61.0833335 -10.7500005 -10.5833335 161 0 2670 --61.0833335 -60.9166665 -10.7500005 -10.5833335 177 0 2670 --60.9166665 -60.7499995 -10.7500005 -10.5833335 170 0 2670 --60.7500005 -60.5833335 -10.7500005 -10.5833335 157 0 2670 --60.5833335 -60.4166665 -10.7500005 -10.5833335 157 0 2670 --60.4166665 -60.2499995 -10.7500005 -10.5833335 177 0 2670 --60.2500005 -60.0833335 -10.7500005 -10.5833335 318 0 2670 --60.0833335 -59.9166665 -10.7500005 -10.5833335 250 0 2670 --59.9166665 -59.7499995 -10.7500005 -10.5833335 308 0 2670 --59.7500005 -59.5833335 -10.7500005 -10.5833335 359 0 2670 --59.5833335 -59.4166665 -10.7500005 -10.5833335 253 0 2670 --59.4166665 -59.2499995 -10.7500005 -10.5833335 302 0 2670 --59.2500005 -59.0833335 -10.7500005 -10.5833335 456 0 2670 --59.0833335 -58.9166665 -10.7500005 -10.5833335 457 0 2670 --58.9166665 -58.7499995 -10.7500005 -10.5833335 340 0 2670 --58.7500005 -58.5833335 -10.7500005 -10.5833335 248 0 2670 --58.5833335 -58.4166665 -10.7500005 -10.5833335 251 0 2670 --58.4166665 -58.2499995 -10.7500005 -10.5833335 236 0 2670 --58.2500005 -58.0833335 -10.7500005 -10.5833335 256 0 2670 --58.0833335 -57.9166665 -10.7500005 -10.5833335 230 0 2670 --57.9166665 -57.7499995 -10.7500005 -10.5833335 383 0 2670 --57.7500005 -57.5833335 -10.7500005 -10.5833335 490 0 2670 --57.5833335 -57.4166665 -10.7500005 -10.5833335 388 0 2670 --57.4166665 -57.2499995 -10.7500005 -10.5833335 399 0 2670 --57.2500005 -57.0833335 -10.7500005 -10.5833335 331 0 2670 --57.0833335 -56.9166665 -10.7500005 -10.5833335 332 0 2670 --56.9166665 -56.7499995 -10.7500005 -10.5833335 323 0 2670 --56.7500005 -56.5833335 -10.7500005 -10.5833335 308 0 2670 --56.5833335 -56.4166665 -10.7500005 -10.5833335 317 0 2670 --56.4166665 -56.2499995 -10.7500005 -10.5833335 302 0 2670 --56.2500005 -56.0833335 -10.7500005 -10.5833335 281 0 2670 --56.0833335 -55.9166665 -10.7500005 -10.5833335 280 0 2670 --55.9166665 -55.7499995 -10.7500005 -10.5833335 265 0 2670 --55.7500005 -55.5833335 -10.7500005 -10.5833335 299 0 2670 --55.5833335 -55.4166665 -10.7500005 -10.5833335 298 0 2670 --55.4166665 -55.2499995 -10.7500005 -10.5833335 298 0 2670 --55.2500005 -55.0833335 -10.7500005 -10.5833335 312 0 2670 --55.0833335 -54.9166665 -10.7500005 -10.5833335 394 0 2670 --54.9166665 -54.7499995 -10.7500005 -10.5833335 299 0 2670 --54.7500005 -54.5833335 -10.7500005 -10.5833335 381 0 2670 --54.5833335 -54.4166665 -10.7500005 -10.5833335 349 0 2670 --54.4166665 -54.2499995 -10.7500005 -10.5833335 367 0 2670 --54.2500005 -54.0833335 -10.7500005 -10.5833335 385 0 2670 --54.0833335 -53.9166665 -10.7500005 -10.5833335 333 0 2670 --53.9166665 -53.7499995 -10.7500005 -10.5833335 346 0 2670 --53.7500005 -53.5833335 -10.7500005 -10.5833335 347 0 2670 --53.5833335 -53.4166665 -10.7500005 -10.5833335 348 0 2670 --53.4166665 -53.2499995 -10.7500005 -10.5833335 335 0 2670 --53.2500005 -53.0833335 -10.7500005 -10.5833335 306 0 2670 --53.0833335 -52.9166665 -10.7500005 -10.5833335 331 0 2670 --52.9166665 -52.7499995 -10.7500005 -10.5833335 345 0 2670 --52.7500005 -52.5833335 -10.7500005 -10.5833335 308 0 2670 --52.5833335 -52.4166665 -10.7500005 -10.5833335 333 0 2670 --52.4166665 -52.2499995 -10.7500005 -10.5833335 297 0 2670 --52.2500005 -52.0833335 -10.7500005 -10.5833335 273 0 2670 --52.0833335 -51.9166665 -10.7500005 -10.5833335 225 0 2670 --51.9166665 -51.7499995 -10.7500005 -10.5833335 203 0 2670 --51.7500005 -51.5833335 -10.7500005 -10.5833335 219 0 2670 --51.5833335 -51.4166665 -10.7500005 -10.5833335 218 0 2670 --51.4166665 -51.2499995 -10.7500005 -10.5833335 287 0 2670 --51.2500005 -51.0833335 -10.7500005 -10.5833335 209 0 2670 --51.0833335 -50.9166665 -10.7500005 -10.5833335 202 0 2670 --50.9166665 -50.7499995 -10.7500005 -10.5833335 182 0 2670 --50.7500005 -50.5833335 -10.7500005 -10.5833335 184 0 2670 --50.5833335 -50.4166665 -10.7500005 -10.5833335 179 0 2670 --50.4166665 -50.2499995 -10.7500005 -10.5833335 178 0 2670 --50.2500005 -50.0833335 -10.7500005 -10.5833335 179 0 2670 --50.0833335 -49.9166665 -10.7500005 -10.5833335 177 0 2670 --49.9166665 -49.7499995 -10.7500005 -10.5833335 179 0 2670 --49.7500005 -49.5833335 -10.7500005 -10.5833335 187 0 2670 --49.5833335 -49.4166665 -10.7500005 -10.5833335 225 0 2670 --49.4166665 -49.2499995 -10.7500005 -10.5833335 218 0 2670 --49.2500005 -49.0833335 -10.7500005 -10.5833335 227 0 2670 --49.0833335 -48.9166665 -10.7500005 -10.5833335 349 0 2670 --48.9166665 -48.7499995 -10.7500005 -10.5833335 290 0 2670 --48.7500005 -48.5833335 -10.7500005 -10.5833335 458 0 2670 --48.5833335 -48.4166665 -10.7500005 -10.5833335 308 0 2670 --48.4166665 -48.2499995 -10.7500005 -10.5833335 296 0 2670 --48.2500005 -48.0833335 -10.7500005 -10.5833335 255 0 2670 --48.0833335 -47.9166665 -10.7500005 -10.5833335 697 0 2670 --47.9166665 -47.7499995 -10.7500005 -10.5833335 422 0 2670 --47.7500005 -47.5833335 -10.7500005 -10.5833335 372 0 2670 --47.5833335 -47.4166665 -10.7500005 -10.5833335 334 0 2670 --47.4166665 -47.2499995 -10.7500005 -10.5833335 327 0 2670 --47.2500005 -47.0833335 -10.7500005 -10.5833335 411 0 2670 --47.0833335 -46.9166665 -10.7500005 -10.5833335 403 0 2670 --46.9166665 -46.7499995 -10.7500005 -10.5833335 492 0 2670 --46.7500005 -46.5833335 -10.7500005 -10.5833335 449 0 2670 --46.5833335 -46.4166665 -10.7500005 -10.5833335 532 0 2670 --46.4166665 -46.2499995 -10.7500005 -10.5833335 579 0 2670 --46.2500005 -46.0833335 -10.7500005 -10.5833335 757 0 2670 --46.0833335 -45.9166665 -10.7500005 -10.5833335 737 0 2670 --45.9166665 -45.7499995 -10.7500005 -10.5833335 722 0 2670 --45.7500005 -45.5833335 -10.7500005 -10.5833335 778 0 2670 --45.5833335 -45.4166665 -10.7500005 -10.5833335 749 0 2670 --45.4166665 -45.2499995 -10.7500005 -10.5833335 680 0 2670 --45.2500005 -45.0833335 -10.7500005 -10.5833335 488 0 2670 --45.0833335 -44.9166665 -10.7500005 -10.5833335 428 0 2670 --44.9166665 -44.7499995 -10.7500005 -10.5833335 462 0 2670 --44.7500005 -44.5833335 -10.7500005 -10.5833335 663 0 2670 --44.5833335 -44.4166665 -10.7500005 -10.5833335 703 0 2670 --44.4166665 -44.2499995 -10.7500005 -10.5833335 674 0 2670 --44.2500005 -44.0833335 -10.7500005 -10.5833335 663 0 2670 --44.0833335 -43.9166665 -10.7500005 -10.5833335 654 0 2670 --43.9166665 -43.7499995 -10.7500005 -10.5833335 574 0 2670 --43.7500005 -43.5833335 -10.7500005 -10.5833335 532 0 2670 --43.5833335 -43.4166665 -10.7500005 -10.5833335 463 0 2670 --43.4166665 -43.2499995 -10.7500005 -10.5833335 620 0 2670 --43.2500005 -43.0833335 -10.7500005 -10.5833335 512 0 2670 --43.0833335 -42.9166665 -10.7500005 -10.5833335 460 0 2670 --42.9166665 -42.7499995 -10.7500005 -10.5833335 447 0 2670 --42.7500005 -42.5833335 -10.7500005 -10.5833335 399 0 2670 --42.5833335 -42.4166665 -10.7500005 -10.5833335 596 0 2670 --42.4166665 -42.2499995 -10.7500005 -10.5833335 416 0 2670 --42.2500005 -42.0833335 -10.7500005 -10.5833335 411 0 2670 --42.0833335 -41.9166665 -10.7500005 -10.5833335 437 0 2670 --41.9166665 -41.7499995 -10.7500005 -10.5833335 450 0 2670 --41.7500005 -41.5833335 -10.7500005 -10.5833335 511 0 2670 --41.5833335 -41.4166665 -10.7500005 -10.5833335 882 0 2670 --41.4166665 -41.2499995 -10.7500005 -10.5833335 785 0 2670 --41.2500005 -41.0833335 -10.7500005 -10.5833335 878 0 2670 --41.0833335 -40.9166665 -10.7500005 -10.5833335 556 0 2670 --40.9166665 -40.7499995 -10.7500005 -10.5833335 547 0 2670 --40.7500005 -40.5833335 -10.7500005 -10.5833335 753 0 2670 --40.5833335 -40.4166665 -10.7500005 -10.5833335 704 0 2670 --40.4166665 -40.2499995 -10.7500005 -10.5833335 478 0 2670 --40.2500005 -40.0833335 -10.7500005 -10.5833335 468 0 2670 --40.0833335 -39.9166665 -10.7500005 -10.5833335 401 0 2670 --65.0833335 -64.9166665 -10.9166665 -10.7499995 144 0 2670 --64.9166665 -64.7499995 -10.9166665 -10.7499995 158 0 2670 --64.7500005 -64.5833335 -10.9166665 -10.7499995 170 0 2670 --64.5833335 -64.4166665 -10.9166665 -10.7499995 156 0 2670 --64.4166665 -64.2499995 -10.9166665 -10.7499995 196 0 2670 --64.2500005 -64.0833335 -10.9166665 -10.7499995 307 0 2670 --64.0833335 -63.9166665 -10.9166665 -10.7499995 390 0 2670 --63.9166665 -63.7499995 -10.9166665 -10.7499995 380 0 2670 --63.7500005 -63.5833335 -10.9166665 -10.7499995 869 0 2670 --63.5833335 -63.4166665 -10.9166665 -10.7499995 342 0 2670 --63.4166665 -63.2499995 -10.9166665 -10.7499995 242 0 2670 --63.2500005 -63.0833335 -10.9166665 -10.7499995 318 0 2670 --63.0833335 -62.9166665 -10.9166665 -10.7499995 251 0 2670 --62.9166665 -62.7499995 -10.9166665 -10.7499995 196 0 2670 --62.7500005 -62.5833335 -10.9166665 -10.7499995 224 0 2670 --62.5833335 -62.4166665 -10.9166665 -10.7499995 270 0 2670 --62.4166665 -62.2499995 -10.9166665 -10.7499995 308 0 2670 --62.2500005 -62.0833335 -10.9166665 -10.7499995 214 0 2670 --62.0833335 -61.9166665 -10.9166665 -10.7499995 180 0 2670 --61.9166665 -61.7499995 -10.9166665 -10.7499995 170 0 2670 --61.7500005 -61.5833335 -10.9166665 -10.7499995 194 0 2670 --61.5833335 -61.4166665 -10.9166665 -10.7499995 289 0 2670 --61.4166665 -61.2499995 -10.9166665 -10.7499995 200 0 2670 --61.2500005 -61.0833335 -10.9166665 -10.7499995 172 0 2670 --61.0833335 -60.9166665 -10.9166665 -10.7499995 208 0 2670 --60.9166665 -60.7499995 -10.9166665 -10.7499995 194 0 2670 --60.7500005 -60.5833335 -10.9166665 -10.7499995 165 0 2670 --60.5833335 -60.4166665 -10.9166665 -10.7499995 214 0 2670 --60.4166665 -60.2499995 -10.9166665 -10.7499995 255 0 2670 --60.2500005 -60.0833335 -10.9166665 -10.7499995 235 0 2670 --60.0833335 -59.9166665 -10.9166665 -10.7499995 294 0 2670 --59.9166665 -59.7499995 -10.9166665 -10.7499995 276 0 2670 --59.7500005 -59.5833335 -10.9166665 -10.7499995 357 0 2670 --59.5833335 -59.4166665 -10.9166665 -10.7499995 325 0 2670 --59.4166665 -59.2499995 -10.9166665 -10.7499995 320 0 2670 --59.2500005 -59.0833335 -10.9166665 -10.7499995 298 0 2670 --59.0833335 -58.9166665 -10.9166665 -10.7499995 331 0 2670 --58.9166665 -58.7499995 -10.9166665 -10.7499995 353 0 2670 --58.7500005 -58.5833335 -10.9166665 -10.7499995 295 0 2670 --58.5833335 -58.4166665 -10.9166665 -10.7499995 281 0 2670 --58.4166665 -58.2499995 -10.9166665 -10.7499995 227 0 2670 --58.2500005 -58.0833335 -10.9166665 -10.7499995 265 0 2670 --58.0833335 -57.9166665 -10.9166665 -10.7499995 253 0 2670 --57.9166665 -57.7499995 -10.9166665 -10.7499995 257 0 2670 --57.7500005 -57.5833335 -10.9166665 -10.7499995 237 0 2670 --57.5833335 -57.4166665 -10.9166665 -10.7499995 302 0 2670 --57.4166665 -57.2499995 -10.9166665 -10.7499995 443 0 2670 --57.2500005 -57.0833335 -10.9166665 -10.7499995 319 0 2670 --57.0833335 -56.9166665 -10.9166665 -10.7499995 357 0 2670 --56.9166665 -56.7499995 -10.9166665 -10.7499995 316 0 2670 --56.7500005 -56.5833335 -10.9166665 -10.7499995 350 0 2670 --56.5833335 -56.4166665 -10.9166665 -10.7499995 354 0 2670 --56.4166665 -56.2499995 -10.9166665 -10.7499995 306 0 2670 --56.2500005 -56.0833335 -10.9166665 -10.7499995 277 0 2670 --56.0833335 -55.9166665 -10.9166665 -10.7499995 277 0 2670 --55.9166665 -55.7499995 -10.9166665 -10.7499995 311 0 2670 --55.7500005 -55.5833335 -10.9166665 -10.7499995 398 0 2670 --55.5833335 -55.4166665 -10.9166665 -10.7499995 304 0 2670 --55.4166665 -55.2499995 -10.9166665 -10.7499995 320 0 2670 --55.2500005 -55.0833335 -10.9166665 -10.7499995 347 0 2670 --55.0833335 -54.9166665 -10.9166665 -10.7499995 348 0 2670 --54.9166665 -54.7499995 -10.9166665 -10.7499995 382 0 2670 --54.7500005 -54.5833335 -10.9166665 -10.7499995 347 0 2670 --54.5833335 -54.4166665 -10.9166665 -10.7499995 427 0 2670 --54.4166665 -54.2499995 -10.9166665 -10.7499995 344 0 2670 --54.2500005 -54.0833335 -10.9166665 -10.7499995 343 0 2670 --54.0833335 -53.9166665 -10.9166665 -10.7499995 367 0 2670 --53.9166665 -53.7499995 -10.9166665 -10.7499995 374 0 2670 --53.7500005 -53.5833335 -10.9166665 -10.7499995 370 0 2670 --53.5833335 -53.4166665 -10.9166665 -10.7499995 353 0 2670 --53.4166665 -53.2499995 -10.9166665 -10.7499995 293 0 2670 --53.2500005 -53.0833335 -10.9166665 -10.7499995 273 0 2670 --53.0833335 -52.9166665 -10.9166665 -10.7499995 303 0 2670 --52.9166665 -52.7499995 -10.9166665 -10.7499995 345 0 2670 --52.7500005 -52.5833335 -10.9166665 -10.7499995 332 0 2670 --52.5833335 -52.4166665 -10.9166665 -10.7499995 329 0 2670 --52.4166665 -52.2499995 -10.9166665 -10.7499995 303 0 2670 --52.2500005 -52.0833335 -10.9166665 -10.7499995 285 0 2670 --52.0833335 -51.9166665 -10.9166665 -10.7499995 199 0 2670 --51.9166665 -51.7499995 -10.9166665 -10.7499995 214 0 2670 --51.7500005 -51.5833335 -10.9166665 -10.7499995 190 0 2670 --51.5833335 -51.4166665 -10.9166665 -10.7499995 192 0 2670 --51.4166665 -51.2499995 -10.9166665 -10.7499995 201 0 2670 --51.2500005 -51.0833335 -10.9166665 -10.7499995 193 0 2670 --51.0833335 -50.9166665 -10.9166665 -10.7499995 181 0 2670 --50.9166665 -50.7499995 -10.9166665 -10.7499995 181 0 2670 --50.7500005 -50.5833335 -10.9166665 -10.7499995 182 0 2670 --50.5833335 -50.4166665 -10.9166665 -10.7499995 182 0 2670 --50.4166665 -50.2499995 -10.9166665 -10.7499995 191 0 2670 --50.2500005 -50.0833335 -10.9166665 -10.7499995 192 0 2670 --50.0833335 -49.9166665 -10.9166665 -10.7499995 180 0 2670 --49.9166665 -49.7499995 -10.9166665 -10.7499995 186 0 2670 --49.7500005 -49.5833335 -10.9166665 -10.7499995 189 0 2670 --49.5833335 -49.4166665 -10.9166665 -10.7499995 190 0 2670 --49.4166665 -49.2499995 -10.9166665 -10.7499995 202 0 2670 --49.2500005 -49.0833335 -10.9166665 -10.7499995 284 0 2670 --49.0833335 -48.9166665 -10.9166665 -10.7499995 345 0 2670 --48.9166665 -48.7499995 -10.9166665 -10.7499995 291 0 2670 --48.7500005 -48.5833335 -10.9166665 -10.7499995 503 0 2670 --48.5833335 -48.4166665 -10.9166665 -10.7499995 342 0 2670 --48.4166665 -48.2499995 -10.9166665 -10.7499995 278 0 2670 --48.2500005 -48.0833335 -10.9166665 -10.7499995 292 0 2670 --48.0833335 -47.9166665 -10.9166665 -10.7499995 578 0 2670 --47.9166665 -47.7499995 -10.9166665 -10.7499995 374 0 2670 --47.7500005 -47.5833335 -10.9166665 -10.7499995 382 0 2670 --47.5833335 -47.4166665 -10.9166665 -10.7499995 394 0 2670 --47.4166665 -47.2499995 -10.9166665 -10.7499995 370 0 2670 --47.2500005 -47.0833335 -10.9166665 -10.7499995 401 0 2670 --47.0833335 -46.9166665 -10.9166665 -10.7499995 468 0 2670 --46.9166665 -46.7499995 -10.9166665 -10.7499995 597 0 2670 --46.7500005 -46.5833335 -10.9166665 -10.7499995 508 0 2670 --46.5833335 -46.4166665 -10.9166665 -10.7499995 764 0 2670 --46.4166665 -46.2499995 -10.9166665 -10.7499995 639 0 2670 --46.2500005 -46.0833335 -10.9166665 -10.7499995 661 0 2670 --46.0833335 -45.9166665 -10.9166665 -10.7499995 687 0 2670 --45.9166665 -45.7499995 -10.9166665 -10.7499995 555 0 2670 --45.7500005 -45.5833335 -10.9166665 -10.7499995 758 0 2670 --45.5833335 -45.4166665 -10.9166665 -10.7499995 746 0 2670 --45.4166665 -45.2499995 -10.9166665 -10.7499995 747 0 2670 --45.2500005 -45.0833335 -10.9166665 -10.7499995 613 0 2670 --45.0833335 -44.9166665 -10.9166665 -10.7499995 514 0 2670 --44.9166665 -44.7499995 -10.9166665 -10.7499995 567 0 2670 --44.7500005 -44.5833335 -10.9166665 -10.7499995 558 0 2670 --44.5833335 -44.4166665 -10.9166665 -10.7499995 548 0 2670 --44.4166665 -44.2499995 -10.9166665 -10.7499995 512 0 2670 --44.2500005 -44.0833335 -10.9166665 -10.7499995 496 0 2670 --44.0833335 -43.9166665 -10.9166665 -10.7499995 541 0 2670 --43.9166665 -43.7499995 -10.9166665 -10.7499995 570 0 2670 --43.7500005 -43.5833335 -10.9166665 -10.7499995 510 0 2670 --43.5833335 -43.4166665 -10.9166665 -10.7499995 440 0 2670 --43.4166665 -43.2499995 -10.9166665 -10.7499995 453 0 2670 --43.2500005 -43.0833335 -10.9166665 -10.7499995 468 0 2670 --43.0833335 -42.9166665 -10.9166665 -10.7499995 459 0 2670 --42.9166665 -42.7499995 -10.9166665 -10.7499995 402 0 2670 --42.7500005 -42.5833335 -10.9166665 -10.7499995 436 0 2670 --42.5833335 -42.4166665 -10.9166665 -10.7499995 478 0 2670 --42.4166665 -42.2499995 -10.9166665 -10.7499995 440 0 2670 --42.2500005 -42.0833335 -10.9166665 -10.7499995 428 0 2670 --42.0833335 -41.9166665 -10.9166665 -10.7499995 461 0 2670 --41.9166665 -41.7499995 -10.9166665 -10.7499995 490 0 2670 --41.7500005 -41.5833335 -10.9166665 -10.7499995 473 0 2670 --41.5833335 -41.4166665 -10.9166665 -10.7499995 764 0 2670 --41.4166665 -41.2499995 -10.9166665 -10.7499995 697 0 2670 --41.2500005 -41.0833335 -10.9166665 -10.7499995 615 0 2670 --41.0833335 -40.9166665 -10.9166665 -10.7499995 560 0 2670 --40.9166665 -40.7499995 -10.9166665 -10.7499995 566 0 2670 --40.7500005 -40.5833335 -10.9166665 -10.7499995 808 0 2670 --40.5833335 -40.4166665 -10.9166665 -10.7499995 603 0 2670 --40.4166665 -40.2499995 -10.9166665 -10.7499995 462 0 2670 --40.2500005 -40.0833335 -10.9166665 -10.7499995 404 0 2670 --40.0833335 -39.9166665 -10.9166665 -10.7499995 375 0 2670 --65.0833335 -64.9166665 -11.0833335 -10.9166665 163 0 2670 --64.9166665 -64.7499995 -11.0833335 -10.9166665 175 0 2670 --64.7500005 -64.5833335 -11.0833335 -10.9166665 160 0 2670 --64.5833335 -64.4166665 -11.0833335 -10.9166665 190 0 2670 --64.4166665 -64.2499995 -11.0833335 -10.9166665 191 0 2670 --64.2500005 -64.0833335 -11.0833335 -10.9166665 207 0 2670 --64.0833335 -63.9166665 -11.0833335 -10.9166665 185 0 2670 --63.9166665 -63.7499995 -11.0833335 -10.9166665 294 0 2670 --63.7500005 -63.5833335 -11.0833335 -10.9166665 857 0 2670 --63.5833335 -63.4166665 -11.0833335 -10.9166665 368 0 2670 --63.4166665 -63.2499995 -11.0833335 -10.9166665 301 0 2670 --63.2500005 -63.0833335 -11.0833335 -10.9166665 310 0 2670 --63.0833335 -62.9166665 -11.0833335 -10.9166665 309 0 2670 --62.9166665 -62.7499995 -11.0833335 -10.9166665 283 0 2670 --62.7500005 -62.5833335 -11.0833335 -10.9166665 257 0 2670 --62.5833335 -62.4166665 -11.0833335 -10.9166665 390 0 2670 --62.4166665 -62.2499995 -11.0833335 -10.9166665 211 0 2670 --62.2500005 -62.0833335 -11.0833335 -10.9166665 172 0 2670 --62.0833335 -61.9166665 -11.0833335 -10.9166665 177 0 2670 --61.9166665 -61.7499995 -11.0833335 -10.9166665 215 0 2670 --61.7500005 -61.5833335 -11.0833335 -10.9166665 281 0 2670 --61.5833335 -61.4166665 -11.0833335 -10.9166665 312 0 2670 --61.4166665 -61.2499995 -11.0833335 -10.9166665 207 0 2670 --61.2500005 -61.0833335 -11.0833335 -10.9166665 188 0 2670 --61.0833335 -60.9166665 -11.0833335 -10.9166665 194 0 2670 --60.9166665 -60.7499995 -11.0833335 -10.9166665 192 0 2670 --60.7500005 -60.5833335 -11.0833335 -10.9166665 241 0 2670 --60.5833335 -60.4166665 -11.0833335 -10.9166665 216 0 2670 --60.4166665 -60.2499995 -11.0833335 -10.9166665 215 0 2670 --60.2500005 -60.0833335 -11.0833335 -10.9166665 253 0 2670 --60.0833335 -59.9166665 -11.0833335 -10.9166665 273 0 2670 --59.9166665 -59.7499995 -11.0833335 -10.9166665 396 0 2670 --59.7500005 -59.5833335 -11.0833335 -10.9166665 380 0 2670 --59.5833335 -59.4166665 -11.0833335 -10.9166665 376 0 2670 --59.4166665 -59.2499995 -11.0833335 -10.9166665 276 0 2670 --59.2500005 -59.0833335 -11.0833335 -10.9166665 311 0 2670 --59.0833335 -58.9166665 -11.0833335 -10.9166665 339 0 2670 --58.9166665 -58.7499995 -11.0833335 -10.9166665 311 0 2670 --58.7500005 -58.5833335 -11.0833335 -10.9166665 269 0 2670 --58.5833335 -58.4166665 -11.0833335 -10.9166665 284 0 2670 --58.4166665 -58.2499995 -11.0833335 -10.9166665 251 0 2670 --58.2500005 -58.0833335 -11.0833335 -10.9166665 245 0 2670 --58.0833335 -57.9166665 -11.0833335 -10.9166665 289 0 2670 --57.9166665 -57.7499995 -11.0833335 -10.9166665 243 0 2670 --57.7500005 -57.5833335 -11.0833335 -10.9166665 264 0 2670 --57.5833335 -57.4166665 -11.0833335 -10.9166665 294 0 2670 --57.4166665 -57.2499995 -11.0833335 -10.9166665 255 0 2670 --57.2500005 -57.0833335 -11.0833335 -10.9166665 312 0 2670 --57.0833335 -56.9166665 -11.0833335 -10.9166665 316 0 2670 --56.9166665 -56.7499995 -11.0833335 -10.9166665 340 0 2670 --56.7500005 -56.5833335 -11.0833335 -10.9166665 431 0 2670 --56.5833335 -56.4166665 -11.0833335 -10.9166665 304 0 2670 --56.4166665 -56.2499995 -11.0833335 -10.9166665 332 0 2670 --56.2500005 -56.0833335 -11.0833335 -10.9166665 299 0 2670 --56.0833335 -55.9166665 -11.0833335 -10.9166665 306 0 2670 --55.9166665 -55.7499995 -11.0833335 -10.9166665 280 0 2670 --55.7500005 -55.5833335 -11.0833335 -10.9166665 291 0 2670 --55.5833335 -55.4166665 -11.0833335 -10.9166665 290 0 2670 --55.4166665 -55.2499995 -11.0833335 -10.9166665 322 0 2670 --55.2500005 -55.0833335 -11.0833335 -10.9166665 410 0 2670 --55.0833335 -54.9166665 -11.0833335 -10.9166665 424 0 2670 --54.9166665 -54.7499995 -11.0833335 -10.9166665 401 0 2670 --54.7500005 -54.5833335 -11.0833335 -10.9166665 355 0 2670 --54.5833335 -54.4166665 -11.0833335 -10.9166665 354 0 2670 --54.4166665 -54.2499995 -11.0833335 -10.9166665 317 0 2670 --54.2500005 -54.0833335 -11.0833335 -10.9166665 342 0 2670 --54.0833335 -53.9166665 -11.0833335 -10.9166665 318 0 2670 --53.9166665 -53.7499995 -11.0833335 -10.9166665 307 0 2670 --53.7500005 -53.5833335 -11.0833335 -10.9166665 317 0 2670 --53.5833335 -53.4166665 -11.0833335 -10.9166665 322 0 2670 --53.4166665 -53.2499995 -11.0833335 -10.9166665 276 0 2670 --53.2500005 -53.0833335 -11.0833335 -10.9166665 330 0 2670 --53.0833335 -52.9166665 -11.0833335 -10.9166665 304 0 2670 --52.9166665 -52.7499995 -11.0833335 -10.9166665 308 0 2670 --52.7500005 -52.5833335 -11.0833335 -10.9166665 325 0 2670 --52.5833335 -52.4166665 -11.0833335 -10.9166665 369 0 2670 --52.4166665 -52.2499995 -11.0833335 -10.9166665 310 0 2670 --52.2500005 -52.0833335 -11.0833335 -10.9166665 300 0 2670 --52.0833335 -51.9166665 -11.0833335 -10.9166665 239 0 2670 --51.9166665 -51.7499995 -11.0833335 -10.9166665 223 0 2670 --51.7500005 -51.5833335 -11.0833335 -10.9166665 191 0 2670 --51.5833335 -51.4166665 -11.0833335 -10.9166665 188 0 2670 --51.4166665 -51.2499995 -11.0833335 -10.9166665 187 0 2670 --51.2500005 -51.0833335 -11.0833335 -10.9166665 182 0 2670 --51.0833335 -50.9166665 -11.0833335 -10.9166665 182 0 2670 --50.9166665 -50.7499995 -11.0833335 -10.9166665 183 0 2670 --50.7500005 -50.5833335 -11.0833335 -10.9166665 185 0 2670 --50.5833335 -50.4166665 -11.0833335 -10.9166665 184 0 2670 --50.4166665 -50.2499995 -11.0833335 -10.9166665 190 0 2670 --50.2500005 -50.0833335 -11.0833335 -10.9166665 191 0 2670 --50.0833335 -49.9166665 -11.0833335 -10.9166665 184 0 2670 --49.9166665 -49.7499995 -11.0833335 -10.9166665 188 0 2670 --49.7500005 -49.5833335 -11.0833335 -10.9166665 189 0 2670 --49.5833335 -49.4166665 -11.0833335 -10.9166665 213 0 2670 --49.4166665 -49.2499995 -11.0833335 -10.9166665 219 0 2670 --49.2500005 -49.0833335 -11.0833335 -10.9166665 296 0 2670 --49.0833335 -48.9166665 -11.0833335 -10.9166665 277 0 2670 --48.9166665 -48.7499995 -11.0833335 -10.9166665 252 0 2670 --48.7500005 -48.5833335 -11.0833335 -10.9166665 381 0 2670 --48.5833335 -48.4166665 -11.0833335 -10.9166665 222 0 2670 --48.4166665 -48.2499995 -11.0833335 -10.9166665 296 0 2670 --48.2500005 -48.0833335 -11.0833335 -10.9166665 251 0 2670 --48.0833335 -47.9166665 -11.0833335 -10.9166665 306 0 2670 --47.9166665 -47.7499995 -11.0833335 -10.9166665 641 0 2670 --47.7500005 -47.5833335 -11.0833335 -10.9166665 357 0 2670 --47.5833335 -47.4166665 -11.0833335 -10.9166665 363 0 2670 --47.4166665 -47.2499995 -11.0833335 -10.9166665 364 0 2670 --47.2500005 -47.0833335 -11.0833335 -10.9166665 468 0 2670 --47.0833335 -46.9166665 -11.0833335 -10.9166665 465 0 2670 --46.9166665 -46.7499995 -11.0833335 -10.9166665 560 0 2670 --46.7500005 -46.5833335 -11.0833335 -10.9166665 589 0 2670 --46.5833335 -46.4166665 -11.0833335 -10.9166665 547 0 2670 --46.4166665 -46.2499995 -11.0833335 -10.9166665 807 0 2670 --46.2500005 -46.0833335 -11.0833335 -10.9166665 779 0 2670 --46.0833335 -45.9166665 -11.0833335 -10.9166665 678 0 2670 --45.9166665 -45.7499995 -11.0833335 -10.9166665 763 0 2670 --45.7500005 -45.5833335 -11.0833335 -10.9166665 739 0 2670 --45.5833335 -45.4166665 -11.0833335 -10.9166665 536 0 2670 --45.4166665 -45.2499995 -11.0833335 -10.9166665 689 0 2670 --45.2500005 -45.0833335 -11.0833335 -10.9166665 539 0 2670 --45.0833335 -44.9166665 -11.0833335 -10.9166665 532 0 2670 --44.9166665 -44.7499995 -11.0833335 -10.9166665 500 0 2670 --44.7500005 -44.5833335 -11.0833335 -10.9166665 467 0 2670 --44.5833335 -44.4166665 -11.0833335 -10.9166665 445 0 2670 --44.4166665 -44.2499995 -11.0833335 -10.9166665 454 0 2670 --44.2500005 -44.0833335 -11.0833335 -10.9166665 458 0 2670 --44.0833335 -43.9166665 -11.0833335 -10.9166665 698 0 2670 --43.9166665 -43.7499995 -11.0833335 -10.9166665 532 0 2670 --43.7500005 -43.5833335 -11.0833335 -10.9166665 480 0 2670 --43.5833335 -43.4166665 -11.0833335 -10.9166665 431 0 2670 --43.4166665 -43.2499995 -11.0833335 -10.9166665 419 0 2670 --43.2500005 -43.0833335 -11.0833335 -10.9166665 411 0 2670 --43.0833335 -42.9166665 -11.0833335 -10.9166665 403 0 2670 --42.9166665 -42.7499995 -11.0833335 -10.9166665 438 0 2670 --42.7500005 -42.5833335 -11.0833335 -10.9166665 531 0 2670 --42.5833335 -42.4166665 -11.0833335 -10.9166665 694 0 2670 --42.4166665 -42.2499995 -11.0833335 -10.9166665 445 0 2670 --42.2500005 -42.0833335 -11.0833335 -10.9166665 490 0 2670 --42.0833335 -41.9166665 -11.0833335 -10.9166665 551 0 2670 --41.9166665 -41.7499995 -11.0833335 -10.9166665 618 0 2670 --41.7500005 -41.5833335 -11.0833335 -10.9166665 766 0 2670 --41.5833335 -41.4166665 -11.0833335 -10.9166665 579 0 2670 --41.4166665 -41.2499995 -11.0833335 -10.9166665 792 0 2670 --41.2500005 -41.0833335 -11.0833335 -10.9166665 594 0 2670 --41.0833335 -40.9166665 -11.0833335 -10.9166665 586 0 2670 --40.9166665 -40.7499995 -11.0833335 -10.9166665 688 0 2670 --40.7500005 -40.5833335 -11.0833335 -10.9166665 773 0 2670 --40.5833335 -40.4166665 -11.0833335 -10.9166665 843 0 2670 --40.4166665 -40.2499995 -11.0833335 -10.9166665 460 0 2670 --40.2500005 -40.0833335 -11.0833335 -10.9166665 400 0 2670 --40.0833335 -39.9166665 -11.0833335 -10.9166665 350 0 2670 --65.0833335 -64.9166665 -11.2500005 -11.0833335 138 0 2670 --64.9166665 -64.7499995 -11.2500005 -11.0833335 153 0 2670 --64.7500005 -64.5833335 -11.2500005 -11.0833335 164 0 2670 --64.5833335 -64.4166665 -11.2500005 -11.0833335 183 0 2670 --64.4166665 -64.2499995 -11.2500005 -11.0833335 176 0 2670 --64.2500005 -64.0833335 -11.2500005 -11.0833335 176 0 2670 --64.0833335 -63.9166665 -11.2500005 -11.0833335 199 0 2670 --63.9166665 -63.7499995 -11.2500005 -11.0833335 221 0 2670 --63.7500005 -63.5833335 -11.2500005 -11.0833335 266 0 2670 --63.5833335 -63.4166665 -11.2500005 -11.0833335 253 0 2670 --63.4166665 -63.2499995 -11.2500005 -11.0833335 414 0 2670 --63.2500005 -63.0833335 -11.2500005 -11.0833335 256 0 2670 --63.0833335 -62.9166665 -11.2500005 -11.0833335 264 0 2670 --62.9166665 -62.7499995 -11.2500005 -11.0833335 251 0 2670 --62.7500005 -62.5833335 -11.2500005 -11.0833335 246 0 2670 --62.5833335 -62.4166665 -11.2500005 -11.0833335 244 0 2670 --62.4166665 -62.2499995 -11.2500005 -11.0833335 202 0 2670 --62.2500005 -62.0833335 -11.2500005 -11.0833335 234 0 2670 --62.0833335 -61.9166665 -11.2500005 -11.0833335 193 0 2670 --61.9166665 -61.7499995 -11.2500005 -11.0833335 200 0 2670 --61.7500005 -61.5833335 -11.2500005 -11.0833335 284 0 2670 --61.5833335 -61.4166665 -11.2500005 -11.0833335 270 0 2670 --61.4166665 -61.2499995 -11.2500005 -11.0833335 218 0 2670 --61.2500005 -61.0833335 -11.2500005 -11.0833335 229 0 2670 --61.0833335 -60.9166665 -11.2500005 -11.0833335 292 0 2670 --60.9166665 -60.7499995 -11.2500005 -11.0833335 492 0 2670 --60.7500005 -60.5833335 -11.2500005 -11.0833335 300 0 2670 --60.5833335 -60.4166665 -11.2500005 -11.0833335 241 0 2670 --60.4166665 -60.2499995 -11.2500005 -11.0833335 424 0 2670 --60.2500005 -60.0833335 -11.2500005 -11.0833335 292 0 2670 --60.0833335 -59.9166665 -11.2500005 -11.0833335 280 0 2670 --59.9166665 -59.7499995 -11.2500005 -11.0833335 473 0 2670 --59.7500005 -59.5833335 -11.2500005 -11.0833335 369 0 2670 --59.5833335 -59.4166665 -11.2500005 -11.0833335 306 0 2670 --59.4166665 -59.2499995 -11.2500005 -11.0833335 367 0 2670 --59.2500005 -59.0833335 -11.2500005 -11.0833335 410 0 2670 --59.0833335 -58.9166665 -11.2500005 -11.0833335 346 0 2670 --58.9166665 -58.7499995 -11.2500005 -11.0833335 359 0 2670 --58.7500005 -58.5833335 -11.2500005 -11.0833335 332 0 2670 --58.5833335 -58.4166665 -11.2500005 -11.0833335 332 0 2670 --58.4166665 -58.2499995 -11.2500005 -11.0833335 241 0 2670 --58.2500005 -58.0833335 -11.2500005 -11.0833335 297 0 2670 --58.0833335 -57.9166665 -11.2500005 -11.0833335 288 0 2670 --57.9166665 -57.7499995 -11.2500005 -11.0833335 277 0 2670 --57.7500005 -57.5833335 -11.2500005 -11.0833335 232 0 2670 --57.5833335 -57.4166665 -11.2500005 -11.0833335 291 0 2670 --57.4166665 -57.2499995 -11.2500005 -11.0833335 250 0 2670 --57.2500005 -57.0833335 -11.2500005 -11.0833335 346 0 2670 --57.0833335 -56.9166665 -11.2500005 -11.0833335 325 0 2670 --56.9166665 -56.7499995 -11.2500005 -11.0833335 365 0 2670 --56.7500005 -56.5833335 -11.2500005 -11.0833335 326 0 2670 --56.5833335 -56.4166665 -11.2500005 -11.0833335 417 0 2670 --56.4166665 -56.2499995 -11.2500005 -11.0833335 448 0 2670 --56.2500005 -56.0833335 -11.2500005 -11.0833335 444 0 2670 --56.0833335 -55.9166665 -11.2500005 -11.0833335 409 0 2670 --55.9166665 -55.7499995 -11.2500005 -11.0833335 315 0 2670 --55.7500005 -55.5833335 -11.2500005 -11.0833335 355 0 2670 --55.5833335 -55.4166665 -11.2500005 -11.0833335 342 0 2670 --55.4166665 -55.2499995 -11.2500005 -11.0833335 311 0 2670 --55.2500005 -55.0833335 -11.2500005 -11.0833335 333 0 2670 --55.0833335 -54.9166665 -11.2500005 -11.0833335 355 0 2670 --54.9166665 -54.7499995 -11.2500005 -11.0833335 330 0 2670 --54.7500005 -54.5833335 -11.2500005 -11.0833335 312 0 2670 --54.5833335 -54.4166665 -11.2500005 -11.0833335 309 0 2670 --54.4166665 -54.2499995 -11.2500005 -11.0833335 325 0 2670 --54.2500005 -54.0833335 -11.2500005 -11.0833335 348 0 2670 --54.0833335 -53.9166665 -11.2500005 -11.0833335 351 0 2670 --53.9166665 -53.7499995 -11.2500005 -11.0833335 324 0 2670 --53.7500005 -53.5833335 -11.2500005 -11.0833335 281 0 2670 --53.5833335 -53.4166665 -11.2500005 -11.0833335 323 0 2670 --53.4166665 -53.2499995 -11.2500005 -11.0833335 305 0 2670 --53.2500005 -53.0833335 -11.2500005 -11.0833335 328 0 2670 --53.0833335 -52.9166665 -11.2500005 -11.0833335 300 0 2670 --52.9166665 -52.7499995 -11.2500005 -11.0833335 327 0 2670 --52.7500005 -52.5833335 -11.2500005 -11.0833335 340 0 2670 --52.5833335 -52.4166665 -11.2500005 -11.0833335 359 0 2670 --52.4166665 -52.2499995 -11.2500005 -11.0833335 323 0 2670 --52.2500005 -52.0833335 -11.2500005 -11.0833335 327 0 2670 --52.0833335 -51.9166665 -11.2500005 -11.0833335 239 0 2670 --51.9166665 -51.7499995 -11.2500005 -11.0833335 224 0 2670 --51.7500005 -51.5833335 -11.2500005 -11.0833335 221 0 2670 --51.5833335 -51.4166665 -11.2500005 -11.0833335 193 0 2670 --51.4166665 -51.2499995 -11.2500005 -11.0833335 200 0 2670 --51.2500005 -51.0833335 -11.2500005 -11.0833335 188 0 2670 --51.0833335 -50.9166665 -11.2500005 -11.0833335 188 0 2670 --50.9166665 -50.7499995 -11.2500005 -11.0833335 187 0 2670 --50.7500005 -50.5833335 -11.2500005 -11.0833335 184 0 2670 --50.5833335 -50.4166665 -11.2500005 -11.0833335 185 0 2670 --50.4166665 -50.2499995 -11.2500005 -11.0833335 185 0 2670 --50.2500005 -50.0833335 -11.2500005 -11.0833335 187 0 2670 --50.0833335 -49.9166665 -11.2500005 -11.0833335 185 0 2670 --49.9166665 -49.7499995 -11.2500005 -11.0833335 185 0 2670 --49.7500005 -49.5833335 -11.2500005 -11.0833335 189 0 2670 --49.5833335 -49.4166665 -11.2500005 -11.0833335 196 0 2670 --49.4166665 -49.2499995 -11.2500005 -11.0833335 239 0 2670 --49.2500005 -49.0833335 -11.2500005 -11.0833335 302 0 2670 --49.0833335 -48.9166665 -11.2500005 -11.0833335 261 0 2670 --48.9166665 -48.7499995 -11.2500005 -11.0833335 258 0 2670 --48.7500005 -48.5833335 -11.2500005 -11.0833335 259 0 2670 --48.5833335 -48.4166665 -11.2500005 -11.0833335 226 0 2670 --48.4166665 -48.2499995 -11.2500005 -11.0833335 321 0 2670 --48.2500005 -48.0833335 -11.2500005 -11.0833335 273 0 2670 --48.0833335 -47.9166665 -11.2500005 -11.0833335 278 0 2670 --47.9166665 -47.7499995 -11.2500005 -11.0833335 330 0 2670 --47.7500005 -47.5833335 -11.2500005 -11.0833335 452 0 2670 --47.5833335 -47.4166665 -11.2500005 -11.0833335 510 0 2670 --47.4166665 -47.2499995 -11.2500005 -11.0833335 398 0 2670 --47.2500005 -47.0833335 -11.2500005 -11.0833335 450 0 2670 --47.0833335 -46.9166665 -11.2500005 -11.0833335 494 0 2670 --46.9166665 -46.7499995 -11.2500005 -11.0833335 591 0 2670 --46.7500005 -46.5833335 -11.2500005 -11.0833335 742 0 2670 --46.5833335 -46.4166665 -11.2500005 -11.0833335 851 0 2670 --46.4166665 -46.2499995 -11.2500005 -11.0833335 713 0 2670 --46.2500005 -46.0833335 -11.2500005 -11.0833335 661 0 2670 --46.0833335 -45.9166665 -11.2500005 -11.0833335 729 0 2670 --45.9166665 -45.7499995 -11.2500005 -11.0833335 767 0 2670 --45.7500005 -45.5833335 -11.2500005 -11.0833335 758 0 2670 --45.5833335 -45.4166665 -11.2500005 -11.0833335 545 0 2670 --45.4166665 -45.2499995 -11.2500005 -11.0833335 594 0 2670 --45.2500005 -45.0833335 -11.2500005 -11.0833335 602 0 2670 --45.0833335 -44.9166665 -11.2500005 -11.0833335 584 0 2670 --44.9166665 -44.7499995 -11.2500005 -11.0833335 527 0 2670 --44.7500005 -44.5833335 -11.2500005 -11.0833335 519 0 2670 --44.5833335 -44.4166665 -11.2500005 -11.0833335 499 0 2670 --44.4166665 -44.2499995 -11.2500005 -11.0833335 445 0 2670 --44.2500005 -44.0833335 -11.2500005 -11.0833335 432 0 2670 --44.0833335 -43.9166665 -11.2500005 -11.0833335 430 0 2670 --43.9166665 -43.7499995 -11.2500005 -11.0833335 455 0 2670 --43.7500005 -43.5833335 -11.2500005 -11.0833335 427 0 2670 --43.5833335 -43.4166665 -11.2500005 -11.0833335 413 0 2670 --43.4166665 -43.2499995 -11.2500005 -11.0833335 418 0 2670 --43.2500005 -43.0833335 -11.2500005 -11.0833335 408 0 2670 --43.0833335 -42.9166665 -11.2500005 -11.0833335 412 0 2670 --42.9166665 -42.7499995 -11.2500005 -11.0833335 409 0 2670 --42.7500005 -42.5833335 -11.2500005 -11.0833335 907 0 2670 --42.5833335 -42.4166665 -11.2500005 -11.0833335 773 0 2670 --42.4166665 -42.2499995 -11.2500005 -11.0833335 488 0 2670 --42.2500005 -42.0833335 -11.2500005 -11.0833335 512 0 2670 --42.0833335 -41.9166665 -11.2500005 -11.0833335 760 0 2670 --41.9166665 -41.7499995 -11.2500005 -11.0833335 779 0 2670 --41.7500005 -41.5833335 -11.2500005 -11.0833335 807 0 2670 --41.5833335 -41.4166665 -11.2500005 -11.0833335 766 0 2670 --41.4166665 -41.2499995 -11.2500005 -11.0833335 849 0 2670 --41.2500005 -41.0833335 -11.2500005 -11.0833335 751 0 2670 --41.0833335 -40.9166665 -11.2500005 -11.0833335 705 0 2670 --40.9166665 -40.7499995 -11.2500005 -11.0833335 711 0 2670 --40.7500005 -40.5833335 -11.2500005 -11.0833335 698 0 2670 --40.5833335 -40.4166665 -11.2500005 -11.0833335 707 0 2670 --40.4166665 -40.2499995 -11.2500005 -11.0833335 525 0 2670 --40.2500005 -40.0833335 -11.2500005 -11.0833335 389 0 2670 --40.0833335 -39.9166665 -11.2500005 -11.0833335 345 0 2670 --65.0833335 -64.9166665 -11.4166665 -11.2499995 166 0 2670 --64.9166665 -64.7499995 -11.4166665 -11.2499995 141 0 2670 --64.7500005 -64.5833335 -11.4166665 -11.2499995 167 0 2670 --64.5833335 -64.4166665 -11.4166665 -11.2499995 175 0 2670 --64.4166665 -64.2499995 -11.4166665 -11.2499995 186 0 2670 --64.2500005 -64.0833335 -11.4166665 -11.2499995 196 0 2670 --64.0833335 -63.9166665 -11.4166665 -11.2499995 218 0 2670 --63.9166665 -63.7499995 -11.4166665 -11.2499995 239 0 2670 --63.7500005 -63.5833335 -11.4166665 -11.2499995 325 0 2670 --63.5833335 -63.4166665 -11.4166665 -11.2499995 240 0 2670 --63.4166665 -63.2499995 -11.4166665 -11.2499995 223 0 2670 --63.2500005 -63.0833335 -11.4166665 -11.2499995 248 0 2670 --63.0833335 -62.9166665 -11.4166665 -11.2499995 290 0 2670 --62.9166665 -62.7499995 -11.4166665 -11.2499995 303 0 2670 --62.7500005 -62.5833335 -11.4166665 -11.2499995 259 0 2670 --62.5833335 -62.4166665 -11.4166665 -11.2499995 241 0 2670 --62.4166665 -62.2499995 -11.4166665 -11.2499995 214 0 2670 --62.2500005 -62.0833335 -11.4166665 -11.2499995 187 0 2670 --62.0833335 -61.9166665 -11.4166665 -11.2499995 167 0 2670 --61.9166665 -61.7499995 -11.4166665 -11.2499995 173 0 2670 --61.7500005 -61.5833335 -11.4166665 -11.2499995 259 0 2670 --61.5833335 -61.4166665 -11.4166665 -11.2499995 244 0 2670 --61.4166665 -61.2499995 -11.4166665 -11.2499995 261 0 2670 --61.2500005 -61.0833335 -11.4166665 -11.2499995 260 0 2670 --61.0833335 -60.9166665 -11.4166665 -11.2499995 416 0 2670 --60.9166665 -60.7499995 -11.4166665 -11.2499995 366 0 2670 --60.7500005 -60.5833335 -11.4166665 -11.2499995 375 0 2670 --60.5833335 -60.4166665 -11.4166665 -11.2499995 261 0 2670 --60.4166665 -60.2499995 -11.4166665 -11.2499995 296 0 2670 --60.2500005 -60.0833335 -11.4166665 -11.2499995 345 0 2670 --60.0833335 -59.9166665 -11.4166665 -11.2499995 355 0 2670 --59.9166665 -59.7499995 -11.4166665 -11.2499995 421 0 2670 --59.7500005 -59.5833335 -11.4166665 -11.2499995 423 0 2670 --59.5833335 -59.4166665 -11.4166665 -11.2499995 341 0 2670 --59.4166665 -59.2499995 -11.4166665 -11.2499995 327 0 2670 --59.2500005 -59.0833335 -11.4166665 -11.2499995 355 0 2670 --59.0833335 -58.9166665 -11.4166665 -11.2499995 409 0 2670 --58.9166665 -58.7499995 -11.4166665 -11.2499995 381 0 2670 --58.7500005 -58.5833335 -11.4166665 -11.2499995 364 0 2670 --58.5833335 -58.4166665 -11.4166665 -11.2499995 309 0 2670 --58.4166665 -58.2499995 -11.4166665 -11.2499995 256 0 2670 --58.2500005 -58.0833335 -11.4166665 -11.2499995 300 0 2670 --58.0833335 -57.9166665 -11.4166665 -11.2499995 300 0 2670 --57.9166665 -57.7499995 -11.4166665 -11.2499995 317 0 2670 --57.7500005 -57.5833335 -11.4166665 -11.2499995 281 0 2670 --57.5833335 -57.4166665 -11.4166665 -11.2499995 275 0 2670 --57.4166665 -57.2499995 -11.4166665 -11.2499995 312 0 2670 --57.2500005 -57.0833335 -11.4166665 -11.2499995 313 0 2670 --57.0833335 -56.9166665 -11.4166665 -11.2499995 350 0 2670 --56.9166665 -56.7499995 -11.4166665 -11.2499995 331 0 2670 --56.7500005 -56.5833335 -11.4166665 -11.2499995 361 0 2670 --56.5833335 -56.4166665 -11.4166665 -11.2499995 341 0 2670 --56.4166665 -56.2499995 -11.4166665 -11.2499995 350 0 2670 --56.2500005 -56.0833335 -11.4166665 -11.2499995 395 0 2670 --56.0833335 -55.9166665 -11.4166665 -11.2499995 349 0 2670 --55.9166665 -55.7499995 -11.4166665 -11.2499995 419 0 2670 --55.7500005 -55.5833335 -11.4166665 -11.2499995 339 0 2670 --55.5833335 -55.4166665 -11.4166665 -11.2499995 335 0 2670 --55.4166665 -55.2499995 -11.4166665 -11.2499995 346 0 2670 --55.2500005 -55.0833335 -11.4166665 -11.2499995 322 0 2670 --55.0833335 -54.9166665 -11.4166665 -11.2499995 315 0 2670 --54.9166665 -54.7499995 -11.4166665 -11.2499995 312 0 2670 --54.7500005 -54.5833335 -11.4166665 -11.2499995 331 0 2670 --54.5833335 -54.4166665 -11.4166665 -11.2499995 384 0 2670 --54.4166665 -54.2499995 -11.4166665 -11.2499995 355 0 2670 --54.2500005 -54.0833335 -11.4166665 -11.2499995 305 0 2670 --54.0833335 -53.9166665 -11.4166665 -11.2499995 365 0 2670 --53.9166665 -53.7499995 -11.4166665 -11.2499995 294 0 2670 --53.7500005 -53.5833335 -11.4166665 -11.2499995 332 0 2670 --53.5833335 -53.4166665 -11.4166665 -11.2499995 318 0 2670 --53.4166665 -53.2499995 -11.4166665 -11.2499995 275 0 2670 --53.2500005 -53.0833335 -11.4166665 -11.2499995 275 0 2670 --53.0833335 -52.9166665 -11.4166665 -11.2499995 306 0 2670 --52.9166665 -52.7499995 -11.4166665 -11.2499995 310 0 2670 --52.7500005 -52.5833335 -11.4166665 -11.2499995 328 0 2670 --52.5833335 -52.4166665 -11.4166665 -11.2499995 355 0 2670 --52.4166665 -52.2499995 -11.4166665 -11.2499995 362 0 2670 --52.2500005 -52.0833335 -11.4166665 -11.2499995 338 0 2670 --52.0833335 -51.9166665 -11.4166665 -11.2499995 276 0 2670 --51.9166665 -51.7499995 -11.4166665 -11.2499995 261 0 2670 --51.7500005 -51.5833335 -11.4166665 -11.2499995 239 0 2670 --51.5833335 -51.4166665 -11.4166665 -11.2499995 227 0 2670 --51.4166665 -51.2499995 -11.4166665 -11.2499995 200 0 2670 --51.2500005 -51.0833335 -11.4166665 -11.2499995 197 0 2670 --51.0833335 -50.9166665 -11.4166665 -11.2499995 188 0 2670 --50.9166665 -50.7499995 -11.4166665 -11.2499995 192 0 2670 --50.7500005 -50.5833335 -11.4166665 -11.2499995 188 0 2670 --50.5833335 -50.4166665 -11.4166665 -11.2499995 188 0 2670 --50.4166665 -50.2499995 -11.4166665 -11.2499995 187 0 2670 --50.2500005 -50.0833335 -11.4166665 -11.2499995 190 0 2670 --50.0833335 -49.9166665 -11.4166665 -11.2499995 189 0 2670 --49.9166665 -49.7499995 -11.4166665 -11.2499995 188 0 2670 --49.7500005 -49.5833335 -11.4166665 -11.2499995 191 0 2670 --49.5833335 -49.4166665 -11.4166665 -11.2499995 202 0 2670 --49.4166665 -49.2499995 -11.4166665 -11.2499995 239 0 2670 --49.2500005 -49.0833335 -11.4166665 -11.2499995 220 0 2670 --49.0833335 -48.9166665 -11.4166665 -11.2499995 288 0 2670 --48.9166665 -48.7499995 -11.4166665 -11.2499995 260 0 2670 --48.7500005 -48.5833335 -11.4166665 -11.2499995 308 0 2670 --48.5833335 -48.4166665 -11.4166665 -11.2499995 260 0 2670 --48.4166665 -48.2499995 -11.4166665 -11.2499995 256 0 2670 --48.2500005 -48.0833335 -11.4166665 -11.2499995 274 0 2670 --48.0833335 -47.9166665 -11.4166665 -11.2499995 282 0 2670 --47.9166665 -47.7499995 -11.4166665 -11.2499995 408 0 2670 --47.7500005 -47.5833335 -11.4166665 -11.2499995 467 0 2670 --47.5833335 -47.4166665 -11.4166665 -11.2499995 512 0 2670 --47.4166665 -47.2499995 -11.4166665 -11.2499995 531 0 2670 --47.2500005 -47.0833335 -11.4166665 -11.2499995 420 0 2670 --47.0833335 -46.9166665 -11.4166665 -11.2499995 550 0 2670 --46.9166665 -46.7499995 -11.4166665 -11.2499995 561 0 2670 --46.7500005 -46.5833335 -11.4166665 -11.2499995 723 0 2670 --46.5833335 -46.4166665 -11.4166665 -11.2499995 698 0 2670 --46.4166665 -46.2499995 -11.4166665 -11.2499995 718 0 2670 --46.2500005 -46.0833335 -11.4166665 -11.2499995 820 0 2670 --46.0833335 -45.9166665 -11.4166665 -11.2499995 803 0 2670 --45.9166665 -45.7499995 -11.4166665 -11.2499995 773 0 2670 --45.7500005 -45.5833335 -11.4166665 -11.2499995 768 0 2670 --45.5833335 -45.4166665 -11.4166665 -11.2499995 635 0 2670 --45.4166665 -45.2499995 -11.4166665 -11.2499995 646 0 2670 --45.2500005 -45.0833335 -11.4166665 -11.2499995 642 0 2670 --45.0833335 -44.9166665 -11.4166665 -11.2499995 751 0 2670 --44.9166665 -44.7499995 -11.4166665 -11.2499995 548 0 2670 --44.7500005 -44.5833335 -11.4166665 -11.2499995 490 0 2670 --44.5833335 -44.4166665 -11.4166665 -11.2499995 450 0 2670 --44.4166665 -44.2499995 -11.4166665 -11.2499995 435 0 2670 --44.2500005 -44.0833335 -11.4166665 -11.2499995 432 0 2670 --44.0833335 -43.9166665 -11.4166665 -11.2499995 427 0 2670 --43.9166665 -43.7499995 -11.4166665 -11.2499995 514 0 2670 --43.7500005 -43.5833335 -11.4166665 -11.2499995 520 0 2670 --43.5833335 -43.4166665 -11.4166665 -11.2499995 448 0 2670 --43.4166665 -43.2499995 -11.4166665 -11.2499995 432 0 2670 --43.2500005 -43.0833335 -11.4166665 -11.2499995 409 0 2670 --43.0833335 -42.9166665 -11.4166665 -11.2499995 417 0 2670 --42.9166665 -42.7499995 -11.4166665 -11.2499995 426 0 2670 --42.7500005 -42.5833335 -11.4166665 -11.2499995 980 0 2670 --42.5833335 -42.4166665 -11.4166665 -11.2499995 991 0 2670 --42.4166665 -42.2499995 -11.4166665 -11.2499995 499 0 2670 --42.2500005 -42.0833335 -11.4166665 -11.2499995 955 0 2670 --42.0833335 -41.9166665 -11.4166665 -11.2499995 698 0 2670 --41.9166665 -41.7499995 -11.4166665 -11.2499995 782 0 2670 --41.7500005 -41.5833335 -11.4166665 -11.2499995 818 0 2670 --41.5833335 -41.4166665 -11.4166665 -11.2499995 779 0 2670 --41.4166665 -41.2499995 -11.4166665 -11.2499995 952 0 2670 --41.2500005 -41.0833335 -11.4166665 -11.2499995 982 0 2670 --41.0833335 -40.9166665 -11.4166665 -11.2499995 889 0 2670 --40.9166665 -40.7499995 -11.4166665 -11.2499995 861 0 2670 --40.7500005 -40.5833335 -11.4166665 -11.2499995 523 0 2670 --40.5833335 -40.4166665 -11.4166665 -11.2499995 690 0 2670 --40.4166665 -40.2499995 -11.4166665 -11.2499995 450 0 2670 --40.2500005 -40.0833335 -11.4166665 -11.2499995 396 0 2670 --40.0833335 -39.9166665 -11.4166665 -11.2499995 398 0 2670 --65.0833335 -64.9166665 -11.5833335 -11.4166665 171 0 2670 --64.9166665 -64.7499995 -11.5833335 -11.4166665 159 0 2670 --64.7500005 -64.5833335 -11.5833335 -11.4166665 155 0 2670 --64.5833335 -64.4166665 -11.5833335 -11.4166665 168 0 2670 --64.4166665 -64.2499995 -11.5833335 -11.4166665 171 0 2670 --64.2500005 -64.0833335 -11.5833335 -11.4166665 175 0 2670 --64.0833335 -63.9166665 -11.5833335 -11.4166665 210 0 2670 --63.9166665 -63.7499995 -11.5833335 -11.4166665 202 0 2670 --63.7500005 -63.5833335 -11.5833335 -11.4166665 234 0 2670 --63.5833335 -63.4166665 -11.5833335 -11.4166665 239 0 2670 --63.4166665 -63.2499995 -11.5833335 -11.4166665 288 0 2670 --63.2500005 -63.0833335 -11.5833335 -11.4166665 298 0 2670 --63.0833335 -62.9166665 -11.5833335 -11.4166665 220 0 2670 --62.9166665 -62.7499995 -11.5833335 -11.4166665 288 0 2670 --62.7500005 -62.5833335 -11.5833335 -11.4166665 245 0 2670 --62.5833335 -62.4166665 -11.5833335 -11.4166665 286 0 2670 --62.4166665 -62.2499995 -11.5833335 -11.4166665 215 0 2670 --62.2500005 -62.0833335 -11.5833335 -11.4166665 203 0 2670 --62.0833335 -61.9166665 -11.5833335 -11.4166665 206 0 2670 --61.9166665 -61.7499995 -11.5833335 -11.4166665 182 0 2670 --61.7500005 -61.5833335 -11.5833335 -11.4166665 226 0 2670 --61.5833335 -61.4166665 -11.5833335 -11.4166665 207 0 2670 --61.4166665 -61.2499995 -11.5833335 -11.4166665 180 0 2670 --61.2500005 -61.0833335 -11.5833335 -11.4166665 222 0 2670 --61.0833335 -60.9166665 -11.5833335 -11.4166665 286 0 2670 --60.9166665 -60.7499995 -11.5833335 -11.4166665 237 0 2670 --60.7500005 -60.5833335 -11.5833335 -11.4166665 410 0 2670 --60.5833335 -60.4166665 -11.5833335 -11.4166665 320 0 2670 --60.4166665 -60.2499995 -11.5833335 -11.4166665 362 0 2670 --60.2500005 -60.0833335 -11.5833335 -11.4166665 424 0 2670 --60.0833335 -59.9166665 -11.5833335 -11.4166665 341 0 2670 --59.9166665 -59.7499995 -11.5833335 -11.4166665 342 0 2670 --59.7500005 -59.5833335 -11.5833335 -11.4166665 373 0 2670 --59.5833335 -59.4166665 -11.5833335 -11.4166665 370 0 2670 --59.4166665 -59.2499995 -11.5833335 -11.4166665 364 0 2670 --59.2500005 -59.0833335 -11.5833335 -11.4166665 342 0 2670 --59.0833335 -58.9166665 -11.5833335 -11.4166665 348 0 2670 --58.9166665 -58.7499995 -11.5833335 -11.4166665 335 0 2670 --58.7500005 -58.5833335 -11.5833335 -11.4166665 302 0 2670 --58.5833335 -58.4166665 -11.5833335 -11.4166665 305 0 2670 --58.4166665 -58.2499995 -11.5833335 -11.4166665 245 0 2670 --58.2500005 -58.0833335 -11.5833335 -11.4166665 251 0 2670 --58.0833335 -57.9166665 -11.5833335 -11.4166665 316 0 2670 --57.9166665 -57.7499995 -11.5833335 -11.4166665 299 0 2670 --57.7500005 -57.5833335 -11.5833335 -11.4166665 294 0 2670 --57.5833335 -57.4166665 -11.5833335 -11.4166665 264 0 2670 --57.4166665 -57.2499995 -11.5833335 -11.4166665 285 0 2670 --57.2500005 -57.0833335 -11.5833335 -11.4166665 275 0 2670 --57.0833335 -56.9166665 -11.5833335 -11.4166665 327 0 2670 --56.9166665 -56.7499995 -11.5833335 -11.4166665 340 0 2670 --56.7500005 -56.5833335 -11.5833335 -11.4166665 361 0 2670 --56.5833335 -56.4166665 -11.5833335 -11.4166665 365 0 2670 --56.4166665 -56.2499995 -11.5833335 -11.4166665 340 0 2670 --56.2500005 -56.0833335 -11.5833335 -11.4166665 356 0 2670 --56.0833335 -55.9166665 -11.5833335 -11.4166665 411 0 2670 --55.9166665 -55.7499995 -11.5833335 -11.4166665 413 0 2670 --55.7500005 -55.5833335 -11.5833335 -11.4166665 333 0 2670 --55.5833335 -55.4166665 -11.5833335 -11.4166665 339 0 2670 --55.4166665 -55.2499995 -11.5833335 -11.4166665 355 0 2670 --55.2500005 -55.0833335 -11.5833335 -11.4166665 371 0 2670 --55.0833335 -54.9166665 -11.5833335 -11.4166665 317 0 2670 --54.9166665 -54.7499995 -11.5833335 -11.4166665 328 0 2670 --54.7500005 -54.5833335 -11.5833335 -11.4166665 315 0 2670 --54.5833335 -54.4166665 -11.5833335 -11.4166665 384 0 2670 --54.4166665 -54.2499995 -11.5833335 -11.4166665 335 0 2670 --54.2500005 -54.0833335 -11.5833335 -11.4166665 359 0 2670 --54.0833335 -53.9166665 -11.5833335 -11.4166665 351 0 2670 --53.9166665 -53.7499995 -11.5833335 -11.4166665 312 0 2670 --53.7500005 -53.5833335 -11.5833335 -11.4166665 331 0 2670 --53.5833335 -53.4166665 -11.5833335 -11.4166665 278 0 2670 --53.4166665 -53.2499995 -11.5833335 -11.4166665 312 0 2670 --53.2500005 -53.0833335 -11.5833335 -11.4166665 312 0 2670 --53.0833335 -52.9166665 -11.5833335 -11.4166665 289 0 2670 --52.9166665 -52.7499995 -11.5833335 -11.4166665 317 0 2670 --52.7500005 -52.5833335 -11.5833335 -11.4166665 318 0 2670 --52.5833335 -52.4166665 -11.5833335 -11.4166665 329 0 2670 --52.4166665 -52.2499995 -11.5833335 -11.4166665 325 0 2670 --52.2500005 -52.0833335 -11.5833335 -11.4166665 369 0 2670 --52.0833335 -51.9166665 -11.5833335 -11.4166665 312 0 2670 --51.9166665 -51.7499995 -11.5833335 -11.4166665 295 0 2670 --51.7500005 -51.5833335 -11.5833335 -11.4166665 253 0 2670 --51.5833335 -51.4166665 -11.5833335 -11.4166665 267 0 2670 --51.4166665 -51.2499995 -11.5833335 -11.4166665 230 0 2670 --51.2500005 -51.0833335 -11.5833335 -11.4166665 222 0 2670 --51.0833335 -50.9166665 -11.5833335 -11.4166665 190 0 2670 --50.9166665 -50.7499995 -11.5833335 -11.4166665 191 0 2670 --50.7500005 -50.5833335 -11.5833335 -11.4166665 190 0 2670 --50.5833335 -50.4166665 -11.5833335 -11.4166665 191 0 2670 --50.4166665 -50.2499995 -11.5833335 -11.4166665 189 0 2670 --50.2500005 -50.0833335 -11.5833335 -11.4166665 191 0 2670 --50.0833335 -49.9166665 -11.5833335 -11.4166665 189 0 2670 --49.9166665 -49.7499995 -11.5833335 -11.4166665 190 0 2670 --49.7500005 -49.5833335 -11.5833335 -11.4166665 201 0 2670 --49.5833335 -49.4166665 -11.5833335 -11.4166665 217 0 2670 --49.4166665 -49.2499995 -11.5833335 -11.4166665 278 0 2670 --49.2500005 -49.0833335 -11.5833335 -11.4166665 262 0 2670 --49.0833335 -48.9166665 -11.5833335 -11.4166665 263 0 2670 --48.9166665 -48.7499995 -11.5833335 -11.4166665 287 0 2670 --48.7500005 -48.5833335 -11.5833335 -11.4166665 271 0 2670 --48.5833335 -48.4166665 -11.5833335 -11.4166665 254 0 2670 --48.4166665 -48.2499995 -11.5833335 -11.4166665 260 0 2670 --48.2500005 -48.0833335 -11.5833335 -11.4166665 267 0 2670 --48.0833335 -47.9166665 -11.5833335 -11.4166665 333 0 2670 --47.9166665 -47.7499995 -11.5833335 -11.4166665 339 0 2670 --47.7500005 -47.5833335 -11.5833335 -11.4166665 349 0 2670 --47.5833335 -47.4166665 -11.5833335 -11.4166665 451 0 2670 --47.4166665 -47.2499995 -11.5833335 -11.4166665 353 0 2670 --47.2500005 -47.0833335 -11.5833335 -11.4166665 420 0 2670 --47.0833335 -46.9166665 -11.5833335 -11.4166665 462 0 2670 --46.9166665 -46.7499995 -11.5833335 -11.4166665 546 0 2670 --46.7500005 -46.5833335 -11.5833335 -11.4166665 619 0 2670 --46.5833335 -46.4166665 -11.5833335 -11.4166665 903 0 2670 --46.4166665 -46.2499995 -11.5833335 -11.4166665 867 0 2670 --46.2500005 -46.0833335 -11.5833335 -11.4166665 838 0 2670 --46.0833335 -45.9166665 -11.5833335 -11.4166665 810 0 2670 --45.9166665 -45.7499995 -11.5833335 -11.4166665 788 0 2670 --45.7500005 -45.5833335 -11.5833335 -11.4166665 779 0 2670 --45.5833335 -45.4166665 -11.5833335 -11.4166665 770 0 2670 --45.4166665 -45.2499995 -11.5833335 -11.4166665 758 0 2670 --45.2500005 -45.0833335 -11.5833335 -11.4166665 654 0 2670 --45.0833335 -44.9166665 -11.5833335 -11.4166665 660 0 2670 --44.9166665 -44.7499995 -11.5833335 -11.4166665 474 0 2670 --44.7500005 -44.5833335 -11.5833335 -11.4166665 455 0 2670 --44.5833335 -44.4166665 -11.5833335 -11.4166665 441 0 2670 --44.4166665 -44.2499995 -11.5833335 -11.4166665 428 0 2670 --44.2500005 -44.0833335 -11.5833335 -11.4166665 428 0 2670 --44.0833335 -43.9166665 -11.5833335 -11.4166665 415 0 2670 --43.9166665 -43.7499995 -11.5833335 -11.4166665 438 0 2670 --43.7500005 -43.5833335 -11.5833335 -11.4166665 496 0 2670 --43.5833335 -43.4166665 -11.5833335 -11.4166665 456 0 2670 --43.4166665 -43.2499995 -11.5833335 -11.4166665 415 0 2670 --43.2500005 -43.0833335 -11.5833335 -11.4166665 416 0 2670 --43.0833335 -42.9166665 -11.5833335 -11.4166665 435 0 2670 --42.9166665 -42.7499995 -11.5833335 -11.4166665 512 0 2670 --42.7500005 -42.5833335 -11.5833335 -11.4166665 921 0 2670 --42.5833335 -42.4166665 -11.5833335 -11.4166665 1024 0 2670 --42.4166665 -42.2499995 -11.5833335 -11.4166665 775 0 2670 --42.2500005 -42.0833335 -11.5833335 -11.4166665 968 0 2670 --42.0833335 -41.9166665 -11.5833335 -11.4166665 773 0 2670 --41.9166665 -41.7499995 -11.5833335 -11.4166665 794 0 2670 --41.7500005 -41.5833335 -11.5833335 -11.4166665 789 0 2670 --41.5833335 -41.4166665 -11.5833335 -11.4166665 693 0 2670 --41.4166665 -41.2499995 -11.5833335 -11.4166665 927 0 2670 --41.2500005 -41.0833335 -11.5833335 -11.4166665 1078 0 2670 --41.0833335 -40.9166665 -11.5833335 -11.4166665 837 0 2670 --40.9166665 -40.7499995 -11.5833335 -11.4166665 888 0 2670 --40.7500005 -40.5833335 -11.5833335 -11.4166665 608 0 2670 --40.5833335 -40.4166665 -11.5833335 -11.4166665 589 0 2670 --40.4166665 -40.2499995 -11.5833335 -11.4166665 489 0 2670 --40.2500005 -40.0833335 -11.5833335 -11.4166665 398 0 2670 --40.0833335 -39.9166665 -11.5833335 -11.4166665 351 0 2670 --65.0833335 -64.9166665 -11.7500005 -11.5833335 157 0 2670 --64.9166665 -64.7499995 -11.7500005 -11.5833335 162 0 2670 --64.7500005 -64.5833335 -11.7500005 -11.5833335 161 0 2670 --64.5833335 -64.4166665 -11.7500005 -11.5833335 203 0 2670 --64.4166665 -64.2499995 -11.7500005 -11.5833335 206 0 2670 --64.2500005 -64.0833335 -11.7500005 -11.5833335 206 0 2670 --64.0833335 -63.9166665 -11.7500005 -11.5833335 399 0 2670 --63.9166665 -63.7499995 -11.7500005 -11.5833335 194 0 2670 --63.7500005 -63.5833335 -11.7500005 -11.5833335 203 0 2670 --63.5833335 -63.4166665 -11.7500005 -11.5833335 330 0 2670 --63.4166665 -63.2499995 -11.7500005 -11.5833335 240 0 2670 --63.2500005 -63.0833335 -11.7500005 -11.5833335 205 0 2670 --63.0833335 -62.9166665 -11.7500005 -11.5833335 205 0 2670 --62.9166665 -62.7499995 -11.7500005 -11.5833335 181 0 2670 --62.7500005 -62.5833335 -11.7500005 -11.5833335 208 0 2670 --62.5833335 -62.4166665 -11.7500005 -11.5833335 233 0 2670 --62.4166665 -62.2499995 -11.7500005 -11.5833335 258 0 2670 --62.2500005 -62.0833335 -11.7500005 -11.5833335 240 0 2670 --62.0833335 -61.9166665 -11.7500005 -11.5833335 221 0 2670 --61.9166665 -61.7499995 -11.7500005 -11.5833335 241 0 2670 --61.7500005 -61.5833335 -11.7500005 -11.5833335 234 0 2670 --61.5833335 -61.4166665 -11.7500005 -11.5833335 215 0 2670 --61.4166665 -61.2499995 -11.7500005 -11.5833335 238 0 2670 --61.2500005 -61.0833335 -11.7500005 -11.5833335 181 0 2670 --61.0833335 -60.9166665 -11.7500005 -11.5833335 226 0 2670 --60.9166665 -60.7499995 -11.7500005 -11.5833335 259 0 2670 --60.7500005 -60.5833335 -11.7500005 -11.5833335 359 0 2670 --60.5833335 -60.4166665 -11.7500005 -11.5833335 390 0 2670 --60.4166665 -60.2499995 -11.7500005 -11.5833335 355 0 2670 --60.2500005 -60.0833335 -11.7500005 -11.5833335 339 0 2670 --60.0833335 -59.9166665 -11.7500005 -11.5833335 346 0 2670 --59.9166665 -59.7499995 -11.7500005 -11.5833335 389 0 2670 --59.7500005 -59.5833335 -11.7500005 -11.5833335 349 0 2670 --59.5833335 -59.4166665 -11.7500005 -11.5833335 390 0 2670 --59.4166665 -59.2499995 -11.7500005 -11.5833335 352 0 2670 --59.2500005 -59.0833335 -11.7500005 -11.5833335 356 0 2670 --59.0833335 -58.9166665 -11.7500005 -11.5833335 362 0 2670 --58.9166665 -58.7499995 -11.7500005 -11.5833335 320 0 2670 --58.7500005 -58.5833335 -11.7500005 -11.5833335 326 0 2670 --58.5833335 -58.4166665 -11.7500005 -11.5833335 292 0 2670 --58.4166665 -58.2499995 -11.7500005 -11.5833335 295 0 2670 --58.2500005 -58.0833335 -11.7500005 -11.5833335 269 0 2670 --58.0833335 -57.9166665 -11.7500005 -11.5833335 299 0 2670 --57.9166665 -57.7499995 -11.7500005 -11.5833335 294 0 2670 --57.7500005 -57.5833335 -11.7500005 -11.5833335 314 0 2670 --57.5833335 -57.4166665 -11.7500005 -11.5833335 292 0 2670 --57.4166665 -57.2499995 -11.7500005 -11.5833335 280 0 2670 --57.2500005 -57.0833335 -11.7500005 -11.5833335 287 0 2670 --57.0833335 -56.9166665 -11.7500005 -11.5833335 307 0 2670 --56.9166665 -56.7499995 -11.7500005 -11.5833335 326 0 2670 --56.7500005 -56.5833335 -11.7500005 -11.5833335 368 0 2670 --56.5833335 -56.4166665 -11.7500005 -11.5833335 385 0 2670 --56.4166665 -56.2499995 -11.7500005 -11.5833335 352 0 2670 --56.2500005 -56.0833335 -11.7500005 -11.5833335 376 0 2670 --56.0833335 -55.9166665 -11.7500005 -11.5833335 396 0 2670 --55.9166665 -55.7499995 -11.7500005 -11.5833335 372 0 2670 --55.7500005 -55.5833335 -11.7500005 -11.5833335 351 0 2670 --55.5833335 -55.4166665 -11.7500005 -11.5833335 391 0 2670 --55.4166665 -55.2499995 -11.7500005 -11.5833335 377 0 2670 --55.2500005 -55.0833335 -11.7500005 -11.5833335 376 0 2670 --55.0833335 -54.9166665 -11.7500005 -11.5833335 317 0 2670 --54.9166665 -54.7499995 -11.7500005 -11.5833335 310 0 2670 --54.7500005 -54.5833335 -11.7500005 -11.5833335 332 0 2670 --54.5833335 -54.4166665 -11.7500005 -11.5833335 344 0 2670 --54.4166665 -54.2499995 -11.7500005 -11.5833335 345 0 2670 --54.2500005 -54.0833335 -11.7500005 -11.5833335 300 0 2670 --54.0833335 -53.9166665 -11.7500005 -11.5833335 330 0 2670 --53.9166665 -53.7499995 -11.7500005 -11.5833335 326 0 2670 --53.7500005 -53.5833335 -11.7500005 -11.5833335 320 0 2670 --53.5833335 -53.4166665 -11.7500005 -11.5833335 316 0 2670 --53.4166665 -53.2499995 -11.7500005 -11.5833335 326 0 2670 --53.2500005 -53.0833335 -11.7500005 -11.5833335 278 0 2670 --53.0833335 -52.9166665 -11.7500005 -11.5833335 320 0 2670 --52.9166665 -52.7499995 -11.7500005 -11.5833335 303 0 2670 --52.7500005 -52.5833335 -11.7500005 -11.5833335 281 0 2670 --52.5833335 -52.4166665 -11.7500005 -11.5833335 309 0 2670 --52.4166665 -52.2499995 -11.7500005 -11.5833335 344 0 2670 --52.2500005 -52.0833335 -11.7500005 -11.5833335 351 0 2670 --52.0833335 -51.9166665 -11.7500005 -11.5833335 343 0 2670 --51.9166665 -51.7499995 -11.7500005 -11.5833335 317 0 2670 --51.7500005 -51.5833335 -11.7500005 -11.5833335 321 0 2670 --51.5833335 -51.4166665 -11.7500005 -11.5833335 272 0 2670 --51.4166665 -51.2499995 -11.7500005 -11.5833335 235 0 2670 --51.2500005 -51.0833335 -11.7500005 -11.5833335 213 0 2670 --51.0833335 -50.9166665 -11.7500005 -11.5833335 195 0 2670 --50.9166665 -50.7499995 -11.7500005 -11.5833335 202 0 2670 --50.7500005 -50.5833335 -11.7500005 -11.5833335 191 0 2670 --50.5833335 -50.4166665 -11.7500005 -11.5833335 192 0 2670 --50.4166665 -50.2499995 -11.7500005 -11.5833335 191 0 2670 --50.2500005 -50.0833335 -11.7500005 -11.5833335 193 0 2670 --50.0833335 -49.9166665 -11.7500005 -11.5833335 191 0 2670 --49.9166665 -49.7499995 -11.7500005 -11.5833335 198 0 2670 --49.7500005 -49.5833335 -11.7500005 -11.5833335 194 0 2670 --49.5833335 -49.4166665 -11.7500005 -11.5833335 203 0 2670 --49.4166665 -49.2499995 -11.7500005 -11.5833335 285 0 2670 --49.2500005 -49.0833335 -11.7500005 -11.5833335 341 0 2670 --49.0833335 -48.9166665 -11.7500005 -11.5833335 286 0 2670 --48.9166665 -48.7499995 -11.7500005 -11.5833335 321 0 2670 --48.7500005 -48.5833335 -11.7500005 -11.5833335 238 0 2670 --48.5833335 -48.4166665 -11.7500005 -11.5833335 264 0 2670 --48.4166665 -48.2499995 -11.7500005 -11.5833335 262 0 2670 --48.2500005 -48.0833335 -11.7500005 -11.5833335 252 0 2670 --48.0833335 -47.9166665 -11.7500005 -11.5833335 311 0 2670 --47.9166665 -47.7499995 -11.7500005 -11.5833335 343 0 2670 --47.7500005 -47.5833335 -11.7500005 -11.5833335 426 0 2670 --47.5833335 -47.4166665 -11.7500005 -11.5833335 488 0 2670 --47.4166665 -47.2499995 -11.7500005 -11.5833335 372 0 2670 --47.2500005 -47.0833335 -11.7500005 -11.5833335 394 0 2670 --47.0833335 -46.9166665 -11.7500005 -11.5833335 407 0 2670 --46.9166665 -46.7499995 -11.7500005 -11.5833335 725 0 2670 --46.7500005 -46.5833335 -11.7500005 -11.5833335 592 0 2670 --46.5833335 -46.4166665 -11.7500005 -11.5833335 638 0 2670 --46.4166665 -46.2499995 -11.7500005 -11.5833335 803 0 2670 --46.2500005 -46.0833335 -11.7500005 -11.5833335 838 0 2670 --46.0833335 -45.9166665 -11.7500005 -11.5833335 813 0 2670 --45.9166665 -45.7499995 -11.7500005 -11.5833335 762 0 2670 --45.7500005 -45.5833335 -11.7500005 -11.5833335 779 0 2670 --45.5833335 -45.4166665 -11.7500005 -11.5833335 766 0 2670 --45.4166665 -45.2499995 -11.7500005 -11.5833335 667 0 2670 --45.2500005 -45.0833335 -11.7500005 -11.5833335 759 0 2670 --45.0833335 -44.9166665 -11.7500005 -11.5833335 769 0 2670 --44.9166665 -44.7499995 -11.7500005 -11.5833335 483 0 2670 --44.7500005 -44.5833335 -11.7500005 -11.5833335 444 0 2670 --44.5833335 -44.4166665 -11.7500005 -11.5833335 440 0 2670 --44.4166665 -44.2499995 -11.7500005 -11.5833335 434 0 2670 --44.2500005 -44.0833335 -11.7500005 -11.5833335 420 0 2670 --44.0833335 -43.9166665 -11.7500005 -11.5833335 426 0 2670 --43.9166665 -43.7499995 -11.7500005 -11.5833335 430 0 2670 --43.7500005 -43.5833335 -11.7500005 -11.5833335 539 0 2670 --43.5833335 -43.4166665 -11.7500005 -11.5833335 432 0 2670 --43.4166665 -43.2499995 -11.7500005 -11.5833335 411 0 2670 --43.2500005 -43.0833335 -11.7500005 -11.5833335 483 0 2670 --43.0833335 -42.9166665 -11.7500005 -11.5833335 558 0 2670 --42.9166665 -42.7499995 -11.7500005 -11.5833335 843 0 2670 --42.7500005 -42.5833335 -11.7500005 -11.5833335 856 0 2670 --42.5833335 -42.4166665 -11.7500005 -11.5833335 1323 0 2670 --42.4166665 -42.2499995 -11.7500005 -11.5833335 640 0 2670 --42.2500005 -42.0833335 -11.7500005 -11.5833335 738 0 2670 --42.0833335 -41.9166665 -11.7500005 -11.5833335 749 0 2670 --41.9166665 -41.7499995 -11.7500005 -11.5833335 742 0 2670 --41.7500005 -41.5833335 -11.7500005 -11.5833335 702 0 2670 --41.5833335 -41.4166665 -11.7500005 -11.5833335 760 0 2670 --41.4166665 -41.2499995 -11.7500005 -11.5833335 974 0 2670 --41.2500005 -41.0833335 -11.7500005 -11.5833335 961 0 2670 --41.0833335 -40.9166665 -11.7500005 -11.5833335 854 0 2670 --40.9166665 -40.7499995 -11.7500005 -11.5833335 712 0 2670 --40.7500005 -40.5833335 -11.7500005 -11.5833335 610 0 2670 --40.5833335 -40.4166665 -11.7500005 -11.5833335 554 0 2670 --40.4166665 -40.2499995 -11.7500005 -11.5833335 444 0 2670 --40.2500005 -40.0833335 -11.7500005 -11.5833335 467 0 2670 --40.0833335 -39.9166665 -11.7500005 -11.5833335 415 0 2670 --65.0833335 -64.9166665 -11.9166665 -11.7499995 163 0 2670 --64.9166665 -64.7499995 -11.9166665 -11.7499995 166 0 2670 --64.7500005 -64.5833335 -11.9166665 -11.7499995 169 0 2670 --64.5833335 -64.4166665 -11.9166665 -11.7499995 171 0 2670 --64.4166665 -64.2499995 -11.9166665 -11.7499995 201 0 2670 --64.2500005 -64.0833335 -11.9166665 -11.7499995 180 0 2670 --64.0833335 -63.9166665 -11.9166665 -11.7499995 217 0 2670 --63.9166665 -63.7499995 -11.9166665 -11.7499995 219 0 2670 --63.7500005 -63.5833335 -11.9166665 -11.7499995 238 0 2670 --63.5833335 -63.4166665 -11.9166665 -11.7499995 205 0 2670 --63.4166665 -63.2499995 -11.9166665 -11.7499995 193 0 2670 --63.2500005 -63.0833335 -11.9166665 -11.7499995 192 0 2670 --63.0833335 -62.9166665 -11.9166665 -11.7499995 183 0 2670 --62.9166665 -62.7499995 -11.9166665 -11.7499995 179 0 2670 --62.7500005 -62.5833335 -11.9166665 -11.7499995 204 0 2670 --62.5833335 -62.4166665 -11.9166665 -11.7499995 202 0 2670 --62.4166665 -62.2499995 -11.9166665 -11.7499995 277 0 2670 --62.2500005 -62.0833335 -11.9166665 -11.7499995 313 0 2670 --62.0833335 -61.9166665 -11.9166665 -11.7499995 283 0 2670 --61.9166665 -61.7499995 -11.9166665 -11.7499995 280 0 2670 --61.7500005 -61.5833335 -11.9166665 -11.7499995 240 0 2670 --61.5833335 -61.4166665 -11.9166665 -11.7499995 216 0 2670 --61.4166665 -61.2499995 -11.9166665 -11.7499995 231 0 2670 --61.2500005 -61.0833335 -11.9166665 -11.7499995 201 0 2670 --61.0833335 -60.9166665 -11.9166665 -11.7499995 209 0 2670 --60.9166665 -60.7499995 -11.9166665 -11.7499995 227 0 2670 --60.7500005 -60.5833335 -11.9166665 -11.7499995 328 0 2670 --60.5833335 -60.4166665 -11.9166665 -11.7499995 341 0 2670 --60.4166665 -60.2499995 -11.9166665 -11.7499995 371 0 2670 --60.2500005 -60.0833335 -11.9166665 -11.7499995 427 0 2670 --60.0833335 -59.9166665 -11.9166665 -11.7499995 423 0 2670 --59.9166665 -59.7499995 -11.9166665 -11.7499995 390 0 2670 --59.7500005 -59.5833335 -11.9166665 -11.7499995 334 0 2670 --59.5833335 -59.4166665 -11.9166665 -11.7499995 361 0 2670 --59.4166665 -59.2499995 -11.9166665 -11.7499995 388 0 2670 --59.2500005 -59.0833335 -11.9166665 -11.7499995 407 0 2670 --59.0833335 -58.9166665 -11.9166665 -11.7499995 425 0 2670 --58.9166665 -58.7499995 -11.9166665 -11.7499995 410 0 2670 --58.7500005 -58.5833335 -11.9166665 -11.7499995 289 0 2670 --58.5833335 -58.4166665 -11.9166665 -11.7499995 338 0 2670 --58.4166665 -58.2499995 -11.9166665 -11.7499995 276 0 2670 --58.2500005 -58.0833335 -11.9166665 -11.7499995 290 0 2670 --58.0833335 -57.9166665 -11.9166665 -11.7499995 285 0 2670 --57.9166665 -57.7499995 -11.9166665 -11.7499995 310 0 2670 --57.7500005 -57.5833335 -11.9166665 -11.7499995 337 0 2670 --57.5833335 -57.4166665 -11.9166665 -11.7499995 313 0 2670 --57.4166665 -57.2499995 -11.9166665 -11.7499995 290 0 2670 --57.2500005 -57.0833335 -11.9166665 -11.7499995 298 0 2670 --57.0833335 -56.9166665 -11.9166665 -11.7499995 315 0 2670 --56.9166665 -56.7499995 -11.9166665 -11.7499995 331 0 2670 --56.7500005 -56.5833335 -11.9166665 -11.7499995 333 0 2670 --56.5833335 -56.4166665 -11.9166665 -11.7499995 362 0 2670 --56.4166665 -56.2499995 -11.9166665 -11.7499995 372 0 2670 --56.2500005 -56.0833335 -11.9166665 -11.7499995 384 0 2670 --56.0833335 -55.9166665 -11.9166665 -11.7499995 373 0 2670 --55.9166665 -55.7499995 -11.9166665 -11.7499995 330 0 2670 --55.7500005 -55.5833335 -11.9166665 -11.7499995 323 0 2670 --55.5833335 -55.4166665 -11.9166665 -11.7499995 373 0 2670 --55.4166665 -55.2499995 -11.9166665 -11.7499995 353 0 2670 --55.2500005 -55.0833335 -11.9166665 -11.7499995 343 0 2670 --55.0833335 -54.9166665 -11.9166665 -11.7499995 354 0 2670 --54.9166665 -54.7499995 -11.9166665 -11.7499995 373 0 2670 --54.7500005 -54.5833335 -11.9166665 -11.7499995 376 0 2670 --54.5833335 -54.4166665 -11.9166665 -11.7499995 381 0 2670 --54.4166665 -54.2499995 -11.9166665 -11.7499995 339 0 2670 --54.2500005 -54.0833335 -11.9166665 -11.7499995 339 0 2670 --54.0833335 -53.9166665 -11.9166665 -11.7499995 349 0 2670 --53.9166665 -53.7499995 -11.9166665 -11.7499995 345 0 2670 --53.7500005 -53.5833335 -11.9166665 -11.7499995 316 0 2670 --53.5833335 -53.4166665 -11.9166665 -11.7499995 311 0 2670 --53.4166665 -53.2499995 -11.9166665 -11.7499995 329 0 2670 --53.2500005 -53.0833335 -11.9166665 -11.7499995 303 0 2670 --53.0833335 -52.9166665 -11.9166665 -11.7499995 325 0 2670 --52.9166665 -52.7499995 -11.9166665 -11.7499995 317 0 2670 --52.7500005 -52.5833335 -11.9166665 -11.7499995 326 0 2670 --52.5833335 -52.4166665 -11.9166665 -11.7499995 308 0 2670 --52.4166665 -52.2499995 -11.9166665 -11.7499995 345 0 2670 --52.2500005 -52.0833335 -11.9166665 -11.7499995 318 0 2670 --52.0833335 -51.9166665 -11.9166665 -11.7499995 375 0 2670 --51.9166665 -51.7499995 -11.9166665 -11.7499995 389 0 2670 --51.7500005 -51.5833335 -11.9166665 -11.7499995 319 0 2670 --51.5833335 -51.4166665 -11.9166665 -11.7499995 360 0 2670 --51.4166665 -51.2499995 -11.9166665 -11.7499995 246 0 2670 --51.2500005 -51.0833335 -11.9166665 -11.7499995 209 0 2670 --51.0833335 -50.9166665 -11.9166665 -11.7499995 195 0 2670 --50.9166665 -50.7499995 -11.9166665 -11.7499995 196 0 2670 --50.7500005 -50.5833335 -11.9166665 -11.7499995 195 0 2670 --50.5833335 -50.4166665 -11.9166665 -11.7499995 195 0 2670 --50.4166665 -50.2499995 -11.9166665 -11.7499995 194 0 2670 --50.2500005 -50.0833335 -11.9166665 -11.7499995 195 0 2670 --50.0833335 -49.9166665 -11.9166665 -11.7499995 194 0 2670 --49.9166665 -49.7499995 -11.9166665 -11.7499995 190 0 2670 --49.7500005 -49.5833335 -11.9166665 -11.7499995 192 0 2670 --49.5833335 -49.4166665 -11.9166665 -11.7499995 238 0 2670 --49.4166665 -49.2499995 -11.9166665 -11.7499995 233 0 2670 --49.2500005 -49.0833335 -11.9166665 -11.7499995 286 0 2670 --49.0833335 -48.9166665 -11.9166665 -11.7499995 255 0 2670 --48.9166665 -48.7499995 -11.9166665 -11.7499995 245 0 2670 --48.7500005 -48.5833335 -11.9166665 -11.7499995 244 0 2670 --48.5833335 -48.4166665 -11.9166665 -11.7499995 277 0 2670 --48.4166665 -48.2499995 -11.9166665 -11.7499995 274 0 2670 --48.2500005 -48.0833335 -11.9166665 -11.7499995 311 0 2670 --48.0833335 -47.9166665 -11.9166665 -11.7499995 303 0 2670 --47.9166665 -47.7499995 -11.9166665 -11.7499995 310 0 2670 --47.7500005 -47.5833335 -11.9166665 -11.7499995 302 0 2670 --47.5833335 -47.4166665 -11.9166665 -11.7499995 312 0 2670 --47.4166665 -47.2499995 -11.9166665 -11.7499995 353 0 2670 --47.2500005 -47.0833335 -11.9166665 -11.7499995 343 0 2670 --47.0833335 -46.9166665 -11.9166665 -11.7499995 384 0 2670 --46.9166665 -46.7499995 -11.9166665 -11.7499995 461 0 2670 --46.7500005 -46.5833335 -11.9166665 -11.7499995 639 0 2670 --46.5833335 -46.4166665 -11.9166665 -11.7499995 609 0 2670 --46.4166665 -46.2499995 -11.9166665 -11.7499995 864 0 2670 --46.2500005 -46.0833335 -11.9166665 -11.7499995 821 0 2670 --46.0833335 -45.9166665 -11.9166665 -11.7499995 781 0 2670 --45.9166665 -45.7499995 -11.9166665 -11.7499995 781 0 2670 --45.7500005 -45.5833335 -11.9166665 -11.7499995 766 0 2670 --45.5833335 -45.4166665 -11.9166665 -11.7499995 752 0 2670 --45.4166665 -45.2499995 -11.9166665 -11.7499995 609 0 2670 --45.2500005 -45.0833335 -11.9166665 -11.7499995 481 0 2670 --45.0833335 -44.9166665 -11.9166665 -11.7499995 673 0 2670 --44.9166665 -44.7499995 -11.9166665 -11.7499995 493 0 2670 --44.7500005 -44.5833335 -11.9166665 -11.7499995 448 0 2670 --44.5833335 -44.4166665 -11.9166665 -11.7499995 438 0 2670 --44.4166665 -44.2499995 -11.9166665 -11.7499995 430 0 2670 --44.2500005 -44.0833335 -11.9166665 -11.7499995 434 0 2670 --44.0833335 -43.9166665 -11.9166665 -11.7499995 446 0 2670 --43.9166665 -43.7499995 -11.9166665 -11.7499995 448 0 2670 --43.7500005 -43.5833335 -11.9166665 -11.7499995 677 0 2670 --43.5833335 -43.4166665 -11.9166665 -11.7499995 448 0 2670 --43.4166665 -43.2499995 -11.9166665 -11.7499995 413 0 2670 --43.2500005 -43.0833335 -11.9166665 -11.7499995 426 0 2670 --43.0833335 -42.9166665 -11.9166665 -11.7499995 434 0 2670 --42.9166665 -42.7499995 -11.9166665 -11.7499995 593 0 2670 --42.7500005 -42.5833335 -11.9166665 -11.7499995 732 0 2670 --42.5833335 -42.4166665 -11.9166665 -11.7499995 988 0 2670 --42.4166665 -42.2499995 -11.9166665 -11.7499995 1078 0 2670 --42.2500005 -42.0833335 -11.9166665 -11.7499995 878 0 2670 --42.0833335 -41.9166665 -11.9166665 -11.7499995 795 0 2670 --41.9166665 -41.7499995 -11.9166665 -11.7499995 786 0 2670 --41.7500005 -41.5833335 -11.9166665 -11.7499995 812 0 2670 --41.5833335 -41.4166665 -11.9166665 -11.7499995 791 0 2670 --41.4166665 -41.2499995 -11.9166665 -11.7499995 946 0 2670 --41.2500005 -41.0833335 -11.9166665 -11.7499995 946 0 2670 --41.0833335 -40.9166665 -11.9166665 -11.7499995 784 0 2670 --40.9166665 -40.7499995 -11.9166665 -11.7499995 805 0 2670 --40.7500005 -40.5833335 -11.9166665 -11.7499995 606 0 2670 --40.5833335 -40.4166665 -11.9166665 -11.7499995 665 0 2670 --40.4166665 -40.2499995 -11.9166665 -11.7499995 465 0 2670 --40.2500005 -40.0833335 -11.9166665 -11.7499995 425 0 2670 --40.0833335 -39.9166665 -11.9166665 -11.7499995 338 0 2670 --65.0833335 -64.9166665 -12.0833335 -11.9166665 132 0 2670 --64.9166665 -64.7499995 -12.0833335 -11.9166665 160 0 2670 --64.7500005 -64.5833335 -12.0833335 -11.9166665 167 0 2670 --64.5833335 -64.4166665 -12.0833335 -11.9166665 174 0 2670 --64.4166665 -64.2499995 -12.0833335 -11.9166665 168 0 2670 --64.2500005 -64.0833335 -12.0833335 -11.9166665 186 0 2670 --64.0833335 -63.9166665 -12.0833335 -11.9166665 181 0 2670 --63.9166665 -63.7499995 -12.0833335 -11.9166665 168 0 2670 --63.7500005 -63.5833335 -12.0833335 -11.9166665 198 0 2670 --63.5833335 -63.4166665 -12.0833335 -11.9166665 182 0 2670 --63.4166665 -63.2499995 -12.0833335 -11.9166665 210 0 2670 --63.2500005 -63.0833335 -12.0833335 -11.9166665 176 0 2670 --63.0833335 -62.9166665 -12.0833335 -11.9166665 165 0 2670 --62.9166665 -62.7499995 -12.0833335 -11.9166665 174 0 2670 --62.7500005 -62.5833335 -12.0833335 -11.9166665 334 0 2670 --62.5833335 -62.4166665 -12.0833335 -11.9166665 175 0 2670 --62.4166665 -62.2499995 -12.0833335 -11.9166665 327 0 2670 --62.2500005 -62.0833335 -12.0833335 -11.9166665 403 0 2670 --62.0833335 -61.9166665 -12.0833335 -11.9166665 398 0 2670 --61.9166665 -61.7499995 -12.0833335 -11.9166665 381 0 2670 --61.7500005 -61.5833335 -12.0833335 -11.9166665 337 0 2670 --61.5833335 -61.4166665 -12.0833335 -11.9166665 262 0 2670 --61.4166665 -61.2499995 -12.0833335 -11.9166665 213 0 2670 --61.2500005 -61.0833335 -12.0833335 -11.9166665 216 0 2670 --61.0833335 -60.9166665 -12.0833335 -11.9166665 283 0 2670 --60.9166665 -60.7499995 -12.0833335 -11.9166665 308 0 2670 --60.7500005 -60.5833335 -12.0833335 -11.9166665 275 0 2670 --60.5833335 -60.4166665 -12.0833335 -11.9166665 351 0 2670 --60.4166665 -60.2499995 -12.0833335 -11.9166665 370 0 2670 --60.2500005 -60.0833335 -12.0833335 -11.9166665 435 0 2670 --60.0833335 -59.9166665 -12.0833335 -11.9166665 395 0 2670 --59.9166665 -59.7499995 -12.0833335 -11.9166665 447 0 2670 --59.7500005 -59.5833335 -12.0833335 -11.9166665 427 0 2670 --59.5833335 -59.4166665 -12.0833335 -11.9166665 394 0 2670 --59.4166665 -59.2499995 -12.0833335 -11.9166665 469 0 2670 --59.2500005 -59.0833335 -12.0833335 -11.9166665 354 0 2670 --59.0833335 -58.9166665 -12.0833335 -11.9166665 354 0 2670 --58.9166665 -58.7499995 -12.0833335 -11.9166665 302 0 2670 --58.7500005 -58.5833335 -12.0833335 -11.9166665 284 0 2670 --58.5833335 -58.4166665 -12.0833335 -11.9166665 305 0 2670 --58.4166665 -58.2499995 -12.0833335 -11.9166665 325 0 2670 --58.2500005 -58.0833335 -12.0833335 -11.9166665 298 0 2670 --58.0833335 -57.9166665 -12.0833335 -11.9166665 273 0 2670 --57.9166665 -57.7499995 -12.0833335 -11.9166665 293 0 2670 --57.7500005 -57.5833335 -12.0833335 -11.9166665 332 0 2670 --57.5833335 -57.4166665 -12.0833335 -11.9166665 361 0 2670 --57.4166665 -57.2499995 -12.0833335 -11.9166665 326 0 2670 --57.2500005 -57.0833335 -12.0833335 -11.9166665 281 0 2670 --57.0833335 -56.9166665 -12.0833335 -11.9166665 318 0 2670 --56.9166665 -56.7499995 -12.0833335 -11.9166665 350 0 2670 --56.7500005 -56.5833335 -12.0833335 -11.9166665 344 0 2670 --56.5833335 -56.4166665 -12.0833335 -11.9166665 348 0 2670 --56.4166665 -56.2499995 -12.0833335 -11.9166665 378 0 2670 --56.2500005 -56.0833335 -12.0833335 -11.9166665 390 0 2670 --56.0833335 -55.9166665 -12.0833335 -11.9166665 351 0 2670 --55.9166665 -55.7499995 -12.0833335 -11.9166665 376 0 2670 --55.7500005 -55.5833335 -12.0833335 -11.9166665 360 0 2670 --55.5833335 -55.4166665 -12.0833335 -11.9166665 362 0 2670 --55.4166665 -55.2499995 -12.0833335 -11.9166665 357 0 2670 --55.2500005 -55.0833335 -12.0833335 -11.9166665 377 0 2670 --55.0833335 -54.9166665 -12.0833335 -11.9166665 313 0 2670 --54.9166665 -54.7499995 -12.0833335 -11.9166665 389 0 2670 --54.7500005 -54.5833335 -12.0833335 -11.9166665 371 0 2670 --54.5833335 -54.4166665 -12.0833335 -11.9166665 310 0 2670 --54.4166665 -54.2499995 -12.0833335 -11.9166665 351 0 2670 --54.2500005 -54.0833335 -12.0833335 -11.9166665 360 0 2670 --54.0833335 -53.9166665 -12.0833335 -11.9166665 324 0 2670 --53.9166665 -53.7499995 -12.0833335 -11.9166665 317 0 2670 --53.7500005 -53.5833335 -12.0833335 -11.9166665 290 0 2670 --53.5833335 -53.4166665 -12.0833335 -11.9166665 295 0 2670 --53.4166665 -53.2499995 -12.0833335 -11.9166665 318 0 2670 --53.2500005 -53.0833335 -12.0833335 -11.9166665 324 0 2670 --53.0833335 -52.9166665 -12.0833335 -11.9166665 327 0 2670 --52.9166665 -52.7499995 -12.0833335 -11.9166665 323 0 2670 --52.7500005 -52.5833335 -12.0833335 -11.9166665 318 0 2670 --52.5833335 -52.4166665 -12.0833335 -11.9166665 341 0 2670 --52.4166665 -52.2499995 -12.0833335 -11.9166665 301 0 2670 --52.2500005 -52.0833335 -12.0833335 -11.9166665 339 0 2670 --52.0833335 -51.9166665 -12.0833335 -11.9166665 333 0 2670 --51.9166665 -51.7499995 -12.0833335 -11.9166665 373 0 2670 --51.7500005 -51.5833335 -12.0833335 -11.9166665 298 0 2670 --51.5833335 -51.4166665 -12.0833335 -11.9166665 322 0 2670 --51.4166665 -51.2499995 -12.0833335 -11.9166665 270 0 2670 --51.2500005 -51.0833335 -12.0833335 -11.9166665 227 0 2670 --51.0833335 -50.9166665 -12.0833335 -11.9166665 200 0 2670 --50.9166665 -50.7499995 -12.0833335 -11.9166665 197 0 2670 --50.7500005 -50.5833335 -12.0833335 -11.9166665 198 0 2670 --50.5833335 -50.4166665 -12.0833335 -11.9166665 196 0 2670 --50.4166665 -50.2499995 -12.0833335 -11.9166665 195 0 2670 --50.2500005 -50.0833335 -12.0833335 -11.9166665 196 0 2670 --50.0833335 -49.9166665 -12.0833335 -11.9166665 197 0 2670 --49.9166665 -49.7499995 -12.0833335 -11.9166665 195 0 2670 --49.7500005 -49.5833335 -12.0833335 -11.9166665 196 0 2670 --49.5833335 -49.4166665 -12.0833335 -11.9166665 245 0 2670 --49.4166665 -49.2499995 -12.0833335 -11.9166665 282 0 2670 --49.2500005 -49.0833335 -12.0833335 -11.9166665 274 0 2670 --49.0833335 -48.9166665 -12.0833335 -11.9166665 264 0 2670 --48.9166665 -48.7499995 -12.0833335 -11.9166665 271 0 2670 --48.7500005 -48.5833335 -12.0833335 -11.9166665 241 0 2670 --48.5833335 -48.4166665 -12.0833335 -11.9166665 245 0 2670 --48.4166665 -48.2499995 -12.0833335 -11.9166665 326 0 2670 --48.2500005 -48.0833335 -12.0833335 -11.9166665 329 0 2670 --48.0833335 -47.9166665 -12.0833335 -11.9166665 386 0 2670 --47.9166665 -47.7499995 -12.0833335 -11.9166665 520 0 2670 --47.7500005 -47.5833335 -12.0833335 -11.9166665 342 0 2670 --47.5833335 -47.4166665 -12.0833335 -11.9166665 329 0 2670 --47.4166665 -47.2499995 -12.0833335 -11.9166665 322 0 2670 --47.2500005 -47.0833335 -12.0833335 -11.9166665 352 0 2670 --47.0833335 -46.9166665 -12.0833335 -11.9166665 375 0 2670 --46.9166665 -46.7499995 -12.0833335 -11.9166665 436 0 2670 --46.7500005 -46.5833335 -12.0833335 -11.9166665 393 0 2670 --46.5833335 -46.4166665 -12.0833335 -11.9166665 470 0 2670 --46.4166665 -46.2499995 -12.0833335 -11.9166665 846 0 2670 --46.2500005 -46.0833335 -12.0833335 -11.9166665 846 0 2670 --46.0833335 -45.9166665 -12.0833335 -11.9166665 807 0 2670 --45.9166665 -45.7499995 -12.0833335 -11.9166665 772 0 2670 --45.7500005 -45.5833335 -12.0833335 -11.9166665 766 0 2670 --45.5833335 -45.4166665 -12.0833335 -11.9166665 748 0 2670 --45.4166665 -45.2499995 -12.0833335 -11.9166665 739 0 2670 --45.2500005 -45.0833335 -12.0833335 -11.9166665 742 0 2670 --45.0833335 -44.9166665 -12.0833335 -11.9166665 457 0 2670 --44.9166665 -44.7499995 -12.0833335 -11.9166665 458 0 2670 --44.7500005 -44.5833335 -12.0833335 -11.9166665 470 0 2670 --44.5833335 -44.4166665 -12.0833335 -11.9166665 475 0 2670 --44.4166665 -44.2499995 -12.0833335 -11.9166665 482 0 2670 --44.2500005 -44.0833335 -12.0833335 -11.9166665 483 0 2670 --44.0833335 -43.9166665 -12.0833335 -11.9166665 716 0 2670 --43.9166665 -43.7499995 -12.0833335 -11.9166665 502 0 2670 --43.7500005 -43.5833335 -12.0833335 -11.9166665 469 0 2670 --43.5833335 -43.4166665 -12.0833335 -11.9166665 620 0 2670 --43.4166665 -43.2499995 -12.0833335 -11.9166665 415 0 2670 --43.2500005 -43.0833335 -12.0833335 -11.9166665 548 0 2670 --43.0833335 -42.9166665 -12.0833335 -11.9166665 445 0 2670 --42.9166665 -42.7499995 -12.0833335 -11.9166665 467 0 2670 --42.7500005 -42.5833335 -12.0833335 -11.9166665 913 0 2670 --42.5833335 -42.4166665 -12.0833335 -11.9166665 872 0 2670 --42.4166665 -42.2499995 -12.0833335 -11.9166665 1082 0 2670 --42.2500005 -42.0833335 -12.0833335 -11.9166665 1175 0 2670 --42.0833335 -41.9166665 -12.0833335 -11.9166665 833 0 2670 --41.9166665 -41.7499995 -12.0833335 -11.9166665 806 0 2670 --41.7500005 -41.5833335 -12.0833335 -11.9166665 843 0 2670 --41.5833335 -41.4166665 -12.0833335 -11.9166665 1030 0 2670 --41.4166665 -41.2499995 -12.0833335 -11.9166665 950 0 2670 --41.2500005 -41.0833335 -12.0833335 -11.9166665 810 0 2670 --41.0833335 -40.9166665 -12.0833335 -11.9166665 640 0 2670 --40.9166665 -40.7499995 -12.0833335 -11.9166665 710 0 2670 --40.7500005 -40.5833335 -12.0833335 -11.9166665 540 0 2670 --40.5833335 -40.4166665 -12.0833335 -11.9166665 459 0 2670 --40.4166665 -40.2499995 -12.0833335 -11.9166665 372 0 2670 --40.2500005 -40.0833335 -12.0833335 -11.9166665 341 0 2670 --40.0833335 -39.9166665 -12.0833335 -11.9166665 307 0 2670 --65.0833335 -64.9166665 -12.2500005 -12.0833335 145 0 2670 --64.9166665 -64.7499995 -12.2500005 -12.0833335 157 0 2670 --64.7500005 -64.5833335 -12.2500005 -12.0833335 132 0 2670 --64.5833335 -64.4166665 -12.2500005 -12.0833335 149 0 2670 --64.4166665 -64.2499995 -12.2500005 -12.0833335 165 0 2670 --64.2500005 -64.0833335 -12.2500005 -12.0833335 163 0 2670 --64.0833335 -63.9166665 -12.2500005 -12.0833335 172 0 2670 --63.9166665 -63.7499995 -12.2500005 -12.0833335 226 0 2670 --63.7500005 -63.5833335 -12.2500005 -12.0833335 189 0 2670 --63.5833335 -63.4166665 -12.2500005 -12.0833335 163 0 2670 --63.4166665 -63.2499995 -12.2500005 -12.0833335 162 0 2670 --63.2500005 -63.0833335 -12.2500005 -12.0833335 166 0 2670 --63.0833335 -62.9166665 -12.2500005 -12.0833335 175 0 2670 --62.9166665 -62.7499995 -12.2500005 -12.0833335 185 0 2670 --62.7500005 -62.5833335 -12.2500005 -12.0833335 193 0 2670 --62.5833335 -62.4166665 -12.2500005 -12.0833335 189 0 2670 --62.4166665 -62.2499995 -12.2500005 -12.0833335 436 0 2670 --62.2500005 -62.0833335 -12.2500005 -12.0833335 450 0 2670 --62.0833335 -61.9166665 -12.2500005 -12.0833335 445 0 2670 --61.9166665 -61.7499995 -12.2500005 -12.0833335 414 0 2670 --61.7500005 -61.5833335 -12.2500005 -12.0833335 335 0 2670 --61.5833335 -61.4166665 -12.2500005 -12.0833335 302 0 2670 --61.4166665 -61.2499995 -12.2500005 -12.0833335 273 0 2670 --61.2500005 -61.0833335 -12.2500005 -12.0833335 252 0 2670 --61.0833335 -60.9166665 -12.2500005 -12.0833335 306 0 2670 --60.9166665 -60.7499995 -12.2500005 -12.0833335 312 0 2670 --60.7500005 -60.5833335 -12.2500005 -12.0833335 322 0 2670 --60.5833335 -60.4166665 -12.2500005 -12.0833335 326 0 2670 --60.4166665 -60.2499995 -12.2500005 -12.0833335 371 0 2670 --60.2500005 -60.0833335 -12.2500005 -12.0833335 420 0 2670 --60.0833335 -59.9166665 -12.2500005 -12.0833335 440 0 2670 --59.9166665 -59.7499995 -12.2500005 -12.0833335 413 0 2670 --59.7500005 -59.5833335 -12.2500005 -12.0833335 469 0 2670 --59.5833335 -59.4166665 -12.2500005 -12.0833335 377 0 2670 --59.4166665 -59.2499995 -12.2500005 -12.0833335 337 0 2670 --59.2500005 -59.0833335 -12.2500005 -12.0833335 401 0 2670 --59.0833335 -58.9166665 -12.2500005 -12.0833335 344 0 2670 --58.9166665 -58.7499995 -12.2500005 -12.0833335 293 0 2670 --58.7500005 -58.5833335 -12.2500005 -12.0833335 290 0 2670 --58.5833335 -58.4166665 -12.2500005 -12.0833335 278 0 2670 --58.4166665 -58.2499995 -12.2500005 -12.0833335 343 0 2670 --58.2500005 -58.0833335 -12.2500005 -12.0833335 278 0 2670 --58.0833335 -57.9166665 -12.2500005 -12.0833335 287 0 2670 --57.9166665 -57.7499995 -12.2500005 -12.0833335 277 0 2670 --57.7500005 -57.5833335 -12.2500005 -12.0833335 279 0 2670 --57.5833335 -57.4166665 -12.2500005 -12.0833335 302 0 2670 --57.4166665 -57.2499995 -12.2500005 -12.0833335 377 0 2670 --57.2500005 -57.0833335 -12.2500005 -12.0833335 308 0 2670 --57.0833335 -56.9166665 -12.2500005 -12.0833335 322 0 2670 --56.9166665 -56.7499995 -12.2500005 -12.0833335 333 0 2670 --56.7500005 -56.5833335 -12.2500005 -12.0833335 305 0 2670 --56.5833335 -56.4166665 -12.2500005 -12.0833335 355 0 2670 --56.4166665 -56.2499995 -12.2500005 -12.0833335 400 0 2670 --56.2500005 -56.0833335 -12.2500005 -12.0833335 371 0 2670 --56.0833335 -55.9166665 -12.2500005 -12.0833335 374 0 2670 --55.9166665 -55.7499995 -12.2500005 -12.0833335 375 0 2670 --55.7500005 -55.5833335 -12.2500005 -12.0833335 370 0 2670 --55.5833335 -55.4166665 -12.2500005 -12.0833335 342 0 2670 --55.4166665 -55.2499995 -12.2500005 -12.0833335 371 0 2670 --55.2500005 -55.0833335 -12.2500005 -12.0833335 356 0 2670 --55.0833335 -54.9166665 -12.2500005 -12.0833335 389 0 2670 --54.9166665 -54.7499995 -12.2500005 -12.0833335 325 0 2670 --54.7500005 -54.5833335 -12.2500005 -12.0833335 352 0 2670 --54.5833335 -54.4166665 -12.2500005 -12.0833335 379 0 2670 --54.4166665 -54.2499995 -12.2500005 -12.0833335 356 0 2670 --54.2500005 -54.0833335 -12.2500005 -12.0833335 339 0 2670 --54.0833335 -53.9166665 -12.2500005 -12.0833335 346 0 2670 --53.9166665 -53.7499995 -12.2500005 -12.0833335 289 0 2670 --53.7500005 -53.5833335 -12.2500005 -12.0833335 311 0 2670 --53.5833335 -53.4166665 -12.2500005 -12.0833335 326 0 2670 --53.4166665 -53.2499995 -12.2500005 -12.0833335 288 0 2670 --53.2500005 -53.0833335 -12.2500005 -12.0833335 313 0 2670 --53.0833335 -52.9166665 -12.2500005 -12.0833335 313 0 2670 --52.9166665 -52.7499995 -12.2500005 -12.0833335 312 0 2670 --52.7500005 -52.5833335 -12.2500005 -12.0833335 331 0 2670 --52.5833335 -52.4166665 -12.2500005 -12.0833335 345 0 2670 --52.4166665 -52.2499995 -12.2500005 -12.0833335 312 0 2670 --52.2500005 -52.0833335 -12.2500005 -12.0833335 289 0 2670 --52.0833335 -51.9166665 -12.2500005 -12.0833335 333 0 2670 --51.9166665 -51.7499995 -12.2500005 -12.0833335 330 0 2670 --51.7500005 -51.5833335 -12.2500005 -12.0833335 332 0 2670 --51.5833335 -51.4166665 -12.2500005 -12.0833335 267 0 2670 --51.4166665 -51.2499995 -12.2500005 -12.0833335 266 0 2670 --51.2500005 -51.0833335 -12.2500005 -12.0833335 224 0 2670 --51.0833335 -50.9166665 -12.2500005 -12.0833335 201 0 2670 --50.9166665 -50.7499995 -12.2500005 -12.0833335 199 0 2670 --50.7500005 -50.5833335 -12.2500005 -12.0833335 201 0 2670 --50.5833335 -50.4166665 -12.2500005 -12.0833335 203 0 2670 --50.4166665 -50.2499995 -12.2500005 -12.0833335 199 0 2670 --50.2500005 -50.0833335 -12.2500005 -12.0833335 197 0 2670 --50.0833335 -49.9166665 -12.2500005 -12.0833335 199 0 2670 --49.9166665 -49.7499995 -12.2500005 -12.0833335 216 0 2670 --49.7500005 -49.5833335 -12.2500005 -12.0833335 213 0 2670 --49.5833335 -49.4166665 -12.2500005 -12.0833335 239 0 2670 --49.4166665 -49.2499995 -12.2500005 -12.0833335 306 0 2670 --49.2500005 -49.0833335 -12.2500005 -12.0833335 270 0 2670 --49.0833335 -48.9166665 -12.2500005 -12.0833335 290 0 2670 --48.9166665 -48.7499995 -12.2500005 -12.0833335 307 0 2670 --48.7500005 -48.5833335 -12.2500005 -12.0833335 258 0 2670 --48.5833335 -48.4166665 -12.2500005 -12.0833335 245 0 2670 --48.4166665 -48.2499995 -12.2500005 -12.0833335 295 0 2670 --48.2500005 -48.0833335 -12.2500005 -12.0833335 305 0 2670 --48.0833335 -47.9166665 -12.2500005 -12.0833335 367 0 2670 --47.9166665 -47.7499995 -12.2500005 -12.0833335 627 0 2670 --47.7500005 -47.5833335 -12.2500005 -12.0833335 470 0 2670 --47.5833335 -47.4166665 -12.2500005 -12.0833335 356 0 2670 --47.4166665 -47.2499995 -12.2500005 -12.0833335 381 0 2670 --47.2500005 -47.0833335 -12.2500005 -12.0833335 386 0 2670 --47.0833335 -46.9166665 -12.2500005 -12.0833335 617 0 2670 --46.9166665 -46.7499995 -12.2500005 -12.0833335 364 0 2670 --46.7500005 -46.5833335 -12.2500005 -12.0833335 394 0 2670 --46.5833335 -46.4166665 -12.2500005 -12.0833335 472 0 2670 --46.4166665 -46.2499995 -12.2500005 -12.0833335 886 0 2670 --46.2500005 -46.0833335 -12.2500005 -12.0833335 816 0 2670 --46.0833335 -45.9166665 -12.2500005 -12.0833335 756 0 2670 --45.9166665 -45.7499995 -12.2500005 -12.0833335 774 0 2670 --45.7500005 -45.5833335 -12.2500005 -12.0833335 726 0 2670 --45.5833335 -45.4166665 -12.2500005 -12.0833335 699 0 2670 --45.4166665 -45.2499995 -12.2500005 -12.0833335 730 0 2670 --45.2500005 -45.0833335 -12.2500005 -12.0833335 539 0 2670 --45.0833335 -44.9166665 -12.2500005 -12.0833335 455 0 2670 --44.9166665 -44.7499995 -12.2500005 -12.0833335 693 0 2670 --44.7500005 -44.5833335 -12.2500005 -12.0833335 752 0 2670 --44.5833335 -44.4166665 -12.2500005 -12.0833335 765 0 2670 --44.4166665 -44.2499995 -12.2500005 -12.0833335 789 0 2670 --44.2500005 -44.0833335 -12.2500005 -12.0833335 766 0 2670 --44.0833335 -43.9166665 -12.2500005 -12.0833335 785 0 2670 --43.9166665 -43.7499995 -12.2500005 -12.0833335 859 0 2670 --43.7500005 -43.5833335 -12.2500005 -12.0833335 461 0 2670 --43.5833335 -43.4166665 -12.2500005 -12.0833335 478 0 2670 --43.4166665 -43.2499995 -12.2500005 -12.0833335 497 0 2670 --43.2500005 -43.0833335 -12.2500005 -12.0833335 465 0 2670 --43.0833335 -42.9166665 -12.2500005 -12.0833335 867 0 2670 --42.9166665 -42.7499995 -12.2500005 -12.0833335 446 0 2670 --42.7500005 -42.5833335 -12.2500005 -12.0833335 546 0 2670 --42.5833335 -42.4166665 -12.2500005 -12.0833335 559 0 2670 --42.4166665 -42.2499995 -12.2500005 -12.0833335 1081 0 2670 --42.2500005 -42.0833335 -12.2500005 -12.0833335 1086 0 2670 --42.0833335 -41.9166665 -12.2500005 -12.0833335 917 0 2670 --41.9166665 -41.7499995 -12.2500005 -12.0833335 1013 0 2670 --41.7500005 -41.5833335 -12.2500005 -12.0833335 783 0 2670 --41.5833335 -41.4166665 -12.2500005 -12.0833335 799 0 2670 --41.4166665 -41.2499995 -12.2500005 -12.0833335 887 0 2670 --41.2500005 -41.0833335 -12.2500005 -12.0833335 535 0 2670 --41.0833335 -40.9166665 -12.2500005 -12.0833335 672 0 2670 --40.9166665 -40.7499995 -12.2500005 -12.0833335 612 0 2670 --40.7500005 -40.5833335 -12.2500005 -12.0833335 536 0 2670 --40.5833335 -40.4166665 -12.2500005 -12.0833335 435 0 2670 --40.4166665 -40.2499995 -12.2500005 -12.0833335 361 0 2670 --40.2500005 -40.0833335 -12.2500005 -12.0833335 278 0 2670 --40.0833335 -39.9166665 -12.2500005 -12.0833335 267 0 2670 --65.0833335 -64.9166665 -12.4166665 -12.2499995 150 0 2670 --64.9166665 -64.7499995 -12.4166665 -12.2499995 164 0 2670 --64.7500005 -64.5833335 -12.4166665 -12.2499995 184 0 2670 --64.5833335 -64.4166665 -12.4166665 -12.2499995 136 0 2670 --64.4166665 -64.2499995 -12.4166665 -12.2499995 293 0 2670 --64.2500005 -64.0833335 -12.4166665 -12.2499995 184 0 2670 --64.0833335 -63.9166665 -12.4166665 -12.2499995 192 0 2670 --63.9166665 -63.7499995 -12.4166665 -12.2499995 165 0 2670 --63.7500005 -63.5833335 -12.4166665 -12.2499995 169 0 2670 --63.5833335 -63.4166665 -12.4166665 -12.2499995 166 0 2670 --63.4166665 -63.2499995 -12.4166665 -12.2499995 186 0 2670 --63.2500005 -63.0833335 -12.4166665 -12.2499995 151 0 2670 --63.0833335 -62.9166665 -12.4166665 -12.2499995 166 0 2670 --62.9166665 -62.7499995 -12.4166665 -12.2499995 160 0 2670 --62.7500005 -62.5833335 -12.4166665 -12.2499995 179 0 2670 --62.5833335 -62.4166665 -12.4166665 -12.2499995 194 0 2670 --62.4166665 -62.2499995 -12.4166665 -12.2499995 243 0 2670 --62.2500005 -62.0833335 -12.4166665 -12.2499995 284 0 2670 --62.0833335 -61.9166665 -12.4166665 -12.2499995 216 0 2670 --61.9166665 -61.7499995 -12.4166665 -12.2499995 271 0 2670 --61.7500005 -61.5833335 -12.4166665 -12.2499995 458 0 2670 --61.5833335 -61.4166665 -12.4166665 -12.2499995 296 0 2670 --61.4166665 -61.2499995 -12.4166665 -12.2499995 332 0 2670 --61.2500005 -61.0833335 -12.4166665 -12.2499995 325 0 2670 --61.0833335 -60.9166665 -12.4166665 -12.2499995 287 0 2670 --60.9166665 -60.7499995 -12.4166665 -12.2499995 297 0 2670 --60.7500005 -60.5833335 -12.4166665 -12.2499995 319 0 2670 --60.5833335 -60.4166665 -12.4166665 -12.2499995 316 0 2670 --60.4166665 -60.2499995 -12.4166665 -12.2499995 450 0 2670 --60.2500005 -60.0833335 -12.4166665 -12.2499995 490 0 2670 --60.0833335 -59.9166665 -12.4166665 -12.2499995 473 0 2670 --59.9166665 -59.7499995 -12.4166665 -12.2499995 496 0 2670 --59.7500005 -59.5833335 -12.4166665 -12.2499995 424 0 2670 --59.5833335 -59.4166665 -12.4166665 -12.2499995 376 0 2670 --59.4166665 -59.2499995 -12.4166665 -12.2499995 397 0 2670 --59.2500005 -59.0833335 -12.4166665 -12.2499995 355 0 2670 --59.0833335 -58.9166665 -12.4166665 -12.2499995 383 0 2670 --58.9166665 -58.7499995 -12.4166665 -12.2499995 292 0 2670 --58.7500005 -58.5833335 -12.4166665 -12.2499995 350 0 2670 --58.5833335 -58.4166665 -12.4166665 -12.2499995 258 0 2670 --58.4166665 -58.2499995 -12.4166665 -12.2499995 341 0 2670 --58.2500005 -58.0833335 -12.4166665 -12.2499995 309 0 2670 --58.0833335 -57.9166665 -12.4166665 -12.2499995 289 0 2670 --57.9166665 -57.7499995 -12.4166665 -12.2499995 305 0 2670 --57.7500005 -57.5833335 -12.4166665 -12.2499995 313 0 2670 --57.5833335 -57.4166665 -12.4166665 -12.2499995 318 0 2670 --57.4166665 -57.2499995 -12.4166665 -12.2499995 348 0 2670 --57.2500005 -57.0833335 -12.4166665 -12.2499995 358 0 2670 --57.0833335 -56.9166665 -12.4166665 -12.2499995 289 0 2670 --56.9166665 -56.7499995 -12.4166665 -12.2499995 311 0 2670 --56.7500005 -56.5833335 -12.4166665 -12.2499995 287 0 2670 --56.5833335 -56.4166665 -12.4166665 -12.2499995 333 0 2670 --56.4166665 -56.2499995 -12.4166665 -12.2499995 392 0 2670 --56.2500005 -56.0833335 -12.4166665 -12.2499995 377 0 2670 --56.0833335 -55.9166665 -12.4166665 -12.2499995 339 0 2670 --55.9166665 -55.7499995 -12.4166665 -12.2499995 384 0 2670 --55.7500005 -55.5833335 -12.4166665 -12.2499995 375 0 2670 --55.5833335 -55.4166665 -12.4166665 -12.2499995 354 0 2670 --55.4166665 -55.2499995 -12.4166665 -12.2499995 390 0 2670 --55.2500005 -55.0833335 -12.4166665 -12.2499995 349 0 2670 --55.0833335 -54.9166665 -12.4166665 -12.2499995 372 0 2670 --54.9166665 -54.7499995 -12.4166665 -12.2499995 376 0 2670 --54.7500005 -54.5833335 -12.4166665 -12.2499995 335 0 2670 --54.5833335 -54.4166665 -12.4166665 -12.2499995 321 0 2670 --54.4166665 -54.2499995 -12.4166665 -12.2499995 325 0 2670 --54.2500005 -54.0833335 -12.4166665 -12.2499995 344 0 2670 --54.0833335 -53.9166665 -12.4166665 -12.2499995 354 0 2670 --53.9166665 -53.7499995 -12.4166665 -12.2499995 335 0 2670 --53.7500005 -53.5833335 -12.4166665 -12.2499995 331 0 2670 --53.5833335 -53.4166665 -12.4166665 -12.2499995 318 0 2670 --53.4166665 -53.2499995 -12.4166665 -12.2499995 313 0 2670 --53.2500005 -53.0833335 -12.4166665 -12.2499995 292 0 2670 --53.0833335 -52.9166665 -12.4166665 -12.2499995 289 0 2670 --52.9166665 -52.7499995 -12.4166665 -12.2499995 316 0 2670 --52.7500005 -52.5833335 -12.4166665 -12.2499995 343 0 2670 --52.5833335 -52.4166665 -12.4166665 -12.2499995 343 0 2670 --52.4166665 -52.2499995 -12.4166665 -12.2499995 328 0 2670 --52.2500005 -52.0833335 -12.4166665 -12.2499995 335 0 2670 --52.0833335 -51.9166665 -12.4166665 -12.2499995 352 0 2670 --51.9166665 -51.7499995 -12.4166665 -12.2499995 333 0 2670 --51.7500005 -51.5833335 -12.4166665 -12.2499995 371 0 2670 --51.5833335 -51.4166665 -12.4166665 -12.2499995 318 0 2670 --51.4166665 -51.2499995 -12.4166665 -12.2499995 222 0 2670 --51.2500005 -51.0833335 -12.4166665 -12.2499995 220 0 2670 --51.0833335 -50.9166665 -12.4166665 -12.2499995 206 0 2670 --50.9166665 -50.7499995 -12.4166665 -12.2499995 204 0 2670 --50.7500005 -50.5833335 -12.4166665 -12.2499995 204 0 2670 --50.5833335 -50.4166665 -12.4166665 -12.2499995 202 0 2670 --50.4166665 -50.2499995 -12.4166665 -12.2499995 201 0 2670 --50.2500005 -50.0833335 -12.4166665 -12.2499995 201 0 2670 --50.0833335 -49.9166665 -12.4166665 -12.2499995 210 0 2670 --49.9166665 -49.7499995 -12.4166665 -12.2499995 235 0 2670 --49.7500005 -49.5833335 -12.4166665 -12.2499995 212 0 2670 --49.5833335 -49.4166665 -12.4166665 -12.2499995 221 0 2670 --49.4166665 -49.2499995 -12.4166665 -12.2499995 267 0 2670 --49.2500005 -49.0833335 -12.4166665 -12.2499995 280 0 2670 --49.0833335 -48.9166665 -12.4166665 -12.2499995 273 0 2670 --48.9166665 -48.7499995 -12.4166665 -12.2499995 264 0 2670 --48.7500005 -48.5833335 -12.4166665 -12.2499995 265 0 2670 --48.5833335 -48.4166665 -12.4166665 -12.2499995 315 0 2670 --48.4166665 -48.2499995 -12.4166665 -12.2499995 286 0 2670 --48.2500005 -48.0833335 -12.4166665 -12.2499995 285 0 2670 --48.0833335 -47.9166665 -12.4166665 -12.2499995 367 0 2670 --47.9166665 -47.7499995 -12.4166665 -12.2499995 366 0 2670 --47.7500005 -47.5833335 -12.4166665 -12.2499995 326 0 2670 --47.5833335 -47.4166665 -12.4166665 -12.2499995 354 0 2670 --47.4166665 -47.2499995 -12.4166665 -12.2499995 380 0 2670 --47.2500005 -47.0833335 -12.4166665 -12.2499995 354 0 2670 --47.0833335 -46.9166665 -12.4166665 -12.2499995 362 0 2670 --46.9166665 -46.7499995 -12.4166665 -12.2499995 359 0 2670 --46.7500005 -46.5833335 -12.4166665 -12.2499995 398 0 2670 --46.5833335 -46.4166665 -12.4166665 -12.2499995 492 0 2670 --46.4166665 -46.2499995 -12.4166665 -12.2499995 899 0 2670 --46.2500005 -46.0833335 -12.4166665 -12.2499995 859 0 2670 --46.0833335 -45.9166665 -12.4166665 -12.2499995 813 0 2670 --45.9166665 -45.7499995 -12.4166665 -12.2499995 752 0 2670 --45.7500005 -45.5833335 -12.4166665 -12.2499995 726 0 2670 --45.5833335 -45.4166665 -12.4166665 -12.2499995 711 0 2670 --45.4166665 -45.2499995 -12.4166665 -12.2499995 700 0 2670 --45.2500005 -45.0833335 -12.4166665 -12.2499995 730 0 2670 --45.0833335 -44.9166665 -12.4166665 -12.2499995 522 0 2670 --44.9166665 -44.7499995 -12.4166665 -12.2499995 682 0 2670 --44.7500005 -44.5833335 -12.4166665 -12.2499995 668 0 2670 --44.5833335 -44.4166665 -12.4166665 -12.2499995 734 0 2670 --44.4166665 -44.2499995 -12.4166665 -12.2499995 755 0 2670 --44.2500005 -44.0833335 -12.4166665 -12.2499995 795 0 2670 --44.0833335 -43.9166665 -12.4166665 -12.2499995 856 0 2670 --43.9166665 -43.7499995 -12.4166665 -12.2499995 615 0 2670 --43.7500005 -43.5833335 -12.4166665 -12.2499995 494 0 2670 --43.5833335 -43.4166665 -12.4166665 -12.2499995 492 0 2670 --43.4166665 -43.2499995 -12.4166665 -12.2499995 452 0 2670 --43.2500005 -43.0833335 -12.4166665 -12.2499995 469 0 2670 --43.0833335 -42.9166665 -12.4166665 -12.2499995 1018 0 2670 --42.9166665 -42.7499995 -12.4166665 -12.2499995 486 0 2670 --42.7500005 -42.5833335 -12.4166665 -12.2499995 470 0 2670 --42.5833335 -42.4166665 -12.4166665 -12.2499995 495 0 2670 --42.4166665 -42.2499995 -12.4166665 -12.2499995 1157 0 2670 --42.2500005 -42.0833335 -12.4166665 -12.2499995 1082 0 2670 --42.0833335 -41.9166665 -12.4166665 -12.2499995 1046 0 2670 --41.9166665 -41.7499995 -12.4166665 -12.2499995 1092 0 2670 --41.7500005 -41.5833335 -12.4166665 -12.2499995 744 0 2670 --41.5833335 -41.4166665 -12.4166665 -12.2499995 692 0 2670 --41.4166665 -41.2499995 -12.4166665 -12.2499995 810 0 2670 --41.2500005 -41.0833335 -12.4166665 -12.2499995 458 0 2670 --41.0833335 -40.9166665 -12.4166665 -12.2499995 637 0 2670 --40.9166665 -40.7499995 -12.4166665 -12.2499995 620 0 2670 --40.7500005 -40.5833335 -12.4166665 -12.2499995 503 0 2670 --40.5833335 -40.4166665 -12.4166665 -12.2499995 601 0 2670 --40.4166665 -40.2499995 -12.4166665 -12.2499995 343 0 2670 --40.2500005 -40.0833335 -12.4166665 -12.2499995 269 0 2670 --40.0833335 -39.9166665 -12.4166665 -12.2499995 291 0 2670 --65.0833335 -64.9166665 -12.5833335 -12.4166665 140 0 2670 --64.9166665 -64.7499995 -12.5833335 -12.4166665 159 0 2670 --64.7500005 -64.5833335 -12.5833335 -12.4166665 154 0 2670 --64.5833335 -64.4166665 -12.5833335 -12.4166665 143 0 2670 --64.4166665 -64.2499995 -12.5833335 -12.4166665 135 0 2670 --64.2500005 -64.0833335 -12.5833335 -12.4166665 136 0 2670 --64.0833335 -63.9166665 -12.5833335 -12.4166665 138 0 2670 --63.9166665 -63.7499995 -12.5833335 -12.4166665 141 0 2670 --63.7500005 -63.5833335 -12.5833335 -12.4166665 143 0 2670 --63.5833335 -63.4166665 -12.5833335 -12.4166665 146 0 2670 --63.4166665 -63.2499995 -12.5833335 -12.4166665 139 0 2670 --63.2500005 -63.0833335 -12.5833335 -12.4166665 140 0 2670 --63.0833335 -62.9166665 -12.5833335 -12.4166665 159 0 2670 --62.9166665 -62.7499995 -12.5833335 -12.4166665 179 0 2670 --62.7500005 -62.5833335 -12.5833335 -12.4166665 183 0 2670 --62.5833335 -62.4166665 -12.5833335 -12.4166665 301 0 2670 --62.4166665 -62.2499995 -12.5833335 -12.4166665 256 0 2670 --62.2500005 -62.0833335 -12.5833335 -12.4166665 193 0 2670 --62.0833335 -61.9166665 -12.5833335 -12.4166665 205 0 2670 --61.9166665 -61.7499995 -12.5833335 -12.4166665 243 0 2670 --61.7500005 -61.5833335 -12.5833335 -12.4166665 469 0 2670 --61.5833335 -61.4166665 -12.5833335 -12.4166665 428 0 2670 --61.4166665 -61.2499995 -12.5833335 -12.4166665 407 0 2670 --61.2500005 -61.0833335 -12.5833335 -12.4166665 344 0 2670 --61.0833335 -60.9166665 -12.5833335 -12.4166665 263 0 2670 --60.9166665 -60.7499995 -12.5833335 -12.4166665 342 0 2670 --60.7500005 -60.5833335 -12.5833335 -12.4166665 448 0 2670 --60.5833335 -60.4166665 -12.5833335 -12.4166665 461 0 2670 --60.4166665 -60.2499995 -12.5833335 -12.4166665 473 0 2670 --60.2500005 -60.0833335 -12.5833335 -12.4166665 518 0 2670 --60.0833335 -59.9166665 -12.5833335 -12.4166665 596 0 2670 --59.9166665 -59.7499995 -12.5833335 -12.4166665 505 0 2670 --59.7500005 -59.5833335 -12.5833335 -12.4166665 368 0 2670 --59.5833335 -59.4166665 -12.5833335 -12.4166665 337 0 2670 --59.4166665 -59.2499995 -12.5833335 -12.4166665 365 0 2670 --59.2500005 -59.0833335 -12.5833335 -12.4166665 367 0 2670 --59.0833335 -58.9166665 -12.5833335 -12.4166665 412 0 2670 --58.9166665 -58.7499995 -12.5833335 -12.4166665 370 0 2670 --58.7500005 -58.5833335 -12.5833335 -12.4166665 352 0 2670 --58.5833335 -58.4166665 -12.5833335 -12.4166665 314 0 2670 --58.4166665 -58.2499995 -12.5833335 -12.4166665 322 0 2670 --58.2500005 -58.0833335 -12.5833335 -12.4166665 354 0 2670 --58.0833335 -57.9166665 -12.5833335 -12.4166665 333 0 2670 --57.9166665 -57.7499995 -12.5833335 -12.4166665 330 0 2670 --57.7500005 -57.5833335 -12.5833335 -12.4166665 271 0 2670 --57.5833335 -57.4166665 -12.5833335 -12.4166665 329 0 2670 --57.4166665 -57.2499995 -12.5833335 -12.4166665 302 0 2670 --57.2500005 -57.0833335 -12.5833335 -12.4166665 342 0 2670 --57.0833335 -56.9166665 -12.5833335 -12.4166665 304 0 2670 --56.9166665 -56.7499995 -12.5833335 -12.4166665 317 0 2670 --56.7500005 -56.5833335 -12.5833335 -12.4166665 353 0 2670 --56.5833335 -56.4166665 -12.5833335 -12.4166665 323 0 2670 --56.4166665 -56.2499995 -12.5833335 -12.4166665 345 0 2670 --56.2500005 -56.0833335 -12.5833335 -12.4166665 382 0 2670 --56.0833335 -55.9166665 -12.5833335 -12.4166665 369 0 2670 --55.9166665 -55.7499995 -12.5833335 -12.4166665 362 0 2670 --55.7500005 -55.5833335 -12.5833335 -12.4166665 384 0 2670 --55.5833335 -55.4166665 -12.5833335 -12.4166665 356 0 2670 --55.4166665 -55.2499995 -12.5833335 -12.4166665 408 0 2670 --55.2500005 -55.0833335 -12.5833335 -12.4166665 409 0 2670 --55.0833335 -54.9166665 -12.5833335 -12.4166665 402 0 2670 --54.9166665 -54.7499995 -12.5833335 -12.4166665 356 0 2670 --54.7500005 -54.5833335 -12.5833335 -12.4166665 345 0 2670 --54.5833335 -54.4166665 -12.5833335 -12.4166665 335 0 2670 --54.4166665 -54.2499995 -12.5833335 -12.4166665 362 0 2670 --54.2500005 -54.0833335 -12.5833335 -12.4166665 320 0 2670 --54.0833335 -53.9166665 -12.5833335 -12.4166665 321 0 2670 --53.9166665 -53.7499995 -12.5833335 -12.4166665 349 0 2670 --53.7500005 -53.5833335 -12.5833335 -12.4166665 323 0 2670 --53.5833335 -53.4166665 -12.5833335 -12.4166665 301 0 2670 --53.4166665 -53.2499995 -12.5833335 -12.4166665 321 0 2670 --53.2500005 -53.0833335 -12.5833335 -12.4166665 317 0 2670 --53.0833335 -52.9166665 -12.5833335 -12.4166665 326 0 2670 --52.9166665 -52.7499995 -12.5833335 -12.4166665 333 0 2670 --52.7500005 -52.5833335 -12.5833335 -12.4166665 334 0 2670 --52.5833335 -52.4166665 -12.5833335 -12.4166665 352 0 2670 --52.4166665 -52.2499995 -12.5833335 -12.4166665 320 0 2670 --52.2500005 -52.0833335 -12.5833335 -12.4166665 345 0 2670 --52.0833335 -51.9166665 -12.5833335 -12.4166665 325 0 2670 --51.9166665 -51.7499995 -12.5833335 -12.4166665 356 0 2670 --51.7500005 -51.5833335 -12.5833335 -12.4166665 387 0 2670 --51.5833335 -51.4166665 -12.5833335 -12.4166665 323 0 2670 --51.4166665 -51.2499995 -12.5833335 -12.4166665 231 0 2670 --51.2500005 -51.0833335 -12.5833335 -12.4166665 213 0 2670 --51.0833335 -50.9166665 -12.5833335 -12.4166665 207 0 2670 --50.9166665 -50.7499995 -12.5833335 -12.4166665 207 0 2670 --50.7500005 -50.5833335 -12.5833335 -12.4166665 205 0 2670 --50.5833335 -50.4166665 -12.5833335 -12.4166665 206 0 2670 --50.4166665 -50.2499995 -12.5833335 -12.4166665 207 0 2670 --50.2500005 -50.0833335 -12.5833335 -12.4166665 225 0 2670 --50.0833335 -49.9166665 -12.5833335 -12.4166665 226 0 2670 --49.9166665 -49.7499995 -12.5833335 -12.4166665 306 0 2670 --49.7500005 -49.5833335 -12.5833335 -12.4166665 260 0 2670 --49.5833335 -49.4166665 -12.5833335 -12.4166665 245 0 2670 --49.4166665 -49.2499995 -12.5833335 -12.4166665 226 0 2670 --49.2500005 -49.0833335 -12.5833335 -12.4166665 268 0 2670 --49.0833335 -48.9166665 -12.5833335 -12.4166665 262 0 2670 --48.9166665 -48.7499995 -12.5833335 -12.4166665 268 0 2670 --48.7500005 -48.5833335 -12.5833335 -12.4166665 286 0 2670 --48.5833335 -48.4166665 -12.5833335 -12.4166665 319 0 2670 --48.4166665 -48.2499995 -12.5833335 -12.4166665 316 0 2670 --48.2500005 -48.0833335 -12.5833335 -12.4166665 269 0 2670 --48.0833335 -47.9166665 -12.5833335 -12.4166665 308 0 2670 --47.9166665 -47.7499995 -12.5833335 -12.4166665 339 0 2670 --47.7500005 -47.5833335 -12.5833335 -12.4166665 320 0 2670 --47.5833335 -47.4166665 -12.5833335 -12.4166665 328 0 2670 --47.4166665 -47.2499995 -12.5833335 -12.4166665 336 0 2670 --47.2500005 -47.0833335 -12.5833335 -12.4166665 353 0 2670 --47.0833335 -46.9166665 -12.5833335 -12.4166665 396 0 2670 --46.9166665 -46.7499995 -12.5833335 -12.4166665 362 0 2670 --46.7500005 -46.5833335 -12.5833335 -12.4166665 411 0 2670 --46.5833335 -46.4166665 -12.5833335 -12.4166665 470 0 2670 --46.4166665 -46.2499995 -12.5833335 -12.4166665 553 0 2670 --46.2500005 -46.0833335 -12.5833335 -12.4166665 788 0 2670 --46.0833335 -45.9166665 -12.5833335 -12.4166665 821 0 2670 --45.9166665 -45.7499995 -12.5833335 -12.4166665 779 0 2670 --45.7500005 -45.5833335 -12.5833335 -12.4166665 732 0 2670 --45.5833335 -45.4166665 -12.5833335 -12.4166665 723 0 2670 --45.4166665 -45.2499995 -12.5833335 -12.4166665 709 0 2670 --45.2500005 -45.0833335 -12.5833335 -12.4166665 732 0 2670 --45.0833335 -44.9166665 -12.5833335 -12.4166665 696 0 2670 --44.9166665 -44.7499995 -12.5833335 -12.4166665 706 0 2670 --44.7500005 -44.5833335 -12.5833335 -12.4166665 740 0 2670 --44.5833335 -44.4166665 -12.5833335 -12.4166665 776 0 2670 --44.4166665 -44.2499995 -12.5833335 -12.4166665 786 0 2670 --44.2500005 -44.0833335 -12.5833335 -12.4166665 833 0 2670 --44.0833335 -43.9166665 -12.5833335 -12.4166665 632 0 2670 --43.9166665 -43.7499995 -12.5833335 -12.4166665 471 0 2670 --43.7500005 -43.5833335 -12.5833335 -12.4166665 450 0 2670 --43.5833335 -43.4166665 -12.5833335 -12.4166665 453 0 2670 --43.4166665 -43.2499995 -12.5833335 -12.4166665 583 0 2670 --43.2500005 -43.0833335 -12.5833335 -12.4166665 440 0 2670 --43.0833335 -42.9166665 -12.5833335 -12.4166665 532 0 2670 --42.9166665 -42.7499995 -12.5833335 -12.4166665 653 0 2670 --42.7500005 -42.5833335 -12.5833335 -12.4166665 474 0 2670 --42.5833335 -42.4166665 -12.5833335 -12.4166665 504 0 2670 --42.4166665 -42.2499995 -12.5833335 -12.4166665 864 0 2670 --42.2500005 -42.0833335 -12.5833335 -12.4166665 966 0 2670 --42.0833335 -41.9166665 -12.5833335 -12.4166665 1179 0 2670 --41.9166665 -41.7499995 -12.5833335 -12.4166665 993 0 2670 --41.7500005 -41.5833335 -12.5833335 -12.4166665 964 0 2670 --41.5833335 -41.4166665 -12.5833335 -12.4166665 991 0 2670 --41.4166665 -41.2499995 -12.5833335 -12.4166665 402 0 2670 --41.2500005 -41.0833335 -12.5833335 -12.4166665 462 0 2670 --41.0833335 -40.9166665 -12.5833335 -12.4166665 621 0 2670 --40.9166665 -40.7499995 -12.5833335 -12.4166665 546 0 2670 --40.7500005 -40.5833335 -12.5833335 -12.4166665 540 0 2670 --40.5833335 -40.4166665 -12.5833335 -12.4166665 359 0 2670 --40.4166665 -40.2499995 -12.5833335 -12.4166665 334 0 2670 --40.2500005 -40.0833335 -12.5833335 -12.4166665 251 0 2670 --40.0833335 -39.9166665 -12.5833335 -12.4166665 233 0 2670 --65.0833335 -64.9166665 -12.7500005 -12.5833335 134 0 2670 --64.9166665 -64.7499995 -12.7500005 -12.5833335 133 0 2670 --64.7500005 -64.5833335 -12.7500005 -12.5833335 158 0 2670 --64.5833335 -64.4166665 -12.7500005 -12.5833335 143 0 2670 --64.4166665 -64.2499995 -12.7500005 -12.5833335 144 0 2670 --64.2500005 -64.0833335 -12.7500005 -12.5833335 150 0 2670 --64.0833335 -63.9166665 -12.7500005 -12.5833335 131 0 2670 --63.9166665 -63.7499995 -12.7500005 -12.5833335 154 0 2670 --63.7500005 -63.5833335 -12.7500005 -12.5833335 151 0 2670 --63.5833335 -63.4166665 -12.7500005 -12.5833335 155 0 2670 --63.4166665 -63.2499995 -12.7500005 -12.5833335 142 0 2670 --63.2500005 -63.0833335 -12.7500005 -12.5833335 147 0 2670 --63.0833335 -62.9166665 -12.7500005 -12.5833335 141 0 2670 --62.9166665 -62.7499995 -12.7500005 -12.5833335 143 0 2670 --62.7500005 -62.5833335 -12.7500005 -12.5833335 174 0 2670 --62.5833335 -62.4166665 -12.7500005 -12.5833335 192 0 2670 --62.4166665 -62.2499995 -12.7500005 -12.5833335 190 0 2670 --62.2500005 -62.0833335 -12.7500005 -12.5833335 177 0 2670 --62.0833335 -61.9166665 -12.7500005 -12.5833335 192 0 2670 --61.9166665 -61.7499995 -12.7500005 -12.5833335 204 0 2670 --61.7500005 -61.5833335 -12.7500005 -12.5833335 349 0 2670 --61.5833335 -61.4166665 -12.7500005 -12.5833335 201 0 2670 --61.4166665 -61.2499995 -12.7500005 -12.5833335 378 0 2670 --61.2500005 -61.0833335 -12.7500005 -12.5833335 333 0 2670 --61.0833335 -60.9166665 -12.7500005 -12.5833335 309 0 2670 --60.9166665 -60.7499995 -12.7500005 -12.5833335 295 0 2670 --60.7500005 -60.5833335 -12.7500005 -12.5833335 333 0 2670 --60.5833335 -60.4166665 -12.7500005 -12.5833335 483 0 2670 --60.4166665 -60.2499995 -12.7500005 -12.5833335 552 0 2670 --60.2500005 -60.0833335 -12.7500005 -12.5833335 522 0 2670 --60.0833335 -59.9166665 -12.7500005 -12.5833335 507 0 2670 --59.9166665 -59.7499995 -12.7500005 -12.5833335 429 0 2670 --59.7500005 -59.5833335 -12.7500005 -12.5833335 322 0 2670 --59.5833335 -59.4166665 -12.7500005 -12.5833335 438 0 2670 --59.4166665 -59.2499995 -12.7500005 -12.5833335 354 0 2670 --59.2500005 -59.0833335 -12.7500005 -12.5833335 449 0 2670 --59.0833335 -58.9166665 -12.7500005 -12.5833335 353 0 2670 --58.9166665 -58.7499995 -12.7500005 -12.5833335 421 0 2670 --58.7500005 -58.5833335 -12.7500005 -12.5833335 353 0 2670 --58.5833335 -58.4166665 -12.7500005 -12.5833335 331 0 2670 --58.4166665 -58.2499995 -12.7500005 -12.5833335 321 0 2670 --58.2500005 -58.0833335 -12.7500005 -12.5833335 398 0 2670 --58.0833335 -57.9166665 -12.7500005 -12.5833335 411 0 2670 --57.9166665 -57.7499995 -12.7500005 -12.5833335 345 0 2670 --57.7500005 -57.5833335 -12.7500005 -12.5833335 328 0 2670 --57.5833335 -57.4166665 -12.7500005 -12.5833335 340 0 2670 --57.4166665 -57.2499995 -12.7500005 -12.5833335 339 0 2670 --57.2500005 -57.0833335 -12.7500005 -12.5833335 326 0 2670 --57.0833335 -56.9166665 -12.7500005 -12.5833335 322 0 2670 --56.9166665 -56.7499995 -12.7500005 -12.5833335 291 0 2670 --56.7500005 -56.5833335 -12.7500005 -12.5833335 326 0 2670 --56.5833335 -56.4166665 -12.7500005 -12.5833335 344 0 2670 --56.4166665 -56.2499995 -12.7500005 -12.5833335 397 0 2670 --56.2500005 -56.0833335 -12.7500005 -12.5833335 347 0 2670 --56.0833335 -55.9166665 -12.7500005 -12.5833335 406 0 2670 --55.9166665 -55.7499995 -12.7500005 -12.5833335 378 0 2670 --55.7500005 -55.5833335 -12.7500005 -12.5833335 373 0 2670 --55.5833335 -55.4166665 -12.7500005 -12.5833335 393 0 2670 --55.4166665 -55.2499995 -12.7500005 -12.5833335 419 0 2670 --55.2500005 -55.0833335 -12.7500005 -12.5833335 423 0 2670 --55.0833335 -54.9166665 -12.7500005 -12.5833335 379 0 2670 --54.9166665 -54.7499995 -12.7500005 -12.5833335 355 0 2670 --54.7500005 -54.5833335 -12.7500005 -12.5833335 338 0 2670 --54.5833335 -54.4166665 -12.7500005 -12.5833335 350 0 2670 --54.4166665 -54.2499995 -12.7500005 -12.5833335 317 0 2670 --54.2500005 -54.0833335 -12.7500005 -12.5833335 347 0 2670 --54.0833335 -53.9166665 -12.7500005 -12.5833335 358 0 2670 --53.9166665 -53.7499995 -12.7500005 -12.5833335 315 0 2670 --53.7500005 -53.5833335 -12.7500005 -12.5833335 340 0 2670 --53.5833335 -53.4166665 -12.7500005 -12.5833335 336 0 2670 --53.4166665 -53.2499995 -12.7500005 -12.5833335 326 0 2670 --53.2500005 -53.0833335 -12.7500005 -12.5833335 330 0 2670 --53.0833335 -52.9166665 -12.7500005 -12.5833335 309 0 2670 --52.9166665 -52.7499995 -12.7500005 -12.5833335 329 0 2670 --52.7500005 -52.5833335 -12.7500005 -12.5833335 306 0 2670 --52.5833335 -52.4166665 -12.7500005 -12.5833335 347 0 2670 --52.4166665 -52.2499995 -12.7500005 -12.5833335 319 0 2670 --52.2500005 -52.0833335 -12.7500005 -12.5833335 368 0 2670 --52.0833335 -51.9166665 -12.7500005 -12.5833335 373 0 2670 --51.9166665 -51.7499995 -12.7500005 -12.5833335 356 0 2670 --51.7500005 -51.5833335 -12.7500005 -12.5833335 313 0 2670 --51.5833335 -51.4166665 -12.7500005 -12.5833335 273 0 2670 --51.4166665 -51.2499995 -12.7500005 -12.5833335 228 0 2670 --51.2500005 -51.0833335 -12.7500005 -12.5833335 212 0 2670 --51.0833335 -50.9166665 -12.7500005 -12.5833335 212 0 2670 --50.9166665 -50.7499995 -12.7500005 -12.5833335 209 0 2670 --50.7500005 -50.5833335 -12.7500005 -12.5833335 208 0 2670 --50.5833335 -50.4166665 -12.7500005 -12.5833335 210 0 2670 --50.4166665 -50.2499995 -12.7500005 -12.5833335 209 0 2670 --50.2500005 -50.0833335 -12.7500005 -12.5833335 214 0 2670 --50.0833335 -49.9166665 -12.7500005 -12.5833335 235 0 2670 --49.9166665 -49.7499995 -12.7500005 -12.5833335 280 0 2670 --49.7500005 -49.5833335 -12.7500005 -12.5833335 274 0 2670 --49.5833335 -49.4166665 -12.7500005 -12.5833335 257 0 2670 --49.4166665 -49.2499995 -12.7500005 -12.5833335 223 0 2670 --49.2500005 -49.0833335 -12.7500005 -12.5833335 245 0 2670 --49.0833335 -48.9166665 -12.7500005 -12.5833335 273 0 2670 --48.9166665 -48.7499995 -12.7500005 -12.5833335 287 0 2670 --48.7500005 -48.5833335 -12.7500005 -12.5833335 564 0 2670 --48.5833335 -48.4166665 -12.7500005 -12.5833335 420 0 2670 --48.4166665 -48.2499995 -12.7500005 -12.5833335 338 0 2670 --48.2500005 -48.0833335 -12.7500005 -12.5833335 361 0 2670 --48.0833335 -47.9166665 -12.7500005 -12.5833335 323 0 2670 --47.9166665 -47.7499995 -12.7500005 -12.5833335 282 0 2670 --47.7500005 -47.5833335 -12.7500005 -12.5833335 339 0 2670 --47.5833335 -47.4166665 -12.7500005 -12.5833335 341 0 2670 --47.4166665 -47.2499995 -12.7500005 -12.5833335 384 0 2670 --47.2500005 -47.0833335 -12.7500005 -12.5833335 377 0 2670 --47.0833335 -46.9166665 -12.7500005 -12.5833335 535 0 2670 --46.9166665 -46.7499995 -12.7500005 -12.5833335 423 0 2670 --46.7500005 -46.5833335 -12.7500005 -12.5833335 384 0 2670 --46.5833335 -46.4166665 -12.7500005 -12.5833335 443 0 2670 --46.4166665 -46.2499995 -12.7500005 -12.5833335 533 0 2670 --46.2500005 -46.0833335 -12.7500005 -12.5833335 886 0 2670 --46.0833335 -45.9166665 -12.7500005 -12.5833335 835 0 2670 --45.9166665 -45.7499995 -12.7500005 -12.5833335 765 0 2670 --45.7500005 -45.5833335 -12.7500005 -12.5833335 759 0 2670 --45.5833335 -45.4166665 -12.7500005 -12.5833335 731 0 2670 --45.4166665 -45.2499995 -12.7500005 -12.5833335 737 0 2670 --45.2500005 -45.0833335 -12.7500005 -12.5833335 722 0 2670 --45.0833335 -44.9166665 -12.7500005 -12.5833335 708 0 2670 --44.9166665 -44.7499995 -12.7500005 -12.5833335 741 0 2670 --44.7500005 -44.5833335 -12.7500005 -12.5833335 778 0 2670 --44.5833335 -44.4166665 -12.7500005 -12.5833335 786 0 2670 --44.4166665 -44.2499995 -12.7500005 -12.5833335 782 0 2670 --44.2500005 -44.0833335 -12.7500005 -12.5833335 767 0 2670 --44.0833335 -43.9166665 -12.7500005 -12.5833335 528 0 2670 --43.9166665 -43.7499995 -12.7500005 -12.5833335 486 0 2670 --43.7500005 -43.5833335 -12.7500005 -12.5833335 460 0 2670 --43.5833335 -43.4166665 -12.7500005 -12.5833335 440 0 2670 --43.4166665 -43.2499995 -12.7500005 -12.5833335 441 0 2670 --43.2500005 -43.0833335 -12.7500005 -12.5833335 427 0 2670 --43.0833335 -42.9166665 -12.7500005 -12.5833335 474 0 2670 --42.9166665 -42.7499995 -12.7500005 -12.5833335 984 0 2670 --42.7500005 -42.5833335 -12.7500005 -12.5833335 519 0 2670 --42.5833335 -42.4166665 -12.7500005 -12.5833335 526 0 2670 --42.4166665 -42.2499995 -12.7500005 -12.5833335 572 0 2670 --42.2500005 -42.0833335 -12.7500005 -12.5833335 1225 0 2670 --42.0833335 -41.9166665 -12.7500005 -12.5833335 1197 0 2670 --41.9166665 -41.7499995 -12.7500005 -12.5833335 1030 0 2670 --41.7500005 -41.5833335 -12.7500005 -12.5833335 953 0 2670 --41.5833335 -41.4166665 -12.7500005 -12.5833335 1307 0 2670 --41.4166665 -41.2499995 -12.7500005 -12.5833335 346 0 2670 --41.2500005 -41.0833335 -12.7500005 -12.5833335 411 0 2670 --41.0833335 -40.9166665 -12.7500005 -12.5833335 598 0 2670 --40.9166665 -40.7499995 -12.7500005 -12.5833335 512 0 2670 --40.7500005 -40.5833335 -12.7500005 -12.5833335 349 0 2670 --40.5833335 -40.4166665 -12.7500005 -12.5833335 436 0 2670 --40.4166665 -40.2499995 -12.7500005 -12.5833335 280 0 2670 --40.2500005 -40.0833335 -12.7500005 -12.5833335 251 0 2670 --40.0833335 -39.9166665 -12.7500005 -12.5833335 227 0 2670 --65.0833335 -64.9166665 -12.9166665 -12.7499995 139 0 2670 --64.9166665 -64.7499995 -12.9166665 -12.7499995 141 0 2670 --64.7500005 -64.5833335 -12.9166665 -12.7499995 153 0 2670 --64.5833335 -64.4166665 -12.9166665 -12.7499995 141 0 2670 --64.4166665 -64.2499995 -12.9166665 -12.7499995 138 0 2670 --64.2500005 -64.0833335 -12.9166665 -12.7499995 175 0 2670 --64.0833335 -63.9166665 -12.9166665 -12.7499995 146 0 2670 --63.9166665 -63.7499995 -12.9166665 -12.7499995 138 0 2670 --63.7500005 -63.5833335 -12.9166665 -12.7499995 154 0 2670 --63.5833335 -63.4166665 -12.9166665 -12.7499995 158 0 2670 --63.4166665 -63.2499995 -12.9166665 -12.7499995 182 0 2670 --63.2500005 -63.0833335 -12.9166665 -12.7499995 154 0 2670 --63.0833335 -62.9166665 -12.9166665 -12.7499995 150 0 2670 --62.9166665 -62.7499995 -12.9166665 -12.7499995 143 0 2670 --62.7500005 -62.5833335 -12.9166665 -12.7499995 145 0 2670 --62.5833335 -62.4166665 -12.9166665 -12.7499995 149 0 2670 --62.4166665 -62.2499995 -12.9166665 -12.7499995 160 0 2670 --62.2500005 -62.0833335 -12.9166665 -12.7499995 188 0 2670 --62.0833335 -61.9166665 -12.9166665 -12.7499995 167 0 2670 --61.9166665 -61.7499995 -12.9166665 -12.7499995 163 0 2670 --61.7500005 -61.5833335 -12.9166665 -12.7499995 186 0 2670 --61.5833335 -61.4166665 -12.9166665 -12.7499995 193 0 2670 --61.4166665 -61.2499995 -12.9166665 -12.7499995 236 0 2670 --61.2500005 -61.0833335 -12.9166665 -12.7499995 294 0 2670 --61.0833335 -60.9166665 -12.9166665 -12.7499995 299 0 2670 --60.9166665 -60.7499995 -12.9166665 -12.7499995 301 0 2670 --60.7500005 -60.5833335 -12.9166665 -12.7499995 374 0 2670 --60.5833335 -60.4166665 -12.9166665 -12.7499995 338 0 2670 --60.4166665 -60.2499995 -12.9166665 -12.7499995 502 0 2670 --60.2500005 -60.0833335 -12.9166665 -12.7499995 570 0 2670 --60.0833335 -59.9166665 -12.9166665 -12.7499995 589 0 2670 --59.9166665 -59.7499995 -12.9166665 -12.7499995 521 0 2670 --59.7500005 -59.5833335 -12.9166665 -12.7499995 481 0 2670 --59.5833335 -59.4166665 -12.9166665 -12.7499995 457 0 2670 --59.4166665 -59.2499995 -12.9166665 -12.7499995 439 0 2670 --59.2500005 -59.0833335 -12.9166665 -12.7499995 366 0 2670 --59.0833335 -58.9166665 -12.9166665 -12.7499995 427 0 2670 --58.9166665 -58.7499995 -12.9166665 -12.7499995 387 0 2670 --58.7500005 -58.5833335 -12.9166665 -12.7499995 345 0 2670 --58.5833335 -58.4166665 -12.9166665 -12.7499995 391 0 2670 --58.4166665 -58.2499995 -12.9166665 -12.7499995 326 0 2670 --58.2500005 -58.0833335 -12.9166665 -12.7499995 408 0 2670 --58.0833335 -57.9166665 -12.9166665 -12.7499995 408 0 2670 --57.9166665 -57.7499995 -12.9166665 -12.7499995 413 0 2670 --57.7500005 -57.5833335 -12.9166665 -12.7499995 340 0 2670 --57.5833335 -57.4166665 -12.9166665 -12.7499995 335 0 2670 --57.4166665 -57.2499995 -12.9166665 -12.7499995 319 0 2670 --57.2500005 -57.0833335 -12.9166665 -12.7499995 354 0 2670 --57.0833335 -56.9166665 -12.9166665 -12.7499995 338 0 2670 --56.9166665 -56.7499995 -12.9166665 -12.7499995 322 0 2670 --56.7500005 -56.5833335 -12.9166665 -12.7499995 298 0 2670 --56.5833335 -56.4166665 -12.9166665 -12.7499995 380 0 2670 --56.4166665 -56.2499995 -12.9166665 -12.7499995 404 0 2670 --56.2500005 -56.0833335 -12.9166665 -12.7499995 369 0 2670 --56.0833335 -55.9166665 -12.9166665 -12.7499995 366 0 2670 --55.9166665 -55.7499995 -12.9166665 -12.7499995 403 0 2670 --55.7500005 -55.5833335 -12.9166665 -12.7499995 337 0 2670 --55.5833335 -55.4166665 -12.9166665 -12.7499995 417 0 2670 --55.4166665 -55.2499995 -12.9166665 -12.7499995 427 0 2670 --55.2500005 -55.0833335 -12.9166665 -12.7499995 415 0 2670 --55.0833335 -54.9166665 -12.9166665 -12.7499995 378 0 2670 --54.9166665 -54.7499995 -12.9166665 -12.7499995 363 0 2670 --54.7500005 -54.5833335 -12.9166665 -12.7499995 348 0 2670 --54.5833335 -54.4166665 -12.9166665 -12.7499995 381 0 2670 --54.4166665 -54.2499995 -12.9166665 -12.7499995 317 0 2670 --54.2500005 -54.0833335 -12.9166665 -12.7499995 316 0 2670 --54.0833335 -53.9166665 -12.9166665 -12.7499995 352 0 2670 --53.9166665 -53.7499995 -12.9166665 -12.7499995 338 0 2670 --53.7500005 -53.5833335 -12.9166665 -12.7499995 360 0 2670 --53.5833335 -53.4166665 -12.9166665 -12.7499995 357 0 2670 --53.4166665 -53.2499995 -12.9166665 -12.7499995 344 0 2670 --53.2500005 -53.0833335 -12.9166665 -12.7499995 342 0 2670 --53.0833335 -52.9166665 -12.9166665 -12.7499995 307 0 2670 --52.9166665 -52.7499995 -12.9166665 -12.7499995 304 0 2670 --52.7500005 -52.5833335 -12.9166665 -12.7499995 347 0 2670 --52.5833335 -52.4166665 -12.9166665 -12.7499995 335 0 2670 --52.4166665 -52.2499995 -12.9166665 -12.7499995 348 0 2670 --52.2500005 -52.0833335 -12.9166665 -12.7499995 377 0 2670 --52.0833335 -51.9166665 -12.9166665 -12.7499995 350 0 2670 --51.9166665 -51.7499995 -12.9166665 -12.7499995 382 0 2670 --51.7500005 -51.5833335 -12.9166665 -12.7499995 294 0 2670 --51.5833335 -51.4166665 -12.9166665 -12.7499995 242 0 2670 --51.4166665 -51.2499995 -12.9166665 -12.7499995 224 0 2670 --51.2500005 -51.0833335 -12.9166665 -12.7499995 214 0 2670 --51.0833335 -50.9166665 -12.9166665 -12.7499995 214 0 2670 --50.9166665 -50.7499995 -12.9166665 -12.7499995 210 0 2670 --50.7500005 -50.5833335 -12.9166665 -12.7499995 213 0 2670 --50.5833335 -50.4166665 -12.9166665 -12.7499995 214 0 2670 --50.4166665 -50.2499995 -12.9166665 -12.7499995 212 0 2670 --50.2500005 -50.0833335 -12.9166665 -12.7499995 285 0 2670 --50.0833335 -49.9166665 -12.9166665 -12.7499995 293 0 2670 --49.9166665 -49.7499995 -12.9166665 -12.7499995 315 0 2670 --49.7500005 -49.5833335 -12.9166665 -12.7499995 261 0 2670 --49.5833335 -49.4166665 -12.9166665 -12.7499995 265 0 2670 --49.4166665 -49.2499995 -12.9166665 -12.7499995 244 0 2670 --49.2500005 -49.0833335 -12.9166665 -12.7499995 261 0 2670 --49.0833335 -48.9166665 -12.9166665 -12.7499995 296 0 2670 --48.9166665 -48.7499995 -12.9166665 -12.7499995 308 0 2670 --48.7500005 -48.5833335 -12.9166665 -12.7499995 409 0 2670 --48.5833335 -48.4166665 -12.9166665 -12.7499995 429 0 2670 --48.4166665 -48.2499995 -12.9166665 -12.7499995 348 0 2670 --48.2500005 -48.0833335 -12.9166665 -12.7499995 441 0 2670 --48.0833335 -47.9166665 -12.9166665 -12.7499995 910 0 2670 --47.9166665 -47.7499995 -12.9166665 -12.7499995 317 0 2670 --47.7500005 -47.5833335 -12.9166665 -12.7499995 336 0 2670 --47.5833335 -47.4166665 -12.9166665 -12.7499995 371 0 2670 --47.4166665 -47.2499995 -12.9166665 -12.7499995 407 0 2670 --47.2500005 -47.0833335 -12.9166665 -12.7499995 444 0 2670 --47.0833335 -46.9166665 -12.9166665 -12.7499995 572 0 2670 --46.9166665 -46.7499995 -12.9166665 -12.7499995 733 0 2670 --46.7500005 -46.5833335 -12.9166665 -12.7499995 622 0 2670 --46.5833335 -46.4166665 -12.9166665 -12.7499995 425 0 2670 --46.4166665 -46.2499995 -12.9166665 -12.7499995 559 0 2670 --46.2500005 -46.0833335 -12.9166665 -12.7499995 905 0 2670 --46.0833335 -45.9166665 -12.9166665 -12.7499995 790 0 2670 --45.9166665 -45.7499995 -12.9166665 -12.7499995 807 0 2670 --45.7500005 -45.5833335 -12.9166665 -12.7499995 749 0 2670 --45.5833335 -45.4166665 -12.9166665 -12.7499995 756 0 2670 --45.4166665 -45.2499995 -12.9166665 -12.7499995 720 0 2670 --45.2500005 -45.0833335 -12.9166665 -12.7499995 741 0 2670 --45.0833335 -44.9166665 -12.9166665 -12.7499995 735 0 2670 --44.9166665 -44.7499995 -12.9166665 -12.7499995 767 0 2670 --44.7500005 -44.5833335 -12.9166665 -12.7499995 749 0 2670 --44.5833335 -44.4166665 -12.9166665 -12.7499995 788 0 2670 --44.4166665 -44.2499995 -12.9166665 -12.7499995 812 0 2670 --44.2500005 -44.0833335 -12.9166665 -12.7499995 829 0 2670 --44.0833335 -43.9166665 -12.9166665 -12.7499995 720 0 2670 --43.9166665 -43.7499995 -12.9166665 -12.7499995 505 0 2670 --43.7500005 -43.5833335 -12.9166665 -12.7499995 465 0 2670 --43.5833335 -43.4166665 -12.9166665 -12.7499995 442 0 2670 --43.4166665 -43.2499995 -12.9166665 -12.7499995 424 0 2670 --43.2500005 -43.0833335 -12.9166665 -12.7499995 447 0 2670 --43.0833335 -42.9166665 -12.9166665 -12.7499995 628 0 2670 --42.9166665 -42.7499995 -12.9166665 -12.7499995 866 0 2670 --42.7500005 -42.5833335 -12.9166665 -12.7499995 590 0 2670 --42.5833335 -42.4166665 -12.9166665 -12.7499995 501 0 2670 --42.4166665 -42.2499995 -12.9166665 -12.7499995 541 0 2670 --42.2500005 -42.0833335 -12.9166665 -12.7499995 873 0 2670 --42.0833335 -41.9166665 -12.9166665 -12.7499995 1155 0 2670 --41.9166665 -41.7499995 -12.9166665 -12.7499995 1103 0 2670 --41.7500005 -41.5833335 -12.9166665 -12.7499995 1260 0 2670 --41.5833335 -41.4166665 -12.9166665 -12.7499995 1154 0 2670 --41.4166665 -41.2499995 -12.9166665 -12.7499995 533 0 2670 --41.2500005 -41.0833335 -12.9166665 -12.7499995 363 0 2670 --41.0833335 -40.9166665 -12.9166665 -12.7499995 536 0 2670 --40.9166665 -40.7499995 -12.9166665 -12.7499995 652 0 2670 --40.7500005 -40.5833335 -12.9166665 -12.7499995 368 0 2670 --40.5833335 -40.4166665 -12.9166665 -12.7499995 450 0 2670 --40.4166665 -40.2499995 -12.9166665 -12.7499995 413 0 2670 --40.2500005 -40.0833335 -12.9166665 -12.7499995 300 0 2670 --40.0833335 -39.9166665 -12.9166665 -12.7499995 292 0 2670 --65.0833335 -64.9166665 -13.0833335 -12.9166665 143 0 2670 --64.9166665 -64.7499995 -13.0833335 -12.9166665 138 0 2670 --64.7500005 -64.5833335 -13.0833335 -12.9166665 138 0 2670 --64.5833335 -64.4166665 -13.0833335 -12.9166665 146 0 2670 --64.4166665 -64.2499995 -13.0833335 -12.9166665 134 0 2670 --64.2500005 -64.0833335 -13.0833335 -12.9166665 135 0 2670 --64.0833335 -63.9166665 -13.0833335 -12.9166665 146 0 2670 --63.9166665 -63.7499995 -13.0833335 -12.9166665 144 0 2670 --63.7500005 -63.5833335 -13.0833335 -12.9166665 175 0 2670 --63.5833335 -63.4166665 -13.0833335 -12.9166665 169 0 2670 --63.4166665 -63.2499995 -13.0833335 -12.9166665 179 0 2670 --63.2500005 -63.0833335 -13.0833335 -12.9166665 139 0 2670 --63.0833335 -62.9166665 -13.0833335 -12.9166665 149 0 2670 --62.9166665 -62.7499995 -13.0833335 -12.9166665 157 0 2670 --62.7500005 -62.5833335 -13.0833335 -12.9166665 158 0 2670 --62.5833335 -62.4166665 -13.0833335 -12.9166665 156 0 2670 --62.4166665 -62.2499995 -13.0833335 -12.9166665 220 0 2670 --62.2500005 -62.0833335 -13.0833335 -12.9166665 151 0 2670 --62.0833335 -61.9166665 -13.0833335 -12.9166665 160 0 2670 --61.9166665 -61.7499995 -13.0833335 -12.9166665 159 0 2670 --61.7500005 -61.5833335 -13.0833335 -12.9166665 179 0 2670 --61.5833335 -61.4166665 -13.0833335 -12.9166665 168 0 2670 --61.4166665 -61.2499995 -13.0833335 -12.9166665 205 0 2670 --61.2500005 -61.0833335 -13.0833335 -12.9166665 221 0 2670 --61.0833335 -60.9166665 -13.0833335 -12.9166665 253 0 2670 --60.9166665 -60.7499995 -13.0833335 -12.9166665 263 0 2670 --60.7500005 -60.5833335 -13.0833335 -12.9166665 554 0 2670 --60.5833335 -60.4166665 -13.0833335 -12.9166665 362 0 2670 --60.4166665 -60.2499995 -13.0833335 -12.9166665 322 0 2670 --60.2500005 -60.0833335 -13.0833335 -12.9166665 372 0 2670 --60.0833335 -59.9166665 -13.0833335 -12.9166665 566 0 2670 --59.9166665 -59.7499995 -13.0833335 -12.9166665 555 0 2670 --59.7500005 -59.5833335 -13.0833335 -12.9166665 535 0 2670 --59.5833335 -59.4166665 -13.0833335 -12.9166665 478 0 2670 --59.4166665 -59.2499995 -13.0833335 -12.9166665 449 0 2670 --59.2500005 -59.0833335 -13.0833335 -12.9166665 391 0 2670 --59.0833335 -58.9166665 -13.0833335 -12.9166665 431 0 2670 --58.9166665 -58.7499995 -13.0833335 -12.9166665 425 0 2670 --58.7500005 -58.5833335 -13.0833335 -12.9166665 457 0 2670 --58.5833335 -58.4166665 -13.0833335 -12.9166665 386 0 2670 --58.4166665 -58.2499995 -13.0833335 -12.9166665 378 0 2670 --58.2500005 -58.0833335 -13.0833335 -12.9166665 398 0 2670 --58.0833335 -57.9166665 -13.0833335 -12.9166665 415 0 2670 --57.9166665 -57.7499995 -13.0833335 -12.9166665 425 0 2670 --57.7500005 -57.5833335 -13.0833335 -12.9166665 375 0 2670 --57.5833335 -57.4166665 -13.0833335 -12.9166665 339 0 2670 --57.4166665 -57.2499995 -13.0833335 -12.9166665 319 0 2670 --57.2500005 -57.0833335 -13.0833335 -12.9166665 331 0 2670 --57.0833335 -56.9166665 -13.0833335 -12.9166665 386 0 2670 --56.9166665 -56.7499995 -13.0833335 -12.9166665 331 0 2670 --56.7500005 -56.5833335 -13.0833335 -12.9166665 300 0 2670 --56.5833335 -56.4166665 -13.0833335 -12.9166665 340 0 2670 --56.4166665 -56.2499995 -13.0833335 -12.9166665 371 0 2670 --56.2500005 -56.0833335 -13.0833335 -12.9166665 402 0 2670 --56.0833335 -55.9166665 -13.0833335 -12.9166665 405 0 2670 --55.9166665 -55.7499995 -13.0833335 -12.9166665 410 0 2670 --55.7500005 -55.5833335 -13.0833335 -12.9166665 356 0 2670 --55.5833335 -55.4166665 -13.0833335 -12.9166665 415 0 2670 --55.4166665 -55.2499995 -13.0833335 -12.9166665 418 0 2670 --55.2500005 -55.0833335 -13.0833335 -12.9166665 445 0 2670 --55.0833335 -54.9166665 -13.0833335 -12.9166665 403 0 2670 --54.9166665 -54.7499995 -13.0833335 -12.9166665 357 0 2670 --54.7500005 -54.5833335 -13.0833335 -12.9166665 347 0 2670 --54.5833335 -54.4166665 -13.0833335 -12.9166665 380 0 2670 --54.4166665 -54.2499995 -13.0833335 -12.9166665 365 0 2670 --54.2500005 -54.0833335 -13.0833335 -12.9166665 362 0 2670 --54.0833335 -53.9166665 -13.0833335 -12.9166665 325 0 2670 --53.9166665 -53.7499995 -13.0833335 -12.9166665 382 0 2670 --53.7500005 -53.5833335 -13.0833335 -12.9166665 359 0 2670 --53.5833335 -53.4166665 -13.0833335 -12.9166665 371 0 2670 --53.4166665 -53.2499995 -13.0833335 -12.9166665 343 0 2670 --53.2500005 -53.0833335 -13.0833335 -12.9166665 364 0 2670 --53.0833335 -52.9166665 -13.0833335 -12.9166665 335 0 2670 --52.9166665 -52.7499995 -13.0833335 -12.9166665 344 0 2670 --52.7500005 -52.5833335 -13.0833335 -12.9166665 367 0 2670 --52.5833335 -52.4166665 -13.0833335 -12.9166665 367 0 2670 --52.4166665 -52.2499995 -13.0833335 -12.9166665 355 0 2670 --52.2500005 -52.0833335 -13.0833335 -12.9166665 342 0 2670 --52.0833335 -51.9166665 -13.0833335 -12.9166665 397 0 2670 --51.9166665 -51.7499995 -13.0833335 -12.9166665 360 0 2670 --51.7500005 -51.5833335 -13.0833335 -12.9166665 261 0 2670 --51.5833335 -51.4166665 -13.0833335 -12.9166665 236 0 2670 --51.4166665 -51.2499995 -13.0833335 -12.9166665 224 0 2670 --51.2500005 -51.0833335 -13.0833335 -12.9166665 219 0 2670 --51.0833335 -50.9166665 -13.0833335 -12.9166665 217 0 2670 --50.9166665 -50.7499995 -13.0833335 -12.9166665 215 0 2670 --50.7500005 -50.5833335 -13.0833335 -12.9166665 216 0 2670 --50.5833335 -50.4166665 -13.0833335 -12.9166665 212 0 2670 --50.4166665 -50.2499995 -13.0833335 -12.9166665 221 0 2670 --50.2500005 -50.0833335 -13.0833335 -12.9166665 259 0 2670 --50.0833335 -49.9166665 -13.0833335 -12.9166665 270 0 2670 --49.9166665 -49.7499995 -13.0833335 -12.9166665 277 0 2670 --49.7500005 -49.5833335 -13.0833335 -12.9166665 294 0 2670 --49.5833335 -49.4166665 -13.0833335 -12.9166665 244 0 2670 --49.4166665 -49.2499995 -13.0833335 -12.9166665 285 0 2670 --49.2500005 -49.0833335 -13.0833335 -12.9166665 304 0 2670 --49.0833335 -48.9166665 -13.0833335 -12.9166665 409 0 2670 --48.9166665 -48.7499995 -13.0833335 -12.9166665 306 0 2670 --48.7500005 -48.5833335 -13.0833335 -12.9166665 344 0 2670 --48.5833335 -48.4166665 -13.0833335 -12.9166665 774 0 2670 --48.4166665 -48.2499995 -13.0833335 -12.9166665 432 0 2670 --48.2500005 -48.0833335 -13.0833335 -12.9166665 302 0 2670 --48.0833335 -47.9166665 -13.0833335 -12.9166665 743 0 2670 --47.9166665 -47.7499995 -13.0833335 -12.9166665 371 0 2670 --47.7500005 -47.5833335 -13.0833335 -12.9166665 335 0 2670 --47.5833335 -47.4166665 -13.0833335 -12.9166665 353 0 2670 --47.4166665 -47.2499995 -13.0833335 -12.9166665 404 0 2670 --47.2500005 -47.0833335 -13.0833335 -12.9166665 409 0 2670 --47.0833335 -46.9166665 -13.0833335 -12.9166665 584 0 2670 --46.9166665 -46.7499995 -13.0833335 -12.9166665 579 0 2670 --46.7500005 -46.5833335 -13.0833335 -12.9166665 638 0 2670 --46.5833335 -46.4166665 -13.0833335 -12.9166665 693 0 2670 --46.4166665 -46.2499995 -13.0833335 -12.9166665 684 0 2670 --46.2500005 -46.0833335 -13.0833335 -12.9166665 922 0 2670 --46.0833335 -45.9166665 -13.0833335 -12.9166665 841 0 2670 --45.9166665 -45.7499995 -13.0833335 -12.9166665 828 0 2670 --45.7500005 -45.5833335 -13.0833335 -12.9166665 777 0 2670 --45.5833335 -45.4166665 -13.0833335 -12.9166665 764 0 2670 --45.4166665 -45.2499995 -13.0833335 -12.9166665 762 0 2670 --45.2500005 -45.0833335 -13.0833335 -12.9166665 754 0 2670 --45.0833335 -44.9166665 -13.0833335 -12.9166665 752 0 2670 --44.9166665 -44.7499995 -13.0833335 -12.9166665 650 0 2670 --44.7500005 -44.5833335 -13.0833335 -12.9166665 702 0 2670 --44.5833335 -44.4166665 -13.0833335 -12.9166665 747 0 2670 --44.4166665 -44.2499995 -13.0833335 -12.9166665 783 0 2670 --44.2500005 -44.0833335 -13.0833335 -12.9166665 631 0 2670 --44.0833335 -43.9166665 -13.0833335 -12.9166665 522 0 2670 --43.9166665 -43.7499995 -13.0833335 -12.9166665 473 0 2670 --43.7500005 -43.5833335 -13.0833335 -12.9166665 461 0 2670 --43.5833335 -43.4166665 -13.0833335 -12.9166665 439 0 2670 --43.4166665 -43.2499995 -13.0833335 -12.9166665 430 0 2670 --43.2500005 -43.0833335 -13.0833335 -12.9166665 452 0 2670 --43.0833335 -42.9166665 -13.0833335 -12.9166665 883 0 2670 --42.9166665 -42.7499995 -13.0833335 -12.9166665 922 0 2670 --42.7500005 -42.5833335 -13.0833335 -12.9166665 634 0 2670 --42.5833335 -42.4166665 -13.0833335 -12.9166665 544 0 2670 --42.4166665 -42.2499995 -13.0833335 -12.9166665 554 0 2670 --42.2500005 -42.0833335 -13.0833335 -12.9166665 884 0 2670 --42.0833335 -41.9166665 -13.0833335 -12.9166665 1263 0 2670 --41.9166665 -41.7499995 -13.0833335 -12.9166665 1279 0 2670 --41.7500005 -41.5833335 -13.0833335 -12.9166665 1242 0 2670 --41.5833335 -41.4166665 -13.0833335 -12.9166665 1087 0 2670 --41.4166665 -41.2499995 -13.0833335 -12.9166665 982 0 2670 --41.2500005 -41.0833335 -13.0833335 -12.9166665 445 0 2670 --41.0833335 -40.9166665 -13.0833335 -12.9166665 604 0 2670 --40.9166665 -40.7499995 -13.0833335 -12.9166665 320 0 2670 --40.7500005 -40.5833335 -13.0833335 -12.9166665 281 0 2670 --40.5833335 -40.4166665 -13.0833335 -12.9166665 296 0 2670 --40.4166665 -40.2499995 -13.0833335 -12.9166665 718 0 2670 --40.2500005 -40.0833335 -13.0833335 -12.9166665 542 0 2670 --40.0833335 -39.9166665 -13.0833335 -12.9166665 538 0 2670 --65.0833335 -64.9166665 -13.2500005 -13.0833335 136 0 2670 --64.9166665 -64.7499995 -13.2500005 -13.0833335 134 0 2670 --64.7500005 -64.5833335 -13.2500005 -13.0833335 138 0 2670 --64.5833335 -64.4166665 -13.2500005 -13.0833335 139 0 2670 --64.4166665 -64.2499995 -13.2500005 -13.0833335 136 0 2670 --64.2500005 -64.0833335 -13.2500005 -13.0833335 137 0 2670 --64.0833335 -63.9166665 -13.2500005 -13.0833335 141 0 2670 --63.9166665 -63.7499995 -13.2500005 -13.0833335 140 0 2670 --63.7500005 -63.5833335 -13.2500005 -13.0833335 153 0 2670 --63.5833335 -63.4166665 -13.2500005 -13.0833335 198 0 2670 --63.4166665 -63.2499995 -13.2500005 -13.0833335 164 0 2670 --63.2500005 -63.0833335 -13.2500005 -13.0833335 148 0 2670 --63.0833335 -62.9166665 -13.2500005 -13.0833335 141 0 2670 --62.9166665 -62.7499995 -13.2500005 -13.0833335 188 0 2670 --62.7500005 -62.5833335 -13.2500005 -13.0833335 169 0 2670 --62.5833335 -62.4166665 -13.2500005 -13.0833335 175 0 2670 --62.4166665 -62.2499995 -13.2500005 -13.0833335 162 0 2670 --62.2500005 -62.0833335 -13.2500005 -13.0833335 165 0 2670 --62.0833335 -61.9166665 -13.2500005 -13.0833335 160 0 2670 --61.9166665 -61.7499995 -13.2500005 -13.0833335 158 0 2670 --61.7500005 -61.5833335 -13.2500005 -13.0833335 166 0 2670 --61.5833335 -61.4166665 -13.2500005 -13.0833335 174 0 2670 --61.4166665 -61.2499995 -13.2500005 -13.0833335 185 0 2670 --61.2500005 -61.0833335 -13.2500005 -13.0833335 193 0 2670 --61.0833335 -60.9166665 -13.2500005 -13.0833335 232 0 2670 --60.9166665 -60.7499995 -13.2500005 -13.0833335 255 0 2670 --60.7500005 -60.5833335 -13.2500005 -13.0833335 269 0 2670 --60.5833335 -60.4166665 -13.2500005 -13.0833335 412 0 2670 --60.4166665 -60.2499995 -13.2500005 -13.0833335 274 0 2670 --60.2500005 -60.0833335 -13.2500005 -13.0833335 291 0 2670 --60.0833335 -59.9166665 -13.2500005 -13.0833335 469 0 2670 --59.9166665 -59.7499995 -13.2500005 -13.0833335 559 0 2670 --59.7500005 -59.5833335 -13.2500005 -13.0833335 501 0 2670 --59.5833335 -59.4166665 -13.2500005 -13.0833335 438 0 2670 --59.4166665 -59.2499995 -13.2500005 -13.0833335 423 0 2670 --59.2500005 -59.0833335 -13.2500005 -13.0833335 437 0 2670 --59.0833335 -58.9166665 -13.2500005 -13.0833335 374 0 2670 --58.9166665 -58.7499995 -13.2500005 -13.0833335 487 0 2670 --58.7500005 -58.5833335 -13.2500005 -13.0833335 513 0 2670 --58.5833335 -58.4166665 -13.2500005 -13.0833335 444 0 2670 --58.4166665 -58.2499995 -13.2500005 -13.0833335 429 0 2670 --58.2500005 -58.0833335 -13.2500005 -13.0833335 415 0 2670 --58.0833335 -57.9166665 -13.2500005 -13.0833335 483 0 2670 --57.9166665 -57.7499995 -13.2500005 -13.0833335 478 0 2670 --57.7500005 -57.5833335 -13.2500005 -13.0833335 392 0 2670 --57.5833335 -57.4166665 -13.2500005 -13.0833335 313 0 2670 --57.4166665 -57.2499995 -13.2500005 -13.0833335 376 0 2670 --57.2500005 -57.0833335 -13.2500005 -13.0833335 308 0 2670 --57.0833335 -56.9166665 -13.2500005 -13.0833335 377 0 2670 --56.9166665 -56.7499995 -13.2500005 -13.0833335 351 0 2670 --56.7500005 -56.5833335 -13.2500005 -13.0833335 320 0 2670 --56.5833335 -56.4166665 -13.2500005 -13.0833335 397 0 2670 --56.4166665 -56.2499995 -13.2500005 -13.0833335 367 0 2670 --56.2500005 -56.0833335 -13.2500005 -13.0833335 415 0 2670 --56.0833335 -55.9166665 -13.2500005 -13.0833335 410 0 2670 --55.9166665 -55.7499995 -13.2500005 -13.0833335 405 0 2670 --55.7500005 -55.5833335 -13.2500005 -13.0833335 349 0 2670 --55.5833335 -55.4166665 -13.2500005 -13.0833335 431 0 2670 --55.4166665 -55.2499995 -13.2500005 -13.0833335 439 0 2670 --55.2500005 -55.0833335 -13.2500005 -13.0833335 437 0 2670 --55.0833335 -54.9166665 -13.2500005 -13.0833335 432 0 2670 --54.9166665 -54.7499995 -13.2500005 -13.0833335 354 0 2670 --54.7500005 -54.5833335 -13.2500005 -13.0833335 400 0 2670 --54.5833335 -54.4166665 -13.2500005 -13.0833335 383 0 2670 --54.4166665 -54.2499995 -13.2500005 -13.0833335 390 0 2670 --54.2500005 -54.0833335 -13.2500005 -13.0833335 352 0 2670 --54.0833335 -53.9166665 -13.2500005 -13.0833335 325 0 2670 --53.9166665 -53.7499995 -13.2500005 -13.0833335 392 0 2670 --53.7500005 -53.5833335 -13.2500005 -13.0833335 357 0 2670 --53.5833335 -53.4166665 -13.2500005 -13.0833335 356 0 2670 --53.4166665 -53.2499995 -13.2500005 -13.0833335 378 0 2670 --53.2500005 -53.0833335 -13.2500005 -13.0833335 399 0 2670 --53.0833335 -52.9166665 -13.2500005 -13.0833335 390 0 2670 --52.9166665 -52.7499995 -13.2500005 -13.0833335 379 0 2670 --52.7500005 -52.5833335 -13.2500005 -13.0833335 318 0 2670 --52.5833335 -52.4166665 -13.2500005 -13.0833335 360 0 2670 --52.4166665 -52.2499995 -13.2500005 -13.0833335 366 0 2670 --52.2500005 -52.0833335 -13.2500005 -13.0833335 353 0 2670 --52.0833335 -51.9166665 -13.2500005 -13.0833335 333 0 2670 --51.9166665 -51.7499995 -13.2500005 -13.0833335 386 0 2670 --51.7500005 -51.5833335 -13.2500005 -13.0833335 309 0 2670 --51.5833335 -51.4166665 -13.2500005 -13.0833335 250 0 2670 --51.4166665 -51.2499995 -13.2500005 -13.0833335 230 0 2670 --51.2500005 -51.0833335 -13.2500005 -13.0833335 218 0 2670 --51.0833335 -50.9166665 -13.2500005 -13.0833335 219 0 2670 --50.9166665 -50.7499995 -13.2500005 -13.0833335 216 0 2670 --50.7500005 -50.5833335 -13.2500005 -13.0833335 214 0 2670 --50.5833335 -50.4166665 -13.2500005 -13.0833335 214 0 2670 --50.4166665 -50.2499995 -13.2500005 -13.0833335 255 0 2670 --50.2500005 -50.0833335 -13.2500005 -13.0833335 350 0 2670 --50.0833335 -49.9166665 -13.2500005 -13.0833335 312 0 2670 --49.9166665 -49.7499995 -13.2500005 -13.0833335 296 0 2670 --49.7500005 -49.5833335 -13.2500005 -13.0833335 284 0 2670 --49.5833335 -49.4166665 -13.2500005 -13.0833335 253 0 2670 --49.4166665 -49.2499995 -13.2500005 -13.0833335 312 0 2670 --49.2500005 -49.0833335 -13.2500005 -13.0833335 313 0 2670 --49.0833335 -48.9166665 -13.2500005 -13.0833335 327 0 2670 --48.9166665 -48.7499995 -13.2500005 -13.0833335 313 0 2670 --48.7500005 -48.5833335 -13.2500005 -13.0833335 519 0 2670 --48.5833335 -48.4166665 -13.2500005 -13.0833335 660 0 2670 --48.4166665 -48.2499995 -13.2500005 -13.0833335 444 0 2670 --48.2500005 -48.0833335 -13.2500005 -13.0833335 310 0 2670 --48.0833335 -47.9166665 -13.2500005 -13.0833335 551 0 2670 --47.9166665 -47.7499995 -13.2500005 -13.0833335 878 0 2670 --47.7500005 -47.5833335 -13.2500005 -13.0833335 332 0 2670 --47.5833335 -47.4166665 -13.2500005 -13.0833335 341 0 2670 --47.4166665 -47.2499995 -13.2500005 -13.0833335 415 0 2670 --47.2500005 -47.0833335 -13.2500005 -13.0833335 424 0 2670 --47.0833335 -46.9166665 -13.2500005 -13.0833335 490 0 2670 --46.9166665 -46.7499995 -13.2500005 -13.0833335 677 0 2670 --46.7500005 -46.5833335 -13.2500005 -13.0833335 543 0 2670 --46.5833335 -46.4166665 -13.2500005 -13.0833335 608 0 2670 --46.4166665 -46.2499995 -13.2500005 -13.0833335 745 0 2670 --46.2500005 -46.0833335 -13.2500005 -13.0833335 942 0 2670 --46.0833335 -45.9166665 -13.2500005 -13.0833335 869 0 2670 --45.9166665 -45.7499995 -13.2500005 -13.0833335 841 0 2670 --45.7500005 -45.5833335 -13.2500005 -13.0833335 801 0 2670 --45.5833335 -45.4166665 -13.2500005 -13.0833335 761 0 2670 --45.4166665 -45.2499995 -13.2500005 -13.0833335 735 0 2670 --45.2500005 -45.0833335 -13.2500005 -13.0833335 760 0 2670 --45.0833335 -44.9166665 -13.2500005 -13.0833335 675 0 2670 --44.9166665 -44.7499995 -13.2500005 -13.0833335 734 0 2670 --44.7500005 -44.5833335 -13.2500005 -13.0833335 611 0 2670 --44.5833335 -44.4166665 -13.2500005 -13.0833335 694 0 2670 --44.4166665 -44.2499995 -13.2500005 -13.0833335 781 0 2670 --44.2500005 -44.0833335 -13.2500005 -13.0833335 642 0 2670 --44.0833335 -43.9166665 -13.2500005 -13.0833335 517 0 2670 --43.9166665 -43.7499995 -13.2500005 -13.0833335 472 0 2670 --43.7500005 -43.5833335 -13.2500005 -13.0833335 436 0 2670 --43.5833335 -43.4166665 -13.2500005 -13.0833335 436 0 2670 --43.4166665 -43.2499995 -13.2500005 -13.0833335 442 0 2670 --43.2500005 -43.0833335 -13.2500005 -13.0833335 450 0 2670 --43.0833335 -42.9166665 -13.2500005 -13.0833335 493 0 2670 --42.9166665 -42.7499995 -13.2500005 -13.0833335 659 0 2670 --42.7500005 -42.5833335 -13.2500005 -13.0833335 680 0 2670 --42.5833335 -42.4166665 -13.2500005 -13.0833335 622 0 2670 --42.4166665 -42.2499995 -13.2500005 -13.0833335 568 0 2670 --42.2500005 -42.0833335 -13.2500005 -13.0833335 908 0 2670 --42.0833335 -41.9166665 -13.2500005 -13.0833335 1185 0 2670 --41.9166665 -41.7499995 -13.2500005 -13.0833335 1349 0 2670 --41.7500005 -41.5833335 -13.2500005 -13.0833335 906 0 2670 --41.5833335 -41.4166665 -13.2500005 -13.0833335 1146 0 2670 --41.4166665 -41.2499995 -13.2500005 -13.0833335 1387 0 2670 --41.2500005 -41.0833335 -13.2500005 -13.0833335 835 0 2670 --41.0833335 -40.9166665 -13.2500005 -13.0833335 572 0 2670 --40.9166665 -40.7499995 -13.2500005 -13.0833335 391 0 2670 --40.7500005 -40.5833335 -13.2500005 -13.0833335 323 0 2670 --40.5833335 -40.4166665 -13.2500005 -13.0833335 629 0 2670 --40.4166665 -40.2499995 -13.2500005 -13.0833335 819 0 2670 --40.2500005 -40.0833335 -13.2500005 -13.0833335 842 0 2670 --40.0833335 -39.9166665 -13.2500005 -13.0833335 596 0 2670 --65.0833335 -64.9166665 -13.4166665 -13.2499995 137 0 2670 --64.9166665 -64.7499995 -13.4166665 -13.2499995 140 0 2670 --64.7500005 -64.5833335 -13.4166665 -13.2499995 138 0 2670 --64.5833335 -64.4166665 -13.4166665 -13.2499995 135 0 2670 --64.4166665 -64.2499995 -13.4166665 -13.2499995 137 0 2670 --64.2500005 -64.0833335 -13.4166665 -13.2499995 140 0 2670 --64.0833335 -63.9166665 -13.4166665 -13.2499995 140 0 2670 --63.9166665 -63.7499995 -13.4166665 -13.2499995 140 0 2670 --63.7500005 -63.5833335 -13.4166665 -13.2499995 142 0 2670 --63.5833335 -63.4166665 -13.4166665 -13.2499995 152 0 2670 --63.4166665 -63.2499995 -13.4166665 -13.2499995 143 0 2670 --63.2500005 -63.0833335 -13.4166665 -13.2499995 143 0 2670 --63.0833335 -62.9166665 -13.4166665 -13.2499995 147 0 2670 --62.9166665 -62.7499995 -13.4166665 -13.2499995 164 0 2670 --62.7500005 -62.5833335 -13.4166665 -13.2499995 210 0 2670 --62.5833335 -62.4166665 -13.4166665 -13.2499995 213 0 2670 --62.4166665 -62.2499995 -13.4166665 -13.2499995 152 0 2670 --62.2500005 -62.0833335 -13.4166665 -13.2499995 159 0 2670 --62.0833335 -61.9166665 -13.4166665 -13.2499995 166 0 2670 --61.9166665 -61.7499995 -13.4166665 -13.2499995 156 0 2670 --61.7500005 -61.5833335 -13.4166665 -13.2499995 161 0 2670 --61.5833335 -61.4166665 -13.4166665 -13.2499995 164 0 2670 --61.4166665 -61.2499995 -13.4166665 -13.2499995 166 0 2670 --61.2500005 -61.0833335 -13.4166665 -13.2499995 179 0 2670 --61.0833335 -60.9166665 -13.4166665 -13.2499995 193 0 2670 --60.9166665 -60.7499995 -13.4166665 -13.2499995 204 0 2670 --60.7500005 -60.5833335 -13.4166665 -13.2499995 239 0 2670 --60.5833335 -60.4166665 -13.4166665 -13.2499995 359 0 2670 --60.4166665 -60.2499995 -13.4166665 -13.2499995 248 0 2670 --60.2500005 -60.0833335 -13.4166665 -13.2499995 396 0 2670 --60.0833335 -59.9166665 -13.4166665 -13.2499995 456 0 2670 --59.9166665 -59.7499995 -13.4166665 -13.2499995 609 0 2670 --59.7500005 -59.5833335 -13.4166665 -13.2499995 568 0 2670 --59.5833335 -59.4166665 -13.4166665 -13.2499995 455 0 2670 --59.4166665 -59.2499995 -13.4166665 -13.2499995 509 0 2670 --59.2500005 -59.0833335 -13.4166665 -13.2499995 457 0 2670 --59.0833335 -58.9166665 -13.4166665 -13.2499995 443 0 2670 --58.9166665 -58.7499995 -13.4166665 -13.2499995 494 0 2670 --58.7500005 -58.5833335 -13.4166665 -13.2499995 471 0 2670 --58.5833335 -58.4166665 -13.4166665 -13.2499995 522 0 2670 --58.4166665 -58.2499995 -13.4166665 -13.2499995 433 0 2670 --58.2500005 -58.0833335 -13.4166665 -13.2499995 504 0 2670 --58.0833335 -57.9166665 -13.4166665 -13.2499995 478 0 2670 --57.9166665 -57.7499995 -13.4166665 -13.2499995 449 0 2670 --57.7500005 -57.5833335 -13.4166665 -13.2499995 434 0 2670 --57.5833335 -57.4166665 -13.4166665 -13.2499995 391 0 2670 --57.4166665 -57.2499995 -13.4166665 -13.2499995 364 0 2670 --57.2500005 -57.0833335 -13.4166665 -13.2499995 354 0 2670 --57.0833335 -56.9166665 -13.4166665 -13.2499995 317 0 2670 --56.9166665 -56.7499995 -13.4166665 -13.2499995 343 0 2670 --56.7500005 -56.5833335 -13.4166665 -13.2499995 328 0 2670 --56.5833335 -56.4166665 -13.4166665 -13.2499995 349 0 2670 --56.4166665 -56.2499995 -13.4166665 -13.2499995 375 0 2670 --56.2500005 -56.0833335 -13.4166665 -13.2499995 404 0 2670 --56.0833335 -55.9166665 -13.4166665 -13.2499995 427 0 2670 --55.9166665 -55.7499995 -13.4166665 -13.2499995 413 0 2670 --55.7500005 -55.5833335 -13.4166665 -13.2499995 442 0 2670 --55.5833335 -55.4166665 -13.4166665 -13.2499995 353 0 2670 --55.4166665 -55.2499995 -13.4166665 -13.2499995 446 0 2670 --55.2500005 -55.0833335 -13.4166665 -13.2499995 431 0 2670 --55.0833335 -54.9166665 -13.4166665 -13.2499995 448 0 2670 --54.9166665 -54.7499995 -13.4166665 -13.2499995 413 0 2670 --54.7500005 -54.5833335 -13.4166665 -13.2499995 450 0 2670 --54.5833335 -54.4166665 -13.4166665 -13.2499995 423 0 2670 --54.4166665 -54.2499995 -13.4166665 -13.2499995 452 0 2670 --54.2500005 -54.0833335 -13.4166665 -13.2499995 407 0 2670 --54.0833335 -53.9166665 -13.4166665 -13.2499995 387 0 2670 --53.9166665 -53.7499995 -13.4166665 -13.2499995 391 0 2670 --53.7500005 -53.5833335 -13.4166665 -13.2499995 395 0 2670 --53.5833335 -53.4166665 -13.4166665 -13.2499995 397 0 2670 --53.4166665 -53.2499995 -13.4166665 -13.2499995 361 0 2670 --53.2500005 -53.0833335 -13.4166665 -13.2499995 414 0 2670 --53.0833335 -52.9166665 -13.4166665 -13.2499995 318 0 2670 --52.9166665 -52.7499995 -13.4166665 -13.2499995 394 0 2670 --52.7500005 -52.5833335 -13.4166665 -13.2499995 373 0 2670 --52.5833335 -52.4166665 -13.4166665 -13.2499995 307 0 2670 --52.4166665 -52.2499995 -13.4166665 -13.2499995 345 0 2670 --52.2500005 -52.0833335 -13.4166665 -13.2499995 370 0 2670 --52.0833335 -51.9166665 -13.4166665 -13.2499995 370 0 2670 --51.9166665 -51.7499995 -13.4166665 -13.2499995 395 0 2670 --51.7500005 -51.5833335 -13.4166665 -13.2499995 260 0 2670 --51.5833335 -51.4166665 -13.4166665 -13.2499995 242 0 2670 --51.4166665 -51.2499995 -13.4166665 -13.2499995 224 0 2670 --51.2500005 -51.0833335 -13.4166665 -13.2499995 224 0 2670 --51.0833335 -50.9166665 -13.4166665 -13.2499995 220 0 2670 --50.9166665 -50.7499995 -13.4166665 -13.2499995 220 0 2670 --50.7500005 -50.5833335 -13.4166665 -13.2499995 223 0 2670 --50.5833335 -50.4166665 -13.4166665 -13.2499995 235 0 2670 --50.4166665 -50.2499995 -13.4166665 -13.2499995 288 0 2670 --50.2500005 -50.0833335 -13.4166665 -13.2499995 332 0 2670 --50.0833335 -49.9166665 -13.4166665 -13.2499995 245 0 2670 --49.9166665 -49.7499995 -13.4166665 -13.2499995 268 0 2670 --49.7500005 -49.5833335 -13.4166665 -13.2499995 292 0 2670 --49.5833335 -49.4166665 -13.4166665 -13.2499995 304 0 2670 --49.4166665 -49.2499995 -13.4166665 -13.2499995 459 0 2670 --49.2500005 -49.0833335 -13.4166665 -13.2499995 359 0 2670 --49.0833335 -48.9166665 -13.4166665 -13.2499995 316 0 2670 --48.9166665 -48.7499995 -13.4166665 -13.2499995 338 0 2670 --48.7500005 -48.5833335 -13.4166665 -13.2499995 411 0 2670 --48.5833335 -48.4166665 -13.4166665 -13.2499995 712 0 2670 --48.4166665 -48.2499995 -13.4166665 -13.2499995 393 0 2670 --48.2500005 -48.0833335 -13.4166665 -13.2499995 300 0 2670 --48.0833335 -47.9166665 -13.4166665 -13.2499995 856 0 2670 --47.9166665 -47.7499995 -13.4166665 -13.2499995 978 0 2670 --47.7500005 -47.5833335 -13.4166665 -13.2499995 457 0 2670 --47.5833335 -47.4166665 -13.4166665 -13.2499995 617 0 2670 --47.4166665 -47.2499995 -13.4166665 -13.2499995 447 0 2670 --47.2500005 -47.0833335 -13.4166665 -13.2499995 459 0 2670 --47.0833335 -46.9166665 -13.4166665 -13.2499995 432 0 2670 --46.9166665 -46.7499995 -13.4166665 -13.2499995 684 0 2670 --46.7500005 -46.5833335 -13.4166665 -13.2499995 488 0 2670 --46.5833335 -46.4166665 -13.4166665 -13.2499995 609 0 2670 --46.4166665 -46.2499995 -13.4166665 -13.2499995 688 0 2670 --46.2500005 -46.0833335 -13.4166665 -13.2499995 942 0 2670 --46.0833335 -45.9166665 -13.4166665 -13.2499995 888 0 2670 --45.9166665 -45.7499995 -13.4166665 -13.2499995 828 0 2670 --45.7500005 -45.5833335 -13.4166665 -13.2499995 799 0 2670 --45.5833335 -45.4166665 -13.4166665 -13.2499995 766 0 2670 --45.4166665 -45.2499995 -13.4166665 -13.2499995 770 0 2670 --45.2500005 -45.0833335 -13.4166665 -13.2499995 731 0 2670 --45.0833335 -44.9166665 -13.4166665 -13.2499995 759 0 2670 --44.9166665 -44.7499995 -13.4166665 -13.2499995 674 0 2670 --44.7500005 -44.5833335 -13.4166665 -13.2499995 603 0 2670 --44.5833335 -44.4166665 -13.4166665 -13.2499995 573 0 2670 --44.4166665 -44.2499995 -13.4166665 -13.2499995 601 0 2670 --44.2500005 -44.0833335 -13.4166665 -13.2499995 599 0 2670 --44.0833335 -43.9166665 -13.4166665 -13.2499995 465 0 2670 --43.9166665 -43.7499995 -13.4166665 -13.2499995 478 0 2670 --43.7500005 -43.5833335 -13.4166665 -13.2499995 460 0 2670 --43.5833335 -43.4166665 -13.4166665 -13.2499995 437 0 2670 --43.4166665 -43.2499995 -13.4166665 -13.2499995 444 0 2670 --43.2500005 -43.0833335 -13.4166665 -13.2499995 465 0 2670 --43.0833335 -42.9166665 -13.4166665 -13.2499995 650 0 2670 --42.9166665 -42.7499995 -13.4166665 -13.2499995 728 0 2670 --42.7500005 -42.5833335 -13.4166665 -13.2499995 856 0 2670 --42.5833335 -42.4166665 -13.4166665 -13.2499995 635 0 2670 --42.4166665 -42.2499995 -13.4166665 -13.2499995 600 0 2670 --42.2500005 -42.0833335 -13.4166665 -13.2499995 783 0 2670 --42.0833335 -41.9166665 -13.4166665 -13.2499995 1014 0 2670 --41.9166665 -41.7499995 -13.4166665 -13.2499995 1220 0 2670 --41.7500005 -41.5833335 -13.4166665 -13.2499995 820 0 2670 --41.5833335 -41.4166665 -13.4166665 -13.2499995 1206 0 2670 --41.4166665 -41.2499995 -13.4166665 -13.2499995 1084 0 2670 --41.2500005 -41.0833335 -13.4166665 -13.2499995 689 0 2670 --41.0833335 -40.9166665 -13.4166665 -13.2499995 695 0 2670 --40.9166665 -40.7499995 -13.4166665 -13.2499995 488 0 2670 --40.7500005 -40.5833335 -13.4166665 -13.2499995 477 0 2670 --40.5833335 -40.4166665 -13.4166665 -13.2499995 898 0 2670 --40.4166665 -40.2499995 -13.4166665 -13.2499995 807 0 2670 --40.2500005 -40.0833335 -13.4166665 -13.2499995 644 0 2670 --40.0833335 -39.9166665 -13.4166665 -13.2499995 696 0 2670 --65.0833335 -64.9166665 -13.5833335 -13.4166665 137 0 2670 --64.9166665 -64.7499995 -13.5833335 -13.4166665 136 0 2670 --64.7500005 -64.5833335 -13.5833335 -13.4166665 139 0 2670 --64.5833335 -64.4166665 -13.5833335 -13.4166665 138 0 2670 --64.4166665 -64.2499995 -13.5833335 -13.4166665 142 0 2670 --64.2500005 -64.0833335 -13.5833335 -13.4166665 140 0 2670 --64.0833335 -63.9166665 -13.5833335 -13.4166665 140 0 2670 --63.9166665 -63.7499995 -13.5833335 -13.4166665 144 0 2670 --63.7500005 -63.5833335 -13.5833335 -13.4166665 143 0 2670 --63.5833335 -63.4166665 -13.5833335 -13.4166665 142 0 2670 --63.4166665 -63.2499995 -13.5833335 -13.4166665 143 0 2670 --63.2500005 -63.0833335 -13.5833335 -13.4166665 145 0 2670 --63.0833335 -62.9166665 -13.5833335 -13.4166665 145 0 2670 --62.9166665 -62.7499995 -13.5833335 -13.4166665 149 0 2670 --62.7500005 -62.5833335 -13.5833335 -13.4166665 200 0 2670 --62.5833335 -62.4166665 -13.5833335 -13.4166665 205 0 2670 --62.4166665 -62.2499995 -13.5833335 -13.4166665 173 0 2670 --62.2500005 -62.0833335 -13.5833335 -13.4166665 178 0 2670 --62.0833335 -61.9166665 -13.5833335 -13.4166665 175 0 2670 --61.9166665 -61.7499995 -13.5833335 -13.4166665 170 0 2670 --61.7500005 -61.5833335 -13.5833335 -13.4166665 162 0 2670 --61.5833335 -61.4166665 -13.5833335 -13.4166665 174 0 2670 --61.4166665 -61.2499995 -13.5833335 -13.4166665 170 0 2670 --61.2500005 -61.0833335 -13.5833335 -13.4166665 171 0 2670 --61.0833335 -60.9166665 -13.5833335 -13.4166665 170 0 2670 --60.9166665 -60.7499995 -13.5833335 -13.4166665 189 0 2670 --60.7500005 -60.5833335 -13.5833335 -13.4166665 205 0 2670 --60.5833335 -60.4166665 -13.5833335 -13.4166665 207 0 2670 --60.4166665 -60.2499995 -13.5833335 -13.4166665 243 0 2670 --60.2500005 -60.0833335 -13.5833335 -13.4166665 259 0 2670 --60.0833335 -59.9166665 -13.5833335 -13.4166665 486 0 2670 --59.9166665 -59.7499995 -13.5833335 -13.4166665 633 0 2670 --59.7500005 -59.5833335 -13.5833335 -13.4166665 634 0 2670 --59.5833335 -59.4166665 -13.5833335 -13.4166665 553 0 2670 --59.4166665 -59.2499995 -13.5833335 -13.4166665 546 0 2670 --59.2500005 -59.0833335 -13.5833335 -13.4166665 530 0 2670 --59.0833335 -58.9166665 -13.5833335 -13.4166665 513 0 2670 --58.9166665 -58.7499995 -13.5833335 -13.4166665 527 0 2670 --58.7500005 -58.5833335 -13.5833335 -13.4166665 543 0 2670 --58.5833335 -58.4166665 -13.5833335 -13.4166665 550 0 2670 --58.4166665 -58.2499995 -13.5833335 -13.4166665 469 0 2670 --58.2500005 -58.0833335 -13.5833335 -13.4166665 539 0 2670 --58.0833335 -57.9166665 -13.5833335 -13.4166665 508 0 2670 --57.9166665 -57.7499995 -13.5833335 -13.4166665 529 0 2670 --57.7500005 -57.5833335 -13.5833335 -13.4166665 428 0 2670 --57.5833335 -57.4166665 -13.5833335 -13.4166665 499 0 2670 --57.4166665 -57.2499995 -13.5833335 -13.4166665 350 0 2670 --57.2500005 -57.0833335 -13.5833335 -13.4166665 376 0 2670 --57.0833335 -56.9166665 -13.5833335 -13.4166665 351 0 2670 --56.9166665 -56.7499995 -13.5833335 -13.4166665 390 0 2670 --56.7500005 -56.5833335 -13.5833335 -13.4166665 337 0 2670 --56.5833335 -56.4166665 -13.5833335 -13.4166665 341 0 2670 --56.4166665 -56.2499995 -13.5833335 -13.4166665 361 0 2670 --56.2500005 -56.0833335 -13.5833335 -13.4166665 388 0 2670 --56.0833335 -55.9166665 -13.5833335 -13.4166665 411 0 2670 --55.9166665 -55.7499995 -13.5833335 -13.4166665 435 0 2670 --55.7500005 -55.5833335 -13.5833335 -13.4166665 421 0 2670 --55.5833335 -55.4166665 -13.5833335 -13.4166665 431 0 2670 --55.4166665 -55.2499995 -13.5833335 -13.4166665 361 0 2670 --55.2500005 -55.0833335 -13.5833335 -13.4166665 470 0 2670 --55.0833335 -54.9166665 -13.5833335 -13.4166665 451 0 2670 --54.9166665 -54.7499995 -13.5833335 -13.4166665 455 0 2670 --54.7500005 -54.5833335 -13.5833335 -13.4166665 407 0 2670 --54.5833335 -54.4166665 -13.5833335 -13.4166665 427 0 2670 --54.4166665 -54.2499995 -13.5833335 -13.4166665 489 0 2670 --54.2500005 -54.0833335 -13.5833335 -13.4166665 426 0 2670 --54.0833335 -53.9166665 -13.5833335 -13.4166665 483 0 2670 --53.9166665 -53.7499995 -13.5833335 -13.4166665 466 0 2670 --53.7500005 -53.5833335 -13.5833335 -13.4166665 350 0 2670 --53.5833335 -53.4166665 -13.5833335 -13.4166665 416 0 2670 --53.4166665 -53.2499995 -13.5833335 -13.4166665 369 0 2670 --53.2500005 -53.0833335 -13.5833335 -13.4166665 371 0 2670 --53.0833335 -52.9166665 -13.5833335 -13.4166665 381 0 2670 --52.9166665 -52.7499995 -13.5833335 -13.4166665 414 0 2670 --52.7500005 -52.5833335 -13.5833335 -13.4166665 356 0 2670 --52.5833335 -52.4166665 -13.5833335 -13.4166665 348 0 2670 --52.4166665 -52.2499995 -13.5833335 -13.4166665 399 0 2670 --52.2500005 -52.0833335 -13.5833335 -13.4166665 385 0 2670 --52.0833335 -51.9166665 -13.5833335 -13.4166665 408 0 2670 --51.9166665 -51.7499995 -13.5833335 -13.4166665 459 0 2670 --51.7500005 -51.5833335 -13.5833335 -13.4166665 275 0 2670 --51.5833335 -51.4166665 -13.5833335 -13.4166665 238 0 2670 --51.4166665 -51.2499995 -13.5833335 -13.4166665 228 0 2670 --51.2500005 -51.0833335 -13.5833335 -13.4166665 225 0 2670 --51.0833335 -50.9166665 -13.5833335 -13.4166665 223 0 2670 --50.9166665 -50.7499995 -13.5833335 -13.4166665 222 0 2670 --50.7500005 -50.5833335 -13.5833335 -13.4166665 223 0 2670 --50.5833335 -50.4166665 -13.5833335 -13.4166665 225 0 2670 --50.4166665 -50.2499995 -13.5833335 -13.4166665 249 0 2670 --50.2500005 -50.0833335 -13.5833335 -13.4166665 246 0 2670 --50.0833335 -49.9166665 -13.5833335 -13.4166665 235 0 2670 --49.9166665 -49.7499995 -13.5833335 -13.4166665 247 0 2670 --49.7500005 -49.5833335 -13.5833335 -13.4166665 301 0 2670 --49.5833335 -49.4166665 -13.5833335 -13.4166665 405 0 2670 --49.4166665 -49.2499995 -13.5833335 -13.4166665 437 0 2670 --49.2500005 -49.0833335 -13.5833335 -13.4166665 351 0 2670 --49.0833335 -48.9166665 -13.5833335 -13.4166665 335 0 2670 --48.9166665 -48.7499995 -13.5833335 -13.4166665 338 0 2670 --48.7500005 -48.5833335 -13.5833335 -13.4166665 472 0 2670 --48.5833335 -48.4166665 -13.5833335 -13.4166665 807 0 2670 --48.4166665 -48.2499995 -13.5833335 -13.4166665 384 0 2670 --48.2500005 -48.0833335 -13.5833335 -13.4166665 341 0 2670 --48.0833335 -47.9166665 -13.5833335 -13.4166665 444 0 2670 --47.9166665 -47.7499995 -13.5833335 -13.4166665 697 0 2670 --47.7500005 -47.5833335 -13.5833335 -13.4166665 1161 0 2670 --47.5833335 -47.4166665 -13.5833335 -13.4166665 1191 0 2670 --47.4166665 -47.2499995 -13.5833335 -13.4166665 393 0 2670 --47.2500005 -47.0833335 -13.5833335 -13.4166665 418 0 2670 --47.0833335 -46.9166665 -13.5833335 -13.4166665 431 0 2670 --46.9166665 -46.7499995 -13.5833335 -13.4166665 635 0 2670 --46.7500005 -46.5833335 -13.5833335 -13.4166665 434 0 2670 --46.5833335 -46.4166665 -13.5833335 -13.4166665 545 0 2670 --46.4166665 -46.2499995 -13.5833335 -13.4166665 727 0 2670 --46.2500005 -46.0833335 -13.5833335 -13.4166665 962 0 2670 --46.0833335 -45.9166665 -13.5833335 -13.4166665 890 0 2670 --45.9166665 -45.7499995 -13.5833335 -13.4166665 832 0 2670 --45.7500005 -45.5833335 -13.5833335 -13.4166665 803 0 2670 --45.5833335 -45.4166665 -13.5833335 -13.4166665 728 0 2670 --45.4166665 -45.2499995 -13.5833335 -13.4166665 720 0 2670 --45.2500005 -45.0833335 -13.5833335 -13.4166665 677 0 2670 --45.0833335 -44.9166665 -13.5833335 -13.4166665 743 0 2670 --44.9166665 -44.7499995 -13.5833335 -13.4166665 642 0 2670 --44.7500005 -44.5833335 -13.5833335 -13.4166665 564 0 2670 --44.5833335 -44.4166665 -13.5833335 -13.4166665 615 0 2670 --44.4166665 -44.2499995 -13.5833335 -13.4166665 534 0 2670 --44.2500005 -44.0833335 -13.5833335 -13.4166665 655 0 2670 --44.0833335 -43.9166665 -13.5833335 -13.4166665 622 0 2670 --43.9166665 -43.7499995 -13.5833335 -13.4166665 737 0 2670 --43.7500005 -43.5833335 -13.5833335 -13.4166665 463 0 2670 --43.5833335 -43.4166665 -13.5833335 -13.4166665 429 0 2670 --43.4166665 -43.2499995 -13.5833335 -13.4166665 448 0 2670 --43.2500005 -43.0833335 -13.5833335 -13.4166665 549 0 2670 --43.0833335 -42.9166665 -13.5833335 -13.4166665 580 0 2670 --42.9166665 -42.7499995 -13.5833335 -13.4166665 1033 0 2670 --42.7500005 -42.5833335 -13.5833335 -13.4166665 756 0 2670 --42.5833335 -42.4166665 -13.5833335 -13.4166665 797 0 2670 --42.4166665 -42.2499995 -13.5833335 -13.4166665 659 0 2670 --42.2500005 -42.0833335 -13.5833335 -13.4166665 796 0 2670 --42.0833335 -41.9166665 -13.5833335 -13.4166665 1257 0 2670 --41.9166665 -41.7499995 -13.5833335 -13.4166665 1112 0 2670 --41.7500005 -41.5833335 -13.5833335 -13.4166665 777 0 2670 --41.5833335 -41.4166665 -13.5833335 -13.4166665 1312 0 2670 --41.4166665 -41.2499995 -13.5833335 -13.4166665 1155 0 2670 --41.2500005 -41.0833335 -13.5833335 -13.4166665 678 0 2670 --41.0833335 -40.9166665 -13.5833335 -13.4166665 550 0 2670 --40.9166665 -40.7499995 -13.5833335 -13.4166665 399 0 2670 --40.7500005 -40.5833335 -13.5833335 -13.4166665 364 0 2670 --40.5833335 -40.4166665 -13.5833335 -13.4166665 819 0 2670 --40.4166665 -40.2499995 -13.5833335 -13.4166665 841 0 2670 --40.2500005 -40.0833335 -13.5833335 -13.4166665 790 0 2670 --40.0833335 -39.9166665 -13.5833335 -13.4166665 738 0 2670 --65.0833335 -64.9166665 -13.7500005 -13.5833335 140 0 2670 --64.9166665 -64.7499995 -13.7500005 -13.5833335 140 0 2670 --64.7500005 -64.5833335 -13.7500005 -13.5833335 138 0 2670 --64.5833335 -64.4166665 -13.7500005 -13.5833335 142 0 2670 --64.4166665 -64.2499995 -13.7500005 -13.5833335 143 0 2670 --64.2500005 -64.0833335 -13.7500005 -13.5833335 144 0 2670 --64.0833335 -63.9166665 -13.7500005 -13.5833335 143 0 2670 --63.9166665 -63.7499995 -13.7500005 -13.5833335 144 0 2670 --63.7500005 -63.5833335 -13.7500005 -13.5833335 146 0 2670 --63.5833335 -63.4166665 -13.7500005 -13.5833335 144 0 2670 --63.4166665 -63.2499995 -13.7500005 -13.5833335 165 0 2670 --63.2500005 -63.0833335 -13.7500005 -13.5833335 156 0 2670 --63.0833335 -62.9166665 -13.7500005 -13.5833335 148 0 2670 --62.9166665 -62.7499995 -13.7500005 -13.5833335 150 0 2670 --62.7500005 -62.5833335 -13.7500005 -13.5833335 181 0 2670 --62.5833335 -62.4166665 -13.7500005 -13.5833335 214 0 2670 --62.4166665 -62.2499995 -13.7500005 -13.5833335 186 0 2670 --62.2500005 -62.0833335 -13.7500005 -13.5833335 332 0 2670 --62.0833335 -61.9166665 -13.7500005 -13.5833335 194 0 2670 --61.9166665 -61.7499995 -13.7500005 -13.5833335 181 0 2670 --61.7500005 -61.5833335 -13.7500005 -13.5833335 160 0 2670 --61.5833335 -61.4166665 -13.7500005 -13.5833335 164 0 2670 --61.4166665 -61.2499995 -13.7500005 -13.5833335 208 0 2670 --61.2500005 -61.0833335 -13.7500005 -13.5833335 224 0 2670 --61.0833335 -60.9166665 -13.7500005 -13.5833335 204 0 2670 --60.9166665 -60.7499995 -13.7500005 -13.5833335 465 0 2670 --60.7500005 -60.5833335 -13.7500005 -13.5833335 192 0 2670 --60.5833335 -60.4166665 -13.7500005 -13.5833335 208 0 2670 --60.4166665 -60.2499995 -13.7500005 -13.5833335 227 0 2670 --60.2500005 -60.0833335 -13.7500005 -13.5833335 280 0 2670 --60.0833335 -59.9166665 -13.7500005 -13.5833335 490 0 2670 --59.9166665 -59.7499995 -13.7500005 -13.5833335 573 0 2670 --59.7500005 -59.5833335 -13.7500005 -13.5833335 665 0 2670 --59.5833335 -59.4166665 -13.7500005 -13.5833335 536 0 2670 --59.4166665 -59.2499995 -13.7500005 -13.5833335 575 0 2670 --59.2500005 -59.0833335 -13.7500005 -13.5833335 583 0 2670 --59.0833335 -58.9166665 -13.7500005 -13.5833335 515 0 2670 --58.9166665 -58.7499995 -13.7500005 -13.5833335 588 0 2670 --58.7500005 -58.5833335 -13.7500005 -13.5833335 524 0 2670 --58.5833335 -58.4166665 -13.7500005 -13.5833335 559 0 2670 --58.4166665 -58.2499995 -13.7500005 -13.5833335 556 0 2670 --58.2500005 -58.0833335 -13.7500005 -13.5833335 546 0 2670 --58.0833335 -57.9166665 -13.7500005 -13.5833335 512 0 2670 --57.9166665 -57.7499995 -13.7500005 -13.5833335 560 0 2670 --57.7500005 -57.5833335 -13.7500005 -13.5833335 473 0 2670 --57.5833335 -57.4166665 -13.7500005 -13.5833335 532 0 2670 --57.4166665 -57.2499995 -13.7500005 -13.5833335 450 0 2670 --57.2500005 -57.0833335 -13.7500005 -13.5833335 402 0 2670 --57.0833335 -56.9166665 -13.7500005 -13.5833335 462 0 2670 --56.9166665 -56.7499995 -13.7500005 -13.5833335 401 0 2670 --56.7500005 -56.5833335 -13.7500005 -13.5833335 383 0 2670 --56.5833335 -56.4166665 -13.7500005 -13.5833335 351 0 2670 --56.4166665 -56.2499995 -13.7500005 -13.5833335 358 0 2670 --56.2500005 -56.0833335 -13.7500005 -13.5833335 395 0 2670 --56.0833335 -55.9166665 -13.7500005 -13.5833335 461 0 2670 --55.9166665 -55.7499995 -13.7500005 -13.5833335 459 0 2670 --55.7500005 -55.5833335 -13.7500005 -13.5833335 460 0 2670 --55.5833335 -55.4166665 -13.7500005 -13.5833335 446 0 2670 --55.4166665 -55.2499995 -13.7500005 -13.5833335 446 0 2670 --55.2500005 -55.0833335 -13.7500005 -13.5833335 389 0 2670 --55.0833335 -54.9166665 -13.7500005 -13.5833335 470 0 2670 --54.9166665 -54.7499995 -13.7500005 -13.5833335 504 0 2670 --54.7500005 -54.5833335 -13.7500005 -13.5833335 423 0 2670 --54.5833335 -54.4166665 -13.7500005 -13.5833335 474 0 2670 --54.4166665 -54.2499995 -13.7500005 -13.5833335 544 0 2670 --54.2500005 -54.0833335 -13.7500005 -13.5833335 470 0 2670 --54.0833335 -53.9166665 -13.7500005 -13.5833335 510 0 2670 --53.9166665 -53.7499995 -13.7500005 -13.5833335 348 0 2670 --53.7500005 -53.5833335 -13.7500005 -13.5833335 428 0 2670 --53.5833335 -53.4166665 -13.7500005 -13.5833335 423 0 2670 --53.4166665 -53.2499995 -13.7500005 -13.5833335 394 0 2670 --53.2500005 -53.0833335 -13.7500005 -13.5833335 366 0 2670 --53.0833335 -52.9166665 -13.7500005 -13.5833335 407 0 2670 --52.9166665 -52.7499995 -13.7500005 -13.5833335 357 0 2670 --52.7500005 -52.5833335 -13.7500005 -13.5833335 450 0 2670 --52.5833335 -52.4166665 -13.7500005 -13.5833335 336 0 2670 --52.4166665 -52.2499995 -13.7500005 -13.5833335 356 0 2670 --52.2500005 -52.0833335 -13.7500005 -13.5833335 397 0 2670 --52.0833335 -51.9166665 -13.7500005 -13.5833335 408 0 2670 --51.9166665 -51.7499995 -13.7500005 -13.5833335 268 0 2670 --51.7500005 -51.5833335 -13.7500005 -13.5833335 237 0 2670 --51.5833335 -51.4166665 -13.7500005 -13.5833335 221 0 2670 --51.4166665 -51.2499995 -13.7500005 -13.5833335 227 0 2670 --51.2500005 -51.0833335 -13.7500005 -13.5833335 226 0 2670 --51.0833335 -50.9166665 -13.7500005 -13.5833335 227 0 2670 --50.9166665 -50.7499995 -13.7500005 -13.5833335 228 0 2670 --50.7500005 -50.5833335 -13.7500005 -13.5833335 284 0 2670 --50.5833335 -50.4166665 -13.7500005 -13.5833335 254 0 2670 --50.4166665 -50.2499995 -13.7500005 -13.5833335 240 0 2670 --50.2500005 -50.0833335 -13.7500005 -13.5833335 236 0 2670 --50.0833335 -49.9166665 -13.7500005 -13.5833335 251 0 2670 --49.9166665 -49.7499995 -13.7500005 -13.5833335 259 0 2670 --49.7500005 -49.5833335 -13.7500005 -13.5833335 352 0 2670 --49.5833335 -49.4166665 -13.7500005 -13.5833335 324 0 2670 --49.4166665 -49.2499995 -13.7500005 -13.5833335 388 0 2670 --49.2500005 -49.0833335 -13.7500005 -13.5833335 380 0 2670 --49.0833335 -48.9166665 -13.7500005 -13.5833335 390 0 2670 --48.9166665 -48.7499995 -13.7500005 -13.5833335 444 0 2670 --48.7500005 -48.5833335 -13.7500005 -13.5833335 570 0 2670 --48.5833335 -48.4166665 -13.7500005 -13.5833335 655 0 2670 --48.4166665 -48.2499995 -13.7500005 -13.5833335 685 0 2670 --48.2500005 -48.0833335 -13.7500005 -13.5833335 435 0 2670 --48.0833335 -47.9166665 -13.7500005 -13.5833335 528 0 2670 --47.9166665 -47.7499995 -13.7500005 -13.5833335 806 0 2670 --47.7500005 -47.5833335 -13.7500005 -13.5833335 899 0 2670 --47.5833335 -47.4166665 -13.7500005 -13.5833335 1186 0 2670 --47.4166665 -47.2499995 -13.7500005 -13.5833335 824 0 2670 --47.2500005 -47.0833335 -13.7500005 -13.5833335 896 0 2670 --47.0833335 -46.9166665 -13.7500005 -13.5833335 463 0 2670 --46.9166665 -46.7499995 -13.7500005 -13.5833335 428 0 2670 --46.7500005 -46.5833335 -13.7500005 -13.5833335 508 0 2670 --46.5833335 -46.4166665 -13.7500005 -13.5833335 596 0 2670 --46.4166665 -46.2499995 -13.7500005 -13.5833335 734 0 2670 --46.2500005 -46.0833335 -13.7500005 -13.5833335 970 0 2670 --46.0833335 -45.9166665 -13.7500005 -13.5833335 854 0 2670 --45.9166665 -45.7499995 -13.7500005 -13.5833335 857 0 2670 --45.7500005 -45.5833335 -13.7500005 -13.5833335 820 0 2670 --45.5833335 -45.4166665 -13.7500005 -13.5833335 789 0 2670 --45.4166665 -45.2499995 -13.7500005 -13.5833335 758 0 2670 --45.2500005 -45.0833335 -13.7500005 -13.5833335 697 0 2670 --45.0833335 -44.9166665 -13.7500005 -13.5833335 677 0 2670 --44.9166665 -44.7499995 -13.7500005 -13.5833335 710 0 2670 --44.7500005 -44.5833335 -13.7500005 -13.5833335 654 0 2670 --44.5833335 -44.4166665 -13.7500005 -13.5833335 559 0 2670 --44.4166665 -44.2499995 -13.7500005 -13.5833335 673 0 2670 --44.2500005 -44.0833335 -13.7500005 -13.5833335 738 0 2670 --44.0833335 -43.9166665 -13.7500005 -13.5833335 801 0 2670 --43.9166665 -43.7499995 -13.7500005 -13.5833335 735 0 2670 --43.7500005 -43.5833335 -13.7500005 -13.5833335 448 0 2670 --43.5833335 -43.4166665 -13.7500005 -13.5833335 430 0 2670 --43.4166665 -43.2499995 -13.7500005 -13.5833335 447 0 2670 --43.2500005 -43.0833335 -13.7500005 -13.5833335 477 0 2670 --43.0833335 -42.9166665 -13.7500005 -13.5833335 590 0 2670 --42.9166665 -42.7499995 -13.7500005 -13.5833335 683 0 2670 --42.7500005 -42.5833335 -13.7500005 -13.5833335 832 0 2670 --42.5833335 -42.4166665 -13.7500005 -13.5833335 877 0 2670 --42.4166665 -42.2499995 -13.7500005 -13.5833335 1056 0 2670 --42.2500005 -42.0833335 -13.7500005 -13.5833335 943 0 2670 --42.0833335 -41.9166665 -13.7500005 -13.5833335 749 0 2670 --41.9166665 -41.7499995 -13.7500005 -13.5833335 472 0 2670 --41.7500005 -41.5833335 -13.7500005 -13.5833335 553 0 2670 --41.5833335 -41.4166665 -13.7500005 -13.5833335 1051 0 2670 --41.4166665 -41.2499995 -13.7500005 -13.5833335 1044 0 2670 --41.2500005 -41.0833335 -13.7500005 -13.5833335 631 0 2670 --41.0833335 -40.9166665 -13.7500005 -13.5833335 440 0 2670 --40.9166665 -40.7499995 -13.7500005 -13.5833335 325 0 2670 --40.7500005 -40.5833335 -13.7500005 -13.5833335 354 0 2670 --40.5833335 -40.4166665 -13.7500005 -13.5833335 820 0 2670 --40.4166665 -40.2499995 -13.7500005 -13.5833335 657 0 2670 --40.2500005 -40.0833335 -13.7500005 -13.5833335 571 0 2670 --40.0833335 -39.9166665 -13.7500005 -13.5833335 599 0 2670 --65.0833335 -64.9166665 -13.9166665 -13.7499995 141 0 2670 --64.9166665 -64.7499995 -13.9166665 -13.7499995 141 0 2670 --64.7500005 -64.5833335 -13.9166665 -13.7499995 141 0 2670 --64.5833335 -64.4166665 -13.9166665 -13.7499995 142 0 2670 --64.4166665 -64.2499995 -13.9166665 -13.7499995 143 0 2670 --64.2500005 -64.0833335 -13.9166665 -13.7499995 148 0 2670 --64.0833335 -63.9166665 -13.9166665 -13.7499995 150 0 2670 --63.9166665 -63.7499995 -13.9166665 -13.7499995 147 0 2670 --63.7500005 -63.5833335 -13.9166665 -13.7499995 152 0 2670 --63.5833335 -63.4166665 -13.9166665 -13.7499995 145 0 2670 --63.4166665 -63.2499995 -13.9166665 -13.7499995 152 0 2670 --63.2500005 -63.0833335 -13.9166665 -13.7499995 154 0 2670 --63.0833335 -62.9166665 -13.9166665 -13.7499995 153 0 2670 --62.9166665 -62.7499995 -13.9166665 -13.7499995 153 0 2670 --62.7500005 -62.5833335 -13.9166665 -13.7499995 170 0 2670 --62.5833335 -62.4166665 -13.9166665 -13.7499995 221 0 2670 --62.4166665 -62.2499995 -13.9166665 -13.7499995 227 0 2670 --62.2500005 -62.0833335 -13.9166665 -13.7499995 229 0 2670 --62.0833335 -61.9166665 -13.9166665 -13.7499995 187 0 2670 --61.9166665 -61.7499995 -13.9166665 -13.7499995 218 0 2670 --61.7500005 -61.5833335 -13.9166665 -13.7499995 161 0 2670 --61.5833335 -61.4166665 -13.9166665 -13.7499995 174 0 2670 --61.4166665 -61.2499995 -13.9166665 -13.7499995 258 0 2670 --61.2500005 -61.0833335 -13.9166665 -13.7499995 238 0 2670 --61.0833335 -60.9166665 -13.9166665 -13.7499995 376 0 2670 --60.9166665 -60.7499995 -13.9166665 -13.7499995 552 0 2670 --60.7500005 -60.5833335 -13.9166665 -13.7499995 296 0 2670 --60.5833335 -60.4166665 -13.9166665 -13.7499995 181 0 2670 --60.4166665 -60.2499995 -13.9166665 -13.7499995 204 0 2670 --60.2500005 -60.0833335 -13.9166665 -13.7499995 242 0 2670 --60.0833335 -59.9166665 -13.9166665 -13.7499995 491 0 2670 --59.9166665 -59.7499995 -13.9166665 -13.7499995 540 0 2670 --59.7500005 -59.5833335 -13.9166665 -13.7499995 625 0 2670 --59.5833335 -59.4166665 -13.9166665 -13.7499995 587 0 2670 --59.4166665 -59.2499995 -13.9166665 -13.7499995 658 0 2670 --59.2500005 -59.0833335 -13.9166665 -13.7499995 619 0 2670 --59.0833335 -58.9166665 -13.9166665 -13.7499995 557 0 2670 --58.9166665 -58.7499995 -13.9166665 -13.7499995 615 0 2670 --58.7500005 -58.5833335 -13.9166665 -13.7499995 565 0 2670 --58.5833335 -58.4166665 -13.9166665 -13.7499995 556 0 2670 --58.4166665 -58.2499995 -13.9166665 -13.7499995 595 0 2670 --58.2500005 -58.0833335 -13.9166665 -13.7499995 588 0 2670 --58.0833335 -57.9166665 -13.9166665 -13.7499995 546 0 2670 --57.9166665 -57.7499995 -13.9166665 -13.7499995 556 0 2670 --57.7500005 -57.5833335 -13.9166665 -13.7499995 581 0 2670 --57.5833335 -57.4166665 -13.9166665 -13.7499995 546 0 2670 --57.4166665 -57.2499995 -13.9166665 -13.7499995 541 0 2670 --57.2500005 -57.0833335 -13.9166665 -13.7499995 540 0 2670 --57.0833335 -56.9166665 -13.9166665 -13.7499995 467 0 2670 --56.9166665 -56.7499995 -13.9166665 -13.7499995 412 0 2670 --56.7500005 -56.5833335 -13.9166665 -13.7499995 407 0 2670 --56.5833335 -56.4166665 -13.9166665 -13.7499995 372 0 2670 --56.4166665 -56.2499995 -13.9166665 -13.7499995 407 0 2670 --56.2500005 -56.0833335 -13.9166665 -13.7499995 438 0 2670 --56.0833335 -55.9166665 -13.9166665 -13.7499995 405 0 2670 --55.9166665 -55.7499995 -13.9166665 -13.7499995 501 0 2670 --55.7500005 -55.5833335 -13.9166665 -13.7499995 477 0 2670 --55.5833335 -55.4166665 -13.9166665 -13.7499995 482 0 2670 --55.4166665 -55.2499995 -13.9166665 -13.7499995 493 0 2670 --55.2500005 -55.0833335 -13.9166665 -13.7499995 404 0 2670 --55.0833335 -54.9166665 -13.9166665 -13.7499995 373 0 2670 --54.9166665 -54.7499995 -13.9166665 -13.7499995 478 0 2670 --54.7500005 -54.5833335 -13.9166665 -13.7499995 501 0 2670 --54.5833335 -54.4166665 -13.9166665 -13.7499995 466 0 2670 --54.4166665 -54.2499995 -13.9166665 -13.7499995 539 0 2670 --54.2500005 -54.0833335 -13.9166665 -13.7499995 533 0 2670 --54.0833335 -53.9166665 -13.9166665 -13.7499995 464 0 2670 --53.9166665 -53.7499995 -13.9166665 -13.7499995 367 0 2670 --53.7500005 -53.5833335 -13.9166665 -13.7499995 366 0 2670 --53.5833335 -53.4166665 -13.9166665 -13.7499995 411 0 2670 --53.4166665 -53.2499995 -13.9166665 -13.7499995 366 0 2670 --53.2500005 -53.0833335 -13.9166665 -13.7499995 419 0 2670 --53.0833335 -52.9166665 -13.9166665 -13.7499995 391 0 2670 --52.9166665 -52.7499995 -13.9166665 -13.7499995 365 0 2670 --52.7500005 -52.5833335 -13.9166665 -13.7499995 431 0 2670 --52.5833335 -52.4166665 -13.9166665 -13.7499995 410 0 2670 --52.4166665 -52.2499995 -13.9166665 -13.7499995 395 0 2670 --52.2500005 -52.0833335 -13.9166665 -13.7499995 388 0 2670 --52.0833335 -51.9166665 -13.9166665 -13.7499995 283 0 2670 --51.9166665 -51.7499995 -13.9166665 -13.7499995 339 0 2670 --51.7500005 -51.5833335 -13.9166665 -13.7499995 237 0 2670 --51.5833335 -51.4166665 -13.9166665 -13.7499995 237 0 2670 --51.4166665 -51.2499995 -13.9166665 -13.7499995 232 0 2670 --51.2500005 -51.0833335 -13.9166665 -13.7499995 231 0 2670 --51.0833335 -50.9166665 -13.9166665 -13.7499995 236 0 2670 --50.9166665 -50.7499995 -13.9166665 -13.7499995 238 0 2670 --50.7500005 -50.5833335 -13.9166665 -13.7499995 284 0 2670 --50.5833335 -50.4166665 -13.9166665 -13.7499995 257 0 2670 --50.4166665 -50.2499995 -13.9166665 -13.7499995 282 0 2670 --50.2500005 -50.0833335 -13.9166665 -13.7499995 288 0 2670 --50.0833335 -49.9166665 -13.9166665 -13.7499995 301 0 2670 --49.9166665 -49.7499995 -13.9166665 -13.7499995 299 0 2670 --49.7500005 -49.5833335 -13.9166665 -13.7499995 341 0 2670 --49.5833335 -49.4166665 -13.9166665 -13.7499995 310 0 2670 --49.4166665 -49.2499995 -13.9166665 -13.7499995 389 0 2670 --49.2500005 -49.0833335 -13.9166665 -13.7499995 365 0 2670 --49.0833335 -48.9166665 -13.9166665 -13.7499995 415 0 2670 --48.9166665 -48.7499995 -13.9166665 -13.7499995 756 0 2670 --48.7500005 -48.5833335 -13.9166665 -13.7499995 715 0 2670 --48.5833335 -48.4166665 -13.9166665 -13.7499995 712 0 2670 --48.4166665 -48.2499995 -13.9166665 -13.7499995 449 0 2670 --48.2500005 -48.0833335 -13.9166665 -13.7499995 840 0 2670 --48.0833335 -47.9166665 -13.9166665 -13.7499995 401 0 2670 --47.9166665 -47.7499995 -13.9166665 -13.7499995 451 0 2670 --47.7500005 -47.5833335 -13.9166665 -13.7499995 499 0 2670 --47.5833335 -47.4166665 -13.9166665 -13.7499995 849 0 2670 --47.4166665 -47.2499995 -13.9166665 -13.7499995 1116 0 2670 --47.2500005 -47.0833335 -13.9166665 -13.7499995 736 0 2670 --47.0833335 -46.9166665 -13.9166665 -13.7499995 990 0 2670 --46.9166665 -46.7499995 -13.9166665 -13.7499995 421 0 2670 --46.7500005 -46.5833335 -13.9166665 -13.7499995 459 0 2670 --46.5833335 -46.4166665 -13.9166665 -13.7499995 598 0 2670 --46.4166665 -46.2499995 -13.9166665 -13.7499995 682 0 2670 --46.2500005 -46.0833335 -13.9166665 -13.7499995 972 0 2670 --46.0833335 -45.9166665 -13.9166665 -13.7499995 911 0 2670 --45.9166665 -45.7499995 -13.9166665 -13.7499995 808 0 2670 --45.7500005 -45.5833335 -13.9166665 -13.7499995 826 0 2670 --45.5833335 -45.4166665 -13.9166665 -13.7499995 733 0 2670 --45.4166665 -45.2499995 -13.9166665 -13.7499995 755 0 2670 --45.2500005 -45.0833335 -13.9166665 -13.7499995 768 0 2670 --45.0833335 -44.9166665 -13.9166665 -13.7499995 708 0 2670 --44.9166665 -44.7499995 -13.9166665 -13.7499995 680 0 2670 --44.7500005 -44.5833335 -13.9166665 -13.7499995 720 0 2670 --44.5833335 -44.4166665 -13.9166665 -13.7499995 694 0 2670 --44.4166665 -44.2499995 -13.9166665 -13.7499995 731 0 2670 --44.2500005 -44.0833335 -13.9166665 -13.7499995 721 0 2670 --44.0833335 -43.9166665 -13.9166665 -13.7499995 484 0 2670 --43.9166665 -43.7499995 -13.9166665 -13.7499995 461 0 2670 --43.7500005 -43.5833335 -13.9166665 -13.7499995 450 0 2670 --43.5833335 -43.4166665 -13.9166665 -13.7499995 441 0 2670 --43.4166665 -43.2499995 -13.9166665 -13.7499995 455 0 2670 --43.2500005 -43.0833335 -13.9166665 -13.7499995 488 0 2670 --43.0833335 -42.9166665 -13.9166665 -13.7499995 500 0 2670 --42.9166665 -42.7499995 -13.9166665 -13.7499995 702 0 2670 --42.7500005 -42.5833335 -13.9166665 -13.7499995 929 0 2670 --42.5833335 -42.4166665 -13.9166665 -13.7499995 1028 0 2670 --42.4166665 -42.2499995 -13.9166665 -13.7499995 1023 0 2670 --42.2500005 -42.0833335 -13.9166665 -13.7499995 634 0 2670 --42.0833335 -41.9166665 -13.9166665 -13.7499995 581 0 2670 --41.9166665 -41.7499995 -13.9166665 -13.7499995 606 0 2670 --41.7500005 -41.5833335 -13.9166665 -13.7499995 504 0 2670 --41.5833335 -41.4166665 -13.9166665 -13.7499995 484 0 2670 --41.4166665 -41.2499995 -13.9166665 -13.7499995 541 0 2670 --41.2500005 -41.0833335 -13.9166665 -13.7499995 555 0 2670 --41.0833335 -40.9166665 -13.9166665 -13.7499995 295 0 2670 --40.9166665 -40.7499995 -13.9166665 -13.7499995 255 0 2670 --40.7500005 -40.5833335 -13.9166665 -13.7499995 235 0 2670 --40.5833335 -40.4166665 -13.9166665 -13.7499995 421 0 2670 --40.4166665 -40.2499995 -13.9166665 -13.7499995 407 0 2670 --40.2500005 -40.0833335 -13.9166665 -13.7499995 513 0 2670 --40.0833335 -39.9166665 -13.9166665 -13.7499995 348 0 2670 --65.0833335 -64.9166665 -14.0833335 -13.9166665 144 0 2670 --64.9166665 -64.7499995 -14.0833335 -13.9166665 142 0 2670 --64.7500005 -64.5833335 -14.0833335 -13.9166665 144 0 2670 --64.5833335 -64.4166665 -14.0833335 -13.9166665 156 0 2670 --64.4166665 -64.2499995 -14.0833335 -13.9166665 148 0 2670 --64.2500005 -64.0833335 -14.0833335 -13.9166665 162 0 2670 --64.0833335 -63.9166665 -14.0833335 -13.9166665 154 0 2670 --63.9166665 -63.7499995 -14.0833335 -13.9166665 160 0 2670 --63.7500005 -63.5833335 -14.0833335 -13.9166665 171 0 2670 --63.5833335 -63.4166665 -14.0833335 -13.9166665 198 0 2670 --63.4166665 -63.2499995 -14.0833335 -13.9166665 166 0 2670 --63.2500005 -63.0833335 -14.0833335 -13.9166665 178 0 2670 --63.0833335 -62.9166665 -14.0833335 -13.9166665 167 0 2670 --62.9166665 -62.7499995 -14.0833335 -13.9166665 166 0 2670 --62.7500005 -62.5833335 -14.0833335 -13.9166665 162 0 2670 --62.5833335 -62.4166665 -14.0833335 -13.9166665 169 0 2670 --62.4166665 -62.2499995 -14.0833335 -13.9166665 183 0 2670 --62.2500005 -62.0833335 -14.0833335 -13.9166665 180 0 2670 --62.0833335 -61.9166665 -14.0833335 -13.9166665 212 0 2670 --61.9166665 -61.7499995 -14.0833335 -13.9166665 193 0 2670 --61.7500005 -61.5833335 -14.0833335 -13.9166665 189 0 2670 --61.5833335 -61.4166665 -14.0833335 -13.9166665 174 0 2670 --61.4166665 -61.2499995 -14.0833335 -13.9166665 186 0 2670 --61.2500005 -61.0833335 -14.0833335 -13.9166665 227 0 2670 --61.0833335 -60.9166665 -14.0833335 -13.9166665 233 0 2670 --60.9166665 -60.7499995 -14.0833335 -13.9166665 527 0 2670 --60.7500005 -60.5833335 -14.0833335 -13.9166665 560 0 2670 --60.5833335 -60.4166665 -14.0833335 -13.9166665 393 0 2670 --60.4166665 -60.2499995 -14.0833335 -13.9166665 193 0 2670 --60.2500005 -60.0833335 -14.0833335 -13.9166665 230 0 2670 --60.0833335 -59.9166665 -14.0833335 -13.9166665 245 0 2670 --59.9166665 -59.7499995 -14.0833335 -13.9166665 288 0 2670 --59.7500005 -59.5833335 -14.0833335 -13.9166665 445 0 2670 --59.5833335 -59.4166665 -14.0833335 -13.9166665 574 0 2670 --59.4166665 -59.2499995 -14.0833335 -13.9166665 615 0 2670 --59.2500005 -59.0833335 -14.0833335 -13.9166665 672 0 2670 --59.0833335 -58.9166665 -14.0833335 -13.9166665 545 0 2670 --58.9166665 -58.7499995 -14.0833335 -13.9166665 639 0 2670 --58.7500005 -58.5833335 -14.0833335 -13.9166665 572 0 2670 --58.5833335 -58.4166665 -14.0833335 -13.9166665 545 0 2670 --58.4166665 -58.2499995 -14.0833335 -13.9166665 584 0 2670 --58.2500005 -58.0833335 -14.0833335 -13.9166665 626 0 2670 --58.0833335 -57.9166665 -14.0833335 -13.9166665 619 0 2670 --57.9166665 -57.7499995 -14.0833335 -13.9166665 506 0 2670 --57.7500005 -57.5833335 -14.0833335 -13.9166665 553 0 2670 --57.5833335 -57.4166665 -14.0833335 -13.9166665 578 0 2670 --57.4166665 -57.2499995 -14.0833335 -13.9166665 590 0 2670 --57.2500005 -57.0833335 -14.0833335 -13.9166665 528 0 2670 --57.0833335 -56.9166665 -14.0833335 -13.9166665 500 0 2670 --56.9166665 -56.7499995 -14.0833335 -13.9166665 380 0 2670 --56.7500005 -56.5833335 -14.0833335 -13.9166665 396 0 2670 --56.5833335 -56.4166665 -14.0833335 -13.9166665 423 0 2670 --56.4166665 -56.2499995 -14.0833335 -13.9166665 322 0 2670 --56.2500005 -56.0833335 -14.0833335 -13.9166665 394 0 2670 --56.0833335 -55.9166665 -14.0833335 -13.9166665 397 0 2670 --55.9166665 -55.7499995 -14.0833335 -13.9166665 491 0 2670 --55.7500005 -55.5833335 -14.0833335 -13.9166665 453 0 2670 --55.5833335 -55.4166665 -14.0833335 -13.9166665 509 0 2670 --55.4166665 -55.2499995 -14.0833335 -13.9166665 509 0 2670 --55.2500005 -55.0833335 -14.0833335 -13.9166665 441 0 2670 --55.0833335 -54.9166665 -14.0833335 -13.9166665 443 0 2670 --54.9166665 -54.7499995 -14.0833335 -13.9166665 430 0 2670 --54.7500005 -54.5833335 -14.0833335 -13.9166665 474 0 2670 --54.5833335 -54.4166665 -14.0833335 -13.9166665 473 0 2670 --54.4166665 -54.2499995 -14.0833335 -13.9166665 476 0 2670 --54.2500005 -54.0833335 -14.0833335 -13.9166665 527 0 2670 --54.0833335 -53.9166665 -14.0833335 -13.9166665 514 0 2670 --53.9166665 -53.7499995 -14.0833335 -13.9166665 402 0 2670 --53.7500005 -53.5833335 -14.0833335 -13.9166665 522 0 2670 --53.5833335 -53.4166665 -14.0833335 -13.9166665 413 0 2670 --53.4166665 -53.2499995 -14.0833335 -13.9166665 354 0 2670 --53.2500005 -53.0833335 -14.0833335 -13.9166665 410 0 2670 --53.0833335 -52.9166665 -14.0833335 -13.9166665 336 0 2670 --52.9166665 -52.7499995 -14.0833335 -13.9166665 451 0 2670 --52.7500005 -52.5833335 -14.0833335 -13.9166665 463 0 2670 --52.5833335 -52.4166665 -14.0833335 -13.9166665 372 0 2670 --52.4166665 -52.2499995 -14.0833335 -13.9166665 347 0 2670 --52.2500005 -52.0833335 -14.0833335 -13.9166665 446 0 2670 --52.0833335 -51.9166665 -14.0833335 -13.9166665 288 0 2670 --51.9166665 -51.7499995 -14.0833335 -13.9166665 243 0 2670 --51.7500005 -51.5833335 -14.0833335 -13.9166665 231 0 2670 --51.5833335 -51.4166665 -14.0833335 -13.9166665 238 0 2670 --51.4166665 -51.2499995 -14.0833335 -13.9166665 242 0 2670 --51.2500005 -51.0833335 -14.0833335 -13.9166665 236 0 2670 --51.0833335 -50.9166665 -14.0833335 -13.9166665 236 0 2670 --50.9166665 -50.7499995 -14.0833335 -13.9166665 239 0 2670 --50.7500005 -50.5833335 -14.0833335 -13.9166665 291 0 2670 --50.5833335 -50.4166665 -14.0833335 -13.9166665 252 0 2670 --50.4166665 -50.2499995 -14.0833335 -13.9166665 297 0 2670 --50.2500005 -50.0833335 -14.0833335 -13.9166665 258 0 2670 --50.0833335 -49.9166665 -14.0833335 -13.9166665 297 0 2670 --49.9166665 -49.7499995 -14.0833335 -13.9166665 306 0 2670 --49.7500005 -49.5833335 -14.0833335 -13.9166665 313 0 2670 --49.5833335 -49.4166665 -14.0833335 -13.9166665 381 0 2670 --49.4166665 -49.2499995 -14.0833335 -13.9166665 362 0 2670 --49.2500005 -49.0833335 -14.0833335 -13.9166665 470 0 2670 --49.0833335 -48.9166665 -14.0833335 -13.9166665 534 0 2670 --48.9166665 -48.7499995 -14.0833335 -13.9166665 754 0 2670 --48.7500005 -48.5833335 -14.0833335 -13.9166665 557 0 2670 --48.5833335 -48.4166665 -14.0833335 -13.9166665 517 0 2670 --48.4166665 -48.2499995 -14.0833335 -13.9166665 638 0 2670 --48.2500005 -48.0833335 -14.0833335 -13.9166665 612 0 2670 --48.0833335 -47.9166665 -14.0833335 -13.9166665 504 0 2670 --47.9166665 -47.7499995 -14.0833335 -13.9166665 492 0 2670 --47.7500005 -47.5833335 -14.0833335 -13.9166665 1132 0 2670 --47.5833335 -47.4166665 -14.0833335 -13.9166665 1559 0 2670 --47.4166665 -47.2499995 -14.0833335 -13.9166665 937 0 2670 --47.2500005 -47.0833335 -14.0833335 -13.9166665 891 0 2670 --47.0833335 -46.9166665 -14.0833335 -13.9166665 470 0 2670 --46.9166665 -46.7499995 -14.0833335 -13.9166665 428 0 2670 --46.7500005 -46.5833335 -14.0833335 -13.9166665 522 0 2670 --46.5833335 -46.4166665 -14.0833335 -13.9166665 542 0 2670 --46.4166665 -46.2499995 -14.0833335 -13.9166665 889 0 2670 --46.2500005 -46.0833335 -14.0833335 -13.9166665 892 0 2670 --46.0833335 -45.9166665 -14.0833335 -13.9166665 931 0 2670 --45.9166665 -45.7499995 -14.0833335 -13.9166665 884 0 2670 --45.7500005 -45.5833335 -14.0833335 -13.9166665 834 0 2670 --45.5833335 -45.4166665 -14.0833335 -13.9166665 805 0 2670 --45.4166665 -45.2499995 -14.0833335 -13.9166665 736 0 2670 --45.2500005 -45.0833335 -14.0833335 -13.9166665 694 0 2670 --45.0833335 -44.9166665 -14.0833335 -13.9166665 677 0 2670 --44.9166665 -44.7499995 -14.0833335 -13.9166665 673 0 2670 --44.7500005 -44.5833335 -14.0833335 -13.9166665 681 0 2670 --44.5833335 -44.4166665 -14.0833335 -13.9166665 696 0 2670 --44.4166665 -44.2499995 -14.0833335 -13.9166665 688 0 2670 --44.2500005 -44.0833335 -14.0833335 -13.9166665 563 0 2670 --44.0833335 -43.9166665 -14.0833335 -13.9166665 472 0 2670 --43.9166665 -43.7499995 -14.0833335 -13.9166665 458 0 2670 --43.7500005 -43.5833335 -14.0833335 -13.9166665 447 0 2670 --43.5833335 -43.4166665 -14.0833335 -13.9166665 458 0 2670 --43.4166665 -43.2499995 -14.0833335 -13.9166665 451 0 2670 --43.2500005 -43.0833335 -14.0833335 -13.9166665 466 0 2670 --43.0833335 -42.9166665 -14.0833335 -13.9166665 493 0 2670 --42.9166665 -42.7499995 -14.0833335 -13.9166665 513 0 2670 --42.7500005 -42.5833335 -14.0833335 -13.9166665 830 0 2670 --42.5833335 -42.4166665 -14.0833335 -13.9166665 974 0 2670 --42.4166665 -42.2499995 -14.0833335 -13.9166665 942 0 2670 --42.2500005 -42.0833335 -14.0833335 -13.9166665 555 0 2670 --42.0833335 -41.9166665 -14.0833335 -13.9166665 509 0 2670 --41.9166665 -41.7499995 -14.0833335 -13.9166665 485 0 2670 --41.7500005 -41.5833335 -14.0833335 -13.9166665 411 0 2670 --41.5833335 -41.4166665 -14.0833335 -13.9166665 432 0 2670 --41.4166665 -41.2499995 -14.0833335 -13.9166665 629 0 2670 --41.2500005 -41.0833335 -14.0833335 -13.9166665 441 0 2670 --41.0833335 -40.9166665 -14.0833335 -13.9166665 279 0 2670 --40.9166665 -40.7499995 -14.0833335 -13.9166665 342 0 2670 --40.7500005 -40.5833335 -14.0833335 -13.9166665 314 0 2670 --40.5833335 -40.4166665 -14.0833335 -13.9166665 402 0 2670 --40.4166665 -40.2499995 -14.0833335 -13.9166665 556 0 2670 --40.2500005 -40.0833335 -14.0833335 -13.9166665 327 0 2670 --40.0833335 -39.9166665 -14.0833335 -13.9166665 690 0 2670 --65.0833335 -64.9166665 -14.2500005 -14.0833335 151 0 2670 --64.9166665 -64.7499995 -14.2500005 -14.0833335 145 0 2670 --64.7500005 -64.5833335 -14.2500005 -14.0833335 149 0 2670 --64.5833335 -64.4166665 -14.2500005 -14.0833335 158 0 2670 --64.4166665 -64.2499995 -14.2500005 -14.0833335 154 0 2670 --64.2500005 -64.0833335 -14.2500005 -14.0833335 165 0 2670 --64.0833335 -63.9166665 -14.2500005 -14.0833335 154 0 2670 --63.9166665 -63.7499995 -14.2500005 -14.0833335 164 0 2670 --63.7500005 -63.5833335 -14.2500005 -14.0833335 170 0 2670 --63.5833335 -63.4166665 -14.2500005 -14.0833335 166 0 2670 --63.4166665 -63.2499995 -14.2500005 -14.0833335 234 0 2670 --63.2500005 -63.0833335 -14.2500005 -14.0833335 196 0 2670 --63.0833335 -62.9166665 -14.2500005 -14.0833335 173 0 2670 --62.9166665 -62.7499995 -14.2500005 -14.0833335 165 0 2670 --62.7500005 -62.5833335 -14.2500005 -14.0833335 176 0 2670 --62.5833335 -62.4166665 -14.2500005 -14.0833335 177 0 2670 --62.4166665 -62.2499995 -14.2500005 -14.0833335 187 0 2670 --62.2500005 -62.0833335 -14.2500005 -14.0833335 225 0 2670 --62.0833335 -61.9166665 -14.2500005 -14.0833335 241 0 2670 --61.9166665 -61.7499995 -14.2500005 -14.0833335 274 0 2670 --61.7500005 -61.5833335 -14.2500005 -14.0833335 214 0 2670 --61.5833335 -61.4166665 -14.2500005 -14.0833335 168 0 2670 --61.4166665 -61.2499995 -14.2500005 -14.0833335 182 0 2670 --61.2500005 -61.0833335 -14.2500005 -14.0833335 189 0 2670 --61.0833335 -60.9166665 -14.2500005 -14.0833335 212 0 2670 --60.9166665 -60.7499995 -14.2500005 -14.0833335 607 0 2670 --60.7500005 -60.5833335 -14.2500005 -14.0833335 593 0 2670 --60.5833335 -60.4166665 -14.2500005 -14.0833335 372 0 2670 --60.4166665 -60.2499995 -14.2500005 -14.0833335 197 0 2670 --60.2500005 -60.0833335 -14.2500005 -14.0833335 212 0 2670 --60.0833335 -59.9166665 -14.2500005 -14.0833335 231 0 2670 --59.9166665 -59.7499995 -14.2500005 -14.0833335 236 0 2670 --59.7500005 -59.5833335 -14.2500005 -14.0833335 241 0 2670 --59.5833335 -59.4166665 -14.2500005 -14.0833335 602 0 2670 --59.4166665 -59.2499995 -14.2500005 -14.0833335 641 0 2670 --59.2500005 -59.0833335 -14.2500005 -14.0833335 699 0 2670 --59.0833335 -58.9166665 -14.2500005 -14.0833335 605 0 2670 --58.9166665 -58.7499995 -14.2500005 -14.0833335 633 0 2670 --58.7500005 -58.5833335 -14.2500005 -14.0833335 631 0 2670 --58.5833335 -58.4166665 -14.2500005 -14.0833335 658 0 2670 --58.4166665 -58.2499995 -14.2500005 -14.0833335 627 0 2670 --58.2500005 -58.0833335 -14.2500005 -14.0833335 614 0 2670 --58.0833335 -57.9166665 -14.2500005 -14.0833335 651 0 2670 --57.9166665 -57.7499995 -14.2500005 -14.0833335 638 0 2670 --57.7500005 -57.5833335 -14.2500005 -14.0833335 566 0 2670 --57.5833335 -57.4166665 -14.2500005 -14.0833335 605 0 2670 --57.4166665 -57.2499995 -14.2500005 -14.0833335 566 0 2670 --57.2500005 -57.0833335 -14.2500005 -14.0833335 534 0 2670 --57.0833335 -56.9166665 -14.2500005 -14.0833335 541 0 2670 --56.9166665 -56.7499995 -14.2500005 -14.0833335 442 0 2670 --56.7500005 -56.5833335 -14.2500005 -14.0833335 409 0 2670 --56.5833335 -56.4166665 -14.2500005 -14.0833335 490 0 2670 --56.4166665 -56.2499995 -14.2500005 -14.0833335 388 0 2670 --56.2500005 -56.0833335 -14.2500005 -14.0833335 338 0 2670 --56.0833335 -55.9166665 -14.2500005 -14.0833335 353 0 2670 --55.9166665 -55.7499995 -14.2500005 -14.0833335 385 0 2670 --55.7500005 -55.5833335 -14.2500005 -14.0833335 455 0 2670 --55.5833335 -55.4166665 -14.2500005 -14.0833335 457 0 2670 --55.4166665 -55.2499995 -14.2500005 -14.0833335 568 0 2670 --55.2500005 -55.0833335 -14.2500005 -14.0833335 540 0 2670 --55.0833335 -54.9166665 -14.2500005 -14.0833335 523 0 2670 --54.9166665 -54.7499995 -14.2500005 -14.0833335 424 0 2670 --54.7500005 -54.5833335 -14.2500005 -14.0833335 528 0 2670 --54.5833335 -54.4166665 -14.2500005 -14.0833335 548 0 2670 --54.4166665 -54.2499995 -14.2500005 -14.0833335 470 0 2670 --54.2500005 -54.0833335 -14.2500005 -14.0833335 514 0 2670 --54.0833335 -53.9166665 -14.2500005 -14.0833335 593 0 2670 --53.9166665 -53.7499995 -14.2500005 -14.0833335 570 0 2670 --53.7500005 -53.5833335 -14.2500005 -14.0833335 492 0 2670 --53.5833335 -53.4166665 -14.2500005 -14.0833335 421 0 2670 --53.4166665 -53.2499995 -14.2500005 -14.0833335 412 0 2670 --53.2500005 -53.0833335 -14.2500005 -14.0833335 451 0 2670 --53.0833335 -52.9166665 -14.2500005 -14.0833335 357 0 2670 --52.9166665 -52.7499995 -14.2500005 -14.0833335 495 0 2670 --52.7500005 -52.5833335 -14.2500005 -14.0833335 391 0 2670 --52.5833335 -52.4166665 -14.2500005 -14.0833335 336 0 2670 --52.4166665 -52.2499995 -14.2500005 -14.0833335 320 0 2670 --52.2500005 -52.0833335 -14.2500005 -14.0833335 350 0 2670 --52.0833335 -51.9166665 -14.2500005 -14.0833335 265 0 2670 --51.9166665 -51.7499995 -14.2500005 -14.0833335 251 0 2670 --51.7500005 -51.5833335 -14.2500005 -14.0833335 244 0 2670 --51.5833335 -51.4166665 -14.2500005 -14.0833335 242 0 2670 --51.4166665 -51.2499995 -14.2500005 -14.0833335 241 0 2670 --51.2500005 -51.0833335 -14.2500005 -14.0833335 241 0 2670 --51.0833335 -50.9166665 -14.2500005 -14.0833335 242 0 2670 --50.9166665 -50.7499995 -14.2500005 -14.0833335 236 0 2670 --50.7500005 -50.5833335 -14.2500005 -14.0833335 243 0 2670 --50.5833335 -50.4166665 -14.2500005 -14.0833335 265 0 2670 --50.4166665 -50.2499995 -14.2500005 -14.0833335 286 0 2670 --50.2500005 -50.0833335 -14.2500005 -14.0833335 294 0 2670 --50.0833335 -49.9166665 -14.2500005 -14.0833335 364 0 2670 --49.9166665 -49.7499995 -14.2500005 -14.0833335 290 0 2670 --49.7500005 -49.5833335 -14.2500005 -14.0833335 341 0 2670 --49.5833335 -49.4166665 -14.2500005 -14.0833335 307 0 2670 --49.4166665 -49.2499995 -14.2500005 -14.0833335 356 0 2670 --49.2500005 -49.0833335 -14.2500005 -14.0833335 584 0 2670 --49.0833335 -48.9166665 -14.2500005 -14.0833335 573 0 2670 --48.9166665 -48.7499995 -14.2500005 -14.0833335 444 0 2670 --48.7500005 -48.5833335 -14.2500005 -14.0833335 465 0 2670 --48.5833335 -48.4166665 -14.2500005 -14.0833335 446 0 2670 --48.4166665 -48.2499995 -14.2500005 -14.0833335 468 0 2670 --48.2500005 -48.0833335 -14.2500005 -14.0833335 523 0 2670 --48.0833335 -47.9166665 -14.2500005 -14.0833335 654 0 2670 --47.9166665 -47.7499995 -14.2500005 -14.0833335 957 0 2670 --47.7500005 -47.5833335 -14.2500005 -14.0833335 1200 0 2670 --47.5833335 -47.4166665 -14.2500005 -14.0833335 1349 0 2670 --47.4166665 -47.2499995 -14.2500005 -14.0833335 776 0 2670 --47.2500005 -47.0833335 -14.2500005 -14.0833335 492 0 2670 --47.0833335 -46.9166665 -14.2500005 -14.0833335 445 0 2670 --46.9166665 -46.7499995 -14.2500005 -14.0833335 469 0 2670 --46.7500005 -46.5833335 -14.2500005 -14.0833335 528 0 2670 --46.5833335 -46.4166665 -14.2500005 -14.0833335 705 0 2670 --46.4166665 -46.2499995 -14.2500005 -14.0833335 835 0 2670 --46.2500005 -46.0833335 -14.2500005 -14.0833335 848 0 2670 --46.0833335 -45.9166665 -14.2500005 -14.0833335 937 0 2670 --45.9166665 -45.7499995 -14.2500005 -14.0833335 890 0 2670 --45.7500005 -45.5833335 -14.2500005 -14.0833335 829 0 2670 --45.5833335 -45.4166665 -14.2500005 -14.0833335 812 0 2670 --45.4166665 -45.2499995 -14.2500005 -14.0833335 793 0 2670 --45.2500005 -45.0833335 -14.2500005 -14.0833335 757 0 2670 --45.0833335 -44.9166665 -14.2500005 -14.0833335 740 0 2670 --44.9166665 -44.7499995 -14.2500005 -14.0833335 614 0 2670 --44.7500005 -44.5833335 -14.2500005 -14.0833335 560 0 2670 --44.5833335 -44.4166665 -14.2500005 -14.0833335 596 0 2670 --44.4166665 -44.2499995 -14.2500005 -14.0833335 531 0 2670 --44.2500005 -44.0833335 -14.2500005 -14.0833335 490 0 2670 --44.0833335 -43.9166665 -14.2500005 -14.0833335 474 0 2670 --43.9166665 -43.7499995 -14.2500005 -14.0833335 462 0 2670 --43.7500005 -43.5833335 -14.2500005 -14.0833335 439 0 2670 --43.5833335 -43.4166665 -14.2500005 -14.0833335 455 0 2670 --43.4166665 -43.2499995 -14.2500005 -14.0833335 458 0 2670 --43.2500005 -43.0833335 -14.2500005 -14.0833335 492 0 2670 --43.0833335 -42.9166665 -14.2500005 -14.0833335 529 0 2670 --42.9166665 -42.7499995 -14.2500005 -14.0833335 507 0 2670 --42.7500005 -42.5833335 -14.2500005 -14.0833335 746 0 2670 --42.5833335 -42.4166665 -14.2500005 -14.0833335 1052 0 2670 --42.4166665 -42.2499995 -14.2500005 -14.0833335 632 0 2670 --42.2500005 -42.0833335 -14.2500005 -14.0833335 559 0 2670 --42.0833335 -41.9166665 -14.2500005 -14.0833335 872 0 2670 --41.9166665 -41.7499995 -14.2500005 -14.0833335 573 0 2670 --41.7500005 -41.5833335 -14.2500005 -14.0833335 521 0 2670 --41.5833335 -41.4166665 -14.2500005 -14.0833335 381 0 2670 --41.4166665 -41.2499995 -14.2500005 -14.0833335 431 0 2670 --41.2500005 -41.0833335 -14.2500005 -14.0833335 315 0 2670 --41.0833335 -40.9166665 -14.2500005 -14.0833335 312 0 2670 --40.9166665 -40.7499995 -14.2500005 -14.0833335 335 0 2670 --40.7500005 -40.5833335 -14.2500005 -14.0833335 610 0 2670 --40.5833335 -40.4166665 -14.2500005 -14.0833335 754 0 2670 --40.4166665 -40.2499995 -14.2500005 -14.0833335 567 0 2670 --40.2500005 -40.0833335 -14.2500005 -14.0833335 736 0 2670 --40.0833335 -39.9166665 -14.2500005 -14.0833335 236 0 2670 --65.0833335 -64.9166665 -14.4166665 -14.2499995 157 0 2670 --64.9166665 -64.7499995 -14.4166665 -14.2499995 148 0 2670 --64.7500005 -64.5833335 -14.4166665 -14.2499995 149 0 2670 --64.5833335 -64.4166665 -14.4166665 -14.2499995 151 0 2670 --64.4166665 -64.2499995 -14.4166665 -14.2499995 171 0 2670 --64.2500005 -64.0833335 -14.4166665 -14.2499995 170 0 2670 --64.0833335 -63.9166665 -14.4166665 -14.2499995 157 0 2670 --63.9166665 -63.7499995 -14.4166665 -14.2499995 159 0 2670 --63.7500005 -63.5833335 -14.4166665 -14.2499995 165 0 2670 --63.5833335 -63.4166665 -14.4166665 -14.2499995 179 0 2670 --63.4166665 -63.2499995 -14.4166665 -14.2499995 206 0 2670 --63.2500005 -63.0833335 -14.4166665 -14.2499995 195 0 2670 --63.0833335 -62.9166665 -14.4166665 -14.2499995 168 0 2670 --62.9166665 -62.7499995 -14.4166665 -14.2499995 185 0 2670 --62.7500005 -62.5833335 -14.4166665 -14.2499995 187 0 2670 --62.5833335 -62.4166665 -14.4166665 -14.2499995 204 0 2670 --62.4166665 -62.2499995 -14.4166665 -14.2499995 191 0 2670 --62.2500005 -62.0833335 -14.4166665 -14.2499995 198 0 2670 --62.0833335 -61.9166665 -14.4166665 -14.2499995 207 0 2670 --61.9166665 -61.7499995 -14.4166665 -14.2499995 253 0 2670 --61.7500005 -61.5833335 -14.4166665 -14.2499995 249 0 2670 --61.5833335 -61.4166665 -14.4166665 -14.2499995 204 0 2670 --61.4166665 -61.2499995 -14.4166665 -14.2499995 176 0 2670 --61.2500005 -61.0833335 -14.4166665 -14.2499995 209 0 2670 --61.0833335 -60.9166665 -14.4166665 -14.2499995 201 0 2670 --60.9166665 -60.7499995 -14.4166665 -14.2499995 718 0 2670 --60.7500005 -60.5833335 -14.4166665 -14.2499995 643 0 2670 --60.5833335 -60.4166665 -14.4166665 -14.2499995 362 0 2670 --60.4166665 -60.2499995 -14.4166665 -14.2499995 381 0 2670 --60.2500005 -60.0833335 -14.4166665 -14.2499995 189 0 2670 --60.0833335 -59.9166665 -14.4166665 -14.2499995 208 0 2670 --59.9166665 -59.7499995 -14.4166665 -14.2499995 208 0 2670 --59.7500005 -59.5833335 -14.4166665 -14.2499995 243 0 2670 --59.5833335 -59.4166665 -14.4166665 -14.2499995 657 0 2670 --59.4166665 -59.2499995 -14.4166665 -14.2499995 693 0 2670 --59.2500005 -59.0833335 -14.4166665 -14.2499995 630 0 2670 --59.0833335 -58.9166665 -14.4166665 -14.2499995 645 0 2670 --58.9166665 -58.7499995 -14.4166665 -14.2499995 738 0 2670 --58.7500005 -58.5833335 -14.4166665 -14.2499995 699 0 2670 --58.5833335 -58.4166665 -14.4166665 -14.2499995 634 0 2670 --58.4166665 -58.2499995 -14.4166665 -14.2499995 688 0 2670 --58.2500005 -58.0833335 -14.4166665 -14.2499995 628 0 2670 --58.0833335 -57.9166665 -14.4166665 -14.2499995 604 0 2670 --57.9166665 -57.7499995 -14.4166665 -14.2499995 582 0 2670 --57.7500005 -57.5833335 -14.4166665 -14.2499995 530 0 2670 --57.5833335 -57.4166665 -14.4166665 -14.2499995 323 0 2670 --57.4166665 -57.2499995 -14.4166665 -14.2499995 295 0 2670 --57.2500005 -57.0833335 -14.4166665 -14.2499995 344 0 2670 --57.0833335 -56.9166665 -14.4166665 -14.2499995 331 0 2670 --56.9166665 -56.7499995 -14.4166665 -14.2499995 326 0 2670 --56.7500005 -56.5833335 -14.4166665 -14.2499995 364 0 2670 --56.5833335 -56.4166665 -14.4166665 -14.2499995 469 0 2670 --56.4166665 -56.2499995 -14.4166665 -14.2499995 386 0 2670 --56.2500005 -56.0833335 -14.4166665 -14.2499995 455 0 2670 --56.0833335 -55.9166665 -14.4166665 -14.2499995 443 0 2670 --55.9166665 -55.7499995 -14.4166665 -14.2499995 469 0 2670 --55.7500005 -55.5833335 -14.4166665 -14.2499995 453 0 2670 --55.5833335 -55.4166665 -14.4166665 -14.2499995 311 0 2670 --55.4166665 -55.2499995 -14.4166665 -14.2499995 317 0 2670 --55.2500005 -55.0833335 -14.4166665 -14.2499995 389 0 2670 --55.0833335 -54.9166665 -14.4166665 -14.2499995 436 0 2670 --54.9166665 -54.7499995 -14.4166665 -14.2499995 406 0 2670 --54.7500005 -54.5833335 -14.4166665 -14.2499995 412 0 2670 --54.5833335 -54.4166665 -14.4166665 -14.2499995 454 0 2670 --54.4166665 -54.2499995 -14.4166665 -14.2499995 449 0 2670 --54.2500005 -54.0833335 -14.4166665 -14.2499995 514 0 2670 --54.0833335 -53.9166665 -14.4166665 -14.2499995 615 0 2670 --53.9166665 -53.7499995 -14.4166665 -14.2499995 626 0 2670 --53.7500005 -53.5833335 -14.4166665 -14.2499995 492 0 2670 --53.5833335 -53.4166665 -14.4166665 -14.2499995 415 0 2670 --53.4166665 -53.2499995 -14.4166665 -14.2499995 403 0 2670 --53.2500005 -53.0833335 -14.4166665 -14.2499995 390 0 2670 --53.0833335 -52.9166665 -14.4166665 -14.2499995 367 0 2670 --52.9166665 -52.7499995 -14.4166665 -14.2499995 412 0 2670 --52.7500005 -52.5833335 -14.4166665 -14.2499995 445 0 2670 --52.5833335 -52.4166665 -14.4166665 -14.2499995 361 0 2670 --52.4166665 -52.2499995 -14.4166665 -14.2499995 295 0 2670 --52.2500005 -52.0833335 -14.4166665 -14.2499995 281 0 2670 --52.0833335 -51.9166665 -14.4166665 -14.2499995 311 0 2670 --51.9166665 -51.7499995 -14.4166665 -14.2499995 257 0 2670 --51.7500005 -51.5833335 -14.4166665 -14.2499995 250 0 2670 --51.5833335 -51.4166665 -14.4166665 -14.2499995 247 0 2670 --51.4166665 -51.2499995 -14.4166665 -14.2499995 245 0 2670 --51.2500005 -51.0833335 -14.4166665 -14.2499995 248 0 2670 --51.0833335 -50.9166665 -14.4166665 -14.2499995 241 0 2670 --50.9166665 -50.7499995 -14.4166665 -14.2499995 239 0 2670 --50.7500005 -50.5833335 -14.4166665 -14.2499995 246 0 2670 --50.5833335 -50.4166665 -14.4166665 -14.2499995 307 0 2670 --50.4166665 -50.2499995 -14.4166665 -14.2499995 277 0 2670 --50.2500005 -50.0833335 -14.4166665 -14.2499995 326 0 2670 --50.0833335 -49.9166665 -14.4166665 -14.2499995 372 0 2670 --49.9166665 -49.7499995 -14.4166665 -14.2499995 348 0 2670 --49.7500005 -49.5833335 -14.4166665 -14.2499995 343 0 2670 --49.5833335 -49.4166665 -14.4166665 -14.2499995 376 0 2670 --49.4166665 -49.2499995 -14.4166665 -14.2499995 598 0 2670 --49.2500005 -49.0833335 -14.4166665 -14.2499995 544 0 2670 --49.0833335 -48.9166665 -14.4166665 -14.2499995 451 0 2670 --48.9166665 -48.7499995 -14.4166665 -14.2499995 495 0 2670 --48.7500005 -48.5833335 -14.4166665 -14.2499995 591 0 2670 --48.5833335 -48.4166665 -14.4166665 -14.2499995 736 0 2670 --48.4166665 -48.2499995 -14.4166665 -14.2499995 516 0 2670 --48.2500005 -48.0833335 -14.4166665 -14.2499995 486 0 2670 --48.0833335 -47.9166665 -14.4166665 -14.2499995 718 0 2670 --47.9166665 -47.7499995 -14.4166665 -14.2499995 605 0 2670 --47.7500005 -47.5833335 -14.4166665 -14.2499995 1045 0 2670 --47.5833335 -47.4166665 -14.4166665 -14.2499995 1127 0 2670 --47.4166665 -47.2499995 -14.4166665 -14.2499995 1049 0 2670 --47.2500005 -47.0833335 -14.4166665 -14.2499995 493 0 2670 --47.0833335 -46.9166665 -14.4166665 -14.2499995 438 0 2670 --46.9166665 -46.7499995 -14.4166665 -14.2499995 458 0 2670 --46.7500005 -46.5833335 -14.4166665 -14.2499995 503 0 2670 --46.5833335 -46.4166665 -14.4166665 -14.2499995 774 0 2670 --46.4166665 -46.2499995 -14.4166665 -14.2499995 703 0 2670 --46.2500005 -46.0833335 -14.4166665 -14.2499995 785 0 2670 --46.0833335 -45.9166665 -14.4166665 -14.2499995 755 0 2670 --45.9166665 -45.7499995 -14.4166665 -14.2499995 894 0 2670 --45.7500005 -45.5833335 -14.4166665 -14.2499995 850 0 2670 --45.5833335 -45.4166665 -14.4166665 -14.2499995 828 0 2670 --45.4166665 -45.2499995 -14.4166665 -14.2499995 798 0 2670 --45.2500005 -45.0833335 -14.4166665 -14.2499995 710 0 2670 --45.0833335 -44.9166665 -14.4166665 -14.2499995 649 0 2670 --44.9166665 -44.7499995 -14.4166665 -14.2499995 675 0 2670 --44.7500005 -44.5833335 -14.4166665 -14.2499995 629 0 2670 --44.5833335 -44.4166665 -14.4166665 -14.2499995 512 0 2670 --44.4166665 -44.2499995 -14.4166665 -14.2499995 622 0 2670 --44.2500005 -44.0833335 -14.4166665 -14.2499995 489 0 2670 --44.0833335 -43.9166665 -14.4166665 -14.2499995 464 0 2670 --43.9166665 -43.7499995 -14.4166665 -14.2499995 445 0 2670 --43.7500005 -43.5833335 -14.4166665 -14.2499995 465 0 2670 --43.5833335 -43.4166665 -14.4166665 -14.2499995 482 0 2670 --43.4166665 -43.2499995 -14.4166665 -14.2499995 493 0 2670 --43.2500005 -43.0833335 -14.4166665 -14.2499995 540 0 2670 --43.0833335 -42.9166665 -14.4166665 -14.2499995 692 0 2670 --42.9166665 -42.7499995 -14.4166665 -14.2499995 645 0 2670 --42.7500005 -42.5833335 -14.4166665 -14.2499995 842 0 2670 --42.5833335 -42.4166665 -14.4166665 -14.2499995 873 0 2670 --42.4166665 -42.2499995 -14.4166665 -14.2499995 708 0 2670 --42.2500005 -42.0833335 -14.4166665 -14.2499995 625 0 2670 --42.0833335 -41.9166665 -14.4166665 -14.2499995 596 0 2670 --41.9166665 -41.7499995 -14.4166665 -14.2499995 534 0 2670 --41.7500005 -41.5833335 -14.4166665 -14.2499995 606 0 2670 --41.5833335 -41.4166665 -14.4166665 -14.2499995 489 0 2670 --41.4166665 -41.2499995 -14.4166665 -14.2499995 517 0 2670 --41.2500005 -41.0833335 -14.4166665 -14.2499995 453 0 2670 --41.0833335 -40.9166665 -14.4166665 -14.2499995 419 0 2670 --40.9166665 -40.7499995 -14.4166665 -14.2499995 656 0 2670 --40.7500005 -40.5833335 -14.4166665 -14.2499995 851 0 2670 --40.5833335 -40.4166665 -14.4166665 -14.2499995 608 0 2670 --40.4166665 -40.2499995 -14.4166665 -14.2499995 532 0 2670 --40.2500005 -40.0833335 -14.4166665 -14.2499995 723 0 2670 --40.0833335 -39.9166665 -14.4166665 -14.2499995 316 0 2670 --65.0833335 -64.9166665 -14.5833335 -14.4166665 160 0 2670 --64.9166665 -64.7499995 -14.5833335 -14.4166665 151 0 2670 --64.7500005 -64.5833335 -14.5833335 -14.4166665 150 0 2670 --64.5833335 -64.4166665 -14.5833335 -14.4166665 153 0 2670 --64.4166665 -64.2499995 -14.5833335 -14.4166665 171 0 2670 --64.2500005 -64.0833335 -14.5833335 -14.4166665 174 0 2670 --64.0833335 -63.9166665 -14.5833335 -14.4166665 169 0 2670 --63.9166665 -63.7499995 -14.5833335 -14.4166665 164 0 2670 --63.7500005 -63.5833335 -14.5833335 -14.4166665 167 0 2670 --63.5833335 -63.4166665 -14.5833335 -14.4166665 179 0 2670 --63.4166665 -63.2499995 -14.5833335 -14.4166665 185 0 2670 --63.2500005 -63.0833335 -14.5833335 -14.4166665 240 0 2670 --63.0833335 -62.9166665 -14.5833335 -14.4166665 210 0 2670 --62.9166665 -62.7499995 -14.5833335 -14.4166665 213 0 2670 --62.7500005 -62.5833335 -14.5833335 -14.4166665 189 0 2670 --62.5833335 -62.4166665 -14.5833335 -14.4166665 183 0 2670 --62.4166665 -62.2499995 -14.5833335 -14.4166665 206 0 2670 --62.2500005 -62.0833335 -14.5833335 -14.4166665 233 0 2670 --62.0833335 -61.9166665 -14.5833335 -14.4166665 200 0 2670 --61.9166665 -61.7499995 -14.5833335 -14.4166665 200 0 2670 --61.7500005 -61.5833335 -14.5833335 -14.4166665 274 0 2670 --61.5833335 -61.4166665 -14.5833335 -14.4166665 228 0 2670 --61.4166665 -61.2499995 -14.5833335 -14.4166665 190 0 2670 --61.2500005 -61.0833335 -14.5833335 -14.4166665 187 0 2670 --61.0833335 -60.9166665 -14.5833335 -14.4166665 196 0 2670 --60.9166665 -60.7499995 -14.5833335 -14.4166665 284 0 2670 --60.7500005 -60.5833335 -14.5833335 -14.4166665 646 0 2670 --60.5833335 -60.4166665 -14.5833335 -14.4166665 535 0 2670 --60.4166665 -60.2499995 -14.5833335 -14.4166665 486 0 2670 --60.2500005 -60.0833335 -14.5833335 -14.4166665 246 0 2670 --60.0833335 -59.9166665 -14.5833335 -14.4166665 204 0 2670 --59.9166665 -59.7499995 -14.5833335 -14.4166665 347 0 2670 --59.7500005 -59.5833335 -14.5833335 -14.4166665 253 0 2670 --59.5833335 -59.4166665 -14.5833335 -14.4166665 597 0 2670 --59.4166665 -59.2499995 -14.5833335 -14.4166665 743 0 2670 --59.2500005 -59.0833335 -14.5833335 -14.4166665 679 0 2670 --59.0833335 -58.9166665 -14.5833335 -14.4166665 679 0 2670 --58.9166665 -58.7499995 -14.5833335 -14.4166665 697 0 2670 --58.7500005 -58.5833335 -14.5833335 -14.4166665 696 0 2670 --58.5833335 -58.4166665 -14.5833335 -14.4166665 637 0 2670 --58.4166665 -58.2499995 -14.5833335 -14.4166665 625 0 2670 --58.2500005 -58.0833335 -14.5833335 -14.4166665 599 0 2670 --58.0833335 -57.9166665 -14.5833335 -14.4166665 524 0 2670 --57.9166665 -57.7499995 -14.5833335 -14.4166665 301 0 2670 --57.7500005 -57.5833335 -14.5833335 -14.4166665 296 0 2670 --57.5833335 -57.4166665 -14.5833335 -14.4166665 291 0 2670 --57.4166665 -57.2499995 -14.5833335 -14.4166665 298 0 2670 --57.2500005 -57.0833335 -14.5833335 -14.4166665 391 0 2670 --57.0833335 -56.9166665 -14.5833335 -14.4166665 416 0 2670 --56.9166665 -56.7499995 -14.5833335 -14.4166665 246 0 2670 --56.7500005 -56.5833335 -14.5833335 -14.4166665 223 0 2670 --56.5833335 -56.4166665 -14.5833335 -14.4166665 226 0 2670 --56.4166665 -56.2499995 -14.5833335 -14.4166665 430 0 2670 --56.2500005 -56.0833335 -14.5833335 -14.4166665 468 0 2670 --56.0833335 -55.9166665 -14.5833335 -14.4166665 324 0 2670 --55.9166665 -55.7499995 -14.5833335 -14.4166665 371 0 2670 --55.7500005 -55.5833335 -14.5833335 -14.4166665 361 0 2670 --55.5833335 -55.4166665 -14.5833335 -14.4166665 358 0 2670 --55.4166665 -55.2499995 -14.5833335 -14.4166665 424 0 2670 --55.2500005 -55.0833335 -14.5833335 -14.4166665 453 0 2670 --55.0833335 -54.9166665 -14.5833335 -14.4166665 427 0 2670 --54.9166665 -54.7499995 -14.5833335 -14.4166665 438 0 2670 --54.7500005 -54.5833335 -14.5833335 -14.4166665 458 0 2670 --54.5833335 -54.4166665 -14.5833335 -14.4166665 419 0 2670 --54.4166665 -54.2499995 -14.5833335 -14.4166665 450 0 2670 --54.2500005 -54.0833335 -14.5833335 -14.4166665 485 0 2670 --54.0833335 -53.9166665 -14.5833335 -14.4166665 533 0 2670 --53.9166665 -53.7499995 -14.5833335 -14.4166665 601 0 2670 --53.7500005 -53.5833335 -14.5833335 -14.4166665 583 0 2670 --53.5833335 -53.4166665 -14.5833335 -14.4166665 493 0 2670 --53.4166665 -53.2499995 -14.5833335 -14.4166665 523 0 2670 --53.2500005 -53.0833335 -14.5833335 -14.4166665 429 0 2670 --53.0833335 -52.9166665 -14.5833335 -14.4166665 459 0 2670 --52.9166665 -52.7499995 -14.5833335 -14.4166665 457 0 2670 --52.7500005 -52.5833335 -14.5833335 -14.4166665 491 0 2670 --52.5833335 -52.4166665 -14.5833335 -14.4166665 375 0 2670 --52.4166665 -52.2499995 -14.5833335 -14.4166665 279 0 2670 --52.2500005 -52.0833335 -14.5833335 -14.4166665 303 0 2670 --52.0833335 -51.9166665 -14.5833335 -14.4166665 276 0 2670 --51.9166665 -51.7499995 -14.5833335 -14.4166665 241 0 2670 --51.7500005 -51.5833335 -14.5833335 -14.4166665 268 0 2670 --51.5833335 -51.4166665 -14.5833335 -14.4166665 251 0 2670 --51.4166665 -51.2499995 -14.5833335 -14.4166665 249 0 2670 --51.2500005 -51.0833335 -14.5833335 -14.4166665 255 0 2670 --51.0833335 -50.9166665 -14.5833335 -14.4166665 247 0 2670 --50.9166665 -50.7499995 -14.5833335 -14.4166665 243 0 2670 --50.7500005 -50.5833335 -14.5833335 -14.4166665 259 0 2670 --50.5833335 -50.4166665 -14.5833335 -14.4166665 268 0 2670 --50.4166665 -50.2499995 -14.5833335 -14.4166665 306 0 2670 --50.2500005 -50.0833335 -14.5833335 -14.4166665 321 0 2670 --50.0833335 -49.9166665 -14.5833335 -14.4166665 411 0 2670 --49.9166665 -49.7499995 -14.5833335 -14.4166665 406 0 2670 --49.7500005 -49.5833335 -14.5833335 -14.4166665 361 0 2670 --49.5833335 -49.4166665 -14.5833335 -14.4166665 385 0 2670 --49.4166665 -49.2499995 -14.5833335 -14.4166665 715 0 2670 --49.2500005 -49.0833335 -14.5833335 -14.4166665 481 0 2670 --49.0833335 -48.9166665 -14.5833335 -14.4166665 504 0 2670 --48.9166665 -48.7499995 -14.5833335 -14.4166665 560 0 2670 --48.7500005 -48.5833335 -14.5833335 -14.4166665 659 0 2670 --48.5833335 -48.4166665 -14.5833335 -14.4166665 646 0 2670 --48.4166665 -48.2499995 -14.5833335 -14.4166665 622 0 2670 --48.2500005 -48.0833335 -14.5833335 -14.4166665 584 0 2670 --48.0833335 -47.9166665 -14.5833335 -14.4166665 686 0 2670 --47.9166665 -47.7499995 -14.5833335 -14.4166665 876 0 2670 --47.7500005 -47.5833335 -14.5833335 -14.4166665 890 0 2670 --47.5833335 -47.4166665 -14.5833335 -14.4166665 1020 0 2670 --47.4166665 -47.2499995 -14.5833335 -14.4166665 603 0 2670 --47.2500005 -47.0833335 -14.5833335 -14.4166665 452 0 2670 --47.0833335 -46.9166665 -14.5833335 -14.4166665 443 0 2670 --46.9166665 -46.7499995 -14.5833335 -14.4166665 471 0 2670 --46.7500005 -46.5833335 -14.5833335 -14.4166665 478 0 2670 --46.5833335 -46.4166665 -14.5833335 -14.4166665 563 0 2670 --46.4166665 -46.2499995 -14.5833335 -14.4166665 733 0 2670 --46.2500005 -46.0833335 -14.5833335 -14.4166665 701 0 2670 --46.0833335 -45.9166665 -14.5833335 -14.4166665 868 0 2670 --45.9166665 -45.7499995 -14.5833335 -14.4166665 885 0 2670 --45.7500005 -45.5833335 -14.5833335 -14.4166665 850 0 2670 --45.5833335 -45.4166665 -14.5833335 -14.4166665 835 0 2670 --45.4166665 -45.2499995 -14.5833335 -14.4166665 716 0 2670 --45.2500005 -45.0833335 -14.5833335 -14.4166665 746 0 2670 --45.0833335 -44.9166665 -14.5833335 -14.4166665 737 0 2670 --44.9166665 -44.7499995 -14.5833335 -14.4166665 577 0 2670 --44.7500005 -44.5833335 -14.5833335 -14.4166665 664 0 2670 --44.5833335 -44.4166665 -14.5833335 -14.4166665 646 0 2670 --44.4166665 -44.2499995 -14.5833335 -14.4166665 573 0 2670 --44.2500005 -44.0833335 -14.5833335 -14.4166665 525 0 2670 --44.0833335 -43.9166665 -14.5833335 -14.4166665 484 0 2670 --43.9166665 -43.7499995 -14.5833335 -14.4166665 448 0 2670 --43.7500005 -43.5833335 -14.5833335 -14.4166665 809 0 2670 --43.5833335 -43.4166665 -14.5833335 -14.4166665 507 0 2670 --43.4166665 -43.2499995 -14.5833335 -14.4166665 489 0 2670 --43.2500005 -43.0833335 -14.5833335 -14.4166665 522 0 2670 --43.0833335 -42.9166665 -14.5833335 -14.4166665 608 0 2670 --42.9166665 -42.7499995 -14.5833335 -14.4166665 769 0 2670 --42.7500005 -42.5833335 -14.5833335 -14.4166665 648 0 2670 --42.5833335 -42.4166665 -14.5833335 -14.4166665 784 0 2670 --42.4166665 -42.2499995 -14.5833335 -14.4166665 734 0 2670 --42.2500005 -42.0833335 -14.5833335 -14.4166665 614 0 2670 --42.0833335 -41.9166665 -14.5833335 -14.4166665 588 0 2670 --41.9166665 -41.7499995 -14.5833335 -14.4166665 599 0 2670 --41.7500005 -41.5833335 -14.5833335 -14.4166665 641 0 2670 --41.5833335 -41.4166665 -14.5833335 -14.4166665 584 0 2670 --41.4166665 -41.2499995 -14.5833335 -14.4166665 544 0 2670 --41.2500005 -41.0833335 -14.5833335 -14.4166665 490 0 2670 --41.0833335 -40.9166665 -14.5833335 -14.4166665 500 0 2670 --40.9166665 -40.7499995 -14.5833335 -14.4166665 606 0 2670 --40.7500005 -40.5833335 -14.5833335 -14.4166665 802 0 2670 --40.5833335 -40.4166665 -14.5833335 -14.4166665 823 0 2670 --40.4166665 -40.2499995 -14.5833335 -14.4166665 751 0 2670 --40.2500005 -40.0833335 -14.5833335 -14.4166665 895 0 2670 --40.0833335 -39.9166665 -14.5833335 -14.4166665 336 0 2670 --65.0833335 -64.9166665 -14.7500005 -14.5833335 159 0 2670 --64.9166665 -64.7499995 -14.7500005 -14.5833335 153 0 2670 --64.7500005 -64.5833335 -14.7500005 -14.5833335 156 0 2670 --64.5833335 -64.4166665 -14.7500005 -14.5833335 156 0 2670 --64.4166665 -64.2499995 -14.7500005 -14.5833335 165 0 2670 --64.2500005 -64.0833335 -14.7500005 -14.5833335 177 0 2670 --64.0833335 -63.9166665 -14.7500005 -14.5833335 172 0 2670 --63.9166665 -63.7499995 -14.7500005 -14.5833335 183 0 2670 --63.7500005 -63.5833335 -14.7500005 -14.5833335 182 0 2670 --63.5833335 -63.4166665 -14.7500005 -14.5833335 199 0 2670 --63.4166665 -63.2499995 -14.7500005 -14.5833335 188 0 2670 --63.2500005 -63.0833335 -14.7500005 -14.5833335 190 0 2670 --63.0833335 -62.9166665 -14.7500005 -14.5833335 249 0 2670 --62.9166665 -62.7499995 -14.7500005 -14.5833335 229 0 2670 --62.7500005 -62.5833335 -14.7500005 -14.5833335 195 0 2670 --62.5833335 -62.4166665 -14.7500005 -14.5833335 218 0 2670 --62.4166665 -62.2499995 -14.7500005 -14.5833335 213 0 2670 --62.2500005 -62.0833335 -14.7500005 -14.5833335 248 0 2670 --62.0833335 -61.9166665 -14.7500005 -14.5833335 206 0 2670 --61.9166665 -61.7499995 -14.7500005 -14.5833335 214 0 2670 --61.7500005 -61.5833335 -14.7500005 -14.5833335 245 0 2670 --61.5833335 -61.4166665 -14.7500005 -14.5833335 256 0 2670 --61.4166665 -61.2499995 -14.7500005 -14.5833335 211 0 2670 --61.2500005 -61.0833335 -14.7500005 -14.5833335 186 0 2670 --61.0833335 -60.9166665 -14.7500005 -14.5833335 216 0 2670 --60.9166665 -60.7499995 -14.7500005 -14.5833335 212 0 2670 --60.7500005 -60.5833335 -14.7500005 -14.5833335 783 0 2670 --60.5833335 -60.4166665 -14.7500005 -14.5833335 684 0 2670 --60.4166665 -60.2499995 -14.7500005 -14.5833335 608 0 2670 --60.2500005 -60.0833335 -14.7500005 -14.5833335 212 0 2670 --60.0833335 -59.9166665 -14.7500005 -14.5833335 194 0 2670 --59.9166665 -59.7499995 -14.7500005 -14.5833335 618 0 2670 --59.7500005 -59.5833335 -14.7500005 -14.5833335 290 0 2670 --59.5833335 -59.4166665 -14.7500005 -14.5833335 251 0 2670 --59.4166665 -59.2499995 -14.7500005 -14.5833335 620 0 2670 --59.2500005 -59.0833335 -14.7500005 -14.5833335 680 0 2670 --59.0833335 -58.9166665 -14.7500005 -14.5833335 682 0 2670 --58.9166665 -58.7499995 -14.7500005 -14.5833335 706 0 2670 --58.7500005 -58.5833335 -14.7500005 -14.5833335 621 0 2670 --58.5833335 -58.4166665 -14.7500005 -14.5833335 551 0 2670 --58.4166665 -58.2499995 -14.7500005 -14.5833335 672 0 2670 --58.2500005 -58.0833335 -14.7500005 -14.5833335 521 0 2670 --58.0833335 -57.9166665 -14.7500005 -14.5833335 359 0 2670 --57.9166665 -57.7499995 -14.7500005 -14.5833335 225 0 2670 --57.7500005 -57.5833335 -14.7500005 -14.5833335 330 0 2670 --57.5833335 -57.4166665 -14.7500005 -14.5833335 424 0 2670 --57.4166665 -57.2499995 -14.7500005 -14.5833335 512 0 2670 --57.2500005 -57.0833335 -14.7500005 -14.5833335 334 0 2670 --57.0833335 -56.9166665 -14.7500005 -14.5833335 221 0 2670 --56.9166665 -56.7499995 -14.7500005 -14.5833335 216 0 2670 --56.7500005 -56.5833335 -14.7500005 -14.5833335 213 0 2670 --56.5833335 -56.4166665 -14.7500005 -14.5833335 439 0 2670 --56.4166665 -56.2499995 -14.7500005 -14.5833335 416 0 2670 --56.2500005 -56.0833335 -14.7500005 -14.5833335 208 0 2670 --56.0833335 -55.9166665 -14.7500005 -14.5833335 221 0 2670 --55.9166665 -55.7499995 -14.7500005 -14.5833335 248 0 2670 --55.7500005 -55.5833335 -14.7500005 -14.5833335 296 0 2670 --55.5833335 -55.4166665 -14.7500005 -14.5833335 369 0 2670 --55.4166665 -55.2499995 -14.7500005 -14.5833335 428 0 2670 --55.2500005 -55.0833335 -14.7500005 -14.5833335 422 0 2670 --55.0833335 -54.9166665 -14.7500005 -14.5833335 462 0 2670 --54.9166665 -54.7499995 -14.7500005 -14.5833335 516 0 2670 --54.7500005 -54.5833335 -14.7500005 -14.5833335 483 0 2670 --54.5833335 -54.4166665 -14.7500005 -14.5833335 587 0 2670 --54.4166665 -54.2499995 -14.7500005 -14.5833335 650 0 2670 --54.2500005 -54.0833335 -14.7500005 -14.5833335 591 0 2670 --54.0833335 -53.9166665 -14.7500005 -14.5833335 535 0 2670 --53.9166665 -53.7499995 -14.7500005 -14.5833335 499 0 2670 --53.7500005 -53.5833335 -14.7500005 -14.5833335 487 0 2670 --53.5833335 -53.4166665 -14.7500005 -14.5833335 466 0 2670 --53.4166665 -53.2499995 -14.7500005 -14.5833335 555 0 2670 --53.2500005 -53.0833335 -14.7500005 -14.5833335 477 0 2670 --53.0833335 -52.9166665 -14.7500005 -14.5833335 354 0 2670 --52.9166665 -52.7499995 -14.7500005 -14.5833335 386 0 2670 --52.7500005 -52.5833335 -14.7500005 -14.5833335 349 0 2670 --52.5833335 -52.4166665 -14.7500005 -14.5833335 288 0 2670 --52.4166665 -52.2499995 -14.7500005 -14.5833335 266 0 2670 --52.2500005 -52.0833335 -14.7500005 -14.5833335 267 0 2670 --52.0833335 -51.9166665 -14.7500005 -14.5833335 280 0 2670 --51.9166665 -51.7499995 -14.7500005 -14.5833335 259 0 2670 --51.7500005 -51.5833335 -14.7500005 -14.5833335 257 0 2670 --51.5833335 -51.4166665 -14.7500005 -14.5833335 257 0 2670 --51.4166665 -51.2499995 -14.7500005 -14.5833335 253 0 2670 --51.2500005 -51.0833335 -14.7500005 -14.5833335 257 0 2670 --51.0833335 -50.9166665 -14.7500005 -14.5833335 249 0 2670 --50.9166665 -50.7499995 -14.7500005 -14.5833335 251 0 2670 --50.7500005 -50.5833335 -14.7500005 -14.5833335 265 0 2670 --50.5833335 -50.4166665 -14.7500005 -14.5833335 289 0 2670 --50.4166665 -50.2499995 -14.7500005 -14.5833335 329 0 2670 --50.2500005 -50.0833335 -14.7500005 -14.5833335 337 0 2670 --50.0833335 -49.9166665 -14.7500005 -14.5833335 522 0 2670 --49.9166665 -49.7499995 -14.7500005 -14.5833335 382 0 2670 --49.7500005 -49.5833335 -14.7500005 -14.5833335 467 0 2670 --49.5833335 -49.4166665 -14.7500005 -14.5833335 674 0 2670 --49.4166665 -49.2499995 -14.7500005 -14.5833335 666 0 2670 --49.2500005 -49.0833335 -14.7500005 -14.5833335 558 0 2670 --49.0833335 -48.9166665 -14.7500005 -14.5833335 494 0 2670 --48.9166665 -48.7499995 -14.7500005 -14.5833335 505 0 2670 --48.7500005 -48.5833335 -14.7500005 -14.5833335 545 0 2670 --48.5833335 -48.4166665 -14.7500005 -14.5833335 853 0 2670 --48.4166665 -48.2499995 -14.7500005 -14.5833335 841 0 2670 --48.2500005 -48.0833335 -14.7500005 -14.5833335 546 0 2670 --48.0833335 -47.9166665 -14.7500005 -14.5833335 1096 0 2670 --47.9166665 -47.7499995 -14.7500005 -14.5833335 1012 0 2670 --47.7500005 -47.5833335 -14.7500005 -14.5833335 1132 0 2670 --47.5833335 -47.4166665 -14.7500005 -14.5833335 1006 0 2670 --47.4166665 -47.2499995 -14.7500005 -14.5833335 504 0 2670 --47.2500005 -47.0833335 -14.7500005 -14.5833335 458 0 2670 --47.0833335 -46.9166665 -14.7500005 -14.5833335 454 0 2670 --46.9166665 -46.7499995 -14.7500005 -14.5833335 485 0 2670 --46.7500005 -46.5833335 -14.7500005 -14.5833335 489 0 2670 --46.5833335 -46.4166665 -14.7500005 -14.5833335 1016 0 2670 --46.4166665 -46.2499995 -14.7500005 -14.5833335 710 0 2670 --46.2500005 -46.0833335 -14.7500005 -14.5833335 782 0 2670 --46.0833335 -45.9166665 -14.7500005 -14.5833335 935 0 2670 --45.9166665 -45.7499995 -14.7500005 -14.5833335 846 0 2670 --45.7500005 -45.5833335 -14.7500005 -14.5833335 869 0 2670 --45.5833335 -45.4166665 -14.7500005 -14.5833335 738 0 2670 --45.4166665 -45.2499995 -14.7500005 -14.5833335 827 0 2670 --45.2500005 -45.0833335 -14.7500005 -14.5833335 819 0 2670 --45.0833335 -44.9166665 -14.7500005 -14.5833335 635 0 2670 --44.9166665 -44.7499995 -14.7500005 -14.5833335 785 0 2670 --44.7500005 -44.5833335 -14.7500005 -14.5833335 712 0 2670 --44.5833335 -44.4166665 -14.7500005 -14.5833335 759 0 2670 --44.4166665 -44.2499995 -14.7500005 -14.5833335 643 0 2670 --44.2500005 -44.0833335 -14.7500005 -14.5833335 542 0 2670 --44.0833335 -43.9166665 -14.7500005 -14.5833335 480 0 2670 --43.9166665 -43.7499995 -14.7500005 -14.5833335 448 0 2670 --43.7500005 -43.5833335 -14.7500005 -14.5833335 468 0 2670 --43.5833335 -43.4166665 -14.7500005 -14.5833335 478 0 2670 --43.4166665 -43.2499995 -14.7500005 -14.5833335 467 0 2670 --43.2500005 -43.0833335 -14.7500005 -14.5833335 489 0 2670 --43.0833335 -42.9166665 -14.7500005 -14.5833335 508 0 2670 --42.9166665 -42.7499995 -14.7500005 -14.5833335 540 0 2670 --42.7500005 -42.5833335 -14.7500005 -14.5833335 701 0 2670 --42.5833335 -42.4166665 -14.7500005 -14.5833335 863 0 2670 --42.4166665 -42.2499995 -14.7500005 -14.5833335 680 0 2670 --42.2500005 -42.0833335 -14.7500005 -14.5833335 734 0 2670 --42.0833335 -41.9166665 -14.7500005 -14.5833335 660 0 2670 --41.9166665 -41.7499995 -14.7500005 -14.5833335 799 0 2670 --41.7500005 -41.5833335 -14.7500005 -14.5833335 740 0 2670 --41.5833335 -41.4166665 -14.7500005 -14.5833335 639 0 2670 --41.4166665 -41.2499995 -14.7500005 -14.5833335 494 0 2670 --41.2500005 -41.0833335 -14.7500005 -14.5833335 450 0 2670 --41.0833335 -40.9166665 -14.7500005 -14.5833335 641 0 2670 --40.9166665 -40.7499995 -14.7500005 -14.5833335 900 0 2670 --40.7500005 -40.5833335 -14.7500005 -14.5833335 848 0 2670 --40.5833335 -40.4166665 -14.7500005 -14.5833335 917 0 2670 --40.4166665 -40.2499995 -14.7500005 -14.5833335 916 0 2670 --40.2500005 -40.0833335 -14.7500005 -14.5833335 699 0 2670 --40.0833335 -39.9166665 -14.7500005 -14.5833335 434 0 2670 --65.0833335 -64.9166665 -14.9166665 -14.7499995 159 0 2670 --64.9166665 -64.7499995 -14.9166665 -14.7499995 157 0 2670 --64.7500005 -64.5833335 -14.9166665 -14.7499995 160 0 2670 --64.5833335 -64.4166665 -14.9166665 -14.7499995 169 0 2670 --64.4166665 -64.2499995 -14.9166665 -14.7499995 170 0 2670 --64.2500005 -64.0833335 -14.9166665 -14.7499995 182 0 2670 --64.0833335 -63.9166665 -14.9166665 -14.7499995 172 0 2670 --63.9166665 -63.7499995 -14.9166665 -14.7499995 185 0 2670 --63.7500005 -63.5833335 -14.9166665 -14.7499995 190 0 2670 --63.5833335 -63.4166665 -14.9166665 -14.7499995 177 0 2670 --63.4166665 -63.2499995 -14.9166665 -14.7499995 199 0 2670 --63.2500005 -63.0833335 -14.9166665 -14.7499995 256 0 2670 --63.0833335 -62.9166665 -14.9166665 -14.7499995 269 0 2670 --62.9166665 -62.7499995 -14.9166665 -14.7499995 223 0 2670 --62.7500005 -62.5833335 -14.9166665 -14.7499995 220 0 2670 --62.5833335 -62.4166665 -14.9166665 -14.7499995 220 0 2670 --62.4166665 -62.2499995 -14.9166665 -14.7499995 277 0 2670 --62.2500005 -62.0833335 -14.9166665 -14.7499995 260 0 2670 --62.0833335 -61.9166665 -14.9166665 -14.7499995 217 0 2670 --61.9166665 -61.7499995 -14.9166665 -14.7499995 272 0 2670 --61.7500005 -61.5833335 -14.9166665 -14.7499995 264 0 2670 --61.5833335 -61.4166665 -14.9166665 -14.7499995 273 0 2670 --61.4166665 -61.2499995 -14.9166665 -14.7499995 211 0 2670 --61.2500005 -61.0833335 -14.9166665 -14.7499995 176 0 2670 --61.0833335 -60.9166665 -14.9166665 -14.7499995 175 0 2670 --60.9166665 -60.7499995 -14.9166665 -14.7499995 205 0 2670 --60.7500005 -60.5833335 -14.9166665 -14.7499995 203 0 2670 --60.5833335 -60.4166665 -14.9166665 -14.7499995 314 0 2670 --60.4166665 -60.2499995 -14.9166665 -14.7499995 677 0 2670 --60.2500005 -60.0833335 -14.9166665 -14.7499995 425 0 2670 --60.0833335 -59.9166665 -14.9166665 -14.7499995 201 0 2670 --59.9166665 -59.7499995 -14.9166665 -14.7499995 210 0 2670 --59.7500005 -59.5833335 -14.9166665 -14.7499995 739 0 2670 --59.5833335 -59.4166665 -14.9166665 -14.7499995 341 0 2670 --59.4166665 -59.2499995 -14.9166665 -14.7499995 327 0 2670 --59.2500005 -59.0833335 -14.9166665 -14.7499995 673 0 2670 --59.0833335 -58.9166665 -14.9166665 -14.7499995 649 0 2670 --58.9166665 -58.7499995 -14.9166665 -14.7499995 605 0 2670 --58.7500005 -58.5833335 -14.9166665 -14.7499995 530 0 2670 --58.5833335 -58.4166665 -14.9166665 -14.7499995 584 0 2670 --58.4166665 -58.2499995 -14.9166665 -14.7499995 560 0 2670 --58.2500005 -58.0833335 -14.9166665 -14.7499995 492 0 2670 --58.0833335 -57.9166665 -14.9166665 -14.7499995 412 0 2670 --57.9166665 -57.7499995 -14.9166665 -14.7499995 244 0 2670 --57.7500005 -57.5833335 -14.9166665 -14.7499995 206 0 2670 --57.5833335 -57.4166665 -14.9166665 -14.7499995 223 0 2670 --57.4166665 -57.2499995 -14.9166665 -14.7499995 171 0 2670 --57.2500005 -57.0833335 -14.9166665 -14.7499995 198 0 2670 --57.0833335 -56.9166665 -14.9166665 -14.7499995 187 0 2670 --56.9166665 -56.7499995 -14.9166665 -14.7499995 187 0 2670 --56.7500005 -56.5833335 -14.9166665 -14.7499995 266 0 2670 --56.5833335 -56.4166665 -14.9166665 -14.7499995 278 0 2670 --56.4166665 -56.2499995 -14.9166665 -14.7499995 201 0 2670 --56.2500005 -56.0833335 -14.9166665 -14.7499995 245 0 2670 --56.0833335 -55.9166665 -14.9166665 -14.7499995 272 0 2670 --55.9166665 -55.7499995 -14.9166665 -14.7499995 267 0 2670 --55.7500005 -55.5833335 -14.9166665 -14.7499995 266 0 2670 --55.5833335 -55.4166665 -14.9166665 -14.7499995 309 0 2670 --55.4166665 -55.2499995 -14.9166665 -14.7499995 317 0 2670 --55.2500005 -55.0833335 -14.9166665 -14.7499995 388 0 2670 --55.0833335 -54.9166665 -14.9166665 -14.7499995 416 0 2670 --54.9166665 -54.7499995 -14.9166665 -14.7499995 493 0 2670 --54.7500005 -54.5833335 -14.9166665 -14.7499995 625 0 2670 --54.5833335 -54.4166665 -14.9166665 -14.7499995 784 0 2670 --54.4166665 -54.2499995 -14.9166665 -14.7499995 687 0 2670 --54.2500005 -54.0833335 -14.9166665 -14.7499995 699 0 2670 --54.0833335 -53.9166665 -14.9166665 -14.7499995 645 0 2670 --53.9166665 -53.7499995 -14.9166665 -14.7499995 619 0 2670 --53.7500005 -53.5833335 -14.9166665 -14.7499995 616 0 2670 --53.5833335 -53.4166665 -14.9166665 -14.7499995 628 0 2670 --53.4166665 -53.2499995 -14.9166665 -14.7499995 474 0 2670 --53.2500005 -53.0833335 -14.9166665 -14.7499995 458 0 2670 --53.0833335 -52.9166665 -14.9166665 -14.7499995 436 0 2670 --52.9166665 -52.7499995 -14.9166665 -14.7499995 347 0 2670 --52.7500005 -52.5833335 -14.9166665 -14.7499995 303 0 2670 --52.5833335 -52.4166665 -14.9166665 -14.7499995 449 0 2670 --52.4166665 -52.2499995 -14.9166665 -14.7499995 304 0 2670 --52.2500005 -52.0833335 -14.9166665 -14.7499995 285 0 2670 --52.0833335 -51.9166665 -14.9166665 -14.7499995 259 0 2670 --51.9166665 -51.7499995 -14.9166665 -14.7499995 268 0 2670 --51.7500005 -51.5833335 -14.9166665 -14.7499995 263 0 2670 --51.5833335 -51.4166665 -14.9166665 -14.7499995 260 0 2670 --51.4166665 -51.2499995 -14.9166665 -14.7499995 265 0 2670 --51.2500005 -51.0833335 -14.9166665 -14.7499995 258 0 2670 --51.0833335 -50.9166665 -14.9166665 -14.7499995 253 0 2670 --50.9166665 -50.7499995 -14.9166665 -14.7499995 254 0 2670 --50.7500005 -50.5833335 -14.9166665 -14.7499995 308 0 2670 --50.5833335 -50.4166665 -14.9166665 -14.7499995 355 0 2670 --50.4166665 -50.2499995 -14.9166665 -14.7499995 303 0 2670 --50.2500005 -50.0833335 -14.9166665 -14.7499995 423 0 2670 --50.0833335 -49.9166665 -14.9166665 -14.7499995 408 0 2670 --49.9166665 -49.7499995 -14.9166665 -14.7499995 436 0 2670 --49.7500005 -49.5833335 -14.9166665 -14.7499995 905 0 2670 --49.5833335 -49.4166665 -14.9166665 -14.7499995 707 0 2670 --49.4166665 -49.2499995 -14.9166665 -14.7499995 549 0 2670 --49.2500005 -49.0833335 -14.9166665 -14.7499995 533 0 2670 --49.0833335 -48.9166665 -14.9166665 -14.7499995 544 0 2670 --48.9166665 -48.7499995 -14.9166665 -14.7499995 698 0 2670 --48.7500005 -48.5833335 -14.9166665 -14.7499995 559 0 2670 --48.5833335 -48.4166665 -14.9166665 -14.7499995 700 0 2670 --48.4166665 -48.2499995 -14.9166665 -14.7499995 885 0 2670 --48.2500005 -48.0833335 -14.9166665 -14.7499995 1086 0 2670 --48.0833335 -47.9166665 -14.9166665 -14.7499995 1048 0 2670 --47.9166665 -47.7499995 -14.9166665 -14.7499995 1102 0 2670 --47.7500005 -47.5833335 -14.9166665 -14.7499995 1142 0 2670 --47.5833335 -47.4166665 -14.9166665 -14.7499995 1144 0 2670 --47.4166665 -47.2499995 -14.9166665 -14.7499995 525 0 2670 --47.2500005 -47.0833335 -14.9166665 -14.7499995 484 0 2670 --47.0833335 -46.9166665 -14.9166665 -14.7499995 480 0 2670 --46.9166665 -46.7499995 -14.9166665 -14.7499995 504 0 2670 --46.7500005 -46.5833335 -14.9166665 -14.7499995 534 0 2670 --46.5833335 -46.4166665 -14.9166665 -14.7499995 972 0 2670 --46.4166665 -46.2499995 -14.9166665 -14.7499995 875 0 2670 --46.2500005 -46.0833335 -14.9166665 -14.7499995 787 0 2670 --46.0833335 -45.9166665 -14.9166665 -14.7499995 882 0 2670 --45.9166665 -45.7499995 -14.9166665 -14.7499995 812 0 2670 --45.7500005 -45.5833335 -14.9166665 -14.7499995 862 0 2670 --45.5833335 -45.4166665 -14.9166665 -14.7499995 776 0 2670 --45.4166665 -45.2499995 -14.9166665 -14.7499995 752 0 2670 --45.2500005 -45.0833335 -14.9166665 -14.7499995 800 0 2670 --45.0833335 -44.9166665 -14.9166665 -14.7499995 727 0 2670 --44.9166665 -44.7499995 -14.9166665 -14.7499995 743 0 2670 --44.7500005 -44.5833335 -14.9166665 -14.7499995 781 0 2670 --44.5833335 -44.4166665 -14.9166665 -14.7499995 782 0 2670 --44.4166665 -44.2499995 -14.9166665 -14.7499995 636 0 2670 --44.2500005 -44.0833335 -14.9166665 -14.7499995 673 0 2670 --44.0833335 -43.9166665 -14.9166665 -14.7499995 484 0 2670 --43.9166665 -43.7499995 -14.9166665 -14.7499995 467 0 2670 --43.7500005 -43.5833335 -14.9166665 -14.7499995 471 0 2670 --43.5833335 -43.4166665 -14.9166665 -14.7499995 463 0 2670 --43.4166665 -43.2499995 -14.9166665 -14.7499995 534 0 2670 --43.2500005 -43.0833335 -14.9166665 -14.7499995 525 0 2670 --43.0833335 -42.9166665 -14.9166665 -14.7499995 649 0 2670 --42.9166665 -42.7499995 -14.9166665 -14.7499995 744 0 2670 --42.7500005 -42.5833335 -14.9166665 -14.7499995 792 0 2670 --42.5833335 -42.4166665 -14.9166665 -14.7499995 1141 0 2670 --42.4166665 -42.2499995 -14.9166665 -14.7499995 788 0 2670 --42.2500005 -42.0833335 -14.9166665 -14.7499995 767 0 2670 --42.0833335 -41.9166665 -14.9166665 -14.7499995 740 0 2670 --41.9166665 -41.7499995 -14.9166665 -14.7499995 695 0 2670 --41.7500005 -41.5833335 -14.9166665 -14.7499995 618 0 2670 --41.5833335 -41.4166665 -14.9166665 -14.7499995 534 0 2670 --41.4166665 -41.2499995 -14.9166665 -14.7499995 507 0 2670 --41.2500005 -41.0833335 -14.9166665 -14.7499995 464 0 2670 --41.0833335 -40.9166665 -14.9166665 -14.7499995 842 0 2670 --40.9166665 -40.7499995 -14.9166665 -14.7499995 1031 0 2670 --40.7500005 -40.5833335 -14.9166665 -14.7499995 874 0 2670 --40.5833335 -40.4166665 -14.9166665 -14.7499995 907 0 2670 --40.4166665 -40.2499995 -14.9166665 -14.7499995 801 0 2670 --40.2500005 -40.0833335 -14.9166665 -14.7499995 452 0 2670 --40.0833335 -39.9166665 -14.9166665 -14.7499995 376 0 2670 --65.0833335 -64.9166665 -15.0833335 -14.9166665 158 0 2670 --64.9166665 -64.7499995 -15.0833335 -14.9166665 158 0 2670 --64.7500005 -64.5833335 -15.0833335 -14.9166665 160 0 2670 --64.5833335 -64.4166665 -15.0833335 -14.9166665 162 0 2670 --64.4166665 -64.2499995 -15.0833335 -14.9166665 171 0 2670 --64.2500005 -64.0833335 -15.0833335 -14.9166665 168 0 2670 --64.0833335 -63.9166665 -15.0833335 -14.9166665 188 0 2670 --63.9166665 -63.7499995 -15.0833335 -14.9166665 182 0 2670 --63.7500005 -63.5833335 -15.0833335 -14.9166665 189 0 2670 --63.5833335 -63.4166665 -15.0833335 -14.9166665 213 0 2670 --63.4166665 -63.2499995 -15.0833335 -14.9166665 222 0 2670 --63.2500005 -63.0833335 -15.0833335 -14.9166665 231 0 2670 --63.0833335 -62.9166665 -15.0833335 -14.9166665 293 0 2670 --62.9166665 -62.7499995 -15.0833335 -14.9166665 255 0 2670 --62.7500005 -62.5833335 -15.0833335 -14.9166665 226 0 2670 --62.5833335 -62.4166665 -15.0833335 -14.9166665 262 0 2670 --62.4166665 -62.2499995 -15.0833335 -14.9166665 236 0 2670 --62.2500005 -62.0833335 -15.0833335 -14.9166665 279 0 2670 --62.0833335 -61.9166665 -15.0833335 -14.9166665 252 0 2670 --61.9166665 -61.7499995 -15.0833335 -14.9166665 228 0 2670 --61.7500005 -61.5833335 -15.0833335 -14.9166665 250 0 2670 --61.5833335 -61.4166665 -15.0833335 -14.9166665 304 0 2670 --61.4166665 -61.2499995 -15.0833335 -14.9166665 238 0 2670 --61.2500005 -61.0833335 -15.0833335 -14.9166665 189 0 2670 --61.0833335 -60.9166665 -15.0833335 -14.9166665 200 0 2670 --60.9166665 -60.7499995 -15.0833335 -14.9166665 225 0 2670 --60.7500005 -60.5833335 -15.0833335 -14.9166665 206 0 2670 --60.5833335 -60.4166665 -15.0833335 -14.9166665 215 0 2670 --60.4166665 -60.2499995 -15.0833335 -14.9166665 273 0 2670 --60.2500005 -60.0833335 -15.0833335 -14.9166665 249 0 2670 --60.0833335 -59.9166665 -15.0833335 -14.9166665 232 0 2670 --59.9166665 -59.7499995 -15.0833335 -14.9166665 209 0 2670 --59.7500005 -59.5833335 -15.0833335 -14.9166665 214 0 2670 --59.5833335 -59.4166665 -15.0833335 -14.9166665 253 0 2670 --59.4166665 -59.2499995 -15.0833335 -14.9166665 248 0 2670 --59.2500005 -59.0833335 -15.0833335 -14.9166665 282 0 2670 --59.0833335 -58.9166665 -15.0833335 -14.9166665 582 0 2670 --58.9166665 -58.7499995 -15.0833335 -14.9166665 488 0 2670 --58.7500005 -58.5833335 -15.0833335 -14.9166665 561 0 2670 --58.5833335 -58.4166665 -15.0833335 -14.9166665 488 0 2670 --58.4166665 -58.2499995 -15.0833335 -14.9166665 569 0 2670 --58.2500005 -58.0833335 -15.0833335 -14.9166665 421 0 2670 --58.0833335 -57.9166665 -15.0833335 -14.9166665 231 0 2670 --57.9166665 -57.7499995 -15.0833335 -14.9166665 230 0 2670 --57.7500005 -57.5833335 -15.0833335 -14.9166665 238 0 2670 --57.5833335 -57.4166665 -15.0833335 -14.9166665 223 0 2670 --57.4166665 -57.2499995 -15.0833335 -14.9166665 192 0 2670 --57.2500005 -57.0833335 -15.0833335 -14.9166665 160 0 2670 --57.0833335 -56.9166665 -15.0833335 -14.9166665 197 0 2670 --56.9166665 -56.7499995 -15.0833335 -14.9166665 194 0 2670 --56.7500005 -56.5833335 -15.0833335 -14.9166665 239 0 2670 --56.5833335 -56.4166665 -15.0833335 -14.9166665 222 0 2670 --56.4166665 -56.2499995 -15.0833335 -14.9166665 278 0 2670 --56.2500005 -56.0833335 -15.0833335 -14.9166665 335 0 2670 --56.0833335 -55.9166665 -15.0833335 -14.9166665 332 0 2670 --55.9166665 -55.7499995 -15.0833335 -14.9166665 354 0 2670 --55.7500005 -55.5833335 -15.0833335 -14.9166665 284 0 2670 --55.5833335 -55.4166665 -15.0833335 -14.9166665 339 0 2670 --55.4166665 -55.2499995 -15.0833335 -14.9166665 577 0 2670 --55.2500005 -55.0833335 -15.0833335 -14.9166665 694 0 2670 --55.0833335 -54.9166665 -15.0833335 -14.9166665 704 0 2670 --54.9166665 -54.7499995 -15.0833335 -14.9166665 548 0 2670 --54.7500005 -54.5833335 -15.0833335 -14.9166665 729 0 2670 --54.5833335 -54.4166665 -15.0833335 -14.9166665 721 0 2670 --54.4166665 -54.2499995 -15.0833335 -14.9166665 698 0 2670 --54.2500005 -54.0833335 -15.0833335 -14.9166665 681 0 2670 --54.0833335 -53.9166665 -15.0833335 -14.9166665 670 0 2670 --53.9166665 -53.7499995 -15.0833335 -14.9166665 631 0 2670 --53.7500005 -53.5833335 -15.0833335 -14.9166665 593 0 2670 --53.5833335 -53.4166665 -15.0833335 -14.9166665 604 0 2670 --53.4166665 -53.2499995 -15.0833335 -14.9166665 530 0 2670 --53.2500005 -53.0833335 -15.0833335 -14.9166665 456 0 2670 --53.0833335 -52.9166665 -15.0833335 -14.9166665 456 0 2670 --52.9166665 -52.7499995 -15.0833335 -14.9166665 445 0 2670 --52.7500005 -52.5833335 -15.0833335 -14.9166665 510 0 2670 --52.5833335 -52.4166665 -15.0833335 -14.9166665 586 0 2670 --52.4166665 -52.2499995 -15.0833335 -14.9166665 316 0 2670 --52.2500005 -52.0833335 -15.0833335 -14.9166665 277 0 2670 --52.0833335 -51.9166665 -15.0833335 -14.9166665 281 0 2670 --51.9166665 -51.7499995 -15.0833335 -14.9166665 275 0 2670 --51.7500005 -51.5833335 -15.0833335 -14.9166665 267 0 2670 --51.5833335 -51.4166665 -15.0833335 -14.9166665 269 0 2670 --51.4166665 -51.2499995 -15.0833335 -14.9166665 264 0 2670 --51.2500005 -51.0833335 -15.0833335 -14.9166665 255 0 2670 --51.0833335 -50.9166665 -15.0833335 -14.9166665 257 0 2670 --50.9166665 -50.7499995 -15.0833335 -14.9166665 268 0 2670 --50.7500005 -50.5833335 -15.0833335 -14.9166665 290 0 2670 --50.5833335 -50.4166665 -15.0833335 -14.9166665 307 0 2670 --50.4166665 -50.2499995 -15.0833335 -14.9166665 330 0 2670 --50.2500005 -50.0833335 -15.0833335 -14.9166665 379 0 2670 --50.0833335 -49.9166665 -15.0833335 -14.9166665 561 0 2670 --49.9166665 -49.7499995 -15.0833335 -14.9166665 790 0 2670 --49.7500005 -49.5833335 -15.0833335 -14.9166665 642 0 2670 --49.5833335 -49.4166665 -15.0833335 -14.9166665 532 0 2670 --49.4166665 -49.2499995 -15.0833335 -14.9166665 508 0 2670 --49.2500005 -49.0833335 -15.0833335 -14.9166665 598 0 2670 --49.0833335 -48.9166665 -15.0833335 -14.9166665 1079 0 2670 --48.9166665 -48.7499995 -15.0833335 -14.9166665 551 0 2670 --48.7500005 -48.5833335 -15.0833335 -14.9166665 562 0 2670 --48.5833335 -48.4166665 -15.0833335 -14.9166665 843 0 2670 --48.4166665 -48.2499995 -15.0833335 -14.9166665 721 0 2670 --48.2500005 -48.0833335 -15.0833335 -14.9166665 782 0 2670 --48.0833335 -47.9166665 -15.0833335 -14.9166665 894 0 2670 --47.9166665 -47.7499995 -15.0833335 -14.9166665 877 0 2670 --47.7500005 -47.5833335 -15.0833335 -14.9166665 1078 0 2670 --47.5833335 -47.4166665 -15.0833335 -14.9166665 612 0 2670 --47.4166665 -47.2499995 -15.0833335 -14.9166665 783 0 2670 --47.2500005 -47.0833335 -15.0833335 -14.9166665 482 0 2670 --47.0833335 -46.9166665 -15.0833335 -14.9166665 524 0 2670 --46.9166665 -46.7499995 -15.0833335 -14.9166665 963 0 2670 --46.7500005 -46.5833335 -15.0833335 -14.9166665 787 0 2670 --46.5833335 -46.4166665 -15.0833335 -14.9166665 945 0 2670 --46.4166665 -46.2499995 -15.0833335 -14.9166665 926 0 2670 --46.2500005 -46.0833335 -15.0833335 -14.9166665 811 0 2670 --46.0833335 -45.9166665 -15.0833335 -14.9166665 846 0 2670 --45.9166665 -45.7499995 -15.0833335 -14.9166665 838 0 2670 --45.7500005 -45.5833335 -15.0833335 -14.9166665 733 0 2670 --45.5833335 -45.4166665 -15.0833335 -14.9166665 755 0 2670 --45.4166665 -45.2499995 -15.0833335 -14.9166665 815 0 2670 --45.2500005 -45.0833335 -15.0833335 -14.9166665 822 0 2670 --45.0833335 -44.9166665 -15.0833335 -14.9166665 737 0 2670 --44.9166665 -44.7499995 -15.0833335 -14.9166665 815 0 2670 --44.7500005 -44.5833335 -15.0833335 -14.9166665 820 0 2670 --44.5833335 -44.4166665 -15.0833335 -14.9166665 745 0 2670 --44.4166665 -44.2499995 -15.0833335 -14.9166665 740 0 2670 --44.2500005 -44.0833335 -15.0833335 -14.9166665 723 0 2670 --44.0833335 -43.9166665 -15.0833335 -14.9166665 447 0 2670 --43.9166665 -43.7499995 -15.0833335 -14.9166665 475 0 2670 --43.7500005 -43.5833335 -15.0833335 -14.9166665 476 0 2670 --43.5833335 -43.4166665 -15.0833335 -14.9166665 465 0 2670 --43.4166665 -43.2499995 -15.0833335 -14.9166665 481 0 2670 --43.2500005 -43.0833335 -15.0833335 -14.9166665 517 0 2670 --43.0833335 -42.9166665 -15.0833335 -14.9166665 898 0 2670 --42.9166665 -42.7499995 -15.0833335 -14.9166665 620 0 2670 --42.7500005 -42.5833335 -15.0833335 -14.9166665 1048 0 2670 --42.5833335 -42.4166665 -15.0833335 -14.9166665 994 0 2670 --42.4166665 -42.2499995 -15.0833335 -14.9166665 920 0 2670 --42.2500005 -42.0833335 -15.0833335 -14.9166665 809 0 2670 --42.0833335 -41.9166665 -15.0833335 -14.9166665 728 0 2670 --41.9166665 -41.7499995 -15.0833335 -14.9166665 1000 0 2670 --41.7500005 -41.5833335 -15.0833335 -14.9166665 746 0 2670 --41.5833335 -41.4166665 -15.0833335 -14.9166665 741 0 2670 --41.4166665 -41.2499995 -15.0833335 -14.9166665 588 0 2670 --41.2500005 -41.0833335 -15.0833335 -14.9166665 847 0 2670 --41.0833335 -40.9166665 -15.0833335 -14.9166665 832 0 2670 --40.9166665 -40.7499995 -15.0833335 -14.9166665 866 0 2670 --40.7500005 -40.5833335 -15.0833335 -14.9166665 658 0 2670 --40.5833335 -40.4166665 -15.0833335 -14.9166665 593 0 2670 --40.4166665 -40.2499995 -15.0833335 -14.9166665 406 0 2670 --40.2500005 -40.0833335 -15.0833335 -14.9166665 663 0 2670 --40.0833335 -39.9166665 -15.0833335 -14.9166665 410 0 2670 --65.0833335 -64.9166665 -15.2500005 -15.0833335 162 0 2670 --64.9166665 -64.7499995 -15.2500005 -15.0833335 160 0 2670 --64.7500005 -64.5833335 -15.2500005 -15.0833335 159 0 2670 --64.5833335 -64.4166665 -15.2500005 -15.0833335 162 0 2670 --64.4166665 -64.2499995 -15.2500005 -15.0833335 166 0 2670 --64.2500005 -64.0833335 -15.2500005 -15.0833335 180 0 2670 --64.0833335 -63.9166665 -15.2500005 -15.0833335 187 0 2670 --63.9166665 -63.7499995 -15.2500005 -15.0833335 186 0 2670 --63.7500005 -63.5833335 -15.2500005 -15.0833335 190 0 2670 --63.5833335 -63.4166665 -15.2500005 -15.0833335 188 0 2670 --63.4166665 -63.2499995 -15.2500005 -15.0833335 196 0 2670 --63.2500005 -63.0833335 -15.2500005 -15.0833335 213 0 2670 --63.0833335 -62.9166665 -15.2500005 -15.0833335 296 0 2670 --62.9166665 -62.7499995 -15.2500005 -15.0833335 259 0 2670 --62.7500005 -62.5833335 -15.2500005 -15.0833335 286 0 2670 --62.5833335 -62.4166665 -15.2500005 -15.0833335 236 0 2670 --62.4166665 -62.2499995 -15.2500005 -15.0833335 280 0 2670 --62.2500005 -62.0833335 -15.2500005 -15.0833335 306 0 2670 --62.0833335 -61.9166665 -15.2500005 -15.0833335 249 0 2670 --61.9166665 -61.7499995 -15.2500005 -15.0833335 263 0 2670 --61.7500005 -61.5833335 -15.2500005 -15.0833335 280 0 2670 --61.5833335 -61.4166665 -15.2500005 -15.0833335 287 0 2670 --61.4166665 -61.2499995 -15.2500005 -15.0833335 330 0 2670 --61.2500005 -61.0833335 -15.2500005 -15.0833335 234 0 2670 --61.0833335 -60.9166665 -15.2500005 -15.0833335 182 0 2670 --60.9166665 -60.7499995 -15.2500005 -15.0833335 203 0 2670 --60.7500005 -60.5833335 -15.2500005 -15.0833335 216 0 2670 --60.5833335 -60.4166665 -15.2500005 -15.0833335 196 0 2670 --60.4166665 -60.2499995 -15.2500005 -15.0833335 225 0 2670 --60.2500005 -60.0833335 -15.2500005 -15.0833335 259 0 2670 --60.0833335 -59.9166665 -15.2500005 -15.0833335 209 0 2670 --59.9166665 -59.7499995 -15.2500005 -15.0833335 211 0 2670 --59.7500005 -59.5833335 -15.2500005 -15.0833335 216 0 2670 --59.5833335 -59.4166665 -15.2500005 -15.0833335 271 0 2670 --59.4166665 -59.2499995 -15.2500005 -15.0833335 268 0 2670 --59.2500005 -59.0833335 -15.2500005 -15.0833335 352 0 2670 --59.0833335 -58.9166665 -15.2500005 -15.0833335 358 0 2670 --58.9166665 -58.7499995 -15.2500005 -15.0833335 524 0 2670 --58.7500005 -58.5833335 -15.2500005 -15.0833335 493 0 2670 --58.5833335 -58.4166665 -15.2500005 -15.0833335 511 0 2670 --58.4166665 -58.2499995 -15.2500005 -15.0833335 296 0 2670 --58.2500005 -58.0833335 -15.2500005 -15.0833335 310 0 2670 --58.0833335 -57.9166665 -15.2500005 -15.0833335 407 0 2670 --57.9166665 -57.7499995 -15.2500005 -15.0833335 217 0 2670 --57.7500005 -57.5833335 -15.2500005 -15.0833335 183 0 2670 --57.5833335 -57.4166665 -15.2500005 -15.0833335 201 0 2670 --57.4166665 -57.2499995 -15.2500005 -15.0833335 198 0 2670 --57.2500005 -57.0833335 -15.2500005 -15.0833335 155 0 2670 --57.0833335 -56.9166665 -15.2500005 -15.0833335 192 0 2670 --56.9166665 -56.7499995 -15.2500005 -15.0833335 303 0 2670 --56.7500005 -56.5833335 -15.2500005 -15.0833335 269 0 2670 --56.5833335 -56.4166665 -15.2500005 -15.0833335 250 0 2670 --56.4166665 -56.2499995 -15.2500005 -15.0833335 205 0 2670 --56.2500005 -56.0833335 -15.2500005 -15.0833335 309 0 2670 --56.0833335 -55.9166665 -15.2500005 -15.0833335 348 0 2670 --55.9166665 -55.7499995 -15.2500005 -15.0833335 441 0 2670 --55.7500005 -55.5833335 -15.2500005 -15.0833335 322 0 2670 --55.5833335 -55.4166665 -15.2500005 -15.0833335 330 0 2670 --55.4166665 -55.2499995 -15.2500005 -15.0833335 463 0 2670 --55.2500005 -55.0833335 -15.2500005 -15.0833335 701 0 2670 --55.0833335 -54.9166665 -15.2500005 -15.0833335 775 0 2670 --54.9166665 -54.7499995 -15.2500005 -15.0833335 710 0 2670 --54.7500005 -54.5833335 -15.2500005 -15.0833335 632 0 2670 --54.5833335 -54.4166665 -15.2500005 -15.0833335 711 0 2670 --54.4166665 -54.2499995 -15.2500005 -15.0833335 617 0 2670 --54.2500005 -54.0833335 -15.2500005 -15.0833335 611 0 2670 --54.0833335 -53.9166665 -15.2500005 -15.0833335 594 0 2670 --53.9166665 -53.7499995 -15.2500005 -15.0833335 554 0 2670 --53.7500005 -53.5833335 -15.2500005 -15.0833335 556 0 2670 --53.5833335 -53.4166665 -15.2500005 -15.0833335 525 0 2670 --53.4166665 -53.2499995 -15.2500005 -15.0833335 554 0 2670 --53.2500005 -53.0833335 -15.2500005 -15.0833335 380 0 2670 --53.0833335 -52.9166665 -15.2500005 -15.0833335 450 0 2670 --52.9166665 -52.7499995 -15.2500005 -15.0833335 399 0 2670 --52.7500005 -52.5833335 -15.2500005 -15.0833335 587 0 2670 --52.5833335 -52.4166665 -15.2500005 -15.0833335 694 0 2670 --52.4166665 -52.2499995 -15.2500005 -15.0833335 490 0 2670 --52.2500005 -52.0833335 -15.2500005 -15.0833335 307 0 2670 --52.0833335 -51.9166665 -15.2500005 -15.0833335 288 0 2670 --51.9166665 -51.7499995 -15.2500005 -15.0833335 276 0 2670 --51.7500005 -51.5833335 -15.2500005 -15.0833335 272 0 2670 --51.5833335 -51.4166665 -15.2500005 -15.0833335 268 0 2670 --51.4166665 -51.2499995 -15.2500005 -15.0833335 276 0 2670 --51.2500005 -51.0833335 -15.2500005 -15.0833335 255 0 2670 --51.0833335 -50.9166665 -15.2500005 -15.0833335 271 0 2670 --50.9166665 -50.7499995 -15.2500005 -15.0833335 347 0 2670 --50.7500005 -50.5833335 -15.2500005 -15.0833335 299 0 2670 --50.5833335 -50.4166665 -15.2500005 -15.0833335 331 0 2670 --50.4166665 -50.2499995 -15.2500005 -15.0833335 378 0 2670 --50.2500005 -50.0833335 -15.2500005 -15.0833335 437 0 2670 --50.0833335 -49.9166665 -15.2500005 -15.0833335 742 0 2670 --49.9166665 -49.7499995 -15.2500005 -15.0833335 663 0 2670 --49.7500005 -49.5833335 -15.2500005 -15.0833335 579 0 2670 --49.5833335 -49.4166665 -15.2500005 -15.0833335 533 0 2670 --49.4166665 -49.2499995 -15.2500005 -15.0833335 616 0 2670 --49.2500005 -49.0833335 -15.2500005 -15.0833335 734 0 2670 --49.0833335 -48.9166665 -15.2500005 -15.0833335 761 0 2670 --48.9166665 -48.7499995 -15.2500005 -15.0833335 612 0 2670 --48.7500005 -48.5833335 -15.2500005 -15.0833335 651 0 2670 --48.5833335 -48.4166665 -15.2500005 -15.0833335 611 0 2670 --48.4166665 -48.2499995 -15.2500005 -15.0833335 612 0 2670 --48.2500005 -48.0833335 -15.2500005 -15.0833335 684 0 2670 --48.0833335 -47.9166665 -15.2500005 -15.0833335 736 0 2670 --47.9166665 -47.7499995 -15.2500005 -15.0833335 908 0 2670 --47.7500005 -47.5833335 -15.2500005 -15.0833335 998 0 2670 --47.5833335 -47.4166665 -15.2500005 -15.0833335 698 0 2670 --47.4166665 -47.2499995 -15.2500005 -15.0833335 814 0 2670 --47.2500005 -47.0833335 -15.2500005 -15.0833335 527 0 2670 --47.0833335 -46.9166665 -15.2500005 -15.0833335 537 0 2670 --46.9166665 -46.7499995 -15.2500005 -15.0833335 936 0 2670 --46.7500005 -46.5833335 -15.2500005 -15.0833335 961 0 2670 --46.5833335 -46.4166665 -15.2500005 -15.0833335 942 0 2670 --46.4166665 -46.2499995 -15.2500005 -15.0833335 961 0 2670 --46.2500005 -46.0833335 -15.2500005 -15.0833335 803 0 2670 --46.0833335 -45.9166665 -15.2500005 -15.0833335 782 0 2670 --45.9166665 -45.7499995 -15.2500005 -15.0833335 773 0 2670 --45.7500005 -45.5833335 -15.2500005 -15.0833335 785 0 2670 --45.5833335 -45.4166665 -15.2500005 -15.0833335 781 0 2670 --45.4166665 -45.2499995 -15.2500005 -15.0833335 792 0 2670 --45.2500005 -45.0833335 -15.2500005 -15.0833335 733 0 2670 --45.0833335 -44.9166665 -15.2500005 -15.0833335 682 0 2670 --44.9166665 -44.7499995 -15.2500005 -15.0833335 663 0 2670 --44.7500005 -44.5833335 -15.2500005 -15.0833335 716 0 2670 --44.5833335 -44.4166665 -15.2500005 -15.0833335 817 0 2670 --44.4166665 -44.2499995 -15.2500005 -15.0833335 754 0 2670 --44.2500005 -44.0833335 -15.2500005 -15.0833335 471 0 2670 --44.0833335 -43.9166665 -15.2500005 -15.0833335 465 0 2670 --43.9166665 -43.7499995 -15.2500005 -15.0833335 475 0 2670 --43.7500005 -43.5833335 -15.2500005 -15.0833335 468 0 2670 --43.5833335 -43.4166665 -15.2500005 -15.0833335 485 0 2670 --43.4166665 -43.2499995 -15.2500005 -15.0833335 476 0 2670 --43.2500005 -43.0833335 -15.2500005 -15.0833335 501 0 2670 --43.0833335 -42.9166665 -15.2500005 -15.0833335 1015 0 2670 --42.9166665 -42.7499995 -15.2500005 -15.0833335 687 0 2670 --42.7500005 -42.5833335 -15.2500005 -15.0833335 984 0 2670 --42.5833335 -42.4166665 -15.2500005 -15.0833335 929 0 2670 --42.4166665 -42.2499995 -15.2500005 -15.0833335 996 0 2670 --42.2500005 -42.0833335 -15.2500005 -15.0833335 939 0 2670 --42.0833335 -41.9166665 -15.2500005 -15.0833335 1056 0 2670 --41.9166665 -41.7499995 -15.2500005 -15.0833335 895 0 2670 --41.7500005 -41.5833335 -15.2500005 -15.0833335 885 0 2670 --41.5833335 -41.4166665 -15.2500005 -15.0833335 890 0 2670 --41.4166665 -41.2499995 -15.2500005 -15.0833335 821 0 2670 --41.2500005 -41.0833335 -15.2500005 -15.0833335 844 0 2670 --41.0833335 -40.9166665 -15.2500005 -15.0833335 788 0 2670 --40.9166665 -40.7499995 -15.2500005 -15.0833335 810 0 2670 --40.7500005 -40.5833335 -15.2500005 -15.0833335 364 0 2670 --40.5833335 -40.4166665 -15.2500005 -15.0833335 365 0 2670 --40.4166665 -40.2499995 -15.2500005 -15.0833335 289 0 2670 --40.2500005 -40.0833335 -15.2500005 -15.0833335 500 0 2670 --40.0833335 -39.9166665 -15.2500005 -15.0833335 276 0 2670 --65.0833335 -64.9166665 -15.4166665 -15.2499995 170 0 2670 --64.9166665 -64.7499995 -15.4166665 -15.2499995 164 0 2670 --64.7500005 -64.5833335 -15.4166665 -15.2499995 164 0 2670 --64.5833335 -64.4166665 -15.4166665 -15.2499995 167 0 2670 --64.4166665 -64.2499995 -15.4166665 -15.2499995 168 0 2670 --64.2500005 -64.0833335 -15.4166665 -15.2499995 173 0 2670 --64.0833335 -63.9166665 -15.4166665 -15.2499995 183 0 2670 --63.9166665 -63.7499995 -15.4166665 -15.2499995 191 0 2670 --63.7500005 -63.5833335 -15.4166665 -15.2499995 182 0 2670 --63.5833335 -63.4166665 -15.4166665 -15.2499995 196 0 2670 --63.4166665 -63.2499995 -15.4166665 -15.2499995 192 0 2670 --63.2500005 -63.0833335 -15.4166665 -15.2499995 220 0 2670 --63.0833335 -62.9166665 -15.4166665 -15.2499995 308 0 2670 --62.9166665 -62.7499995 -15.4166665 -15.2499995 309 0 2670 --62.7500005 -62.5833335 -15.4166665 -15.2499995 350 0 2670 --62.5833335 -62.4166665 -15.4166665 -15.2499995 306 0 2670 --62.4166665 -62.2499995 -15.4166665 -15.2499995 257 0 2670 --62.2500005 -62.0833335 -15.4166665 -15.2499995 290 0 2670 --62.0833335 -61.9166665 -15.4166665 -15.2499995 295 0 2670 --61.9166665 -61.7499995 -15.4166665 -15.2499995 281 0 2670 --61.7500005 -61.5833335 -15.4166665 -15.2499995 291 0 2670 --61.5833335 -61.4166665 -15.4166665 -15.2499995 285 0 2670 --61.4166665 -61.2499995 -15.4166665 -15.2499995 312 0 2670 --61.2500005 -61.0833335 -15.4166665 -15.2499995 251 0 2670 --61.0833335 -60.9166665 -15.4166665 -15.2499995 232 0 2670 --60.9166665 -60.7499995 -15.4166665 -15.2499995 201 0 2670 --60.7500005 -60.5833335 -15.4166665 -15.2499995 226 0 2670 --60.5833335 -60.4166665 -15.4166665 -15.2499995 195 0 2670 --60.4166665 -60.2499995 -15.4166665 -15.2499995 227 0 2670 --60.2500005 -60.0833335 -15.4166665 -15.2499995 221 0 2670 --60.0833335 -59.9166665 -15.4166665 -15.2499995 203 0 2670 --59.9166665 -59.7499995 -15.4166665 -15.2499995 209 0 2670 --59.7500005 -59.5833335 -15.4166665 -15.2499995 222 0 2670 --59.5833335 -59.4166665 -15.4166665 -15.2499995 232 0 2670 --59.4166665 -59.2499995 -15.4166665 -15.2499995 336 0 2670 --59.2500005 -59.0833335 -15.4166665 -15.2499995 329 0 2670 --59.0833335 -58.9166665 -15.4166665 -15.2499995 363 0 2670 --58.9166665 -58.7499995 -15.4166665 -15.2499995 427 0 2670 --58.7500005 -58.5833335 -15.4166665 -15.2499995 207 0 2670 --58.5833335 -58.4166665 -15.4166665 -15.2499995 357 0 2670 --58.4166665 -58.2499995 -15.4166665 -15.2499995 238 0 2670 --58.2500005 -58.0833335 -15.4166665 -15.2499995 435 0 2670 --58.0833335 -57.9166665 -15.4166665 -15.2499995 180 0 2670 --57.9166665 -57.7499995 -15.4166665 -15.2499995 205 0 2670 --57.7500005 -57.5833335 -15.4166665 -15.2499995 201 0 2670 --57.5833335 -57.4166665 -15.4166665 -15.2499995 177 0 2670 --57.4166665 -57.2499995 -15.4166665 -15.2499995 182 0 2670 --57.2500005 -57.0833335 -15.4166665 -15.2499995 161 0 2670 --57.0833335 -56.9166665 -15.4166665 -15.2499995 221 0 2670 --56.9166665 -56.7499995 -15.4166665 -15.2499995 477 0 2670 --56.7500005 -56.5833335 -15.4166665 -15.2499995 275 0 2670 --56.5833335 -56.4166665 -15.4166665 -15.2499995 255 0 2670 --56.4166665 -56.2499995 -15.4166665 -15.2499995 220 0 2670 --56.2500005 -56.0833335 -15.4166665 -15.2499995 218 0 2670 --56.0833335 -55.9166665 -15.4166665 -15.2499995 276 0 2670 --55.9166665 -55.7499995 -15.4166665 -15.2499995 376 0 2670 --55.7500005 -55.5833335 -15.4166665 -15.2499995 575 0 2670 --55.5833335 -55.4166665 -15.4166665 -15.2499995 433 0 2670 --55.4166665 -55.2499995 -15.4166665 -15.2499995 572 0 2670 --55.2500005 -55.0833335 -15.4166665 -15.2499995 710 0 2670 --55.0833335 -54.9166665 -15.4166665 -15.2499995 635 0 2670 --54.9166665 -54.7499995 -15.4166665 -15.2499995 651 0 2670 --54.7500005 -54.5833335 -15.4166665 -15.2499995 644 0 2670 --54.5833335 -54.4166665 -15.4166665 -15.2499995 689 0 2670 --54.4166665 -54.2499995 -15.4166665 -15.2499995 574 0 2670 --54.2500005 -54.0833335 -15.4166665 -15.2499995 573 0 2670 --54.0833335 -53.9166665 -15.4166665 -15.2499995 557 0 2670 --53.9166665 -53.7499995 -15.4166665 -15.2499995 547 0 2670 --53.7500005 -53.5833335 -15.4166665 -15.2499995 522 0 2670 --53.5833335 -53.4166665 -15.4166665 -15.2499995 530 0 2670 --53.4166665 -53.2499995 -15.4166665 -15.2499995 461 0 2670 --53.2500005 -53.0833335 -15.4166665 -15.2499995 440 0 2670 --53.0833335 -52.9166665 -15.4166665 -15.2499995 388 0 2670 --52.9166665 -52.7499995 -15.4166665 -15.2499995 392 0 2670 --52.7500005 -52.5833335 -15.4166665 -15.2499995 670 0 2670 --52.5833335 -52.4166665 -15.4166665 -15.2499995 806 0 2670 --52.4166665 -52.2499995 -15.4166665 -15.2499995 775 0 2670 --52.2500005 -52.0833335 -15.4166665 -15.2499995 350 0 2670 --52.0833335 -51.9166665 -15.4166665 -15.2499995 296 0 2670 --51.9166665 -51.7499995 -15.4166665 -15.2499995 278 0 2670 --51.7500005 -51.5833335 -15.4166665 -15.2499995 286 0 2670 --51.5833335 -51.4166665 -15.4166665 -15.2499995 286 0 2670 --51.4166665 -51.2499995 -15.4166665 -15.2499995 280 0 2670 --51.2500005 -51.0833335 -15.4166665 -15.2499995 259 0 2670 --51.0833335 -50.9166665 -15.4166665 -15.2499995 271 0 2670 --50.9166665 -50.7499995 -15.4166665 -15.2499995 343 0 2670 --50.7500005 -50.5833335 -15.4166665 -15.2499995 344 0 2670 --50.5833335 -50.4166665 -15.4166665 -15.2499995 315 0 2670 --50.4166665 -50.2499995 -15.4166665 -15.2499995 398 0 2670 --50.2500005 -50.0833335 -15.4166665 -15.2499995 470 0 2670 --50.0833335 -49.9166665 -15.4166665 -15.2499995 666 0 2670 --49.9166665 -49.7499995 -15.4166665 -15.2499995 605 0 2670 --49.7500005 -49.5833335 -15.4166665 -15.2499995 624 0 2670 --49.5833335 -49.4166665 -15.4166665 -15.2499995 704 0 2670 --49.4166665 -49.2499995 -15.4166665 -15.2499995 568 0 2670 --49.2500005 -49.0833335 -15.4166665 -15.2499995 621 0 2670 --49.0833335 -48.9166665 -15.4166665 -15.2499995 653 0 2670 --48.9166665 -48.7499995 -15.4166665 -15.2499995 652 0 2670 --48.7500005 -48.5833335 -15.4166665 -15.2499995 682 0 2670 --48.5833335 -48.4166665 -15.4166665 -15.2499995 691 0 2670 --48.4166665 -48.2499995 -15.4166665 -15.2499995 774 0 2670 --48.2500005 -48.0833335 -15.4166665 -15.2499995 729 0 2670 --48.0833335 -47.9166665 -15.4166665 -15.2499995 776 0 2670 --47.9166665 -47.7499995 -15.4166665 -15.2499995 930 0 2670 --47.7500005 -47.5833335 -15.4166665 -15.2499995 984 0 2670 --47.5833335 -47.4166665 -15.4166665 -15.2499995 1110 0 2670 --47.4166665 -47.2499995 -15.4166665 -15.2499995 778 0 2670 --47.2500005 -47.0833335 -15.4166665 -15.2499995 930 0 2670 --47.0833335 -46.9166665 -15.4166665 -15.2499995 805 0 2670 --46.9166665 -46.7499995 -15.4166665 -15.2499995 1002 0 2670 --46.7500005 -46.5833335 -15.4166665 -15.2499995 948 0 2670 --46.5833335 -46.4166665 -15.4166665 -15.2499995 927 0 2670 --46.4166665 -46.2499995 -15.4166665 -15.2499995 555 0 2670 --46.2500005 -46.0833335 -15.4166665 -15.2499995 734 0 2670 --46.0833335 -45.9166665 -15.4166665 -15.2499995 844 0 2670 --45.9166665 -45.7499995 -15.4166665 -15.2499995 787 0 2670 --45.7500005 -45.5833335 -15.4166665 -15.2499995 859 0 2670 --45.5833335 -45.4166665 -15.4166665 -15.2499995 708 0 2670 --45.4166665 -45.2499995 -15.4166665 -15.2499995 633 0 2670 --45.2500005 -45.0833335 -15.4166665 -15.2499995 675 0 2670 --45.0833335 -44.9166665 -15.4166665 -15.2499995 586 0 2670 --44.9166665 -44.7499995 -15.4166665 -15.2499995 601 0 2670 --44.7500005 -44.5833335 -15.4166665 -15.2499995 651 0 2670 --44.5833335 -44.4166665 -15.4166665 -15.2499995 669 0 2670 --44.4166665 -44.2499995 -15.4166665 -15.2499995 613 0 2670 --44.2500005 -44.0833335 -15.4166665 -15.2499995 450 0 2670 --44.0833335 -43.9166665 -15.4166665 -15.2499995 497 0 2670 --43.9166665 -43.7499995 -15.4166665 -15.2499995 533 0 2670 --43.7500005 -43.5833335 -15.4166665 -15.2499995 474 0 2670 --43.5833335 -43.4166665 -15.4166665 -15.2499995 491 0 2670 --43.4166665 -43.2499995 -15.4166665 -15.2499995 488 0 2670 --43.2500005 -43.0833335 -15.4166665 -15.2499995 483 0 2670 --43.0833335 -42.9166665 -15.4166665 -15.2499995 501 0 2670 --42.9166665 -42.7499995 -15.4166665 -15.2499995 571 0 2670 --42.7500005 -42.5833335 -15.4166665 -15.2499995 962 0 2670 --42.5833335 -42.4166665 -15.4166665 -15.2499995 874 0 2670 --42.4166665 -42.2499995 -15.4166665 -15.2499995 986 0 2670 --42.2500005 -42.0833335 -15.4166665 -15.2499995 860 0 2670 --42.0833335 -41.9166665 -15.4166665 -15.2499995 861 0 2670 --41.9166665 -41.7499995 -15.4166665 -15.2499995 903 0 2670 --41.7500005 -41.5833335 -15.4166665 -15.2499995 934 0 2670 --41.5833335 -41.4166665 -15.4166665 -15.2499995 821 0 2670 --41.4166665 -41.2499995 -15.4166665 -15.2499995 830 0 2670 --41.2500005 -41.0833335 -15.4166665 -15.2499995 743 0 2670 --41.0833335 -40.9166665 -15.4166665 -15.2499995 813 0 2670 --40.9166665 -40.7499995 -15.4166665 -15.2499995 613 0 2670 --40.7500005 -40.5833335 -15.4166665 -15.2499995 502 0 2670 --40.5833335 -40.4166665 -15.4166665 -15.2499995 406 0 2670 --40.4166665 -40.2499995 -15.4166665 -15.2499995 309 0 2670 --40.2500005 -40.0833335 -15.4166665 -15.2499995 247 0 2670 --40.0833335 -39.9166665 -15.4166665 -15.2499995 210 0 2670 --65.0833335 -64.9166665 -15.5833335 -15.4166665 163 0 2670 --64.9166665 -64.7499995 -15.5833335 -15.4166665 171 0 2670 --64.7500005 -64.5833335 -15.5833335 -15.4166665 174 0 2670 --64.5833335 -64.4166665 -15.5833335 -15.4166665 171 0 2670 --64.4166665 -64.2499995 -15.5833335 -15.4166665 171 0 2670 --64.2500005 -64.0833335 -15.5833335 -15.4166665 174 0 2670 --64.0833335 -63.9166665 -15.5833335 -15.4166665 179 0 2670 --63.9166665 -63.7499995 -15.5833335 -15.4166665 184 0 2670 --63.7500005 -63.5833335 -15.5833335 -15.4166665 192 0 2670 --63.5833335 -63.4166665 -15.5833335 -15.4166665 202 0 2670 --63.4166665 -63.2499995 -15.5833335 -15.4166665 202 0 2670 --63.2500005 -63.0833335 -15.5833335 -15.4166665 197 0 2670 --63.0833335 -62.9166665 -15.5833335 -15.4166665 204 0 2670 --62.9166665 -62.7499995 -15.5833335 -15.4166665 251 0 2670 --62.7500005 -62.5833335 -15.5833335 -15.4166665 288 0 2670 --62.5833335 -62.4166665 -15.5833335 -15.4166665 344 0 2670 --62.4166665 -62.2499995 -15.5833335 -15.4166665 319 0 2670 --62.2500005 -62.0833335 -15.5833335 -15.4166665 305 0 2670 --62.0833335 -61.9166665 -15.5833335 -15.4166665 388 0 2670 --61.9166665 -61.7499995 -15.5833335 -15.4166665 359 0 2670 --61.7500005 -61.5833335 -15.5833335 -15.4166665 362 0 2670 --61.5833335 -61.4166665 -15.5833335 -15.4166665 282 0 2670 --61.4166665 -61.2499995 -15.5833335 -15.4166665 318 0 2670 --61.2500005 -61.0833335 -15.5833335 -15.4166665 278 0 2670 --61.0833335 -60.9166665 -15.5833335 -15.4166665 227 0 2670 --60.9166665 -60.7499995 -15.5833335 -15.4166665 220 0 2670 --60.7500005 -60.5833335 -15.5833335 -15.4166665 335 0 2670 --60.5833335 -60.4166665 -15.5833335 -15.4166665 235 0 2670 --60.4166665 -60.2499995 -15.5833335 -15.4166665 227 0 2670 --60.2500005 -60.0833335 -15.5833335 -15.4166665 210 0 2670 --60.0833335 -59.9166665 -15.5833335 -15.4166665 200 0 2670 --59.9166665 -59.7499995 -15.5833335 -15.4166665 209 0 2670 --59.7500005 -59.5833335 -15.5833335 -15.4166665 220 0 2670 --59.5833335 -59.4166665 -15.5833335 -15.4166665 245 0 2670 --59.4166665 -59.2499995 -15.5833335 -15.4166665 236 0 2670 --59.2500005 -59.0833335 -15.5833335 -15.4166665 343 0 2670 --59.0833335 -58.9166665 -15.5833335 -15.4166665 338 0 2670 --58.9166665 -58.7499995 -15.5833335 -15.4166665 316 0 2670 --58.7500005 -58.5833335 -15.5833335 -15.4166665 264 0 2670 --58.5833335 -58.4166665 -15.5833335 -15.4166665 215 0 2670 --58.4166665 -58.2499995 -15.5833335 -15.4166665 208 0 2670 --58.2500005 -58.0833335 -15.5833335 -15.4166665 194 0 2670 --58.0833335 -57.9166665 -15.5833335 -15.4166665 184 0 2670 --57.9166665 -57.7499995 -15.5833335 -15.4166665 150 0 2670 --57.7500005 -57.5833335 -15.5833335 -15.4166665 177 0 2670 --57.5833335 -57.4166665 -15.5833335 -15.4166665 159 0 2670 --57.4166665 -57.2499995 -15.5833335 -15.4166665 147 0 2670 --57.2500005 -57.0833335 -15.5833335 -15.4166665 203 0 2670 --57.0833335 -56.9166665 -15.5833335 -15.4166665 381 0 2670 --56.9166665 -56.7499995 -15.5833335 -15.4166665 317 0 2670 --56.7500005 -56.5833335 -15.5833335 -15.4166665 272 0 2670 --56.5833335 -56.4166665 -15.5833335 -15.4166665 230 0 2670 --56.4166665 -56.2499995 -15.5833335 -15.4166665 189 0 2670 --56.2500005 -56.0833335 -15.5833335 -15.4166665 169 0 2670 --56.0833335 -55.9166665 -15.5833335 -15.4166665 215 0 2670 --55.9166665 -55.7499995 -15.5833335 -15.4166665 343 0 2670 --55.7500005 -55.5833335 -15.5833335 -15.4166665 368 0 2670 --55.5833335 -55.4166665 -15.5833335 -15.4166665 726 0 2670 --55.4166665 -55.2499995 -15.5833335 -15.4166665 735 0 2670 --55.2500005 -55.0833335 -15.5833335 -15.4166665 701 0 2670 --55.0833335 -54.9166665 -15.5833335 -15.4166665 654 0 2670 --54.9166665 -54.7499995 -15.5833335 -15.4166665 668 0 2670 --54.7500005 -54.5833335 -15.5833335 -15.4166665 622 0 2670 --54.5833335 -54.4166665 -15.5833335 -15.4166665 644 0 2670 --54.4166665 -54.2499995 -15.5833335 -15.4166665 610 0 2670 --54.2500005 -54.0833335 -15.5833335 -15.4166665 625 0 2670 --54.0833335 -53.9166665 -15.5833335 -15.4166665 587 0 2670 --53.9166665 -53.7499995 -15.5833335 -15.4166665 594 0 2670 --53.7500005 -53.5833335 -15.5833335 -15.4166665 582 0 2670 --53.5833335 -53.4166665 -15.5833335 -15.4166665 568 0 2670 --53.4166665 -53.2499995 -15.5833335 -15.4166665 476 0 2670 --53.2500005 -53.0833335 -15.5833335 -15.4166665 513 0 2670 --53.0833335 -52.9166665 -15.5833335 -15.4166665 445 0 2670 --52.9166665 -52.7499995 -15.5833335 -15.4166665 467 0 2670 --52.7500005 -52.5833335 -15.5833335 -15.4166665 462 0 2670 --52.5833335 -52.4166665 -15.5833335 -15.4166665 687 0 2670 --52.4166665 -52.2499995 -15.5833335 -15.4166665 391 0 2670 --52.2500005 -52.0833335 -15.5833335 -15.4166665 318 0 2670 --52.0833335 -51.9166665 -15.5833335 -15.4166665 309 0 2670 --51.9166665 -51.7499995 -15.5833335 -15.4166665 300 0 2670 --51.7500005 -51.5833335 -15.5833335 -15.4166665 280 0 2670 --51.5833335 -51.4166665 -15.5833335 -15.4166665 294 0 2670 --51.4166665 -51.2499995 -15.5833335 -15.4166665 286 0 2670 --51.2500005 -51.0833335 -15.5833335 -15.4166665 284 0 2670 --51.0833335 -50.9166665 -15.5833335 -15.4166665 287 0 2670 --50.9166665 -50.7499995 -15.5833335 -15.4166665 287 0 2670 --50.7500005 -50.5833335 -15.5833335 -15.4166665 338 0 2670 --50.5833335 -50.4166665 -15.5833335 -15.4166665 425 0 2670 --50.4166665 -50.2499995 -15.5833335 -15.4166665 418 0 2670 --50.2500005 -50.0833335 -15.5833335 -15.4166665 678 0 2670 --50.0833335 -49.9166665 -15.5833335 -15.4166665 734 0 2670 --49.9166665 -49.7499995 -15.5833335 -15.4166665 734 0 2670 --49.7500005 -49.5833335 -15.5833335 -15.4166665 611 0 2670 --49.5833335 -49.4166665 -15.5833335 -15.4166665 585 0 2670 --49.4166665 -49.2499995 -15.5833335 -15.4166665 751 0 2670 --49.2500005 -49.0833335 -15.5833335 -15.4166665 628 0 2670 --49.0833335 -48.9166665 -15.5833335 -15.4166665 767 0 2670 --48.9166665 -48.7499995 -15.5833335 -15.4166665 856 0 2670 --48.7500005 -48.5833335 -15.5833335 -15.4166665 674 0 2670 --48.5833335 -48.4166665 -15.5833335 -15.4166665 693 0 2670 --48.4166665 -48.2499995 -15.5833335 -15.4166665 740 0 2670 --48.2500005 -48.0833335 -15.5833335 -15.4166665 894 0 2670 --48.0833335 -47.9166665 -15.5833335 -15.4166665 854 0 2670 --47.9166665 -47.7499995 -15.5833335 -15.4166665 751 0 2670 --47.7500005 -47.5833335 -15.5833335 -15.4166665 932 0 2670 --47.5833335 -47.4166665 -15.5833335 -15.4166665 1129 0 2670 --47.4166665 -47.2499995 -15.5833335 -15.4166665 847 0 2670 --47.2500005 -47.0833335 -15.5833335 -15.4166665 1007 0 2670 --47.0833335 -46.9166665 -15.5833335 -15.4166665 873 0 2670 --46.9166665 -46.7499995 -15.5833335 -15.4166665 757 0 2670 --46.7500005 -46.5833335 -15.5833335 -15.4166665 833 0 2670 --46.5833335 -46.4166665 -15.5833335 -15.4166665 940 0 2670 --46.4166665 -46.2499995 -15.5833335 -15.4166665 593 0 2670 --46.2500005 -46.0833335 -15.5833335 -15.4166665 711 0 2670 --46.0833335 -45.9166665 -15.5833335 -15.4166665 723 0 2670 --45.9166665 -45.7499995 -15.5833335 -15.4166665 803 0 2670 --45.7500005 -45.5833335 -15.5833335 -15.4166665 704 0 2670 --45.5833335 -45.4166665 -15.5833335 -15.4166665 694 0 2670 --45.4166665 -45.2499995 -15.5833335 -15.4166665 638 0 2670 --45.2500005 -45.0833335 -15.5833335 -15.4166665 593 0 2670 --45.0833335 -44.9166665 -15.5833335 -15.4166665 613 0 2670 --44.9166665 -44.7499995 -15.5833335 -15.4166665 593 0 2670 --44.7500005 -44.5833335 -15.5833335 -15.4166665 608 0 2670 --44.5833335 -44.4166665 -15.5833335 -15.4166665 562 0 2670 --44.4166665 -44.2499995 -15.5833335 -15.4166665 456 0 2670 --44.2500005 -44.0833335 -15.5833335 -15.4166665 486 0 2670 --44.0833335 -43.9166665 -15.5833335 -15.4166665 748 0 2670 --43.9166665 -43.7499995 -15.5833335 -15.4166665 579 0 2670 --43.7500005 -43.5833335 -15.5833335 -15.4166665 480 0 2670 --43.5833335 -43.4166665 -15.5833335 -15.4166665 530 0 2670 --43.4166665 -43.2499995 -15.5833335 -15.4166665 508 0 2670 --43.2500005 -43.0833335 -15.5833335 -15.4166665 518 0 2670 --43.0833335 -42.9166665 -15.5833335 -15.4166665 525 0 2670 --42.9166665 -42.7499995 -15.5833335 -15.4166665 740 0 2670 --42.7500005 -42.5833335 -15.5833335 -15.4166665 947 0 2670 --42.5833335 -42.4166665 -15.5833335 -15.4166665 926 0 2670 --42.4166665 -42.2499995 -15.5833335 -15.4166665 921 0 2670 --42.2500005 -42.0833335 -15.5833335 -15.4166665 961 0 2670 --42.0833335 -41.9166665 -15.5833335 -15.4166665 760 0 2670 --41.9166665 -41.7499995 -15.5833335 -15.4166665 775 0 2670 --41.7500005 -41.5833335 -15.5833335 -15.4166665 729 0 2670 --41.5833335 -41.4166665 -15.5833335 -15.4166665 767 0 2670 --41.4166665 -41.2499995 -15.5833335 -15.4166665 683 0 2670 --41.2500005 -41.0833335 -15.5833335 -15.4166665 729 0 2670 --41.0833335 -40.9166665 -15.5833335 -15.4166665 763 0 2670 --40.9166665 -40.7499995 -15.5833335 -15.4166665 819 0 2670 --40.7500005 -40.5833335 -15.5833335 -15.4166665 785 0 2670 --40.5833335 -40.4166665 -15.5833335 -15.4166665 348 0 2670 --40.4166665 -40.2499995 -15.5833335 -15.4166665 304 0 2670 --40.2500005 -40.0833335 -15.5833335 -15.4166665 418 0 2670 --40.0833335 -39.9166665 -15.5833335 -15.4166665 238 0 2670 --65.0833335 -64.9166665 -15.7500005 -15.5833335 165 0 2670 --64.9166665 -64.7499995 -15.7500005 -15.5833335 167 0 2670 --64.7500005 -64.5833335 -15.7500005 -15.5833335 180 0 2670 --64.5833335 -64.4166665 -15.7500005 -15.5833335 178 0 2670 --64.4166665 -64.2499995 -15.7500005 -15.5833335 187 0 2670 --64.2500005 -64.0833335 -15.7500005 -15.5833335 182 0 2670 --64.0833335 -63.9166665 -15.7500005 -15.5833335 178 0 2670 --63.9166665 -63.7499995 -15.7500005 -15.5833335 187 0 2670 --63.7500005 -63.5833335 -15.7500005 -15.5833335 202 0 2670 --63.5833335 -63.4166665 -15.7500005 -15.5833335 199 0 2670 --63.4166665 -63.2499995 -15.7500005 -15.5833335 208 0 2670 --63.2500005 -63.0833335 -15.7500005 -15.5833335 190 0 2670 --63.0833335 -62.9166665 -15.7500005 -15.5833335 236 0 2670 --62.9166665 -62.7499995 -15.7500005 -15.5833335 304 0 2670 --62.7500005 -62.5833335 -15.7500005 -15.5833335 372 0 2670 --62.5833335 -62.4166665 -15.7500005 -15.5833335 517 0 2670 --62.4166665 -62.2499995 -15.7500005 -15.5833335 390 0 2670 --62.2500005 -62.0833335 -15.7500005 -15.5833335 342 0 2670 --62.0833335 -61.9166665 -15.7500005 -15.5833335 341 0 2670 --61.9166665 -61.7499995 -15.7500005 -15.5833335 418 0 2670 --61.7500005 -61.5833335 -15.7500005 -15.5833335 422 0 2670 --61.5833335 -61.4166665 -15.7500005 -15.5833335 411 0 2670 --61.4166665 -61.2499995 -15.7500005 -15.5833335 350 0 2670 --61.2500005 -61.0833335 -15.7500005 -15.5833335 319 0 2670 --61.0833335 -60.9166665 -15.7500005 -15.5833335 269 0 2670 --60.9166665 -60.7499995 -15.7500005 -15.5833335 235 0 2670 --60.7500005 -60.5833335 -15.7500005 -15.5833335 288 0 2670 --60.5833335 -60.4166665 -15.7500005 -15.5833335 254 0 2670 --60.4166665 -60.2499995 -15.7500005 -15.5833335 240 0 2670 --60.2500005 -60.0833335 -15.7500005 -15.5833335 205 0 2670 --60.0833335 -59.9166665 -15.7500005 -15.5833335 209 0 2670 --59.9166665 -59.7499995 -15.7500005 -15.5833335 210 0 2670 --59.7500005 -59.5833335 -15.7500005 -15.5833335 228 0 2670 --59.5833335 -59.4166665 -15.7500005 -15.5833335 450 0 2670 --59.4166665 -59.2499995 -15.7500005 -15.5833335 400 0 2670 --59.2500005 -59.0833335 -15.7500005 -15.5833335 379 0 2670 --59.0833335 -58.9166665 -15.7500005 -15.5833335 274 0 2670 --58.9166665 -58.7499995 -15.7500005 -15.5833335 311 0 2670 --58.7500005 -58.5833335 -15.7500005 -15.5833335 190 0 2670 --58.5833335 -58.4166665 -15.7500005 -15.5833335 222 0 2670 --58.4166665 -58.2499995 -15.7500005 -15.5833335 213 0 2670 --58.2500005 -58.0833335 -15.7500005 -15.5833335 228 0 2670 --58.0833335 -57.9166665 -15.7500005 -15.5833335 237 0 2670 --57.9166665 -57.7499995 -15.7500005 -15.5833335 158 0 2670 --57.7500005 -57.5833335 -15.7500005 -15.5833335 157 0 2670 --57.5833335 -57.4166665 -15.7500005 -15.5833335 134 0 2670 --57.4166665 -57.2499995 -15.7500005 -15.5833335 249 0 2670 --57.2500005 -57.0833335 -15.7500005 -15.5833335 570 0 2670 --57.0833335 -56.9166665 -15.7500005 -15.5833335 448 0 2670 --56.9166665 -56.7499995 -15.7500005 -15.5833335 313 0 2670 --56.7500005 -56.5833335 -15.7500005 -15.5833335 365 0 2670 --56.5833335 -56.4166665 -15.7500005 -15.5833335 244 0 2670 --56.4166665 -56.2499995 -15.7500005 -15.5833335 259 0 2670 --56.2500005 -56.0833335 -15.7500005 -15.5833335 206 0 2670 --56.0833335 -55.9166665 -15.7500005 -15.5833335 191 0 2670 --55.9166665 -55.7499995 -15.7500005 -15.5833335 173 0 2670 --55.7500005 -55.5833335 -15.7500005 -15.5833335 195 0 2670 --55.5833335 -55.4166665 -15.7500005 -15.5833335 614 0 2670 --55.4166665 -55.2499995 -15.7500005 -15.5833335 794 0 2670 --55.2500005 -55.0833335 -15.7500005 -15.5833335 727 0 2670 --55.0833335 -54.9166665 -15.7500005 -15.5833335 432 0 2670 --54.9166665 -54.7499995 -15.7500005 -15.5833335 381 0 2670 --54.7500005 -54.5833335 -15.7500005 -15.5833335 542 0 2670 --54.5833335 -54.4166665 -15.7500005 -15.5833335 564 0 2670 --54.4166665 -54.2499995 -15.7500005 -15.5833335 452 0 2670 --54.2500005 -54.0833335 -15.7500005 -15.5833335 716 0 2670 --54.0833335 -53.9166665 -15.7500005 -15.5833335 622 0 2670 --53.9166665 -53.7499995 -15.7500005 -15.5833335 675 0 2670 --53.7500005 -53.5833335 -15.7500005 -15.5833335 566 0 2670 --53.5833335 -53.4166665 -15.7500005 -15.5833335 524 0 2670 --53.4166665 -53.2499995 -15.7500005 -15.5833335 448 0 2670 --53.2500005 -53.0833335 -15.7500005 -15.5833335 402 0 2670 --53.0833335 -52.9166665 -15.7500005 -15.5833335 410 0 2670 --52.9166665 -52.7499995 -15.7500005 -15.5833335 400 0 2670 --52.7500005 -52.5833335 -15.7500005 -15.5833335 452 0 2670 --52.5833335 -52.4166665 -15.7500005 -15.5833335 711 0 2670 --52.4166665 -52.2499995 -15.7500005 -15.5833335 408 0 2670 --52.2500005 -52.0833335 -15.7500005 -15.5833335 337 0 2670 --52.0833335 -51.9166665 -15.7500005 -15.5833335 348 0 2670 --51.9166665 -51.7499995 -15.7500005 -15.5833335 344 0 2670 --51.7500005 -51.5833335 -15.7500005 -15.5833335 312 0 2670 --51.5833335 -51.4166665 -15.7500005 -15.5833335 310 0 2670 --51.4166665 -51.2499995 -15.7500005 -15.5833335 315 0 2670 --51.2500005 -51.0833335 -15.7500005 -15.5833335 308 0 2670 --51.0833335 -50.9166665 -15.7500005 -15.5833335 301 0 2670 --50.9166665 -50.7499995 -15.7500005 -15.5833335 364 0 2670 --50.7500005 -50.5833335 -15.7500005 -15.5833335 347 0 2670 --50.5833335 -50.4166665 -15.7500005 -15.5833335 431 0 2670 --50.4166665 -50.2499995 -15.7500005 -15.5833335 518 0 2670 --50.2500005 -50.0833335 -15.7500005 -15.5833335 549 0 2670 --50.0833335 -49.9166665 -15.7500005 -15.5833335 768 0 2670 --49.9166665 -49.7499995 -15.7500005 -15.5833335 707 0 2670 --49.7500005 -49.5833335 -15.7500005 -15.5833335 613 0 2670 --49.5833335 -49.4166665 -15.7500005 -15.5833335 638 0 2670 --49.4166665 -49.2499995 -15.7500005 -15.5833335 713 0 2670 --49.2500005 -49.0833335 -15.7500005 -15.5833335 756 0 2670 --49.0833335 -48.9166665 -15.7500005 -15.5833335 843 0 2670 --48.9166665 -48.7499995 -15.7500005 -15.5833335 992 0 2670 --48.7500005 -48.5833335 -15.7500005 -15.5833335 844 0 2670 --48.5833335 -48.4166665 -15.7500005 -15.5833335 716 0 2670 --48.4166665 -48.2499995 -15.7500005 -15.5833335 941 0 2670 --48.2500005 -48.0833335 -15.7500005 -15.5833335 1212 0 2670 --48.0833335 -47.9166665 -15.7500005 -15.5833335 1091 0 2670 --47.9166665 -47.7499995 -15.7500005 -15.5833335 1089 0 2670 --47.7500005 -47.5833335 -15.7500005 -15.5833335 956 0 2670 --47.5833335 -47.4166665 -15.7500005 -15.5833335 1160 0 2670 --47.4166665 -47.2499995 -15.7500005 -15.5833335 874 0 2670 --47.2500005 -47.0833335 -15.7500005 -15.5833335 919 0 2670 --47.0833335 -46.9166665 -15.7500005 -15.5833335 720 0 2670 --46.9166665 -46.7499995 -15.7500005 -15.5833335 906 0 2670 --46.7500005 -46.5833335 -15.7500005 -15.5833335 637 0 2670 --46.5833335 -46.4166665 -15.7500005 -15.5833335 623 0 2670 --46.4166665 -46.2499995 -15.7500005 -15.5833335 586 0 2670 --46.2500005 -46.0833335 -15.7500005 -15.5833335 550 0 2670 --46.0833335 -45.9166665 -15.7500005 -15.5833335 545 0 2670 --45.9166665 -45.7499995 -15.7500005 -15.5833335 737 0 2670 --45.7500005 -45.5833335 -15.7500005 -15.5833335 697 0 2670 --45.5833335 -45.4166665 -15.7500005 -15.5833335 657 0 2670 --45.4166665 -45.2499995 -15.7500005 -15.5833335 648 0 2670 --45.2500005 -45.0833335 -15.7500005 -15.5833335 598 0 2670 --45.0833335 -44.9166665 -15.7500005 -15.5833335 534 0 2670 --44.9166665 -44.7499995 -15.7500005 -15.5833335 502 0 2670 --44.7500005 -44.5833335 -15.7500005 -15.5833335 463 0 2670 --44.5833335 -44.4166665 -15.7500005 -15.5833335 456 0 2670 --44.4166665 -44.2499995 -15.7500005 -15.5833335 490 0 2670 --44.2500005 -44.0833335 -15.7500005 -15.5833335 779 0 2670 --44.0833335 -43.9166665 -15.7500005 -15.5833335 710 0 2670 --43.9166665 -43.7499995 -15.7500005 -15.5833335 562 0 2670 --43.7500005 -43.5833335 -15.7500005 -15.5833335 508 0 2670 --43.5833335 -43.4166665 -15.7500005 -15.5833335 530 0 2670 --43.4166665 -43.2499995 -15.7500005 -15.5833335 523 0 2670 --43.2500005 -43.0833335 -15.7500005 -15.5833335 551 0 2670 --43.0833335 -42.9166665 -15.7500005 -15.5833335 546 0 2670 --42.9166665 -42.7499995 -15.7500005 -15.5833335 1280 0 2670 --42.7500005 -42.5833335 -15.7500005 -15.5833335 875 0 2670 --42.5833335 -42.4166665 -15.7500005 -15.5833335 848 0 2670 --42.4166665 -42.2499995 -15.7500005 -15.5833335 842 0 2670 --42.2500005 -42.0833335 -15.7500005 -15.5833335 821 0 2670 --42.0833335 -41.9166665 -15.7500005 -15.5833335 776 0 2670 --41.9166665 -41.7499995 -15.7500005 -15.5833335 785 0 2670 --41.7500005 -41.5833335 -15.7500005 -15.5833335 842 0 2670 --41.5833335 -41.4166665 -15.7500005 -15.5833335 795 0 2670 --41.4166665 -41.2499995 -15.7500005 -15.5833335 880 0 2670 --41.2500005 -41.0833335 -15.7500005 -15.5833335 773 0 2670 --41.0833335 -40.9166665 -15.7500005 -15.5833335 852 0 2670 --40.9166665 -40.7499995 -15.7500005 -15.5833335 925 0 2670 --40.7500005 -40.5833335 -15.7500005 -15.5833335 805 0 2670 --40.5833335 -40.4166665 -15.7500005 -15.5833335 323 0 2670 --40.4166665 -40.2499995 -15.7500005 -15.5833335 626 0 2670 --40.2500005 -40.0833335 -15.7500005 -15.5833335 454 0 2670 --40.0833335 -39.9166665 -15.7500005 -15.5833335 252 0 2670 --65.0833335 -64.9166665 -15.9166665 -15.7499995 169 0 2670 --64.9166665 -64.7499995 -15.9166665 -15.7499995 179 0 2670 --64.7500005 -64.5833335 -15.9166665 -15.7499995 184 0 2670 --64.5833335 -64.4166665 -15.9166665 -15.7499995 192 0 2670 --64.4166665 -64.2499995 -15.9166665 -15.7499995 189 0 2670 --64.2500005 -64.0833335 -15.9166665 -15.7499995 196 0 2670 --64.0833335 -63.9166665 -15.9166665 -15.7499995 195 0 2670 --63.9166665 -63.7499995 -15.9166665 -15.7499995 192 0 2670 --63.7500005 -63.5833335 -15.9166665 -15.7499995 194 0 2670 --63.5833335 -63.4166665 -15.9166665 -15.7499995 199 0 2670 --63.4166665 -63.2499995 -15.9166665 -15.7499995 201 0 2670 --63.2500005 -63.0833335 -15.9166665 -15.7499995 206 0 2670 --63.0833335 -62.9166665 -15.9166665 -15.7499995 248 0 2670 --62.9166665 -62.7499995 -15.9166665 -15.7499995 244 0 2670 --62.7500005 -62.5833335 -15.9166665 -15.7499995 320 0 2670 --62.5833335 -62.4166665 -15.9166665 -15.7499995 447 0 2670 --62.4166665 -62.2499995 -15.9166665 -15.7499995 472 0 2670 --62.2500005 -62.0833335 -15.9166665 -15.7499995 440 0 2670 --62.0833335 -61.9166665 -15.9166665 -15.7499995 408 0 2670 --61.9166665 -61.7499995 -15.9166665 -15.7499995 398 0 2670 --61.7500005 -61.5833335 -15.9166665 -15.7499995 389 0 2670 --61.5833335 -61.4166665 -15.9166665 -15.7499995 359 0 2670 --61.4166665 -61.2499995 -15.9166665 -15.7499995 353 0 2670 --61.2500005 -61.0833335 -15.9166665 -15.7499995 253 0 2670 --61.0833335 -60.9166665 -15.9166665 -15.7499995 291 0 2670 --60.9166665 -60.7499995 -15.9166665 -15.7499995 273 0 2670 --60.7500005 -60.5833335 -15.9166665 -15.7499995 253 0 2670 --60.5833335 -60.4166665 -15.9166665 -15.7499995 231 0 2670 --60.4166665 -60.2499995 -15.9166665 -15.7499995 218 0 2670 --60.2500005 -60.0833335 -15.9166665 -15.7499995 213 0 2670 --60.0833335 -59.9166665 -15.9166665 -15.7499995 205 0 2670 --59.9166665 -59.7499995 -15.9166665 -15.7499995 214 0 2670 --59.7500005 -59.5833335 -15.9166665 -15.7499995 229 0 2670 --59.5833335 -59.4166665 -15.9166665 -15.7499995 486 0 2670 --59.4166665 -59.2499995 -15.9166665 -15.7499995 595 0 2670 --59.2500005 -59.0833335 -15.9166665 -15.7499995 309 0 2670 --59.0833335 -58.9166665 -15.9166665 -15.7499995 283 0 2670 --58.9166665 -58.7499995 -15.9166665 -15.7499995 238 0 2670 --58.7500005 -58.5833335 -15.9166665 -15.7499995 197 0 2670 --58.5833335 -58.4166665 -15.9166665 -15.7499995 186 0 2670 --58.4166665 -58.2499995 -15.9166665 -15.7499995 182 0 2670 --58.2500005 -58.0833335 -15.9166665 -15.7499995 246 0 2670 --58.0833335 -57.9166665 -15.9166665 -15.7499995 158 0 2670 --57.9166665 -57.7499995 -15.9166665 -15.7499995 153 0 2670 --57.7500005 -57.5833335 -15.9166665 -15.7499995 131 0 2670 --57.5833335 -57.4166665 -15.9166665 -15.7499995 189 0 2670 --57.4166665 -57.2499995 -15.9166665 -15.7499995 206 0 2670 --57.2500005 -57.0833335 -15.9166665 -15.7499995 500 0 2670 --57.0833335 -56.9166665 -15.9166665 -15.7499995 190 0 2670 --56.9166665 -56.7499995 -15.9166665 -15.7499995 339 0 2670 --56.7500005 -56.5833335 -15.9166665 -15.7499995 220 0 2670 --56.5833335 -56.4166665 -15.9166665 -15.7499995 205 0 2670 --56.4166665 -56.2499995 -15.9166665 -15.7499995 224 0 2670 --56.2500005 -56.0833335 -15.9166665 -15.7499995 166 0 2670 --56.0833335 -55.9166665 -15.9166665 -15.7499995 151 0 2670 --55.9166665 -55.7499995 -15.9166665 -15.7499995 157 0 2670 --55.7500005 -55.5833335 -15.9166665 -15.7499995 233 0 2670 --55.5833335 -55.4166665 -15.9166665 -15.7499995 631 0 2670 --55.4166665 -55.2499995 -15.9166665 -15.7499995 815 0 2670 --55.2500005 -55.0833335 -15.9166665 -15.7499995 734 0 2670 --55.0833335 -54.9166665 -15.9166665 -15.7499995 405 0 2670 --54.9166665 -54.7499995 -15.9166665 -15.7499995 424 0 2670 --54.7500005 -54.5833335 -15.9166665 -15.7499995 383 0 2670 --54.5833335 -54.4166665 -15.9166665 -15.7499995 503 0 2670 --54.4166665 -54.2499995 -15.9166665 -15.7499995 441 0 2670 --54.2500005 -54.0833335 -15.9166665 -15.7499995 608 0 2670 --54.0833335 -53.9166665 -15.9166665 -15.7499995 663 0 2670 --53.9166665 -53.7499995 -15.9166665 -15.7499995 637 0 2670 --53.7500005 -53.5833335 -15.9166665 -15.7499995 631 0 2670 --53.5833335 -53.4166665 -15.9166665 -15.7499995 484 0 2670 --53.4166665 -53.2499995 -15.9166665 -15.7499995 438 0 2670 --53.2500005 -53.0833335 -15.9166665 -15.7499995 441 0 2670 --53.0833335 -52.9166665 -15.9166665 -15.7499995 391 0 2670 --52.9166665 -52.7499995 -15.9166665 -15.7499995 399 0 2670 --52.7500005 -52.5833335 -15.9166665 -15.7499995 380 0 2670 --52.5833335 -52.4166665 -15.9166665 -15.7499995 381 0 2670 --52.4166665 -52.2499995 -15.9166665 -15.7499995 382 0 2670 --52.2500005 -52.0833335 -15.9166665 -15.7499995 401 0 2670 --52.0833335 -51.9166665 -15.9166665 -15.7499995 317 0 2670 --51.9166665 -51.7499995 -15.9166665 -15.7499995 304 0 2670 --51.7500005 -51.5833335 -15.9166665 -15.7499995 316 0 2670 --51.5833335 -51.4166665 -15.9166665 -15.7499995 316 0 2670 --51.4166665 -51.2499995 -15.9166665 -15.7499995 350 0 2670 --51.2500005 -51.0833335 -15.9166665 -15.7499995 427 0 2670 --51.0833335 -50.9166665 -15.9166665 -15.7499995 323 0 2670 --50.9166665 -50.7499995 -15.9166665 -15.7499995 349 0 2670 --50.7500005 -50.5833335 -15.9166665 -15.7499995 361 0 2670 --50.5833335 -50.4166665 -15.9166665 -15.7499995 398 0 2670 --50.4166665 -50.2499995 -15.9166665 -15.7499995 421 0 2670 --50.2500005 -50.0833335 -15.9166665 -15.7499995 660 0 2670 --50.0833335 -49.9166665 -15.9166665 -15.7499995 675 0 2670 --49.9166665 -49.7499995 -15.9166665 -15.7499995 699 0 2670 --49.7500005 -49.5833335 -15.9166665 -15.7499995 836 0 2670 --49.5833335 -49.4166665 -15.9166665 -15.7499995 716 0 2670 --49.4166665 -49.2499995 -15.9166665 -15.7499995 709 0 2670 --49.2500005 -49.0833335 -15.9166665 -15.7499995 670 0 2670 --49.0833335 -48.9166665 -15.9166665 -15.7499995 764 0 2670 --48.9166665 -48.7499995 -15.9166665 -15.7499995 1137 0 2670 --48.7500005 -48.5833335 -15.9166665 -15.7499995 1211 0 2670 --48.5833335 -48.4166665 -15.9166665 -15.7499995 984 0 2670 --48.4166665 -48.2499995 -15.9166665 -15.7499995 1067 0 2670 --48.2500005 -48.0833335 -15.9166665 -15.7499995 1049 0 2670 --48.0833335 -47.9166665 -15.9166665 -15.7499995 1073 0 2670 --47.9166665 -47.7499995 -15.9166665 -15.7499995 1016 0 2670 --47.7500005 -47.5833335 -15.9166665 -15.7499995 1002 0 2670 --47.5833335 -47.4166665 -15.9166665 -15.7499995 895 0 2670 --47.4166665 -47.2499995 -15.9166665 -15.7499995 927 0 2670 --47.2500005 -47.0833335 -15.9166665 -15.7499995 937 0 2670 --47.0833335 -46.9166665 -15.9166665 -15.7499995 972 0 2670 --46.9166665 -46.7499995 -15.9166665 -15.7499995 832 0 2670 --46.7500005 -46.5833335 -15.9166665 -15.7499995 956 0 2670 --46.5833335 -46.4166665 -15.9166665 -15.7499995 934 0 2670 --46.4166665 -46.2499995 -15.9166665 -15.7499995 860 0 2670 --46.2500005 -46.0833335 -15.9166665 -15.7499995 516 0 2670 --46.0833335 -45.9166665 -15.9166665 -15.7499995 532 0 2670 --45.9166665 -45.7499995 -15.9166665 -15.7499995 546 0 2670 --45.7500005 -45.5833335 -15.9166665 -15.7499995 641 0 2670 --45.5833335 -45.4166665 -15.9166665 -15.7499995 649 0 2670 --45.4166665 -45.2499995 -15.9166665 -15.7499995 599 0 2670 --45.2500005 -45.0833335 -15.9166665 -15.7499995 544 0 2670 --45.0833335 -44.9166665 -15.9166665 -15.7499995 487 0 2670 --44.9166665 -44.7499995 -15.9166665 -15.7499995 479 0 2670 --44.7500005 -44.5833335 -15.9166665 -15.7499995 512 0 2670 --44.5833335 -44.4166665 -15.9166665 -15.7499995 625 0 2670 --44.4166665 -44.2499995 -15.9166665 -15.7499995 699 0 2670 --44.2500005 -44.0833335 -15.9166665 -15.7499995 870 0 2670 --44.0833335 -43.9166665 -15.9166665 -15.7499995 715 0 2670 --43.9166665 -43.7499995 -15.9166665 -15.7499995 609 0 2670 --43.7500005 -43.5833335 -15.9166665 -15.7499995 507 0 2670 --43.5833335 -43.4166665 -15.9166665 -15.7499995 532 0 2670 --43.4166665 -43.2499995 -15.9166665 -15.7499995 541 0 2670 --43.2500005 -43.0833335 -15.9166665 -15.7499995 806 0 2670 --43.0833335 -42.9166665 -15.9166665 -15.7499995 600 0 2670 --42.9166665 -42.7499995 -15.9166665 -15.7499995 815 0 2670 --42.7500005 -42.5833335 -15.9166665 -15.7499995 1032 0 2670 --42.5833335 -42.4166665 -15.9166665 -15.7499995 817 0 2670 --42.4166665 -42.2499995 -15.9166665 -15.7499995 960 0 2670 --42.2500005 -42.0833335 -15.9166665 -15.7499995 802 0 2670 --42.0833335 -41.9166665 -15.9166665 -15.7499995 917 0 2670 --41.9166665 -41.7499995 -15.9166665 -15.7499995 829 0 2670 --41.7500005 -41.5833335 -15.9166665 -15.7499995 844 0 2670 --41.5833335 -41.4166665 -15.9166665 -15.7499995 860 0 2670 --41.4166665 -41.2499995 -15.9166665 -15.7499995 737 0 2670 --41.2500005 -41.0833335 -15.9166665 -15.7499995 728 0 2670 --41.0833335 -40.9166665 -15.9166665 -15.7499995 874 0 2670 --40.9166665 -40.7499995 -15.9166665 -15.7499995 721 0 2670 --40.7500005 -40.5833335 -15.9166665 -15.7499995 545 0 2670 --40.5833335 -40.4166665 -15.9166665 -15.7499995 611 0 2670 --40.4166665 -40.2499995 -15.9166665 -15.7499995 308 0 2670 --40.2500005 -40.0833335 -15.9166665 -15.7499995 222 0 2670 --40.0833335 -39.9166665 -15.9166665 -15.7499995 194 0 2670 --65.0833335 -64.9166665 -16.0833335 -15.9166665 175 0 2670 --64.9166665 -64.7499995 -16.0833335 -15.9166665 181 0 2670 --64.7500005 -64.5833335 -16.0833335 -15.9166665 181 0 2670 --64.5833335 -64.4166665 -16.0833335 -15.9166665 181 0 2670 --64.4166665 -64.2499995 -16.0833335 -15.9166665 197 0 2670 --64.2500005 -64.0833335 -16.0833335 -15.9166665 192 0 2670 --64.0833335 -63.9166665 -16.0833335 -15.9166665 188 0 2670 --63.9166665 -63.7499995 -16.0833335 -15.9166665 204 0 2670 --63.7500005 -63.5833335 -16.0833335 -15.9166665 205 0 2670 --63.5833335 -63.4166665 -16.0833335 -15.9166665 207 0 2670 --63.4166665 -63.2499995 -16.0833335 -15.9166665 209 0 2670 --63.2500005 -63.0833335 -16.0833335 -15.9166665 211 0 2670 --63.0833335 -62.9166665 -16.0833335 -15.9166665 298 0 2670 --62.9166665 -62.7499995 -16.0833335 -15.9166665 357 0 2670 --62.7500005 -62.5833335 -16.0833335 -15.9166665 404 0 2670 --62.5833335 -62.4166665 -16.0833335 -15.9166665 419 0 2670 --62.4166665 -62.2499995 -16.0833335 -15.9166665 476 0 2670 --62.2500005 -62.0833335 -16.0833335 -15.9166665 465 0 2670 --62.0833335 -61.9166665 -16.0833335 -15.9166665 455 0 2670 --61.9166665 -61.7499995 -16.0833335 -15.9166665 386 0 2670 --61.7500005 -61.5833335 -16.0833335 -15.9166665 418 0 2670 --61.5833335 -61.4166665 -16.0833335 -15.9166665 401 0 2670 --61.4166665 -61.2499995 -16.0833335 -15.9166665 404 0 2670 --61.2500005 -61.0833335 -16.0833335 -15.9166665 348 0 2670 --61.0833335 -60.9166665 -16.0833335 -15.9166665 348 0 2670 --60.9166665 -60.7499995 -16.0833335 -15.9166665 339 0 2670 --60.7500005 -60.5833335 -16.0833335 -15.9166665 269 0 2670 --60.5833335 -60.4166665 -16.0833335 -15.9166665 235 0 2670 --60.4166665 -60.2499995 -16.0833335 -15.9166665 231 0 2670 --60.2500005 -60.0833335 -16.0833335 -15.9166665 223 0 2670 --60.0833335 -59.9166665 -16.0833335 -15.9166665 222 0 2670 --59.9166665 -59.7499995 -16.0833335 -15.9166665 226 0 2670 --59.7500005 -59.5833335 -16.0833335 -15.9166665 244 0 2670 --59.5833335 -59.4166665 -16.0833335 -15.9166665 478 0 2670 --59.4166665 -59.2499995 -16.0833335 -15.9166665 737 0 2670 --59.2500005 -59.0833335 -16.0833335 -15.9166665 232 0 2670 --59.0833335 -58.9166665 -16.0833335 -15.9166665 219 0 2670 --58.9166665 -58.7499995 -16.0833335 -15.9166665 220 0 2670 --58.7500005 -58.5833335 -16.0833335 -15.9166665 231 0 2670 --58.5833335 -58.4166665 -16.0833335 -15.9166665 178 0 2670 --58.4166665 -58.2499995 -16.0833335 -15.9166665 156 0 2670 --58.2500005 -58.0833335 -16.0833335 -15.9166665 175 0 2670 --58.0833335 -57.9166665 -16.0833335 -15.9166665 130 0 2670 --57.9166665 -57.7499995 -16.0833335 -15.9166665 132 0 2670 --57.7500005 -57.5833335 -16.0833335 -15.9166665 124 0 2670 --57.5833335 -57.4166665 -16.0833335 -15.9166665 346 0 2670 --57.4166665 -57.2499995 -16.0833335 -15.9166665 305 0 2670 --57.2500005 -57.0833335 -16.0833335 -15.9166665 139 0 2670 --57.0833335 -56.9166665 -16.0833335 -15.9166665 155 0 2670 --56.9166665 -56.7499995 -16.0833335 -15.9166665 174 0 2670 --56.7500005 -56.5833335 -16.0833335 -15.9166665 195 0 2670 --56.5833335 -56.4166665 -16.0833335 -15.9166665 145 0 2670 --56.4166665 -56.2499995 -16.0833335 -15.9166665 155 0 2670 --56.2500005 -56.0833335 -16.0833335 -15.9166665 146 0 2670 --56.0833335 -55.9166665 -16.0833335 -15.9166665 150 0 2670 --55.9166665 -55.7499995 -16.0833335 -15.9166665 138 0 2670 --55.7500005 -55.5833335 -16.0833335 -15.9166665 164 0 2670 --55.5833335 -55.4166665 -16.0833335 -15.9166665 322 0 2670 --55.4166665 -55.2499995 -16.0833335 -15.9166665 701 0 2670 --55.2500005 -55.0833335 -16.0833335 -15.9166665 580 0 2670 --55.0833335 -54.9166665 -16.0833335 -15.9166665 323 0 2670 --54.9166665 -54.7499995 -16.0833335 -15.9166665 324 0 2670 --54.7500005 -54.5833335 -16.0833335 -15.9166665 351 0 2670 --54.5833335 -54.4166665 -16.0833335 -15.9166665 462 0 2670 --54.4166665 -54.2499995 -16.0833335 -15.9166665 338 0 2670 --54.2500005 -54.0833335 -16.0833335 -15.9166665 388 0 2670 --54.0833335 -53.9166665 -16.0833335 -15.9166665 383 0 2670 --53.9166665 -53.7499995 -16.0833335 -15.9166665 507 0 2670 --53.7500005 -53.5833335 -16.0833335 -15.9166665 537 0 2670 --53.5833335 -53.4166665 -16.0833335 -15.9166665 589 0 2670 --53.4166665 -53.2499995 -16.0833335 -15.9166665 458 0 2670 --53.2500005 -53.0833335 -16.0833335 -15.9166665 461 0 2670 --53.0833335 -52.9166665 -16.0833335 -15.9166665 461 0 2670 --52.9166665 -52.7499995 -16.0833335 -15.9166665 368 0 2670 --52.7500005 -52.5833335 -16.0833335 -15.9166665 506 0 2670 --52.5833335 -52.4166665 -16.0833335 -15.9166665 454 0 2670 --52.4166665 -52.2499995 -16.0833335 -15.9166665 351 0 2670 --52.2500005 -52.0833335 -16.0833335 -15.9166665 358 0 2670 --52.0833335 -51.9166665 -16.0833335 -15.9166665 345 0 2670 --51.9166665 -51.7499995 -16.0833335 -15.9166665 311 0 2670 --51.7500005 -51.5833335 -16.0833335 -15.9166665 360 0 2670 --51.5833335 -51.4166665 -16.0833335 -15.9166665 396 0 2670 --51.4166665 -51.2499995 -16.0833335 -15.9166665 385 0 2670 --51.2500005 -51.0833335 -16.0833335 -15.9166665 350 0 2670 --51.0833335 -50.9166665 -16.0833335 -15.9166665 535 0 2670 --50.9166665 -50.7499995 -16.0833335 -15.9166665 488 0 2670 --50.7500005 -50.5833335 -16.0833335 -15.9166665 413 0 2670 --50.5833335 -50.4166665 -16.0833335 -15.9166665 401 0 2670 --50.4166665 -50.2499995 -16.0833335 -15.9166665 550 0 2670 --50.2500005 -50.0833335 -16.0833335 -15.9166665 519 0 2670 --50.0833335 -49.9166665 -16.0833335 -15.9166665 725 0 2670 --49.9166665 -49.7499995 -16.0833335 -15.9166665 733 0 2670 --49.7500005 -49.5833335 -16.0833335 -15.9166665 765 0 2670 --49.5833335 -49.4166665 -16.0833335 -15.9166665 777 0 2670 --49.4166665 -49.2499995 -16.0833335 -15.9166665 729 0 2670 --49.2500005 -49.0833335 -16.0833335 -15.9166665 713 0 2670 --49.0833335 -48.9166665 -16.0833335 -15.9166665 822 0 2670 --48.9166665 -48.7499995 -16.0833335 -15.9166665 1013 0 2670 --48.7500005 -48.5833335 -16.0833335 -15.9166665 1099 0 2670 --48.5833335 -48.4166665 -16.0833335 -15.9166665 994 0 2670 --48.4166665 -48.2499995 -16.0833335 -15.9166665 1030 0 2670 --48.2500005 -48.0833335 -16.0833335 -15.9166665 1072 0 2670 --48.0833335 -47.9166665 -16.0833335 -15.9166665 1233 0 2670 --47.9166665 -47.7499995 -16.0833335 -15.9166665 967 0 2670 --47.7500005 -47.5833335 -16.0833335 -15.9166665 868 0 2670 --47.5833335 -47.4166665 -16.0833335 -15.9166665 964 0 2670 --47.4166665 -47.2499995 -16.0833335 -15.9166665 896 0 2670 --47.2500005 -47.0833335 -16.0833335 -15.9166665 861 0 2670 --47.0833335 -46.9166665 -16.0833335 -15.9166665 861 0 2670 --46.9166665 -46.7499995 -16.0833335 -15.9166665 811 0 2670 --46.7500005 -46.5833335 -16.0833335 -15.9166665 958 0 2670 --46.5833335 -46.4166665 -16.0833335 -15.9166665 882 0 2670 --46.4166665 -46.2499995 -16.0833335 -15.9166665 586 0 2670 --46.2500005 -46.0833335 -16.0833335 -15.9166665 787 0 2670 --46.0833335 -45.9166665 -16.0833335 -15.9166665 497 0 2670 --45.9166665 -45.7499995 -16.0833335 -15.9166665 536 0 2670 --45.7500005 -45.5833335 -16.0833335 -15.9166665 562 0 2670 --45.5833335 -45.4166665 -16.0833335 -15.9166665 619 0 2670 --45.4166665 -45.2499995 -16.0833335 -15.9166665 568 0 2670 --45.2500005 -45.0833335 -16.0833335 -15.9166665 526 0 2670 --45.0833335 -44.9166665 -16.0833335 -15.9166665 463 0 2670 --44.9166665 -44.7499995 -16.0833335 -15.9166665 517 0 2670 --44.7500005 -44.5833335 -16.0833335 -15.9166665 630 0 2670 --44.5833335 -44.4166665 -16.0833335 -15.9166665 701 0 2670 --44.4166665 -44.2499995 -16.0833335 -15.9166665 747 0 2670 --44.2500005 -44.0833335 -16.0833335 -15.9166665 806 0 2670 --44.0833335 -43.9166665 -16.0833335 -15.9166665 767 0 2670 --43.9166665 -43.7499995 -16.0833335 -15.9166665 628 0 2670 --43.7500005 -43.5833335 -16.0833335 -15.9166665 509 0 2670 --43.5833335 -43.4166665 -16.0833335 -15.9166665 546 0 2670 --43.4166665 -43.2499995 -16.0833335 -15.9166665 644 0 2670 --43.2500005 -43.0833335 -16.0833335 -15.9166665 682 0 2670 --43.0833335 -42.9166665 -16.0833335 -15.9166665 859 0 2670 --42.9166665 -42.7499995 -16.0833335 -15.9166665 817 0 2670 --42.7500005 -42.5833335 -16.0833335 -15.9166665 852 0 2670 --42.5833335 -42.4166665 -16.0833335 -15.9166665 857 0 2670 --42.4166665 -42.2499995 -16.0833335 -15.9166665 612 0 2670 --42.2500005 -42.0833335 -16.0833335 -15.9166665 620 0 2670 --42.0833335 -41.9166665 -16.0833335 -15.9166665 917 0 2670 --41.9166665 -41.7499995 -16.0833335 -15.9166665 855 0 2670 --41.7500005 -41.5833335 -16.0833335 -15.9166665 917 0 2670 --41.5833335 -41.4166665 -16.0833335 -15.9166665 776 0 2670 --41.4166665 -41.2499995 -16.0833335 -15.9166665 676 0 2670 --41.2500005 -41.0833335 -16.0833335 -15.9166665 764 0 2670 --41.0833335 -40.9166665 -16.0833335 -15.9166665 437 0 2670 --40.9166665 -40.7499995 -16.0833335 -15.9166665 366 0 2670 --40.7500005 -40.5833335 -16.0833335 -15.9166665 517 0 2670 --40.5833335 -40.4166665 -16.0833335 -15.9166665 300 0 2670 --40.4166665 -40.2499995 -16.0833335 -15.9166665 231 0 2670 --40.2500005 -40.0833335 -16.0833335 -15.9166665 197 0 2670 --40.0833335 -39.9166665 -16.0833335 -15.9166665 138 0 2670 --65.0833335 -64.9166665 -16.2500005 -16.0833335 181 0 2670 --64.9166665 -64.7499995 -16.2500005 -16.0833335 184 0 2670 --64.7500005 -64.5833335 -16.2500005 -16.0833335 188 0 2670 --64.5833335 -64.4166665 -16.2500005 -16.0833335 193 0 2670 --64.4166665 -64.2499995 -16.2500005 -16.0833335 187 0 2670 --64.2500005 -64.0833335 -16.2500005 -16.0833335 207 0 2670 --64.0833335 -63.9166665 -16.2500005 -16.0833335 204 0 2670 --63.9166665 -63.7499995 -16.2500005 -16.0833335 195 0 2670 --63.7500005 -63.5833335 -16.2500005 -16.0833335 203 0 2670 --63.5833335 -63.4166665 -16.2500005 -16.0833335 213 0 2670 --63.4166665 -63.2499995 -16.2500005 -16.0833335 217 0 2670 --63.2500005 -63.0833335 -16.2500005 -16.0833335 220 0 2670 --63.0833335 -62.9166665 -16.2500005 -16.0833335 310 0 2670 --62.9166665 -62.7499995 -16.2500005 -16.0833335 406 0 2670 --62.7500005 -62.5833335 -16.2500005 -16.0833335 652 0 2670 --62.5833335 -62.4166665 -16.2500005 -16.0833335 482 0 2670 --62.4166665 -62.2499995 -16.2500005 -16.0833335 506 0 2670 --62.2500005 -62.0833335 -16.2500005 -16.0833335 612 0 2670 --62.0833335 -61.9166665 -16.2500005 -16.0833335 505 0 2670 --61.9166665 -61.7499995 -16.2500005 -16.0833335 445 0 2670 --61.7500005 -61.5833335 -16.2500005 -16.0833335 412 0 2670 --61.5833335 -61.4166665 -16.2500005 -16.0833335 434 0 2670 --61.4166665 -61.2499995 -16.2500005 -16.0833335 410 0 2670 --61.2500005 -61.0833335 -16.2500005 -16.0833335 372 0 2670 --61.0833335 -60.9166665 -16.2500005 -16.0833335 382 0 2670 --60.9166665 -60.7499995 -16.2500005 -16.0833335 378 0 2670 --60.7500005 -60.5833335 -16.2500005 -16.0833335 310 0 2670 --60.5833335 -60.4166665 -16.2500005 -16.0833335 251 0 2670 --60.4166665 -60.2499995 -16.2500005 -16.0833335 276 0 2670 --60.2500005 -60.0833335 -16.2500005 -16.0833335 238 0 2670 --60.0833335 -59.9166665 -16.2500005 -16.0833335 259 0 2670 --59.9166665 -59.7499995 -16.2500005 -16.0833335 247 0 2670 --59.7500005 -59.5833335 -16.2500005 -16.0833335 250 0 2670 --59.5833335 -59.4166665 -16.2500005 -16.0833335 444 0 2670 --59.4166665 -59.2499995 -16.2500005 -16.0833335 226 0 2670 --59.2500005 -59.0833335 -16.2500005 -16.0833335 180 0 2670 --59.0833335 -58.9166665 -16.2500005 -16.0833335 166 0 2670 --58.9166665 -58.7499995 -16.2500005 -16.0833335 146 0 2670 --58.7500005 -58.5833335 -16.2500005 -16.0833335 194 0 2670 --58.5833335 -58.4166665 -16.2500005 -16.0833335 152 0 2670 --58.4166665 -58.2499995 -16.2500005 -16.0833335 137 0 2670 --58.2500005 -58.0833335 -16.2500005 -16.0833335 228 0 2670 --58.0833335 -57.9166665 -16.2500005 -16.0833335 128 0 2670 --57.9166665 -57.7499995 -16.2500005 -16.0833335 120 0 2670 --57.7500005 -57.5833335 -16.2500005 -16.0833335 154 0 2670 --57.5833335 -57.4166665 -16.2500005 -16.0833335 451 0 2670 --57.4166665 -57.2499995 -16.2500005 -16.0833335 179 0 2670 --57.2500005 -57.0833335 -16.2500005 -16.0833335 122 0 2670 --57.0833335 -56.9166665 -16.2500005 -16.0833335 122 0 2670 --56.9166665 -56.7499995 -16.2500005 -16.0833335 133 0 2670 --56.7500005 -56.5833335 -16.2500005 -16.0833335 156 0 2670 --56.5833335 -56.4166665 -16.2500005 -16.0833335 127 0 2670 --56.4166665 -56.2499995 -16.2500005 -16.0833335 133 0 2670 --56.2500005 -56.0833335 -16.2500005 -16.0833335 139 0 2670 --56.0833335 -55.9166665 -16.2500005 -16.0833335 135 0 2670 --55.9166665 -55.7499995 -16.2500005 -16.0833335 135 0 2670 --55.7500005 -55.5833335 -16.2500005 -16.0833335 143 0 2670 --55.5833335 -55.4166665 -16.2500005 -16.0833335 170 0 2670 --55.4166665 -55.2499995 -16.2500005 -16.0833335 732 0 2670 --55.2500005 -55.0833335 -16.2500005 -16.0833335 633 0 2670 --55.0833335 -54.9166665 -16.2500005 -16.0833335 461 0 2670 --54.9166665 -54.7499995 -16.2500005 -16.0833335 277 0 2670 --54.7500005 -54.5833335 -16.2500005 -16.0833335 298 0 2670 --54.5833335 -54.4166665 -16.2500005 -16.0833335 417 0 2670 --54.4166665 -54.2499995 -16.2500005 -16.0833335 318 0 2670 --54.2500005 -54.0833335 -16.2500005 -16.0833335 391 0 2670 --54.0833335 -53.9166665 -16.2500005 -16.0833335 371 0 2670 --53.9166665 -53.7499995 -16.2500005 -16.0833335 609 0 2670 --53.7500005 -53.5833335 -16.2500005 -16.0833335 527 0 2670 --53.5833335 -53.4166665 -16.2500005 -16.0833335 485 0 2670 --53.4166665 -53.2499995 -16.2500005 -16.0833335 536 0 2670 --53.2500005 -53.0833335 -16.2500005 -16.0833335 433 0 2670 --53.0833335 -52.9166665 -16.2500005 -16.0833335 393 0 2670 --52.9166665 -52.7499995 -16.2500005 -16.0833335 459 0 2670 --52.7500005 -52.5833335 -16.2500005 -16.0833335 423 0 2670 --52.5833335 -52.4166665 -16.2500005 -16.0833335 362 0 2670 --52.4166665 -52.2499995 -16.2500005 -16.0833335 374 0 2670 --52.2500005 -52.0833335 -16.2500005 -16.0833335 448 0 2670 --52.0833335 -51.9166665 -16.2500005 -16.0833335 383 0 2670 --51.9166665 -51.7499995 -16.2500005 -16.0833335 360 0 2670 --51.7500005 -51.5833335 -16.2500005 -16.0833335 346 0 2670 --51.5833335 -51.4166665 -16.2500005 -16.0833335 446 0 2670 --51.4166665 -51.2499995 -16.2500005 -16.0833335 500 0 2670 --51.2500005 -51.0833335 -16.2500005 -16.0833335 364 0 2670 --51.0833335 -50.9166665 -16.2500005 -16.0833335 366 0 2670 --50.9166665 -50.7499995 -16.2500005 -16.0833335 419 0 2670 --50.7500005 -50.5833335 -16.2500005 -16.0833335 451 0 2670 --50.5833335 -50.4166665 -16.2500005 -16.0833335 654 0 2670 --50.4166665 -50.2499995 -16.2500005 -16.0833335 538 0 2670 --50.2500005 -50.0833335 -16.2500005 -16.0833335 654 0 2670 --50.0833335 -49.9166665 -16.2500005 -16.0833335 839 0 2670 --49.9166665 -49.7499995 -16.2500005 -16.0833335 746 0 2670 --49.7500005 -49.5833335 -16.2500005 -16.0833335 897 0 2670 --49.5833335 -49.4166665 -16.2500005 -16.0833335 923 0 2670 --49.4166665 -49.2499995 -16.2500005 -16.0833335 785 0 2670 --49.2500005 -49.0833335 -16.2500005 -16.0833335 1084 0 2670 --49.0833335 -48.9166665 -16.2500005 -16.0833335 1056 0 2670 --48.9166665 -48.7499995 -16.2500005 -16.0833335 1054 0 2670 --48.7500005 -48.5833335 -16.2500005 -16.0833335 905 0 2670 --48.5833335 -48.4166665 -16.2500005 -16.0833335 903 0 2670 --48.4166665 -48.2499995 -16.2500005 -16.0833335 1006 0 2670 --48.2500005 -48.0833335 -16.2500005 -16.0833335 945 0 2670 --48.0833335 -47.9166665 -16.2500005 -16.0833335 906 0 2670 --47.9166665 -47.7499995 -16.2500005 -16.0833335 963 0 2670 --47.7500005 -47.5833335 -16.2500005 -16.0833335 996 0 2670 --47.5833335 -47.4166665 -16.2500005 -16.0833335 961 0 2670 --47.4166665 -47.2499995 -16.2500005 -16.0833335 832 0 2670 --47.2500005 -47.0833335 -16.2500005 -16.0833335 701 0 2670 --47.0833335 -46.9166665 -16.2500005 -16.0833335 693 0 2670 --46.9166665 -46.7499995 -16.2500005 -16.0833335 759 0 2670 --46.7500005 -46.5833335 -16.2500005 -16.0833335 798 0 2670 --46.5833335 -46.4166665 -16.2500005 -16.0833335 919 0 2670 --46.4166665 -46.2499995 -16.2500005 -16.0833335 815 0 2670 --46.2500005 -46.0833335 -16.2500005 -16.0833335 563 0 2670 --46.0833335 -45.9166665 -16.2500005 -16.0833335 529 0 2670 --45.9166665 -45.7499995 -16.2500005 -16.0833335 499 0 2670 --45.7500005 -45.5833335 -16.2500005 -16.0833335 483 0 2670 --45.5833335 -45.4166665 -16.2500005 -16.0833335 542 0 2670 --45.4166665 -45.2499995 -16.2500005 -16.0833335 588 0 2670 --45.2500005 -45.0833335 -16.2500005 -16.0833335 469 0 2670 --45.0833335 -44.9166665 -16.2500005 -16.0833335 510 0 2670 --44.9166665 -44.7499995 -16.2500005 -16.0833335 664 0 2670 --44.7500005 -44.5833335 -16.2500005 -16.0833335 690 0 2670 --44.5833335 -44.4166665 -16.2500005 -16.0833335 813 0 2670 --44.4166665 -44.2499995 -16.2500005 -16.0833335 847 0 2670 --44.2500005 -44.0833335 -16.2500005 -16.0833335 801 0 2670 --44.0833335 -43.9166665 -16.2500005 -16.0833335 669 0 2670 --43.9166665 -43.7499995 -16.2500005 -16.0833335 548 0 2670 --43.7500005 -43.5833335 -16.2500005 -16.0833335 678 0 2670 --43.5833335 -43.4166665 -16.2500005 -16.0833335 555 0 2670 --43.4166665 -43.2499995 -16.2500005 -16.0833335 687 0 2670 --43.2500005 -43.0833335 -16.2500005 -16.0833335 862 0 2670 --43.0833335 -42.9166665 -16.2500005 -16.0833335 801 0 2670 --42.9166665 -42.7499995 -16.2500005 -16.0833335 782 0 2670 --42.7500005 -42.5833335 -16.2500005 -16.0833335 682 0 2670 --42.5833335 -42.4166665 -16.2500005 -16.0833335 887 0 2670 --42.4166665 -42.2499995 -16.2500005 -16.0833335 564 0 2670 --42.2500005 -42.0833335 -16.2500005 -16.0833335 704 0 2670 --42.0833335 -41.9166665 -16.2500005 -16.0833335 872 0 2670 --41.9166665 -41.7499995 -16.2500005 -16.0833335 638 0 2670 --41.7500005 -41.5833335 -16.2500005 -16.0833335 780 0 2670 --41.5833335 -41.4166665 -16.2500005 -16.0833335 706 0 2670 --41.4166665 -41.2499995 -16.2500005 -16.0833335 657 0 2670 --41.2500005 -41.0833335 -16.2500005 -16.0833335 823 0 2670 --41.0833335 -40.9166665 -16.2500005 -16.0833335 770 0 2670 --40.9166665 -40.7499995 -16.2500005 -16.0833335 357 0 2670 --40.7500005 -40.5833335 -16.2500005 -16.0833335 186 0 2670 --40.5833335 -40.4166665 -16.2500005 -16.0833335 228 0 2670 --40.4166665 -40.2499995 -16.2500005 -16.0833335 209 0 2670 --40.2500005 -40.0833335 -16.2500005 -16.0833335 238 0 2670 --40.0833335 -39.9166665 -16.2500005 -16.0833335 214 0 2670 --65.0833335 -64.9166665 -16.4166665 -16.2499995 186 0 2670 --64.9166665 -64.7499995 -16.4166665 -16.2499995 200 0 2670 --64.7500005 -64.5833335 -16.4166665 -16.2499995 193 0 2670 --64.5833335 -64.4166665 -16.4166665 -16.2499995 198 0 2670 --64.4166665 -64.2499995 -16.4166665 -16.2499995 205 0 2670 --64.2500005 -64.0833335 -16.4166665 -16.2499995 193 0 2670 --64.0833335 -63.9166665 -16.4166665 -16.2499995 201 0 2670 --63.9166665 -63.7499995 -16.4166665 -16.2499995 210 0 2670 --63.7500005 -63.5833335 -16.4166665 -16.2499995 211 0 2670 --63.5833335 -63.4166665 -16.4166665 -16.2499995 209 0 2670 --63.4166665 -63.2499995 -16.4166665 -16.2499995 222 0 2670 --63.2500005 -63.0833335 -16.4166665 -16.2499995 224 0 2670 --63.0833335 -62.9166665 -16.4166665 -16.2499995 238 0 2670 --62.9166665 -62.7499995 -16.4166665 -16.2499995 249 0 2670 --62.7500005 -62.5833335 -16.4166665 -16.2499995 471 0 2670 --62.5833335 -62.4166665 -16.4166665 -16.2499995 445 0 2670 --62.4166665 -62.2499995 -16.4166665 -16.2499995 464 0 2670 --62.2500005 -62.0833335 -16.4166665 -16.2499995 635 0 2670 --62.0833335 -61.9166665 -16.4166665 -16.2499995 534 0 2670 --61.9166665 -61.7499995 -16.4166665 -16.2499995 506 0 2670 --61.7500005 -61.5833335 -16.4166665 -16.2499995 467 0 2670 --61.5833335 -61.4166665 -16.4166665 -16.2499995 450 0 2670 --61.4166665 -61.2499995 -16.4166665 -16.2499995 441 0 2670 --61.2500005 -61.0833335 -16.4166665 -16.2499995 440 0 2670 --61.0833335 -60.9166665 -16.4166665 -16.2499995 402 0 2670 --60.9166665 -60.7499995 -16.4166665 -16.2499995 381 0 2670 --60.7500005 -60.5833335 -16.4166665 -16.2499995 330 0 2670 --60.5833335 -60.4166665 -16.4166665 -16.2499995 309 0 2670 --60.4166665 -60.2499995 -16.4166665 -16.2499995 341 0 2670 --60.2500005 -60.0833335 -16.4166665 -16.2499995 316 0 2670 --60.0833335 -59.9166665 -16.4166665 -16.2499995 308 0 2670 --59.9166665 -59.7499995 -16.4166665 -16.2499995 274 0 2670 --59.7500005 -59.5833335 -16.4166665 -16.2499995 227 0 2670 --59.5833335 -59.4166665 -16.4166665 -16.2499995 210 0 2670 --59.4166665 -59.2499995 -16.4166665 -16.2499995 200 0 2670 --59.2500005 -59.0833335 -16.4166665 -16.2499995 199 0 2670 --59.0833335 -58.9166665 -16.4166665 -16.2499995 129 0 2670 --58.9166665 -58.7499995 -16.4166665 -16.2499995 124 0 2670 --58.7500005 -58.5833335 -16.4166665 -16.2499995 146 0 2670 --58.5833335 -58.4166665 -16.4166665 -16.2499995 160 0 2670 --58.4166665 -58.2499995 -16.4166665 -16.2499995 157 0 2670 --58.2500005 -58.0833335 -16.4166665 -16.2499995 217 0 2670 --58.0833335 -57.9166665 -16.4166665 -16.2499995 122 0 2670 --57.9166665 -57.7499995 -16.4166665 -16.2499995 117 0 2670 --57.7500005 -57.5833335 -16.4166665 -16.2499995 239 0 2670 --57.5833335 -57.4166665 -16.4166665 -16.2499995 617 0 2670 --57.4166665 -57.2499995 -16.4166665 -16.2499995 136 0 2670 --57.2500005 -57.0833335 -16.4166665 -16.2499995 138 0 2670 --57.0833335 -56.9166665 -16.4166665 -16.2499995 109 0 2670 --56.9166665 -56.7499995 -16.4166665 -16.2499995 127 0 2670 --56.7500005 -56.5833335 -16.4166665 -16.2499995 126 0 2670 --56.5833335 -56.4166665 -16.4166665 -16.2499995 126 0 2670 --56.4166665 -56.2499995 -16.4166665 -16.2499995 130 0 2670 --56.2500005 -56.0833335 -16.4166665 -16.2499995 129 0 2670 --56.0833335 -55.9166665 -16.4166665 -16.2499995 131 0 2670 --55.9166665 -55.7499995 -16.4166665 -16.2499995 134 0 2670 --55.7500005 -55.5833335 -16.4166665 -16.2499995 143 0 2670 --55.5833335 -55.4166665 -16.4166665 -16.2499995 154 0 2670 --55.4166665 -55.2499995 -16.4166665 -16.2499995 530 0 2670 --55.2500005 -55.0833335 -16.4166665 -16.2499995 498 0 2670 --55.0833335 -54.9166665 -16.4166665 -16.2499995 435 0 2670 --54.9166665 -54.7499995 -16.4166665 -16.2499995 274 0 2670 --54.7500005 -54.5833335 -16.4166665 -16.2499995 357 0 2670 --54.5833335 -54.4166665 -16.4166665 -16.2499995 314 0 2670 --54.4166665 -54.2499995 -16.4166665 -16.2499995 241 0 2670 --54.2500005 -54.0833335 -16.4166665 -16.2499995 310 0 2670 --54.0833335 -53.9166665 -16.4166665 -16.2499995 368 0 2670 --53.9166665 -53.7499995 -16.4166665 -16.2499995 445 0 2670 --53.7500005 -53.5833335 -16.4166665 -16.2499995 500 0 2670 --53.5833335 -53.4166665 -16.4166665 -16.2499995 655 0 2670 --53.4166665 -53.2499995 -16.4166665 -16.2499995 705 0 2670 --53.2500005 -53.0833335 -16.4166665 -16.2499995 567 0 2670 --53.0833335 -52.9166665 -16.4166665 -16.2499995 584 0 2670 --52.9166665 -52.7499995 -16.4166665 -16.2499995 493 0 2670 --52.7500005 -52.5833335 -16.4166665 -16.2499995 445 0 2670 --52.5833335 -52.4166665 -16.4166665 -16.2499995 692 0 2670 --52.4166665 -52.2499995 -16.4166665 -16.2499995 938 0 2670 --52.2500005 -52.0833335 -16.4166665 -16.2499995 499 0 2670 --52.0833335 -51.9166665 -16.4166665 -16.2499995 367 0 2670 --51.9166665 -51.7499995 -16.4166665 -16.2499995 340 0 2670 --51.7500005 -51.5833335 -16.4166665 -16.2499995 393 0 2670 --51.5833335 -51.4166665 -16.4166665 -16.2499995 522 0 2670 --51.4166665 -51.2499995 -16.4166665 -16.2499995 462 0 2670 --51.2500005 -51.0833335 -16.4166665 -16.2499995 757 0 2670 --51.0833335 -50.9166665 -16.4166665 -16.2499995 477 0 2670 --50.9166665 -50.7499995 -16.4166665 -16.2499995 411 0 2670 --50.7500005 -50.5833335 -16.4166665 -16.2499995 595 0 2670 --50.5833335 -50.4166665 -16.4166665 -16.2499995 484 0 2670 --50.4166665 -50.2499995 -16.4166665 -16.2499995 633 0 2670 --50.2500005 -50.0833335 -16.4166665 -16.2499995 707 0 2670 --50.0833335 -49.9166665 -16.4166665 -16.2499995 841 0 2670 --49.9166665 -49.7499995 -16.4166665 -16.2499995 775 0 2670 --49.7500005 -49.5833335 -16.4166665 -16.2499995 733 0 2670 --49.5833335 -49.4166665 -16.4166665 -16.2499995 768 0 2670 --49.4166665 -49.2499995 -16.4166665 -16.2499995 828 0 2670 --49.2500005 -49.0833335 -16.4166665 -16.2499995 927 0 2670 --49.0833335 -48.9166665 -16.4166665 -16.2499995 950 0 2670 --48.9166665 -48.7499995 -16.4166665 -16.2499995 982 0 2670 --48.7500005 -48.5833335 -16.4166665 -16.2499995 940 0 2670 --48.5833335 -48.4166665 -16.4166665 -16.2499995 903 0 2670 --48.4166665 -48.2499995 -16.4166665 -16.2499995 844 0 2670 --48.2500005 -48.0833335 -16.4166665 -16.2499995 794 0 2670 --48.0833335 -47.9166665 -16.4166665 -16.2499995 892 0 2670 --47.9166665 -47.7499995 -16.4166665 -16.2499995 977 0 2670 --47.7500005 -47.5833335 -16.4166665 -16.2499995 928 0 2670 --47.5833335 -47.4166665 -16.4166665 -16.2499995 949 0 2670 --47.4166665 -47.2499995 -16.4166665 -16.2499995 882 0 2670 --47.2500005 -47.0833335 -16.4166665 -16.2499995 901 0 2670 --47.0833335 -46.9166665 -16.4166665 -16.2499995 621 0 2670 --46.9166665 -46.7499995 -16.4166665 -16.2499995 616 0 2670 --46.7500005 -46.5833335 -16.4166665 -16.2499995 726 0 2670 --46.5833335 -46.4166665 -16.4166665 -16.2499995 946 0 2670 --46.4166665 -46.2499995 -16.4166665 -16.2499995 897 0 2670 --46.2500005 -46.0833335 -16.4166665 -16.2499995 831 0 2670 --46.0833335 -45.9166665 -16.4166665 -16.2499995 710 0 2670 --45.9166665 -45.7499995 -16.4166665 -16.2499995 623 0 2670 --45.7500005 -45.5833335 -16.4166665 -16.2499995 525 0 2670 --45.5833335 -45.4166665 -16.4166665 -16.2499995 497 0 2670 --45.4166665 -45.2499995 -16.4166665 -16.2499995 488 0 2670 --45.2500005 -45.0833335 -16.4166665 -16.2499995 498 0 2670 --45.0833335 -44.9166665 -16.4166665 -16.2499995 542 0 2670 --44.9166665 -44.7499995 -16.4166665 -16.2499995 617 0 2670 --44.7500005 -44.5833335 -16.4166665 -16.2499995 627 0 2670 --44.5833335 -44.4166665 -16.4166665 -16.2499995 737 0 2670 --44.4166665 -44.2499995 -16.4166665 -16.2499995 758 0 2670 --44.2500005 -44.0833335 -16.4166665 -16.2499995 838 0 2670 --44.0833335 -43.9166665 -16.4166665 -16.2499995 755 0 2670 --43.9166665 -43.7499995 -16.4166665 -16.2499995 718 0 2670 --43.7500005 -43.5833335 -16.4166665 -16.2499995 596 0 2670 --43.5833335 -43.4166665 -16.4166665 -16.2499995 635 0 2670 --43.4166665 -43.2499995 -16.4166665 -16.2499995 917 0 2670 --43.2500005 -43.0833335 -16.4166665 -16.2499995 925 0 2670 --43.0833335 -42.9166665 -16.4166665 -16.2499995 908 0 2670 --42.9166665 -42.7499995 -16.4166665 -16.2499995 792 0 2670 --42.7500005 -42.5833335 -16.4166665 -16.2499995 888 0 2670 --42.5833335 -42.4166665 -16.4166665 -16.2499995 626 0 2670 --42.4166665 -42.2499995 -16.4166665 -16.2499995 537 0 2670 --42.2500005 -42.0833335 -16.4166665 -16.2499995 782 0 2670 --42.0833335 -41.9166665 -16.4166665 -16.2499995 545 0 2670 --41.9166665 -41.7499995 -16.4166665 -16.2499995 714 0 2670 --41.7500005 -41.5833335 -16.4166665 -16.2499995 656 0 2670 --41.5833335 -41.4166665 -16.4166665 -16.2499995 794 0 2670 --41.4166665 -41.2499995 -16.4166665 -16.2499995 606 0 2670 --41.2500005 -41.0833335 -16.4166665 -16.2499995 696 0 2670 --41.0833335 -40.9166665 -16.4166665 -16.2499995 976 0 2670 --40.9166665 -40.7499995 -16.4166665 -16.2499995 213 0 2670 --40.7500005 -40.5833335 -16.4166665 -16.2499995 519 0 2670 --40.5833335 -40.4166665 -16.4166665 -16.2499995 232 0 2670 --40.4166665 -40.2499995 -16.4166665 -16.2499995 571 0 2670 --40.2500005 -40.0833335 -16.4166665 -16.2499995 499 0 2670 --40.0833335 -39.9166665 -16.4166665 -16.2499995 732 0 2670 --65.0833335 -64.9166665 -16.5833335 -16.4166665 197 0 2670 --64.9166665 -64.7499995 -16.5833335 -16.4166665 201 0 2670 --64.7500005 -64.5833335 -16.5833335 -16.4166665 195 0 2670 --64.5833335 -64.4166665 -16.5833335 -16.4166665 205 0 2670 --64.4166665 -64.2499995 -16.5833335 -16.4166665 211 0 2670 --64.2500005 -64.0833335 -16.5833335 -16.4166665 206 0 2670 --64.0833335 -63.9166665 -16.5833335 -16.4166665 216 0 2670 --63.9166665 -63.7499995 -16.5833335 -16.4166665 203 0 2670 --63.7500005 -63.5833335 -16.5833335 -16.4166665 211 0 2670 --63.5833335 -63.4166665 -16.5833335 -16.4166665 216 0 2670 --63.4166665 -63.2499995 -16.5833335 -16.4166665 216 0 2670 --63.2500005 -63.0833335 -16.5833335 -16.4166665 222 0 2670 --63.0833335 -62.9166665 -16.5833335 -16.4166665 227 0 2670 --62.9166665 -62.7499995 -16.5833335 -16.4166665 240 0 2670 --62.7500005 -62.5833335 -16.5833335 -16.4166665 248 0 2670 --62.5833335 -62.4166665 -16.5833335 -16.4166665 281 0 2670 --62.4166665 -62.2499995 -16.5833335 -16.4166665 353 0 2670 --62.2500005 -62.0833335 -16.5833335 -16.4166665 482 0 2670 --62.0833335 -61.9166665 -16.5833335 -16.4166665 648 0 2670 --61.9166665 -61.7499995 -16.5833335 -16.4166665 441 0 2670 --61.7500005 -61.5833335 -16.5833335 -16.4166665 420 0 2670 --61.5833335 -61.4166665 -16.5833335 -16.4166665 450 0 2670 --61.4166665 -61.2499995 -16.5833335 -16.4166665 438 0 2670 --61.2500005 -61.0833335 -16.5833335 -16.4166665 468 0 2670 --61.0833335 -60.9166665 -16.5833335 -16.4166665 467 0 2670 --60.9166665 -60.7499995 -16.5833335 -16.4166665 487 0 2670 --60.7500005 -60.5833335 -16.5833335 -16.4166665 409 0 2670 --60.5833335 -60.4166665 -16.5833335 -16.4166665 396 0 2670 --60.4166665 -60.2499995 -16.5833335 -16.4166665 306 0 2670 --60.2500005 -60.0833335 -16.5833335 -16.4166665 270 0 2670 --60.0833335 -59.9166665 -16.5833335 -16.4166665 211 0 2670 --59.9166665 -59.7499995 -16.5833335 -16.4166665 213 0 2670 --59.7500005 -59.5833335 -16.5833335 -16.4166665 188 0 2670 --59.5833335 -59.4166665 -16.5833335 -16.4166665 173 0 2670 --59.4166665 -59.2499995 -16.5833335 -16.4166665 193 0 2670 --59.2500005 -59.0833335 -16.5833335 -16.4166665 182 0 2670 --59.0833335 -58.9166665 -16.5833335 -16.4166665 119 0 2670 --58.9166665 -58.7499995 -16.5833335 -16.4166665 112 0 2670 --58.7500005 -58.5833335 -16.5833335 -16.4166665 109 0 2670 --58.5833335 -58.4166665 -16.5833335 -16.4166665 104 0 2670 --58.4166665 -58.2499995 -16.5833335 -16.4166665 100 0 2670 --58.2500005 -58.0833335 -16.5833335 -16.4166665 160 0 2670 --58.0833335 -57.9166665 -16.5833335 -16.4166665 114 0 2670 --57.9166665 -57.7499995 -16.5833335 -16.4166665 113 0 2670 --57.7500005 -57.5833335 -16.5833335 -16.4166665 329 0 2670 --57.5833335 -57.4166665 -16.5833335 -16.4166665 368 0 2670 --57.4166665 -57.2499995 -16.5833335 -16.4166665 112 0 2670 --57.2500005 -57.0833335 -16.5833335 -16.4166665 129 0 2670 --57.0833335 -56.9166665 -16.5833335 -16.4166665 112 0 2670 --56.9166665 -56.7499995 -16.5833335 -16.4166665 118 0 2670 --56.7500005 -56.5833335 -16.5833335 -16.4166665 123 0 2670 --56.5833335 -56.4166665 -16.5833335 -16.4166665 124 0 2670 --56.4166665 -56.2499995 -16.5833335 -16.4166665 127 0 2670 --56.2500005 -56.0833335 -16.5833335 -16.4166665 133 0 2670 --56.0833335 -55.9166665 -16.5833335 -16.4166665 135 0 2670 --55.9166665 -55.7499995 -16.5833335 -16.4166665 138 0 2670 --55.7500005 -55.5833335 -16.5833335 -16.4166665 147 0 2670 --55.5833335 -55.4166665 -16.5833335 -16.4166665 156 0 2670 --55.4166665 -55.2499995 -16.5833335 -16.4166665 176 0 2670 --55.2500005 -55.0833335 -16.5833335 -16.4166665 422 0 2670 --55.0833335 -54.9166665 -16.5833335 -16.4166665 189 0 2670 --54.9166665 -54.7499995 -16.5833335 -16.4166665 224 0 2670 --54.7500005 -54.5833335 -16.5833335 -16.4166665 237 0 2670 --54.5833335 -54.4166665 -16.5833335 -16.4166665 241 0 2670 --54.4166665 -54.2499995 -16.5833335 -16.4166665 278 0 2670 --54.2500005 -54.0833335 -16.5833335 -16.4166665 272 0 2670 --54.0833335 -53.9166665 -16.5833335 -16.4166665 336 0 2670 --53.9166665 -53.7499995 -16.5833335 -16.4166665 542 0 2670 --53.7500005 -53.5833335 -16.5833335 -16.4166665 509 0 2670 --53.5833335 -53.4166665 -16.5833335 -16.4166665 575 0 2670 --53.4166665 -53.2499995 -16.5833335 -16.4166665 565 0 2670 --53.2500005 -53.0833335 -16.5833335 -16.4166665 724 0 2670 --53.0833335 -52.9166665 -16.5833335 -16.4166665 615 0 2670 --52.9166665 -52.7499995 -16.5833335 -16.4166665 552 0 2670 --52.7500005 -52.5833335 -16.5833335 -16.4166665 520 0 2670 --52.5833335 -52.4166665 -16.5833335 -16.4166665 495 0 2670 --52.4166665 -52.2499995 -16.5833335 -16.4166665 616 0 2670 --52.2500005 -52.0833335 -16.5833335 -16.4166665 767 0 2670 --52.0833335 -51.9166665 -16.5833335 -16.4166665 651 0 2670 --51.9166665 -51.7499995 -16.5833335 -16.4166665 385 0 2670 --51.7500005 -51.5833335 -16.5833335 -16.4166665 475 0 2670 --51.5833335 -51.4166665 -16.5833335 -16.4166665 713 0 2670 --51.4166665 -51.2499995 -16.5833335 -16.4166665 484 0 2670 --51.2500005 -51.0833335 -16.5833335 -16.4166665 531 0 2670 --51.0833335 -50.9166665 -16.5833335 -16.4166665 460 0 2670 --50.9166665 -50.7499995 -16.5833335 -16.4166665 637 0 2670 --50.7500005 -50.5833335 -16.5833335 -16.4166665 562 0 2670 --50.5833335 -50.4166665 -16.5833335 -16.4166665 450 0 2670 --50.4166665 -50.2499995 -16.5833335 -16.4166665 578 0 2670 --50.2500005 -50.0833335 -16.5833335 -16.4166665 611 0 2670 --50.0833335 -49.9166665 -16.5833335 -16.4166665 792 0 2670 --49.9166665 -49.7499995 -16.5833335 -16.4166665 703 0 2670 --49.7500005 -49.5833335 -16.5833335 -16.4166665 634 0 2670 --49.5833335 -49.4166665 -16.5833335 -16.4166665 750 0 2670 --49.4166665 -49.2499995 -16.5833335 -16.4166665 751 0 2670 --49.2500005 -49.0833335 -16.5833335 -16.4166665 819 0 2670 --49.0833335 -48.9166665 -16.5833335 -16.4166665 956 0 2670 --48.9166665 -48.7499995 -16.5833335 -16.4166665 1016 0 2670 --48.7500005 -48.5833335 -16.5833335 -16.4166665 904 0 2670 --48.5833335 -48.4166665 -16.5833335 -16.4166665 903 0 2670 --48.4166665 -48.2499995 -16.5833335 -16.4166665 1019 0 2670 --48.2500005 -48.0833335 -16.5833335 -16.4166665 930 0 2670 --48.0833335 -47.9166665 -16.5833335 -16.4166665 809 0 2670 --47.9166665 -47.7499995 -16.5833335 -16.4166665 808 0 2670 --47.7500005 -47.5833335 -16.5833335 -16.4166665 887 0 2670 --47.5833335 -47.4166665 -16.5833335 -16.4166665 881 0 2670 --47.4166665 -47.2499995 -16.5833335 -16.4166665 958 0 2670 --47.2500005 -47.0833335 -16.5833335 -16.4166665 917 0 2670 --47.0833335 -46.9166665 -16.5833335 -16.4166665 872 0 2670 --46.9166665 -46.7499995 -16.5833335 -16.4166665 583 0 2670 --46.7500005 -46.5833335 -16.5833335 -16.4166665 562 0 2670 --46.5833335 -46.4166665 -16.5833335 -16.4166665 578 0 2670 --46.4166665 -46.2499995 -16.5833335 -16.4166665 909 0 2670 --46.2500005 -46.0833335 -16.5833335 -16.4166665 846 0 2670 --46.0833335 -45.9166665 -16.5833335 -16.4166665 749 0 2670 --45.9166665 -45.7499995 -16.5833335 -16.4166665 603 0 2670 --45.7500005 -45.5833335 -16.5833335 -16.4166665 564 0 2670 --45.5833335 -45.4166665 -16.5833335 -16.4166665 611 0 2670 --45.4166665 -45.2499995 -16.5833335 -16.4166665 522 0 2670 --45.2500005 -45.0833335 -16.5833335 -16.4166665 509 0 2670 --45.0833335 -44.9166665 -16.5833335 -16.4166665 530 0 2670 --44.9166665 -44.7499995 -16.5833335 -16.4166665 574 0 2670 --44.7500005 -44.5833335 -16.5833335 -16.4166665 603 0 2670 --44.5833335 -44.4166665 -16.5833335 -16.4166665 725 0 2670 --44.4166665 -44.2499995 -16.5833335 -16.4166665 794 0 2670 --44.2500005 -44.0833335 -16.5833335 -16.4166665 841 0 2670 --44.0833335 -43.9166665 -16.5833335 -16.4166665 902 0 2670 --43.9166665 -43.7499995 -16.5833335 -16.4166665 703 0 2670 --43.7500005 -43.5833335 -16.5833335 -16.4166665 595 0 2670 --43.5833335 -43.4166665 -16.5833335 -16.4166665 663 0 2670 --43.4166665 -43.2499995 -16.5833335 -16.4166665 945 0 2670 --43.2500005 -43.0833335 -16.5833335 -16.4166665 908 0 2670 --43.0833335 -42.9166665 -16.5833335 -16.4166665 822 0 2670 --42.9166665 -42.7499995 -16.5833335 -16.4166665 670 0 2670 --42.7500005 -42.5833335 -16.5833335 -16.4166665 946 0 2670 --42.5833335 -42.4166665 -16.5833335 -16.4166665 632 0 2670 --42.4166665 -42.2499995 -16.5833335 -16.4166665 730 0 2670 --42.2500005 -42.0833335 -16.5833335 -16.4166665 776 0 2670 --42.0833335 -41.9166665 -16.5833335 -16.4166665 866 0 2670 --41.9166665 -41.7499995 -16.5833335 -16.4166665 566 0 2670 --41.7500005 -41.5833335 -16.5833335 -16.4166665 459 0 2670 --41.5833335 -41.4166665 -16.5833335 -16.4166665 336 0 2670 --41.4166665 -41.2499995 -16.5833335 -16.4166665 311 0 2670 --41.2500005 -41.0833335 -16.5833335 -16.4166665 729 0 2670 --41.0833335 -40.9166665 -16.5833335 -16.4166665 519 0 2670 --40.9166665 -40.7499995 -16.5833335 -16.4166665 557 0 2670 --40.7500005 -40.5833335 -16.5833335 -16.4166665 542 0 2670 --40.5833335 -40.4166665 -16.5833335 -16.4166665 409 0 2670 --40.4166665 -40.2499995 -16.5833335 -16.4166665 723 0 2670 --40.2500005 -40.0833335 -16.5833335 -16.4166665 548 0 2670 --40.0833335 -39.9166665 -16.5833335 -16.4166665 277 0 2670 --65.0833335 -64.9166665 -16.7500005 -16.5833335 215 0 2670 --64.9166665 -64.7499995 -16.7500005 -16.5833335 208 0 2670 --64.7500005 -64.5833335 -16.7500005 -16.5833335 201 0 2670 --64.5833335 -64.4166665 -16.7500005 -16.5833335 209 0 2670 --64.4166665 -64.2499995 -16.7500005 -16.5833335 209 0 2670 --64.2500005 -64.0833335 -16.7500005 -16.5833335 234 0 2670 --64.0833335 -63.9166665 -16.7500005 -16.5833335 227 0 2670 --63.9166665 -63.7499995 -16.7500005 -16.5833335 224 0 2670 --63.7500005 -63.5833335 -16.7500005 -16.5833335 213 0 2670 --63.5833335 -63.4166665 -16.7500005 -16.5833335 222 0 2670 --63.4166665 -63.2499995 -16.7500005 -16.5833335 220 0 2670 --63.2500005 -63.0833335 -16.7500005 -16.5833335 230 0 2670 --63.0833335 -62.9166665 -16.7500005 -16.5833335 235 0 2670 --62.9166665 -62.7499995 -16.7500005 -16.5833335 235 0 2670 --62.7500005 -62.5833335 -16.7500005 -16.5833335 241 0 2670 --62.5833335 -62.4166665 -16.7500005 -16.5833335 244 0 2670 --62.4166665 -62.2499995 -16.7500005 -16.5833335 447 0 2670 --62.2500005 -62.0833335 -16.7500005 -16.5833335 554 0 2670 --62.0833335 -61.9166665 -16.7500005 -16.5833335 442 0 2670 --61.9166665 -61.7499995 -16.7500005 -16.5833335 357 0 2670 --61.7500005 -61.5833335 -16.7500005 -16.5833335 441 0 2670 --61.5833335 -61.4166665 -16.7500005 -16.5833335 488 0 2670 --61.4166665 -61.2499995 -16.7500005 -16.5833335 451 0 2670 --61.2500005 -61.0833335 -16.7500005 -16.5833335 426 0 2670 --61.0833335 -60.9166665 -16.7500005 -16.5833335 453 0 2670 --60.9166665 -60.7499995 -16.7500005 -16.5833335 518 0 2670 --60.7500005 -60.5833335 -16.7500005 -16.5833335 464 0 2670 --60.5833335 -60.4166665 -16.7500005 -16.5833335 422 0 2670 --60.4166665 -60.2499995 -16.7500005 -16.5833335 269 0 2670 --60.2500005 -60.0833335 -16.7500005 -16.5833335 281 0 2670 --60.0833335 -59.9166665 -16.7500005 -16.5833335 259 0 2670 --59.9166665 -59.7499995 -16.7500005 -16.5833335 225 0 2670 --59.7500005 -59.5833335 -16.7500005 -16.5833335 227 0 2670 --59.5833335 -59.4166665 -16.7500005 -16.5833335 177 0 2670 --59.4166665 -59.2499995 -16.7500005 -16.5833335 169 0 2670 --59.2500005 -59.0833335 -16.7500005 -16.5833335 128 0 2670 --59.0833335 -58.9166665 -16.7500005 -16.5833335 144 0 2670 --58.9166665 -58.7499995 -16.7500005 -16.5833335 147 0 2670 --58.7500005 -58.5833335 -16.7500005 -16.5833335 103 0 2670 --58.5833335 -58.4166665 -16.7500005 -16.5833335 101 0 2670 --58.4166665 -58.2499995 -16.7500005 -16.5833335 107 0 2670 --58.2500005 -58.0833335 -16.7500005 -16.5833335 108 0 2670 --58.0833335 -57.9166665 -16.7500005 -16.5833335 128 0 2670 --57.9166665 -57.7499995 -16.7500005 -16.5833335 145 0 2670 --57.7500005 -57.5833335 -16.7500005 -16.5833335 141 0 2670 --57.5833335 -57.4166665 -16.7500005 -16.5833335 103 0 2670 --57.4166665 -57.2499995 -16.7500005 -16.5833335 104 0 2670 --57.2500005 -57.0833335 -16.7500005 -16.5833335 107 0 2670 --57.0833335 -56.9166665 -16.7500005 -16.5833335 114 0 2670 --56.9166665 -56.7499995 -16.7500005 -16.5833335 115 0 2670 --56.7500005 -56.5833335 -16.7500005 -16.5833335 119 0 2670 --56.5833335 -56.4166665 -16.7500005 -16.5833335 124 0 2670 --56.4166665 -56.2499995 -16.7500005 -16.5833335 129 0 2670 --56.2500005 -56.0833335 -16.7500005 -16.5833335 131 0 2670 --56.0833335 -55.9166665 -16.7500005 -16.5833335 142 0 2670 --55.9166665 -55.7499995 -16.7500005 -16.5833335 144 0 2670 --55.7500005 -55.5833335 -16.7500005 -16.5833335 148 0 2670 --55.5833335 -55.4166665 -16.7500005 -16.5833335 183 0 2670 --55.4166665 -55.2499995 -16.7500005 -16.5833335 171 0 2670 --55.2500005 -55.0833335 -16.7500005 -16.5833335 176 0 2670 --55.0833335 -54.9166665 -16.7500005 -16.5833335 371 0 2670 --54.9166665 -54.7499995 -16.7500005 -16.5833335 528 0 2670 --54.7500005 -54.5833335 -16.7500005 -16.5833335 464 0 2670 --54.5833335 -54.4166665 -16.7500005 -16.5833335 330 0 2670 --54.4166665 -54.2499995 -16.7500005 -16.5833335 317 0 2670 --54.2500005 -54.0833335 -16.7500005 -16.5833335 540 0 2670 --54.0833335 -53.9166665 -16.7500005 -16.5833335 499 0 2670 --53.9166665 -53.7499995 -16.7500005 -16.5833335 602 0 2670 --53.7500005 -53.5833335 -16.7500005 -16.5833335 677 0 2670 --53.5833335 -53.4166665 -16.7500005 -16.5833335 599 0 2670 --53.4166665 -53.2499995 -16.7500005 -16.5833335 541 0 2670 --53.2500005 -53.0833335 -16.7500005 -16.5833335 686 0 2670 --53.0833335 -52.9166665 -16.7500005 -16.5833335 596 0 2670 --52.9166665 -52.7499995 -16.7500005 -16.5833335 525 0 2670 --52.7500005 -52.5833335 -16.7500005 -16.5833335 533 0 2670 --52.5833335 -52.4166665 -16.7500005 -16.5833335 537 0 2670 --52.4166665 -52.2499995 -16.7500005 -16.5833335 543 0 2670 --52.2500005 -52.0833335 -16.7500005 -16.5833335 661 0 2670 --52.0833335 -51.9166665 -16.7500005 -16.5833335 712 0 2670 --51.9166665 -51.7499995 -16.7500005 -16.5833335 630 0 2670 --51.7500005 -51.5833335 -16.7500005 -16.5833335 668 0 2670 --51.5833335 -51.4166665 -16.7500005 -16.5833335 675 0 2670 --51.4166665 -51.2499995 -16.7500005 -16.5833335 611 0 2670 --51.2500005 -51.0833335 -16.7500005 -16.5833335 598 0 2670 --51.0833335 -50.9166665 -16.7500005 -16.5833335 581 0 2670 --50.9166665 -50.7499995 -16.7500005 -16.5833335 555 0 2670 --50.7500005 -50.5833335 -16.7500005 -16.5833335 787 0 2670 --50.5833335 -50.4166665 -16.7500005 -16.5833335 500 0 2670 --50.4166665 -50.2499995 -16.7500005 -16.5833335 620 0 2670 --50.2500005 -50.0833335 -16.7500005 -16.5833335 649 0 2670 --50.0833335 -49.9166665 -16.7500005 -16.5833335 681 0 2670 --49.9166665 -49.7499995 -16.7500005 -16.5833335 625 0 2670 --49.7500005 -49.5833335 -16.7500005 -16.5833335 609 0 2670 --49.5833335 -49.4166665 -16.7500005 -16.5833335 787 0 2670 --49.4166665 -49.2499995 -16.7500005 -16.5833335 789 0 2670 --49.2500005 -49.0833335 -16.7500005 -16.5833335 752 0 2670 --49.0833335 -48.9166665 -16.7500005 -16.5833335 866 0 2670 --48.9166665 -48.7499995 -16.7500005 -16.5833335 903 0 2670 --48.7500005 -48.5833335 -16.7500005 -16.5833335 992 0 2670 --48.5833335 -48.4166665 -16.7500005 -16.5833335 862 0 2670 --48.4166665 -48.2499995 -16.7500005 -16.5833335 820 0 2670 --48.2500005 -48.0833335 -16.7500005 -16.5833335 926 0 2670 --48.0833335 -47.9166665 -16.7500005 -16.5833335 840 0 2670 --47.9166665 -47.7499995 -16.7500005 -16.5833335 839 0 2670 --47.7500005 -47.5833335 -16.7500005 -16.5833335 976 0 2670 --47.5833335 -47.4166665 -16.7500005 -16.5833335 951 0 2670 --47.4166665 -47.2499995 -16.7500005 -16.5833335 908 0 2670 --47.2500005 -47.0833335 -16.7500005 -16.5833335 926 0 2670 --47.0833335 -46.9166665 -16.7500005 -16.5833335 850 0 2670 --46.9166665 -46.7499995 -16.7500005 -16.5833335 590 0 2670 --46.7500005 -46.5833335 -16.7500005 -16.5833335 592 0 2670 --46.5833335 -46.4166665 -16.7500005 -16.5833335 531 0 2670 --46.4166665 -46.2499995 -16.7500005 -16.5833335 627 0 2670 --46.2500005 -46.0833335 -16.7500005 -16.5833335 748 0 2670 --46.0833335 -45.9166665 -16.7500005 -16.5833335 703 0 2670 --45.9166665 -45.7499995 -16.7500005 -16.5833335 752 0 2670 --45.7500005 -45.5833335 -16.7500005 -16.5833335 649 0 2670 --45.5833335 -45.4166665 -16.7500005 -16.5833335 583 0 2670 --45.4166665 -45.2499995 -16.7500005 -16.5833335 533 0 2670 --45.2500005 -45.0833335 -16.7500005 -16.5833335 478 0 2670 --45.0833335 -44.9166665 -16.7500005 -16.5833335 506 0 2670 --44.9166665 -44.7499995 -16.7500005 -16.5833335 531 0 2670 --44.7500005 -44.5833335 -16.7500005 -16.5833335 715 0 2670 --44.5833335 -44.4166665 -16.7500005 -16.5833335 742 0 2670 --44.4166665 -44.2499995 -16.7500005 -16.5833335 835 0 2670 --44.2500005 -44.0833335 -16.7500005 -16.5833335 801 0 2670 --44.0833335 -43.9166665 -16.7500005 -16.5833335 826 0 2670 --43.9166665 -43.7499995 -16.7500005 -16.5833335 604 0 2670 --43.7500005 -43.5833335 -16.7500005 -16.5833335 603 0 2670 --43.5833335 -43.4166665 -16.7500005 -16.5833335 780 0 2670 --43.4166665 -43.2499995 -16.7500005 -16.5833335 967 0 2670 --43.2500005 -43.0833335 -16.7500005 -16.5833335 782 0 2670 --43.0833335 -42.9166665 -16.7500005 -16.5833335 806 0 2670 --42.9166665 -42.7499995 -16.7500005 -16.5833335 637 0 2670 --42.7500005 -42.5833335 -16.7500005 -16.5833335 786 0 2670 --42.5833335 -42.4166665 -16.7500005 -16.5833335 484 0 2670 --42.4166665 -42.2499995 -16.7500005 -16.5833335 432 0 2670 --42.2500005 -42.0833335 -16.7500005 -16.5833335 398 0 2670 --42.0833335 -41.9166665 -16.7500005 -16.5833335 444 0 2670 --41.9166665 -41.7499995 -16.7500005 -16.5833335 306 0 2670 --41.7500005 -41.5833335 -16.7500005 -16.5833335 712 0 2670 --41.5833335 -41.4166665 -16.7500005 -16.5833335 370 0 2670 --41.4166665 -41.2499995 -16.7500005 -16.5833335 708 0 2670 --41.2500005 -41.0833335 -16.7500005 -16.5833335 677 0 2670 --41.0833335 -40.9166665 -16.7500005 -16.5833335 284 0 2670 --40.9166665 -40.7499995 -16.7500005 -16.5833335 596 0 2670 --40.7500005 -40.5833335 -16.7500005 -16.5833335 639 0 2670 --40.5833335 -40.4166665 -16.7500005 -16.5833335 825 0 2670 --40.4166665 -40.2499995 -16.7500005 -16.5833335 840 0 2670 --40.2500005 -40.0833335 -16.7500005 -16.5833335 444 0 2670 --40.0833335 -39.9166665 -16.7500005 -16.5833335 468 0 2670 --65.0833335 -64.9166665 -16.9166665 -16.7499995 215 0 2670 --64.9166665 -64.7499995 -16.9166665 -16.7499995 200 0 2670 --64.7500005 -64.5833335 -16.9166665 -16.7499995 201 0 2670 --64.5833335 -64.4166665 -16.9166665 -16.7499995 205 0 2670 --64.4166665 -64.2499995 -16.9166665 -16.7499995 226 0 2670 --64.2500005 -64.0833335 -16.9166665 -16.7499995 239 0 2670 --64.0833335 -63.9166665 -16.9166665 -16.7499995 233 0 2670 --63.9166665 -63.7499995 -16.9166665 -16.7499995 224 0 2670 --63.7500005 -63.5833335 -16.9166665 -16.7499995 221 0 2670 --63.5833335 -63.4166665 -16.9166665 -16.7499995 219 0 2670 --63.4166665 -63.2499995 -16.9166665 -16.7499995 228 0 2670 --63.2500005 -63.0833335 -16.9166665 -16.7499995 239 0 2670 --63.0833335 -62.9166665 -16.9166665 -16.7499995 240 0 2670 --62.9166665 -62.7499995 -16.9166665 -16.7499995 243 0 2670 --62.7500005 -62.5833335 -16.9166665 -16.7499995 255 0 2670 --62.5833335 -62.4166665 -16.9166665 -16.7499995 253 0 2670 --62.4166665 -62.2499995 -16.9166665 -16.7499995 247 0 2670 --62.2500005 -62.0833335 -16.9166665 -16.7499995 379 0 2670 --62.0833335 -61.9166665 -16.9166665 -16.7499995 334 0 2670 --61.9166665 -61.7499995 -16.9166665 -16.7499995 398 0 2670 --61.7500005 -61.5833335 -16.9166665 -16.7499995 418 0 2670 --61.5833335 -61.4166665 -16.9166665 -16.7499995 401 0 2670 --61.4166665 -61.2499995 -16.9166665 -16.7499995 389 0 2670 --61.2500005 -61.0833335 -16.9166665 -16.7499995 431 0 2670 --61.0833335 -60.9166665 -16.9166665 -16.7499995 388 0 2670 --60.9166665 -60.7499995 -16.9166665 -16.7499995 401 0 2670 --60.7500005 -60.5833335 -16.9166665 -16.7499995 392 0 2670 --60.5833335 -60.4166665 -16.9166665 -16.7499995 337 0 2670 --60.4166665 -60.2499995 -16.9166665 -16.7499995 308 0 2670 --60.2500005 -60.0833335 -16.9166665 -16.7499995 289 0 2670 --60.0833335 -59.9166665 -16.9166665 -16.7499995 291 0 2670 --59.9166665 -59.7499995 -16.9166665 -16.7499995 212 0 2670 --59.7500005 -59.5833335 -16.9166665 -16.7499995 203 0 2670 --59.5833335 -59.4166665 -16.9166665 -16.7499995 171 0 2670 --59.4166665 -59.2499995 -16.9166665 -16.7499995 158 0 2670 --59.2500005 -59.0833335 -16.9166665 -16.7499995 132 0 2670 --59.0833335 -58.9166665 -16.9166665 -16.7499995 120 0 2670 --58.9166665 -58.7499995 -16.9166665 -16.7499995 111 0 2670 --58.7500005 -58.5833335 -16.9166665 -16.7499995 106 0 2670 --58.5833335 -58.4166665 -16.9166665 -16.7499995 99 0 2670 --58.4166665 -58.2499995 -16.9166665 -16.7499995 103 0 2670 --58.2500005 -58.0833335 -16.9166665 -16.7499995 105 0 2670 --58.0833335 -57.9166665 -16.9166665 -16.7499995 106 0 2670 --57.9166665 -57.7499995 -16.9166665 -16.7499995 108 0 2670 --57.7500005 -57.5833335 -16.9166665 -16.7499995 102 0 2670 --57.5833335 -57.4166665 -16.9166665 -16.7499995 107 0 2670 --57.4166665 -57.2499995 -16.9166665 -16.7499995 103 0 2670 --57.2500005 -57.0833335 -16.9166665 -16.7499995 108 0 2670 --57.0833335 -56.9166665 -16.9166665 -16.7499995 111 0 2670 --56.9166665 -56.7499995 -16.9166665 -16.7499995 113 0 2670 --56.7500005 -56.5833335 -16.9166665 -16.7499995 120 0 2670 --56.5833335 -56.4166665 -16.9166665 -16.7499995 122 0 2670 --56.4166665 -56.2499995 -16.9166665 -16.7499995 131 0 2670 --56.2500005 -56.0833335 -16.9166665 -16.7499995 138 0 2670 --56.0833335 -55.9166665 -16.9166665 -16.7499995 134 0 2670 --55.9166665 -55.7499995 -16.9166665 -16.7499995 139 0 2670 --55.7500005 -55.5833335 -16.9166665 -16.7499995 150 0 2670 --55.5833335 -55.4166665 -16.9166665 -16.7499995 155 0 2670 --55.4166665 -55.2499995 -16.9166665 -16.7499995 163 0 2670 --55.2500005 -55.0833335 -16.9166665 -16.7499995 168 0 2670 --55.0833335 -54.9166665 -16.9166665 -16.7499995 193 0 2670 --54.9166665 -54.7499995 -16.9166665 -16.7499995 475 0 2670 --54.7500005 -54.5833335 -16.9166665 -16.7499995 439 0 2670 --54.5833335 -54.4166665 -16.9166665 -16.7499995 321 0 2670 --54.4166665 -54.2499995 -16.9166665 -16.7499995 359 0 2670 --54.2500005 -54.0833335 -16.9166665 -16.7499995 416 0 2670 --54.0833335 -53.9166665 -16.9166665 -16.7499995 709 0 2670 --53.9166665 -53.7499995 -16.9166665 -16.7499995 747 0 2670 --53.7500005 -53.5833335 -16.9166665 -16.7499995 758 0 2670 --53.5833335 -53.4166665 -16.9166665 -16.7499995 690 0 2670 --53.4166665 -53.2499995 -16.9166665 -16.7499995 549 0 2670 --53.2500005 -53.0833335 -16.9166665 -16.7499995 496 0 2670 --53.0833335 -52.9166665 -16.9166665 -16.7499995 507 0 2670 --52.9166665 -52.7499995 -16.9166665 -16.7499995 456 0 2670 --52.7500005 -52.5833335 -16.9166665 -16.7499995 566 0 2670 --52.5833335 -52.4166665 -16.9166665 -16.7499995 606 0 2670 --52.4166665 -52.2499995 -16.9166665 -16.7499995 566 0 2670 --52.2500005 -52.0833335 -16.9166665 -16.7499995 582 0 2670 --52.0833335 -51.9166665 -16.9166665 -16.7499995 714 0 2670 --51.9166665 -51.7499995 -16.9166665 -16.7499995 658 0 2670 --51.7500005 -51.5833335 -16.9166665 -16.7499995 640 0 2670 --51.5833335 -51.4166665 -16.9166665 -16.7499995 818 0 2670 --51.4166665 -51.2499995 -16.9166665 -16.7499995 645 0 2670 --51.2500005 -51.0833335 -16.9166665 -16.7499995 531 0 2670 --51.0833335 -50.9166665 -16.9166665 -16.7499995 748 0 2670 --50.9166665 -50.7499995 -16.9166665 -16.7499995 583 0 2670 --50.7500005 -50.5833335 -16.9166665 -16.7499995 637 0 2670 --50.5833335 -50.4166665 -16.9166665 -16.7499995 743 0 2670 --50.4166665 -50.2499995 -16.9166665 -16.7499995 578 0 2670 --50.2500005 -50.0833335 -16.9166665 -16.7499995 665 0 2670 --50.0833335 -49.9166665 -16.9166665 -16.7499995 601 0 2670 --49.9166665 -49.7499995 -16.9166665 -16.7499995 654 0 2670 --49.7500005 -49.5833335 -16.9166665 -16.7499995 763 0 2670 --49.5833335 -49.4166665 -16.9166665 -16.7499995 748 0 2670 --49.4166665 -49.2499995 -16.9166665 -16.7499995 894 0 2670 --49.2500005 -49.0833335 -16.9166665 -16.7499995 698 0 2670 --49.0833335 -48.9166665 -16.9166665 -16.7499995 764 0 2670 --48.9166665 -48.7499995 -16.9166665 -16.7499995 874 0 2670 --48.7500005 -48.5833335 -16.9166665 -16.7499995 902 0 2670 --48.5833335 -48.4166665 -16.9166665 -16.7499995 955 0 2670 --48.4166665 -48.2499995 -16.9166665 -16.7499995 906 0 2670 --48.2500005 -48.0833335 -16.9166665 -16.7499995 948 0 2670 --48.0833335 -47.9166665 -16.9166665 -16.7499995 959 0 2670 --47.9166665 -47.7499995 -16.9166665 -16.7499995 852 0 2670 --47.7500005 -47.5833335 -16.9166665 -16.7499995 1140 0 2670 --47.5833335 -47.4166665 -16.9166665 -16.7499995 974 0 2670 --47.4166665 -47.2499995 -16.9166665 -16.7499995 925 0 2670 --47.2500005 -47.0833335 -16.9166665 -16.7499995 870 0 2670 --47.0833335 -46.9166665 -16.9166665 -16.7499995 826 0 2670 --46.9166665 -46.7499995 -16.9166665 -16.7499995 628 0 2670 --46.7500005 -46.5833335 -16.9166665 -16.7499995 545 0 2670 --46.5833335 -46.4166665 -16.9166665 -16.7499995 536 0 2670 --46.4166665 -46.2499995 -16.9166665 -16.7499995 539 0 2670 --46.2500005 -46.0833335 -16.9166665 -16.7499995 550 0 2670 --46.0833335 -45.9166665 -16.9166665 -16.7499995 644 0 2670 --45.9166665 -45.7499995 -16.9166665 -16.7499995 737 0 2670 --45.7500005 -45.5833335 -16.9166665 -16.7499995 678 0 2670 --45.5833335 -45.4166665 -16.9166665 -16.7499995 562 0 2670 --45.4166665 -45.2499995 -16.9166665 -16.7499995 531 0 2670 --45.2500005 -45.0833335 -16.9166665 -16.7499995 547 0 2670 --45.0833335 -44.9166665 -16.9166665 -16.7499995 515 0 2670 --44.9166665 -44.7499995 -16.9166665 -16.7499995 535 0 2670 --44.7500005 -44.5833335 -16.9166665 -16.7499995 694 0 2670 --44.5833335 -44.4166665 -16.9166665 -16.7499995 727 0 2670 --44.4166665 -44.2499995 -16.9166665 -16.7499995 880 0 2670 --44.2500005 -44.0833335 -16.9166665 -16.7499995 918 0 2670 --44.0833335 -43.9166665 -16.9166665 -16.7499995 901 0 2670 --43.9166665 -43.7499995 -16.9166665 -16.7499995 885 0 2670 --43.7500005 -43.5833335 -16.9166665 -16.7499995 662 0 2670 --43.5833335 -43.4166665 -16.9166665 -16.7499995 1112 0 2670 --43.4166665 -43.2499995 -16.9166665 -16.7499995 1159 0 2670 --43.2500005 -43.0833335 -16.9166665 -16.7499995 845 0 2670 --43.0833335 -42.9166665 -16.9166665 -16.7499995 813 0 2670 --42.9166665 -42.7499995 -16.9166665 -16.7499995 671 0 2670 --42.7500005 -42.5833335 -16.9166665 -16.7499995 725 0 2670 --42.5833335 -42.4166665 -16.9166665 -16.7499995 712 0 2670 --42.4166665 -42.2499995 -16.9166665 -16.7499995 381 0 2670 --42.2500005 -42.0833335 -16.9166665 -16.7499995 430 0 2670 --42.0833335 -41.9166665 -16.9166665 -16.7499995 313 0 2670 --41.9166665 -41.7499995 -16.9166665 -16.7499995 375 0 2670 --41.7500005 -41.5833335 -16.9166665 -16.7499995 811 0 2670 --41.5833335 -41.4166665 -16.9166665 -16.7499995 791 0 2670 --41.4166665 -41.2499995 -16.9166665 -16.7499995 759 0 2670 --41.2500005 -41.0833335 -16.9166665 -16.7499995 814 0 2670 --41.0833335 -40.9166665 -16.9166665 -16.7499995 409 0 2670 --40.9166665 -40.7499995 -16.9166665 -16.7499995 586 0 2670 --40.7500005 -40.5833335 -16.9166665 -16.7499995 851 0 2670 --40.5833335 -40.4166665 -16.9166665 -16.7499995 492 0 2670 --40.4166665 -40.2499995 -16.9166665 -16.7499995 448 0 2670 --40.2500005 -40.0833335 -16.9166665 -16.7499995 316 0 2670 --40.0833335 -39.9166665 -16.9166665 -16.7499995 191 0 2670 --65.0833335 -64.9166665 -17.0833335 -16.9166665 235 0 2670 --64.9166665 -64.7499995 -17.0833335 -16.9166665 215 0 2670 --64.7500005 -64.5833335 -17.0833335 -16.9166665 211 0 2670 --64.5833335 -64.4166665 -17.0833335 -16.9166665 219 0 2670 --64.4166665 -64.2499995 -17.0833335 -16.9166665 231 0 2670 --64.2500005 -64.0833335 -17.0833335 -16.9166665 236 0 2670 --64.0833335 -63.9166665 -17.0833335 -16.9166665 251 0 2670 --63.9166665 -63.7499995 -17.0833335 -16.9166665 249 0 2670 --63.7500005 -63.5833335 -17.0833335 -16.9166665 304 0 2670 --63.5833335 -63.4166665 -17.0833335 -16.9166665 237 0 2670 --63.4166665 -63.2499995 -17.0833335 -16.9166665 245 0 2670 --63.2500005 -63.0833335 -17.0833335 -16.9166665 240 0 2670 --63.0833335 -62.9166665 -17.0833335 -16.9166665 252 0 2670 --62.9166665 -62.7499995 -17.0833335 -16.9166665 249 0 2670 --62.7500005 -62.5833335 -17.0833335 -16.9166665 248 0 2670 --62.5833335 -62.4166665 -17.0833335 -16.9166665 251 0 2670 --62.4166665 -62.2499995 -17.0833335 -16.9166665 249 0 2670 --62.2500005 -62.0833335 -17.0833335 -16.9166665 256 0 2670 --62.0833335 -61.9166665 -17.0833335 -16.9166665 291 0 2670 --61.9166665 -61.7499995 -17.0833335 -16.9166665 320 0 2670 --61.7500005 -61.5833335 -17.0833335 -16.9166665 324 0 2670 --61.5833335 -61.4166665 -17.0833335 -16.9166665 435 0 2670 --61.4166665 -61.2499995 -17.0833335 -16.9166665 435 0 2670 --61.2500005 -61.0833335 -17.0833335 -16.9166665 380 0 2670 --61.0833335 -60.9166665 -17.0833335 -16.9166665 363 0 2670 --60.9166665 -60.7499995 -17.0833335 -16.9166665 315 0 2670 --60.7500005 -60.5833335 -17.0833335 -16.9166665 301 0 2670 --60.5833335 -60.4166665 -17.0833335 -16.9166665 320 0 2670 --60.4166665 -60.2499995 -17.0833335 -16.9166665 342 0 2670 --60.2500005 -60.0833335 -17.0833335 -16.9166665 369 0 2670 --60.0833335 -59.9166665 -17.0833335 -16.9166665 247 0 2670 --59.9166665 -59.7499995 -17.0833335 -16.9166665 223 0 2670 --59.7500005 -59.5833335 -17.0833335 -16.9166665 242 0 2670 --59.5833335 -59.4166665 -17.0833335 -16.9166665 234 0 2670 --59.4166665 -59.2499995 -17.0833335 -16.9166665 154 0 2670 --59.2500005 -59.0833335 -17.0833335 -16.9166665 134 0 2670 --59.0833335 -58.9166665 -17.0833335 -16.9166665 122 0 2670 --58.9166665 -58.7499995 -17.0833335 -16.9166665 119 0 2670 --58.7500005 -58.5833335 -17.0833335 -16.9166665 104 0 2670 --58.5833335 -58.4166665 -17.0833335 -16.9166665 99 0 2670 --58.4166665 -58.2499995 -17.0833335 -16.9166665 98 0 2670 --58.2500005 -58.0833335 -17.0833335 -16.9166665 100 0 2670 --58.0833335 -57.9166665 -17.0833335 -16.9166665 102 0 2670 --57.9166665 -57.7499995 -17.0833335 -16.9166665 103 0 2670 --57.7500005 -57.5833335 -17.0833335 -16.9166665 103 0 2670 --57.5833335 -57.4166665 -17.0833335 -16.9166665 101 0 2670 --57.4166665 -57.2499995 -17.0833335 -16.9166665 100 0 2670 --57.2500005 -57.0833335 -17.0833335 -16.9166665 104 0 2670 --57.0833335 -56.9166665 -17.0833335 -16.9166665 111 0 2670 --56.9166665 -56.7499995 -17.0833335 -16.9166665 115 0 2670 --56.7500005 -56.5833335 -17.0833335 -16.9166665 112 0 2670 --56.5833335 -56.4166665 -17.0833335 -16.9166665 115 0 2670 --56.4166665 -56.2499995 -17.0833335 -16.9166665 118 0 2670 --56.2500005 -56.0833335 -17.0833335 -16.9166665 127 0 2670 --56.0833335 -55.9166665 -17.0833335 -16.9166665 134 0 2670 --55.9166665 -55.7499995 -17.0833335 -16.9166665 134 0 2670 --55.7500005 -55.5833335 -17.0833335 -16.9166665 143 0 2670 --55.5833335 -55.4166665 -17.0833335 -16.9166665 150 0 2670 --55.4166665 -55.2499995 -17.0833335 -16.9166665 156 0 2670 --55.2500005 -55.0833335 -17.0833335 -16.9166665 157 0 2670 --55.0833335 -54.9166665 -17.0833335 -16.9166665 177 0 2670 --54.9166665 -54.7499995 -17.0833335 -16.9166665 457 0 2670 --54.7500005 -54.5833335 -17.0833335 -16.9166665 467 0 2670 --54.5833335 -54.4166665 -17.0833335 -16.9166665 339 0 2670 --54.4166665 -54.2499995 -17.0833335 -16.9166665 393 0 2670 --54.2500005 -54.0833335 -17.0833335 -16.9166665 747 0 2670 --54.0833335 -53.9166665 -17.0833335 -16.9166665 639 0 2670 --53.9166665 -53.7499995 -17.0833335 -16.9166665 649 0 2670 --53.7500005 -53.5833335 -17.0833335 -16.9166665 693 0 2670 --53.5833335 -53.4166665 -17.0833335 -16.9166665 819 0 2670 --53.4166665 -53.2499995 -17.0833335 -16.9166665 819 0 2670 --53.2500005 -53.0833335 -17.0833335 -16.9166665 522 0 2670 --53.0833335 -52.9166665 -17.0833335 -16.9166665 524 0 2670 --52.9166665 -52.7499995 -17.0833335 -16.9166665 481 0 2670 --52.7500005 -52.5833335 -17.0833335 -16.9166665 542 0 2670 --52.5833335 -52.4166665 -17.0833335 -16.9166665 608 0 2670 --52.4166665 -52.2499995 -17.0833335 -16.9166665 591 0 2670 --52.2500005 -52.0833335 -17.0833335 -16.9166665 646 0 2670 --52.0833335 -51.9166665 -17.0833335 -16.9166665 643 0 2670 --51.9166665 -51.7499995 -17.0833335 -16.9166665 738 0 2670 --51.7500005 -51.5833335 -17.0833335 -16.9166665 810 0 2670 --51.5833335 -51.4166665 -17.0833335 -16.9166665 600 0 2670 --51.4166665 -51.2499995 -17.0833335 -16.9166665 714 0 2670 --51.2500005 -51.0833335 -17.0833335 -16.9166665 538 0 2670 --51.0833335 -50.9166665 -17.0833335 -16.9166665 751 0 2670 --50.9166665 -50.7499995 -17.0833335 -16.9166665 829 0 2670 --50.7500005 -50.5833335 -17.0833335 -16.9166665 676 0 2670 --50.5833335 -50.4166665 -17.0833335 -16.9166665 691 0 2670 --50.4166665 -50.2499995 -17.0833335 -16.9166665 585 0 2670 --50.2500005 -50.0833335 -17.0833335 -16.9166665 672 0 2670 --50.0833335 -49.9166665 -17.0833335 -16.9166665 561 0 2670 --49.9166665 -49.7499995 -17.0833335 -16.9166665 634 0 2670 --49.7500005 -49.5833335 -17.0833335 -16.9166665 705 0 2670 --49.5833335 -49.4166665 -17.0833335 -16.9166665 758 0 2670 --49.4166665 -49.2499995 -17.0833335 -16.9166665 866 0 2670 --49.2500005 -49.0833335 -17.0833335 -16.9166665 759 0 2670 --49.0833335 -48.9166665 -17.0833335 -16.9166665 744 0 2670 --48.9166665 -48.7499995 -17.0833335 -16.9166665 834 0 2670 --48.7500005 -48.5833335 -17.0833335 -16.9166665 937 0 2670 --48.5833335 -48.4166665 -17.0833335 -16.9166665 830 0 2670 --48.4166665 -48.2499995 -17.0833335 -16.9166665 860 0 2670 --48.2500005 -48.0833335 -17.0833335 -16.9166665 821 0 2670 --48.0833335 -47.9166665 -17.0833335 -16.9166665 859 0 2670 --47.9166665 -47.7499995 -17.0833335 -16.9166665 816 0 2670 --47.7500005 -47.5833335 -17.0833335 -16.9166665 954 0 2670 --47.5833335 -47.4166665 -17.0833335 -16.9166665 921 0 2670 --47.4166665 -47.2499995 -17.0833335 -16.9166665 865 0 2670 --47.2500005 -47.0833335 -17.0833335 -16.9166665 836 0 2670 --47.0833335 -46.9166665 -17.0833335 -16.9166665 881 0 2670 --46.9166665 -46.7499995 -17.0833335 -16.9166665 590 0 2670 --46.7500005 -46.5833335 -17.0833335 -16.9166665 584 0 2670 --46.5833335 -46.4166665 -17.0833335 -16.9166665 527 0 2670 --46.4166665 -46.2499995 -17.0833335 -16.9166665 529 0 2670 --46.2500005 -46.0833335 -17.0833335 -16.9166665 502 0 2670 --46.0833335 -45.9166665 -17.0833335 -16.9166665 559 0 2670 --45.9166665 -45.7499995 -17.0833335 -16.9166665 591 0 2670 --45.7500005 -45.5833335 -17.0833335 -16.9166665 608 0 2670 --45.5833335 -45.4166665 -17.0833335 -16.9166665 509 0 2670 --45.4166665 -45.2499995 -17.0833335 -16.9166665 523 0 2670 --45.2500005 -45.0833335 -17.0833335 -16.9166665 657 0 2670 --45.0833335 -44.9166665 -17.0833335 -16.9166665 679 0 2670 --44.9166665 -44.7499995 -17.0833335 -16.9166665 479 0 2670 --44.7500005 -44.5833335 -17.0833335 -16.9166665 652 0 2670 --44.5833335 -44.4166665 -17.0833335 -16.9166665 675 0 2670 --44.4166665 -44.2499995 -17.0833335 -16.9166665 786 0 2670 --44.2500005 -44.0833335 -17.0833335 -16.9166665 853 0 2670 --44.0833335 -43.9166665 -17.0833335 -16.9166665 912 0 2670 --43.9166665 -43.7499995 -17.0833335 -16.9166665 817 0 2670 --43.7500005 -43.5833335 -17.0833335 -16.9166665 793 0 2670 --43.5833335 -43.4166665 -17.0833335 -16.9166665 1034 0 2670 --43.4166665 -43.2499995 -17.0833335 -16.9166665 1273 0 2670 --43.2500005 -43.0833335 -17.0833335 -16.9166665 897 0 2670 --43.0833335 -42.9166665 -17.0833335 -16.9166665 880 0 2670 --42.9166665 -42.7499995 -17.0833335 -16.9166665 799 0 2670 --42.7500005 -42.5833335 -17.0833335 -16.9166665 780 0 2670 --42.5833335 -42.4166665 -17.0833335 -16.9166665 550 0 2670 --42.4166665 -42.2499995 -17.0833335 -16.9166665 436 0 2670 --42.2500005 -42.0833335 -17.0833335 -16.9166665 422 0 2670 --42.0833335 -41.9166665 -17.0833335 -16.9166665 602 0 2670 --41.9166665 -41.7499995 -17.0833335 -16.9166665 599 0 2670 --41.7500005 -41.5833335 -17.0833335 -16.9166665 940 0 2670 --41.5833335 -41.4166665 -17.0833335 -16.9166665 877 0 2670 --41.4166665 -41.2499995 -17.0833335 -16.9166665 861 0 2670 --41.2500005 -41.0833335 -17.0833335 -16.9166665 769 0 2670 --41.0833335 -40.9166665 -17.0833335 -16.9166665 362 0 2670 --40.9166665 -40.7499995 -17.0833335 -16.9166665 335 0 2670 --40.7500005 -40.5833335 -17.0833335 -16.9166665 338 0 2670 --40.5833335 -40.4166665 -17.0833335 -16.9166665 286 0 2670 --40.4166665 -40.2499995 -17.0833335 -16.9166665 625 0 2670 --40.2500005 -40.0833335 -17.0833335 -16.9166665 624 0 2670 --40.0833335 -39.9166665 -17.0833335 -16.9166665 411 0 2670 --65.0833335 -64.9166665 -17.2500005 -17.0833335 349 0 2670 --64.9166665 -64.7499995 -17.2500005 -17.0833335 243 0 2670 --64.7500005 -64.5833335 -17.2500005 -17.0833335 230 0 2670 --64.5833335 -64.4166665 -17.2500005 -17.0833335 229 0 2670 --64.4166665 -64.2499995 -17.2500005 -17.0833335 242 0 2670 --64.2500005 -64.0833335 -17.2500005 -17.0833335 252 0 2670 --64.0833335 -63.9166665 -17.2500005 -17.0833335 262 0 2670 --63.9166665 -63.7499995 -17.2500005 -17.0833335 265 0 2670 --63.7500005 -63.5833335 -17.2500005 -17.0833335 265 0 2670 --63.5833335 -63.4166665 -17.2500005 -17.0833335 255 0 2670 --63.4166665 -63.2499995 -17.2500005 -17.0833335 265 0 2670 --63.2500005 -63.0833335 -17.2500005 -17.0833335 263 0 2670 --63.0833335 -62.9166665 -17.2500005 -17.0833335 255 0 2670 --62.9166665 -62.7499995 -17.2500005 -17.0833335 259 0 2670 --62.7500005 -62.5833335 -17.2500005 -17.0833335 265 0 2670 --62.5833335 -62.4166665 -17.2500005 -17.0833335 260 0 2670 --62.4166665 -62.2499995 -17.2500005 -17.0833335 259 0 2670 --62.2500005 -62.0833335 -17.2500005 -17.0833335 261 0 2670 --62.0833335 -61.9166665 -17.2500005 -17.0833335 257 0 2670 --61.9166665 -61.7499995 -17.2500005 -17.0833335 266 0 2670 --61.7500005 -61.5833335 -17.2500005 -17.0833335 252 0 2670 --61.5833335 -61.4166665 -17.2500005 -17.0833335 300 0 2670 --61.4166665 -61.2499995 -17.2500005 -17.0833335 351 0 2670 --61.2500005 -61.0833335 -17.2500005 -17.0833335 316 0 2670 --61.0833335 -60.9166665 -17.2500005 -17.0833335 291 0 2670 --60.9166665 -60.7499995 -17.2500005 -17.0833335 290 0 2670 --60.7500005 -60.5833335 -17.2500005 -17.0833335 338 0 2670 --60.5833335 -60.4166665 -17.2500005 -17.0833335 308 0 2670 --60.4166665 -60.2499995 -17.2500005 -17.0833335 330 0 2670 --60.2500005 -60.0833335 -17.2500005 -17.0833335 356 0 2670 --60.0833335 -59.9166665 -17.2500005 -17.0833335 413 0 2670 --59.9166665 -59.7499995 -17.2500005 -17.0833335 284 0 2670 --59.7500005 -59.5833335 -17.2500005 -17.0833335 256 0 2670 --59.5833335 -59.4166665 -17.2500005 -17.0833335 191 0 2670 --59.4166665 -59.2499995 -17.2500005 -17.0833335 166 0 2670 --59.2500005 -59.0833335 -17.2500005 -17.0833335 147 0 2670 --59.0833335 -58.9166665 -17.2500005 -17.0833335 131 0 2670 --58.9166665 -58.7499995 -17.2500005 -17.0833335 123 0 2670 --58.7500005 -58.5833335 -17.2500005 -17.0833335 116 0 2670 --58.5833335 -58.4166665 -17.2500005 -17.0833335 105 0 2670 --58.4166665 -58.2499995 -17.2500005 -17.0833335 97 0 2670 --58.2500005 -58.0833335 -17.2500005 -17.0833335 99 0 2670 --58.0833335 -57.9166665 -17.2500005 -17.0833335 98 0 2670 --57.9166665 -57.7499995 -17.2500005 -17.0833335 98 0 2670 --57.7500005 -57.5833335 -17.2500005 -17.0833335 99 0 2670 --57.5833335 -57.4166665 -17.2500005 -17.0833335 99 0 2670 --57.4166665 -57.2499995 -17.2500005 -17.0833335 100 0 2670 --57.2500005 -57.0833335 -17.2500005 -17.0833335 103 0 2670 --57.0833335 -56.9166665 -17.2500005 -17.0833335 109 0 2670 --56.9166665 -56.7499995 -17.2500005 -17.0833335 109 0 2670 --56.7500005 -56.5833335 -17.2500005 -17.0833335 110 0 2670 --56.5833335 -56.4166665 -17.2500005 -17.0833335 112 0 2670 --56.4166665 -56.2499995 -17.2500005 -17.0833335 119 0 2670 --56.2500005 -56.0833335 -17.2500005 -17.0833335 121 0 2670 --56.0833335 -55.9166665 -17.2500005 -17.0833335 122 0 2670 --55.9166665 -55.7499995 -17.2500005 -17.0833335 131 0 2670 --55.7500005 -55.5833335 -17.2500005 -17.0833335 138 0 2670 --55.5833335 -55.4166665 -17.2500005 -17.0833335 144 0 2670 --55.4166665 -55.2499995 -17.2500005 -17.0833335 145 0 2670 --55.2500005 -55.0833335 -17.2500005 -17.0833335 155 0 2670 --55.0833335 -54.9166665 -17.2500005 -17.0833335 166 0 2670 --54.9166665 -54.7499995 -17.2500005 -17.0833335 442 0 2670 --54.7500005 -54.5833335 -17.2500005 -17.0833335 510 0 2670 --54.5833335 -54.4166665 -17.2500005 -17.0833335 591 0 2670 --54.4166665 -54.2499995 -17.2500005 -17.0833335 646 0 2670 --54.2500005 -54.0833335 -17.2500005 -17.0833335 556 0 2670 --54.0833335 -53.9166665 -17.2500005 -17.0833335 525 0 2670 --53.9166665 -53.7499995 -17.2500005 -17.0833335 613 0 2670 --53.7500005 -53.5833335 -17.2500005 -17.0833335 704 0 2670 --53.5833335 -53.4166665 -17.2500005 -17.0833335 760 0 2670 --53.4166665 -53.2499995 -17.2500005 -17.0833335 736 0 2670 --53.2500005 -53.0833335 -17.2500005 -17.0833335 676 0 2670 --53.0833335 -52.9166665 -17.2500005 -17.0833335 745 0 2670 --52.9166665 -52.7499995 -17.2500005 -17.0833335 516 0 2670 --52.7500005 -52.5833335 -17.2500005 -17.0833335 548 0 2670 --52.5833335 -52.4166665 -17.2500005 -17.0833335 565 0 2670 --52.4166665 -52.2499995 -17.2500005 -17.0833335 643 0 2670 --52.2500005 -52.0833335 -17.2500005 -17.0833335 656 0 2670 --52.0833335 -51.9166665 -17.2500005 -17.0833335 776 0 2670 --51.9166665 -51.7499995 -17.2500005 -17.0833335 827 0 2670 --51.7500005 -51.5833335 -17.2500005 -17.0833335 931 0 2670 --51.5833335 -51.4166665 -17.2500005 -17.0833335 703 0 2670 --51.4166665 -51.2499995 -17.2500005 -17.0833335 608 0 2670 --51.2500005 -51.0833335 -17.2500005 -17.0833335 813 0 2670 --51.0833335 -50.9166665 -17.2500005 -17.0833335 774 0 2670 --50.9166665 -50.7499995 -17.2500005 -17.0833335 698 0 2670 --50.7500005 -50.5833335 -17.2500005 -17.0833335 625 0 2670 --50.5833335 -50.4166665 -17.2500005 -17.0833335 639 0 2670 --50.4166665 -50.2499995 -17.2500005 -17.0833335 550 0 2670 --50.2500005 -50.0833335 -17.2500005 -17.0833335 581 0 2670 --50.0833335 -49.9166665 -17.2500005 -17.0833335 585 0 2670 --49.9166665 -49.7499995 -17.2500005 -17.0833335 682 0 2670 --49.7500005 -49.5833335 -17.2500005 -17.0833335 554 0 2670 --49.5833335 -49.4166665 -17.2500005 -17.0833335 839 0 2670 --49.4166665 -49.2499995 -17.2500005 -17.0833335 758 0 2670 --49.2500005 -49.0833335 -17.2500005 -17.0833335 735 0 2670 --49.0833335 -48.9166665 -17.2500005 -17.0833335 776 0 2670 --48.9166665 -48.7499995 -17.2500005 -17.0833335 905 0 2670 --48.7500005 -48.5833335 -17.2500005 -17.0833335 745 0 2670 --48.5833335 -48.4166665 -17.2500005 -17.0833335 864 0 2670 --48.4166665 -48.2499995 -17.2500005 -17.0833335 885 0 2670 --48.2500005 -48.0833335 -17.2500005 -17.0833335 748 0 2670 --48.0833335 -47.9166665 -17.2500005 -17.0833335 717 0 2670 --47.9166665 -47.7499995 -17.2500005 -17.0833335 828 0 2670 --47.7500005 -47.5833335 -17.2500005 -17.0833335 852 0 2670 --47.5833335 -47.4166665 -17.2500005 -17.0833335 886 0 2670 --47.4166665 -47.2499995 -17.2500005 -17.0833335 801 0 2670 --47.2500005 -47.0833335 -17.2500005 -17.0833335 686 0 2670 --47.0833335 -46.9166665 -17.2500005 -17.0833335 768 0 2670 --46.9166665 -46.7499995 -17.2500005 -17.0833335 602 0 2670 --46.7500005 -46.5833335 -17.2500005 -17.0833335 576 0 2670 --46.5833335 -46.4166665 -17.2500005 -17.0833335 539 0 2670 --46.4166665 -46.2499995 -17.2500005 -17.0833335 561 0 2670 --46.2500005 -46.0833335 -17.2500005 -17.0833335 525 0 2670 --46.0833335 -45.9166665 -17.2500005 -17.0833335 690 0 2670 --45.9166665 -45.7499995 -17.2500005 -17.0833335 505 0 2670 --45.7500005 -45.5833335 -17.2500005 -17.0833335 541 0 2670 --45.5833335 -45.4166665 -17.2500005 -17.0833335 588 0 2670 --45.4166665 -45.2499995 -17.2500005 -17.0833335 629 0 2670 --45.2500005 -45.0833335 -17.2500005 -17.0833335 696 0 2670 --45.0833335 -44.9166665 -17.2500005 -17.0833335 700 0 2670 --44.9166665 -44.7499995 -17.2500005 -17.0833335 479 0 2670 --44.7500005 -44.5833335 -17.2500005 -17.0833335 493 0 2670 --44.5833335 -44.4166665 -17.2500005 -17.0833335 537 0 2670 --44.4166665 -44.2499995 -17.2500005 -17.0833335 659 0 2670 --44.2500005 -44.0833335 -17.2500005 -17.0833335 890 0 2670 --44.0833335 -43.9166665 -17.2500005 -17.0833335 656 0 2670 --43.9166665 -43.7499995 -17.2500005 -17.0833335 708 0 2670 --43.7500005 -43.5833335 -17.2500005 -17.0833335 760 0 2670 --43.5833335 -43.4166665 -17.2500005 -17.0833335 729 0 2670 --43.4166665 -43.2499995 -17.2500005 -17.0833335 1126 0 2670 --43.2500005 -43.0833335 -17.2500005 -17.0833335 942 0 2670 --43.0833335 -42.9166665 -17.2500005 -17.0833335 643 0 2670 --42.9166665 -42.7499995 -17.2500005 -17.0833335 903 0 2670 --42.7500005 -42.5833335 -17.2500005 -17.0833335 663 0 2670 --42.5833335 -42.4166665 -17.2500005 -17.0833335 628 0 2670 --42.4166665 -42.2499995 -17.2500005 -17.0833335 765 0 2670 --42.2500005 -42.0833335 -17.2500005 -17.0833335 793 0 2670 --42.0833335 -41.9166665 -17.2500005 -17.0833335 715 0 2670 --41.9166665 -41.7499995 -17.2500005 -17.0833335 874 0 2670 --41.7500005 -41.5833335 -17.2500005 -17.0833335 906 0 2670 --41.5833335 -41.4166665 -17.2500005 -17.0833335 659 0 2670 --41.4166665 -41.2499995 -17.2500005 -17.0833335 872 0 2670 --41.2500005 -41.0833335 -17.2500005 -17.0833335 589 0 2670 --41.0833335 -40.9166665 -17.2500005 -17.0833335 430 0 2670 --40.9166665 -40.7499995 -17.2500005 -17.0833335 287 0 2670 --40.7500005 -40.5833335 -17.2500005 -17.0833335 327 0 2670 --40.5833335 -40.4166665 -17.2500005 -17.0833335 296 0 2670 --40.4166665 -40.2499995 -17.2500005 -17.0833335 193 0 2670 --40.2500005 -40.0833335 -17.2500005 -17.0833335 259 0 2670 --40.0833335 -39.9166665 -17.2500005 -17.0833335 169 0 2670 --65.0833335 -64.9166665 -17.4166665 -17.2499995 843 0 2670 --64.9166665 -64.7499995 -17.4166665 -17.2499995 766 0 2670 --64.7500005 -64.5833335 -17.4166665 -17.2499995 974 0 2670 --64.5833335 -64.4166665 -17.4166665 -17.2499995 429 0 2670 --64.4166665 -64.2499995 -17.4166665 -17.2499995 298 0 2670 --64.2500005 -64.0833335 -17.4166665 -17.2499995 267 0 2670 --64.0833335 -63.9166665 -17.4166665 -17.2499995 285 0 2670 --63.9166665 -63.7499995 -17.4166665 -17.2499995 295 0 2670 --63.7500005 -63.5833335 -17.4166665 -17.2499995 295 0 2670 --63.5833335 -63.4166665 -17.4166665 -17.2499995 287 0 2670 --63.4166665 -63.2499995 -17.4166665 -17.2499995 290 0 2670 --63.2500005 -63.0833335 -17.4166665 -17.2499995 295 0 2670 --63.0833335 -62.9166665 -17.4166665 -17.2499995 276 0 2670 --62.9166665 -62.7499995 -17.4166665 -17.2499995 266 0 2670 --62.7500005 -62.5833335 -17.4166665 -17.2499995 270 0 2670 --62.5833335 -62.4166665 -17.4166665 -17.2499995 273 0 2670 --62.4166665 -62.2499995 -17.4166665 -17.2499995 269 0 2670 --62.2500005 -62.0833335 -17.4166665 -17.2499995 266 0 2670 --62.0833335 -61.9166665 -17.4166665 -17.2499995 267 0 2670 --61.9166665 -61.7499995 -17.4166665 -17.2499995 267 0 2670 --61.7500005 -61.5833335 -17.4166665 -17.2499995 264 0 2670 --61.5833335 -61.4166665 -17.4166665 -17.2499995 259 0 2670 --61.4166665 -61.2499995 -17.4166665 -17.2499995 377 0 2670 --61.2500005 -61.0833335 -17.4166665 -17.2499995 260 0 2670 --61.0833335 -60.9166665 -17.4166665 -17.2499995 262 0 2670 --60.9166665 -60.7499995 -17.4166665 -17.2499995 341 0 2670 --60.7500005 -60.5833335 -17.4166665 -17.2499995 275 0 2670 --60.5833335 -60.4166665 -17.4166665 -17.2499995 333 0 2670 --60.4166665 -60.2499995 -17.4166665 -17.2499995 323 0 2670 --60.2500005 -60.0833335 -17.4166665 -17.2499995 349 0 2670 --60.0833335 -59.9166665 -17.4166665 -17.2499995 402 0 2670 --59.9166665 -59.7499995 -17.4166665 -17.2499995 382 0 2670 --59.7500005 -59.5833335 -17.4166665 -17.2499995 291 0 2670 --59.5833335 -59.4166665 -17.4166665 -17.2499995 257 0 2670 --59.4166665 -59.2499995 -17.4166665 -17.2499995 222 0 2670 --59.2500005 -59.0833335 -17.4166665 -17.2499995 157 0 2670 --59.0833335 -58.9166665 -17.4166665 -17.2499995 144 0 2670 --58.9166665 -58.7499995 -17.4166665 -17.2499995 129 0 2670 --58.7500005 -58.5833335 -17.4166665 -17.2499995 113 0 2670 --58.5833335 -58.4166665 -17.4166665 -17.2499995 100 0 2670 --58.4166665 -58.2499995 -17.4166665 -17.2499995 97 0 2670 --58.2500005 -58.0833335 -17.4166665 -17.2499995 94 0 2670 --58.0833335 -57.9166665 -17.4166665 -17.2499995 96 0 2670 --57.9166665 -57.7499995 -17.4166665 -17.2499995 95 0 2670 --57.7500005 -57.5833335 -17.4166665 -17.2499995 95 0 2670 --57.5833335 -57.4166665 -17.4166665 -17.2499995 97 0 2670 --57.4166665 -57.2499995 -17.4166665 -17.2499995 103 0 2670 --57.2500005 -57.0833335 -17.4166665 -17.2499995 100 0 2670 --57.0833335 -56.9166665 -17.4166665 -17.2499995 107 0 2670 --56.9166665 -56.7499995 -17.4166665 -17.2499995 106 0 2670 --56.7500005 -56.5833335 -17.4166665 -17.2499995 114 0 2670 --56.5833335 -56.4166665 -17.4166665 -17.2499995 116 0 2670 --56.4166665 -56.2499995 -17.4166665 -17.2499995 115 0 2670 --56.2500005 -56.0833335 -17.4166665 -17.2499995 119 0 2670 --56.0833335 -55.9166665 -17.4166665 -17.2499995 126 0 2670 --55.9166665 -55.7499995 -17.4166665 -17.2499995 129 0 2670 --55.7500005 -55.5833335 -17.4166665 -17.2499995 133 0 2670 --55.5833335 -55.4166665 -17.4166665 -17.2499995 136 0 2670 --55.4166665 -55.2499995 -17.4166665 -17.2499995 142 0 2670 --55.2500005 -55.0833335 -17.4166665 -17.2499995 150 0 2670 --55.0833335 -54.9166665 -17.4166665 -17.2499995 170 0 2670 --54.9166665 -54.7499995 -17.4166665 -17.2499995 463 0 2670 --54.7500005 -54.5833335 -17.4166665 -17.2499995 543 0 2670 --54.5833335 -54.4166665 -17.4166665 -17.2499995 514 0 2670 --54.4166665 -54.2499995 -17.4166665 -17.2499995 554 0 2670 --54.2500005 -54.0833335 -17.4166665 -17.2499995 578 0 2670 --54.0833335 -53.9166665 -17.4166665 -17.2499995 671 0 2670 --53.9166665 -53.7499995 -17.4166665 -17.2499995 648 0 2670 --53.7500005 -53.5833335 -17.4166665 -17.2499995 718 0 2670 --53.5833335 -53.4166665 -17.4166665 -17.2499995 702 0 2670 --53.4166665 -53.2499995 -17.4166665 -17.2499995 682 0 2670 --53.2500005 -53.0833335 -17.4166665 -17.2499995 726 0 2670 --53.0833335 -52.9166665 -17.4166665 -17.2499995 745 0 2670 --52.9166665 -52.7499995 -17.4166665 -17.2499995 876 0 2670 --52.7500005 -52.5833335 -17.4166665 -17.2499995 883 0 2670 --52.5833335 -52.4166665 -17.4166665 -17.2499995 938 0 2670 --52.4166665 -52.2499995 -17.4166665 -17.2499995 898 0 2670 --52.2500005 -52.0833335 -17.4166665 -17.2499995 818 0 2670 --52.0833335 -51.9166665 -17.4166665 -17.2499995 763 0 2670 --51.9166665 -51.7499995 -17.4166665 -17.2499995 954 0 2670 --51.7500005 -51.5833335 -17.4166665 -17.2499995 998 0 2670 --51.5833335 -51.4166665 -17.4166665 -17.2499995 934 0 2670 --51.4166665 -51.2499995 -17.4166665 -17.2499995 800 0 2670 --51.2500005 -51.0833335 -17.4166665 -17.2499995 854 0 2670 --51.0833335 -50.9166665 -17.4166665 -17.2499995 693 0 2670 --50.9166665 -50.7499995 -17.4166665 -17.2499995 743 0 2670 --50.7500005 -50.5833335 -17.4166665 -17.2499995 590 0 2670 --50.5833335 -50.4166665 -17.4166665 -17.2499995 582 0 2670 --50.4166665 -50.2499995 -17.4166665 -17.2499995 591 0 2670 --50.2500005 -50.0833335 -17.4166665 -17.2499995 522 0 2670 --50.0833335 -49.9166665 -17.4166665 -17.2499995 527 0 2670 --49.9166665 -49.7499995 -17.4166665 -17.2499995 568 0 2670 --49.7500005 -49.5833335 -17.4166665 -17.2499995 565 0 2670 --49.5833335 -49.4166665 -17.4166665 -17.2499995 743 0 2670 --49.4166665 -49.2499995 -17.4166665 -17.2499995 686 0 2670 --49.2500005 -49.0833335 -17.4166665 -17.2499995 668 0 2670 --49.0833335 -48.9166665 -17.4166665 -17.2499995 748 0 2670 --48.9166665 -48.7499995 -17.4166665 -17.2499995 775 0 2670 --48.7500005 -48.5833335 -17.4166665 -17.2499995 780 0 2670 --48.5833335 -48.4166665 -17.4166665 -17.2499995 719 0 2670 --48.4166665 -48.2499995 -17.4166665 -17.2499995 775 0 2670 --48.2500005 -48.0833335 -17.4166665 -17.2499995 728 0 2670 --48.0833335 -47.9166665 -17.4166665 -17.2499995 943 0 2670 --47.9166665 -47.7499995 -17.4166665 -17.2499995 958 0 2670 --47.7500005 -47.5833335 -17.4166665 -17.2499995 902 0 2670 --47.5833335 -47.4166665 -17.4166665 -17.2499995 797 0 2670 --47.4166665 -47.2499995 -17.4166665 -17.2499995 870 0 2670 --47.2500005 -47.0833335 -17.4166665 -17.2499995 855 0 2670 --47.0833335 -46.9166665 -17.4166665 -17.2499995 603 0 2670 --46.9166665 -46.7499995 -17.4166665 -17.2499995 681 0 2670 --46.7500005 -46.5833335 -17.4166665 -17.2499995 652 0 2670 --46.5833335 -46.4166665 -17.4166665 -17.2499995 517 0 2670 --46.4166665 -46.2499995 -17.4166665 -17.2499995 539 0 2670 --46.2500005 -46.0833335 -17.4166665 -17.2499995 528 0 2670 --46.0833335 -45.9166665 -17.4166665 -17.2499995 538 0 2670 --45.9166665 -45.7499995 -17.4166665 -17.2499995 578 0 2670 --45.7500005 -45.5833335 -17.4166665 -17.2499995 705 0 2670 --45.5833335 -45.4166665 -17.4166665 -17.2499995 617 0 2670 --45.4166665 -45.2499995 -17.4166665 -17.2499995 638 0 2670 --45.2500005 -45.0833335 -17.4166665 -17.2499995 744 0 2670 --45.0833335 -44.9166665 -17.4166665 -17.2499995 530 0 2670 --44.9166665 -44.7499995 -17.4166665 -17.2499995 585 0 2670 --44.7500005 -44.5833335 -17.4166665 -17.2499995 557 0 2670 --44.5833335 -44.4166665 -17.4166665 -17.2499995 564 0 2670 --44.4166665 -44.2499995 -17.4166665 -17.2499995 624 0 2670 --44.2500005 -44.0833335 -17.4166665 -17.2499995 637 0 2670 --44.0833335 -43.9166665 -17.4166665 -17.2499995 710 0 2670 --43.9166665 -43.7499995 -17.4166665 -17.2499995 881 0 2670 --43.7500005 -43.5833335 -17.4166665 -17.2499995 857 0 2670 --43.5833335 -43.4166665 -17.4166665 -17.2499995 832 0 2670 --43.4166665 -43.2499995 -17.4166665 -17.2499995 655 0 2670 --43.2500005 -43.0833335 -17.4166665 -17.2499995 720 0 2670 --43.0833335 -42.9166665 -17.4166665 -17.2499995 820 0 2670 --42.9166665 -42.7499995 -17.4166665 -17.2499995 617 0 2670 --42.7500005 -42.5833335 -17.4166665 -17.2499995 824 0 2670 --42.5833335 -42.4166665 -17.4166665 -17.2499995 822 0 2670 --42.4166665 -42.2499995 -17.4166665 -17.2499995 586 0 2670 --42.2500005 -42.0833335 -17.4166665 -17.2499995 807 0 2670 --42.0833335 -41.9166665 -17.4166665 -17.2499995 881 0 2670 --41.9166665 -41.7499995 -17.4166665 -17.2499995 914 0 2670 --41.7500005 -41.5833335 -17.4166665 -17.2499995 744 0 2670 --41.5833335 -41.4166665 -17.4166665 -17.2499995 687 0 2670 --41.4166665 -41.2499995 -17.4166665 -17.2499995 387 0 2670 --41.2500005 -41.0833335 -17.4166665 -17.2499995 483 0 2670 --41.0833335 -40.9166665 -17.4166665 -17.2499995 303 0 2670 --40.9166665 -40.7499995 -17.4166665 -17.2499995 330 0 2670 --40.7500005 -40.5833335 -17.4166665 -17.2499995 228 0 2670 --40.5833335 -40.4166665 -17.4166665 -17.2499995 230 0 2670 --40.4166665 -40.2499995 -17.4166665 -17.2499995 217 0 2670 --40.2500005 -40.0833335 -17.4166665 -17.2499995 215 0 2670 --40.0833335 -39.9166665 -17.4166665 -17.2499995 196 0 2670 --65.0833335 -64.9166665 -17.5833335 -17.4166665 1156 0 2670 --64.9166665 -64.7499995 -17.5833335 -17.4166665 1576 0 2670 --64.7500005 -64.5833335 -17.5833335 -17.4166665 775 0 2670 --64.5833335 -64.4166665 -17.5833335 -17.4166665 1004 0 2670 --64.4166665 -64.2499995 -17.5833335 -17.4166665 705 0 2670 --64.2500005 -64.0833335 -17.5833335 -17.4166665 1079 0 2670 --64.0833335 -63.9166665 -17.5833335 -17.4166665 441 0 2670 --63.9166665 -63.7499995 -17.5833335 -17.4166665 345 0 2670 --63.7500005 -63.5833335 -17.5833335 -17.4166665 349 0 2670 --63.5833335 -63.4166665 -17.5833335 -17.4166665 338 0 2670 --63.4166665 -63.2499995 -17.5833335 -17.4166665 347 0 2670 --63.2500005 -63.0833335 -17.5833335 -17.4166665 332 0 2670 --63.0833335 -62.9166665 -17.5833335 -17.4166665 313 0 2670 --62.9166665 -62.7499995 -17.5833335 -17.4166665 289 0 2670 --62.7500005 -62.5833335 -17.5833335 -17.4166665 277 0 2670 --62.5833335 -62.4166665 -17.5833335 -17.4166665 277 0 2670 --62.4166665 -62.2499995 -17.5833335 -17.4166665 275 0 2670 --62.2500005 -62.0833335 -17.5833335 -17.4166665 274 0 2670 --62.0833335 -61.9166665 -17.5833335 -17.4166665 278 0 2670 --61.9166665 -61.7499995 -17.5833335 -17.4166665 272 0 2670 --61.7500005 -61.5833335 -17.5833335 -17.4166665 270 0 2670 --61.5833335 -61.4166665 -17.5833335 -17.4166665 254 0 2670 --61.4166665 -61.2499995 -17.5833335 -17.4166665 251 0 2670 --61.2500005 -61.0833335 -17.5833335 -17.4166665 262 0 2670 --61.0833335 -60.9166665 -17.5833335 -17.4166665 265 0 2670 --60.9166665 -60.7499995 -17.5833335 -17.4166665 256 0 2670 --60.7500005 -60.5833335 -17.5833335 -17.4166665 267 0 2670 --60.5833335 -60.4166665 -17.5833335 -17.4166665 301 0 2670 --60.4166665 -60.2499995 -17.5833335 -17.4166665 324 0 2670 --60.2500005 -60.0833335 -17.5833335 -17.4166665 409 0 2670 --60.0833335 -59.9166665 -17.5833335 -17.4166665 364 0 2670 --59.9166665 -59.7499995 -17.5833335 -17.4166665 379 0 2670 --59.7500005 -59.5833335 -17.5833335 -17.4166665 336 0 2670 --59.5833335 -59.4166665 -17.5833335 -17.4166665 295 0 2670 --59.4166665 -59.2499995 -17.5833335 -17.4166665 236 0 2670 --59.2500005 -59.0833335 -17.5833335 -17.4166665 564 0 2670 --59.0833335 -58.9166665 -17.5833335 -17.4166665 153 0 2670 --58.9166665 -58.7499995 -17.5833335 -17.4166665 138 0 2670 --58.7500005 -58.5833335 -17.5833335 -17.4166665 173 0 2670 --58.5833335 -58.4166665 -17.5833335 -17.4166665 118 0 2670 --58.4166665 -58.2499995 -17.5833335 -17.4166665 103 0 2670 --58.2500005 -58.0833335 -17.5833335 -17.4166665 106 0 2670 --58.0833335 -57.9166665 -17.5833335 -17.4166665 95 0 2670 --57.9166665 -57.7499995 -17.5833335 -17.4166665 93 0 2670 --57.7500005 -57.5833335 -17.5833335 -17.4166665 95 0 2670 --57.5833335 -57.4166665 -17.5833335 -17.4166665 94 0 2670 --57.4166665 -57.2499995 -17.5833335 -17.4166665 96 0 2670 --57.2500005 -57.0833335 -17.5833335 -17.4166665 98 0 2670 --57.0833335 -56.9166665 -17.5833335 -17.4166665 108 0 2670 --56.9166665 -56.7499995 -17.5833335 -17.4166665 105 0 2670 --56.7500005 -56.5833335 -17.5833335 -17.4166665 110 0 2670 --56.5833335 -56.4166665 -17.5833335 -17.4166665 116 0 2670 --56.4166665 -56.2499995 -17.5833335 -17.4166665 118 0 2670 --56.2500005 -56.0833335 -17.5833335 -17.4166665 120 0 2670 --56.0833335 -55.9166665 -17.5833335 -17.4166665 125 0 2670 --55.9166665 -55.7499995 -17.5833335 -17.4166665 132 0 2670 --55.7500005 -55.5833335 -17.5833335 -17.4166665 135 0 2670 --55.5833335 -55.4166665 -17.5833335 -17.4166665 138 0 2670 --55.4166665 -55.2499995 -17.5833335 -17.4166665 142 0 2670 --55.2500005 -55.0833335 -17.5833335 -17.4166665 325 0 2670 --55.0833335 -54.9166665 -17.5833335 -17.4166665 214 0 2670 --54.9166665 -54.7499995 -17.5833335 -17.4166665 491 0 2670 --54.7500005 -54.5833335 -17.5833335 -17.4166665 417 0 2670 --54.5833335 -54.4166665 -17.5833335 -17.4166665 498 0 2670 --54.4166665 -54.2499995 -17.5833335 -17.4166665 589 0 2670 --54.2500005 -54.0833335 -17.5833335 -17.4166665 669 0 2670 --54.0833335 -53.9166665 -17.5833335 -17.4166665 630 0 2670 --53.9166665 -53.7499995 -17.5833335 -17.4166665 648 0 2670 --53.7500005 -53.5833335 -17.5833335 -17.4166665 733 0 2670 --53.5833335 -53.4166665 -17.5833335 -17.4166665 613 0 2670 --53.4166665 -53.2499995 -17.5833335 -17.4166665 756 0 2670 --53.2500005 -53.0833335 -17.5833335 -17.4166665 745 0 2670 --53.0833335 -52.9166665 -17.5833335 -17.4166665 720 0 2670 --52.9166665 -52.7499995 -17.5833335 -17.4166665 927 0 2670 --52.7500005 -52.5833335 -17.5833335 -17.4166665 856 0 2670 --52.5833335 -52.4166665 -17.5833335 -17.4166665 779 0 2670 --52.4166665 -52.2499995 -17.5833335 -17.4166665 910 0 2670 --52.2500005 -52.0833335 -17.5833335 -17.4166665 843 0 2670 --52.0833335 -51.9166665 -17.5833335 -17.4166665 785 0 2670 --51.9166665 -51.7499995 -17.5833335 -17.4166665 860 0 2670 --51.7500005 -51.5833335 -17.5833335 -17.4166665 918 0 2670 --51.5833335 -51.4166665 -17.5833335 -17.4166665 926 0 2670 --51.4166665 -51.2499995 -17.5833335 -17.4166665 930 0 2670 --51.2500005 -51.0833335 -17.5833335 -17.4166665 883 0 2670 --51.0833335 -50.9166665 -17.5833335 -17.4166665 814 0 2670 --50.9166665 -50.7499995 -17.5833335 -17.4166665 705 0 2670 --50.7500005 -50.5833335 -17.5833335 -17.4166665 602 0 2670 --50.5833335 -50.4166665 -17.5833335 -17.4166665 540 0 2670 --50.4166665 -50.2499995 -17.5833335 -17.4166665 498 0 2670 --50.2500005 -50.0833335 -17.5833335 -17.4166665 492 0 2670 --50.0833335 -49.9166665 -17.5833335 -17.4166665 496 0 2670 --49.9166665 -49.7499995 -17.5833335 -17.4166665 589 0 2670 --49.7500005 -49.5833335 -17.5833335 -17.4166665 507 0 2670 --49.5833335 -49.4166665 -17.5833335 -17.4166665 647 0 2670 --49.4166665 -49.2499995 -17.5833335 -17.4166665 657 0 2670 --49.2500005 -49.0833335 -17.5833335 -17.4166665 685 0 2670 --49.0833335 -48.9166665 -17.5833335 -17.4166665 734 0 2670 --48.9166665 -48.7499995 -17.5833335 -17.4166665 745 0 2670 --48.7500005 -48.5833335 -17.5833335 -17.4166665 731 0 2670 --48.5833335 -48.4166665 -17.5833335 -17.4166665 673 0 2670 --48.4166665 -48.2499995 -17.5833335 -17.4166665 770 0 2670 --48.2500005 -48.0833335 -17.5833335 -17.4166665 818 0 2670 --48.0833335 -47.9166665 -17.5833335 -17.4166665 878 0 2670 --47.9166665 -47.7499995 -17.5833335 -17.4166665 923 0 2670 --47.7500005 -47.5833335 -17.5833335 -17.4166665 850 0 2670 --47.5833335 -47.4166665 -17.5833335 -17.4166665 860 0 2670 --47.4166665 -47.2499995 -17.5833335 -17.4166665 983 0 2670 --47.2500005 -47.0833335 -17.5833335 -17.4166665 955 0 2670 --47.0833335 -46.9166665 -17.5833335 -17.4166665 628 0 2670 --46.9166665 -46.7499995 -17.5833335 -17.4166665 579 0 2670 --46.7500005 -46.5833335 -17.5833335 -17.4166665 567 0 2670 --46.5833335 -46.4166665 -17.5833335 -17.4166665 529 0 2670 --46.4166665 -46.2499995 -17.5833335 -17.4166665 554 0 2670 --46.2500005 -46.0833335 -17.5833335 -17.4166665 556 0 2670 --46.0833335 -45.9166665 -17.5833335 -17.4166665 550 0 2670 --45.9166665 -45.7499995 -17.5833335 -17.4166665 685 0 2670 --45.7500005 -45.5833335 -17.5833335 -17.4166665 613 0 2670 --45.5833335 -45.4166665 -17.5833335 -17.4166665 722 0 2670 --45.4166665 -45.2499995 -17.5833335 -17.4166665 866 0 2670 --45.2500005 -45.0833335 -17.5833335 -17.4166665 881 0 2670 --45.0833335 -44.9166665 -17.5833335 -17.4166665 521 0 2670 --44.9166665 -44.7499995 -17.5833335 -17.4166665 628 0 2670 --44.7500005 -44.5833335 -17.5833335 -17.4166665 516 0 2670 --44.5833335 -44.4166665 -17.5833335 -17.4166665 993 0 2670 --44.4166665 -44.2499995 -17.5833335 -17.4166665 740 0 2670 --44.2500005 -44.0833335 -17.5833335 -17.4166665 950 0 2670 --44.0833335 -43.9166665 -17.5833335 -17.4166665 625 0 2670 --43.9166665 -43.7499995 -17.5833335 -17.4166665 666 0 2670 --43.7500005 -43.5833335 -17.5833335 -17.4166665 949 0 2670 --43.5833335 -43.4166665 -17.5833335 -17.4166665 653 0 2670 --43.4166665 -43.2499995 -17.5833335 -17.4166665 651 0 2670 --43.2500005 -43.0833335 -17.5833335 -17.4166665 861 0 2670 --43.0833335 -42.9166665 -17.5833335 -17.4166665 722 0 2670 --42.9166665 -42.7499995 -17.5833335 -17.4166665 763 0 2670 --42.7500005 -42.5833335 -17.5833335 -17.4166665 669 0 2670 --42.5833335 -42.4166665 -17.5833335 -17.4166665 817 0 2670 --42.4166665 -42.2499995 -17.5833335 -17.4166665 998 0 2670 --42.2500005 -42.0833335 -17.5833335 -17.4166665 681 0 2670 --42.0833335 -41.9166665 -17.5833335 -17.4166665 827 0 2670 --41.9166665 -41.7499995 -17.5833335 -17.4166665 963 0 2670 --41.7500005 -41.5833335 -17.5833335 -17.4166665 810 0 2670 --41.5833335 -41.4166665 -17.5833335 -17.4166665 581 0 2670 --41.4166665 -41.2499995 -17.5833335 -17.4166665 293 0 2670 --41.2500005 -41.0833335 -17.5833335 -17.4166665 439 0 2670 --41.0833335 -40.9166665 -17.5833335 -17.4166665 278 0 2670 --40.9166665 -40.7499995 -17.5833335 -17.4166665 327 0 2670 --40.7500005 -40.5833335 -17.5833335 -17.4166665 230 0 2670 --40.5833335 -40.4166665 -17.5833335 -17.4166665 317 0 2670 --40.4166665 -40.2499995 -17.5833335 -17.4166665 241 0 2670 --40.2500005 -40.0833335 -17.5833335 -17.4166665 203 0 2670 --40.0833335 -39.9166665 -17.5833335 -17.4166665 168 0 2670 --65.0833335 -64.9166665 -17.7500005 -17.5833335 3295 0 2670 --64.9166665 -64.7499995 -17.7500005 -17.5833335 3692 0 2670 --64.7500005 -64.5833335 -17.7500005 -17.5833335 2116 0 2670 --64.5833335 -64.4166665 -17.7500005 -17.5833335 1733 0 2670 --64.4166665 -64.2499995 -17.7500005 -17.5833335 1817 0 2670 --64.2500005 -64.0833335 -17.7500005 -17.5833335 1102 0 2670 --64.0833335 -63.9166665 -17.7500005 -17.5833335 957 0 2670 --63.9166665 -63.7499995 -17.7500005 -17.5833335 899 0 2670 --63.7500005 -63.5833335 -17.7500005 -17.5833335 420 0 2670 --63.5833335 -63.4166665 -17.7500005 -17.5833335 422 0 2670 --63.4166665 -63.2499995 -17.7500005 -17.5833335 403 0 2670 --63.2500005 -63.0833335 -17.7500005 -17.5833335 387 0 2670 --63.0833335 -62.9166665 -17.7500005 -17.5833335 352 0 2670 --62.9166665 -62.7499995 -17.7500005 -17.5833335 306 0 2670 --62.7500005 -62.5833335 -17.7500005 -17.5833335 289 0 2670 --62.5833335 -62.4166665 -17.7500005 -17.5833335 289 0 2670 --62.4166665 -62.2499995 -17.7500005 -17.5833335 282 0 2670 --62.2500005 -62.0833335 -17.7500005 -17.5833335 286 0 2670 --62.0833335 -61.9166665 -17.7500005 -17.5833335 278 0 2670 --61.9166665 -61.7499995 -17.7500005 -17.5833335 278 0 2670 --61.7500005 -61.5833335 -17.7500005 -17.5833335 274 0 2670 --61.5833335 -61.4166665 -17.7500005 -17.5833335 272 0 2670 --61.4166665 -61.2499995 -17.7500005 -17.5833335 270 0 2670 --61.2500005 -61.0833335 -17.7500005 -17.5833335 267 0 2670 --61.0833335 -60.9166665 -17.7500005 -17.5833335 267 0 2670 --60.9166665 -60.7499995 -17.7500005 -17.5833335 258 0 2670 --60.7500005 -60.5833335 -17.7500005 -17.5833335 272 0 2670 --60.5833335 -60.4166665 -17.7500005 -17.5833335 287 0 2670 --60.4166665 -60.2499995 -17.7500005 -17.5833335 310 0 2670 --60.2500005 -60.0833335 -17.7500005 -17.5833335 330 0 2670 --60.0833335 -59.9166665 -17.7500005 -17.5833335 296 0 2670 --59.9166665 -59.7499995 -17.7500005 -17.5833335 332 0 2670 --59.7500005 -59.5833335 -17.7500005 -17.5833335 312 0 2670 --59.5833335 -59.4166665 -17.7500005 -17.5833335 268 0 2670 --59.4166665 -59.2499995 -17.7500005 -17.5833335 318 0 2670 --59.2500005 -59.0833335 -17.7500005 -17.5833335 282 0 2670 --59.0833335 -58.9166665 -17.7500005 -17.5833335 184 0 2670 --58.9166665 -58.7499995 -17.7500005 -17.5833335 163 0 2670 --58.7500005 -58.5833335 -17.7500005 -17.5833335 154 0 2670 --58.5833335 -58.4166665 -17.7500005 -17.5833335 129 0 2670 --58.4166665 -58.2499995 -17.7500005 -17.5833335 125 0 2670 --58.2500005 -58.0833335 -17.7500005 -17.5833335 149 0 2670 --58.0833335 -57.9166665 -17.7500005 -17.5833335 150 0 2670 --57.9166665 -57.7499995 -17.7500005 -17.5833335 134 0 2670 --57.7500005 -57.5833335 -17.7500005 -17.5833335 94 0 2670 --57.5833335 -57.4166665 -17.7500005 -17.5833335 93 0 2670 --57.4166665 -57.2499995 -17.7500005 -17.5833335 97 0 2670 --57.2500005 -57.0833335 -17.7500005 -17.5833335 99 0 2670 --57.0833335 -56.9166665 -17.7500005 -17.5833335 103 0 2670 --56.9166665 -56.7499995 -17.7500005 -17.5833335 107 0 2670 --56.7500005 -56.5833335 -17.7500005 -17.5833335 115 0 2670 --56.5833335 -56.4166665 -17.7500005 -17.5833335 120 0 2670 --56.4166665 -56.2499995 -17.7500005 -17.5833335 122 0 2670 --56.2500005 -56.0833335 -17.7500005 -17.5833335 126 0 2670 --56.0833335 -55.9166665 -17.7500005 -17.5833335 130 0 2670 --55.9166665 -55.7499995 -17.7500005 -17.5833335 134 0 2670 --55.7500005 -55.5833335 -17.7500005 -17.5833335 142 0 2670 --55.5833335 -55.4166665 -17.7500005 -17.5833335 146 0 2670 --55.4166665 -55.2499995 -17.7500005 -17.5833335 147 0 2670 --55.2500005 -55.0833335 -17.7500005 -17.5833335 151 0 2670 --55.0833335 -54.9166665 -17.7500005 -17.5833335 159 0 2670 --54.9166665 -54.7499995 -17.7500005 -17.5833335 434 0 2670 --54.7500005 -54.5833335 -17.7500005 -17.5833335 501 0 2670 --54.5833335 -54.4166665 -17.7500005 -17.5833335 551 0 2670 --54.4166665 -54.2499995 -17.7500005 -17.5833335 478 0 2670 --54.2500005 -54.0833335 -17.7500005 -17.5833335 620 0 2670 --54.0833335 -53.9166665 -17.7500005 -17.5833335 493 0 2670 --53.9166665 -53.7499995 -17.7500005 -17.5833335 422 0 2670 --53.7500005 -53.5833335 -17.7500005 -17.5833335 713 0 2670 --53.5833335 -53.4166665 -17.7500005 -17.5833335 695 0 2670 --53.4166665 -53.2499995 -17.7500005 -17.5833335 846 0 2670 --53.2500005 -53.0833335 -17.7500005 -17.5833335 824 0 2670 --53.0833335 -52.9166665 -17.7500005 -17.5833335 758 0 2670 --52.9166665 -52.7499995 -17.7500005 -17.5833335 814 0 2670 --52.7500005 -52.5833335 -17.7500005 -17.5833335 828 0 2670 --52.5833335 -52.4166665 -17.7500005 -17.5833335 669 0 2670 --52.4166665 -52.2499995 -17.7500005 -17.5833335 707 0 2670 --52.2500005 -52.0833335 -17.7500005 -17.5833335 856 0 2670 --52.0833335 -51.9166665 -17.7500005 -17.5833335 719 0 2670 --51.9166665 -51.7499995 -17.7500005 -17.5833335 811 0 2670 --51.7500005 -51.5833335 -17.7500005 -17.5833335 890 0 2670 --51.5833335 -51.4166665 -17.7500005 -17.5833335 881 0 2670 --51.4166665 -51.2499995 -17.7500005 -17.5833335 846 0 2670 --51.2500005 -51.0833335 -17.7500005 -17.5833335 847 0 2670 --51.0833335 -50.9166665 -17.7500005 -17.5833335 788 0 2670 --50.9166665 -50.7499995 -17.7500005 -17.5833335 724 0 2670 --50.7500005 -50.5833335 -17.7500005 -17.5833335 616 0 2670 --50.5833335 -50.4166665 -17.7500005 -17.5833335 535 0 2670 --50.4166665 -50.2499995 -17.7500005 -17.5833335 519 0 2670 --50.2500005 -50.0833335 -17.7500005 -17.5833335 458 0 2670 --50.0833335 -49.9166665 -17.7500005 -17.5833335 483 0 2670 --49.9166665 -49.7499995 -17.7500005 -17.5833335 528 0 2670 --49.7500005 -49.5833335 -17.7500005 -17.5833335 567 0 2670 --49.5833335 -49.4166665 -17.7500005 -17.5833335 698 0 2670 --49.4166665 -49.2499995 -17.7500005 -17.5833335 728 0 2670 --49.2500005 -49.0833335 -17.7500005 -17.5833335 710 0 2670 --49.0833335 -48.9166665 -17.7500005 -17.5833335 853 0 2670 --48.9166665 -48.7499995 -17.7500005 -17.5833335 634 0 2670 --48.7500005 -48.5833335 -17.7500005 -17.5833335 741 0 2670 --48.5833335 -48.4166665 -17.7500005 -17.5833335 832 0 2670 --48.4166665 -48.2499995 -17.7500005 -17.5833335 785 0 2670 --48.2500005 -48.0833335 -17.7500005 -17.5833335 848 0 2670 --48.0833335 -47.9166665 -17.7500005 -17.5833335 875 0 2670 --47.9166665 -47.7499995 -17.7500005 -17.5833335 895 0 2670 --47.7500005 -47.5833335 -17.7500005 -17.5833335 792 0 2670 --47.5833335 -47.4166665 -17.7500005 -17.5833335 930 0 2670 --47.4166665 -47.2499995 -17.7500005 -17.5833335 860 0 2670 --47.2500005 -47.0833335 -17.7500005 -17.5833335 872 0 2670 --47.0833335 -46.9166665 -17.7500005 -17.5833335 670 0 2670 --46.9166665 -46.7499995 -17.7500005 -17.5833335 563 0 2670 --46.7500005 -46.5833335 -17.7500005 -17.5833335 583 0 2670 --46.5833335 -46.4166665 -17.7500005 -17.5833335 563 0 2670 --46.4166665 -46.2499995 -17.7500005 -17.5833335 563 0 2670 --46.2500005 -46.0833335 -17.7500005 -17.5833335 634 0 2670 --46.0833335 -45.9166665 -17.7500005 -17.5833335 673 0 2670 --45.9166665 -45.7499995 -17.7500005 -17.5833335 760 0 2670 --45.7500005 -45.5833335 -17.7500005 -17.5833335 651 0 2670 --45.5833335 -45.4166665 -17.7500005 -17.5833335 765 0 2670 --45.4166665 -45.2499995 -17.7500005 -17.5833335 872 0 2670 --45.2500005 -45.0833335 -17.7500005 -17.5833335 717 0 2670 --45.0833335 -44.9166665 -17.7500005 -17.5833335 545 0 2670 --44.9166665 -44.7499995 -17.7500005 -17.5833335 651 0 2670 --44.7500005 -44.5833335 -17.7500005 -17.5833335 498 0 2670 --44.5833335 -44.4166665 -17.7500005 -17.5833335 851 0 2670 --44.4166665 -44.2499995 -17.7500005 -17.5833335 1142 0 2670 --44.2500005 -44.0833335 -17.7500005 -17.5833335 705 0 2670 --44.0833335 -43.9166665 -17.7500005 -17.5833335 693 0 2670 --43.9166665 -43.7499995 -17.7500005 -17.5833335 996 0 2670 --43.7500005 -43.5833335 -17.7500005 -17.5833335 683 0 2670 --43.5833335 -43.4166665 -17.7500005 -17.5833335 824 0 2670 --43.4166665 -43.2499995 -17.7500005 -17.5833335 741 0 2670 --43.2500005 -43.0833335 -17.7500005 -17.5833335 795 0 2670 --43.0833335 -42.9166665 -17.7500005 -17.5833335 726 0 2670 --42.9166665 -42.7499995 -17.7500005 -17.5833335 911 0 2670 --42.7500005 -42.5833335 -17.7500005 -17.5833335 751 0 2670 --42.5833335 -42.4166665 -17.7500005 -17.5833335 966 0 2670 --42.4166665 -42.2499995 -17.7500005 -17.5833335 930 0 2670 --42.2500005 -42.0833335 -17.7500005 -17.5833335 861 0 2670 --42.0833335 -41.9166665 -17.7500005 -17.5833335 892 0 2670 --41.9166665 -41.7499995 -17.7500005 -17.5833335 536 0 2670 --41.7500005 -41.5833335 -17.7500005 -17.5833335 454 0 2670 --41.5833335 -41.4166665 -17.7500005 -17.5833335 447 0 2670 --41.4166665 -41.2499995 -17.7500005 -17.5833335 445 0 2670 --41.2500005 -41.0833335 -17.7500005 -17.5833335 321 0 2670 --41.0833335 -40.9166665 -17.7500005 -17.5833335 270 0 2670 --40.9166665 -40.7499995 -17.7500005 -17.5833335 260 0 2670 --40.7500005 -40.5833335 -17.7500005 -17.5833335 256 0 2670 --40.5833335 -40.4166665 -17.7500005 -17.5833335 227 0 2670 --40.4166665 -40.2499995 -17.7500005 -17.5833335 238 0 2670 --40.2500005 -40.0833335 -17.7500005 -17.5833335 218 0 2670 --40.0833335 -39.9166665 -17.7500005 -17.5833335 132 0 2670 --65.0833335 -64.9166665 -17.9166665 -17.7499995 2490 0 2670 --64.9166665 -64.7499995 -17.9166665 -17.7499995 2706 0 2670 --64.7500005 -64.5833335 -17.9166665 -17.7499995 2420 0 2670 --64.5833335 -64.4166665 -17.9166665 -17.7499995 2319 0 2670 --64.4166665 -64.2499995 -17.9166665 -17.7499995 2304 0 2670 --64.2500005 -64.0833335 -17.9166665 -17.7499995 1652 0 2670 --64.0833335 -63.9166665 -17.9166665 -17.7499995 1047 0 2670 --63.9166665 -63.7499995 -17.9166665 -17.7499995 805 0 2670 --63.7500005 -63.5833335 -17.9166665 -17.7499995 1520 0 2670 --63.5833335 -63.4166665 -17.9166665 -17.7499995 584 0 2670 --63.4166665 -63.2499995 -17.9166665 -17.7499995 518 0 2670 --63.2500005 -63.0833335 -17.9166665 -17.7499995 425 0 2670 --63.0833335 -62.9166665 -17.9166665 -17.7499995 369 0 2670 --62.9166665 -62.7499995 -17.9166665 -17.7499995 319 0 2670 --62.7500005 -62.5833335 -17.9166665 -17.7499995 301 0 2670 --62.5833335 -62.4166665 -17.9166665 -17.7499995 298 0 2670 --62.4166665 -62.2499995 -17.9166665 -17.7499995 290 0 2670 --62.2500005 -62.0833335 -17.9166665 -17.7499995 291 0 2670 --62.0833335 -61.9166665 -17.9166665 -17.7499995 291 0 2670 --61.9166665 -61.7499995 -17.9166665 -17.7499995 284 0 2670 --61.7500005 -61.5833335 -17.9166665 -17.7499995 281 0 2670 --61.5833335 -61.4166665 -17.9166665 -17.7499995 277 0 2670 --61.4166665 -61.2499995 -17.9166665 -17.7499995 272 0 2670 --61.2500005 -61.0833335 -17.9166665 -17.7499995 268 0 2670 --61.0833335 -60.9166665 -17.9166665 -17.7499995 353 0 2670 --60.9166665 -60.7499995 -17.9166665 -17.7499995 325 0 2670 --60.7500005 -60.5833335 -17.9166665 -17.7499995 293 0 2670 --60.5833335 -60.4166665 -17.9166665 -17.7499995 339 0 2670 --60.4166665 -60.2499995 -17.9166665 -17.7499995 387 0 2670 --60.2500005 -60.0833335 -17.9166665 -17.7499995 404 0 2670 --60.0833335 -59.9166665 -17.9166665 -17.7499995 297 0 2670 --59.9166665 -59.7499995 -17.9166665 -17.7499995 252 0 2670 --59.7500005 -59.5833335 -17.9166665 -17.7499995 294 0 2670 --59.5833335 -59.4166665 -17.9166665 -17.7499995 577 0 2670 --59.4166665 -59.2499995 -17.9166665 -17.7499995 493 0 2670 --59.2500005 -59.0833335 -17.9166665 -17.7499995 554 0 2670 --59.0833335 -58.9166665 -17.9166665 -17.7499995 490 0 2670 --58.9166665 -58.7499995 -17.9166665 -17.7499995 220 0 2670 --58.7500005 -58.5833335 -17.9166665 -17.7499995 457 0 2670 --58.5833335 -58.4166665 -17.9166665 -17.7499995 175 0 2670 --58.4166665 -58.2499995 -17.9166665 -17.7499995 147 0 2670 --58.2500005 -58.0833335 -17.9166665 -17.7499995 194 0 2670 --58.0833335 -57.9166665 -17.9166665 -17.7499995 194 0 2670 --57.9166665 -57.7499995 -17.9166665 -17.7499995 126 0 2670 --57.7500005 -57.5833335 -17.9166665 -17.7499995 178 0 2670 --57.5833335 -57.4166665 -17.9166665 -17.7499995 92 0 2670 --57.4166665 -57.2499995 -17.9166665 -17.7499995 97 0 2670 --57.2500005 -57.0833335 -17.9166665 -17.7499995 101 0 2670 --57.0833335 -56.9166665 -17.9166665 -17.7499995 104 0 2670 --56.9166665 -56.7499995 -17.9166665 -17.7499995 109 0 2670 --56.7500005 -56.5833335 -17.9166665 -17.7499995 113 0 2670 --56.5833335 -56.4166665 -17.9166665 -17.7499995 118 0 2670 --56.4166665 -56.2499995 -17.9166665 -17.7499995 125 0 2670 --56.2500005 -56.0833335 -17.9166665 -17.7499995 130 0 2670 --56.0833335 -55.9166665 -17.9166665 -17.7499995 135 0 2670 --55.9166665 -55.7499995 -17.9166665 -17.7499995 138 0 2670 --55.7500005 -55.5833335 -17.9166665 -17.7499995 145 0 2670 --55.5833335 -55.4166665 -17.9166665 -17.7499995 150 0 2670 --55.4166665 -55.2499995 -17.9166665 -17.7499995 155 0 2670 --55.2500005 -55.0833335 -17.9166665 -17.7499995 160 0 2670 --55.0833335 -54.9166665 -17.9166665 -17.7499995 167 0 2670 --54.9166665 -54.7499995 -17.9166665 -17.7499995 477 0 2670 --54.7500005 -54.5833335 -17.9166665 -17.7499995 277 0 2670 --54.5833335 -54.4166665 -17.9166665 -17.7499995 264 0 2670 --54.4166665 -54.2499995 -17.9166665 -17.7499995 294 0 2670 --54.2500005 -54.0833335 -17.9166665 -17.7499995 360 0 2670 --54.0833335 -53.9166665 -17.9166665 -17.7499995 333 0 2670 --53.9166665 -53.7499995 -17.9166665 -17.7499995 357 0 2670 --53.7500005 -53.5833335 -17.9166665 -17.7499995 437 0 2670 --53.5833335 -53.4166665 -17.9166665 -17.7499995 836 0 2670 --53.4166665 -53.2499995 -17.9166665 -17.7499995 859 0 2670 --53.2500005 -53.0833335 -17.9166665 -17.7499995 789 0 2670 --53.0833335 -52.9166665 -17.9166665 -17.7499995 886 0 2670 --52.9166665 -52.7499995 -17.9166665 -17.7499995 739 0 2670 --52.7500005 -52.5833335 -17.9166665 -17.7499995 653 0 2670 --52.5833335 -52.4166665 -17.9166665 -17.7499995 681 0 2670 --52.4166665 -52.2499995 -17.9166665 -17.7499995 596 0 2670 --52.2500005 -52.0833335 -17.9166665 -17.7499995 882 0 2670 --52.0833335 -51.9166665 -17.9166665 -17.7499995 836 0 2670 --51.9166665 -51.7499995 -17.9166665 -17.7499995 679 0 2670 --51.7500005 -51.5833335 -17.9166665 -17.7499995 760 0 2670 --51.5833335 -51.4166665 -17.9166665 -17.7499995 855 0 2670 --51.4166665 -51.2499995 -17.9166665 -17.7499995 779 0 2670 --51.2500005 -51.0833335 -17.9166665 -17.7499995 836 0 2670 --51.0833335 -50.9166665 -17.9166665 -17.7499995 726 0 2670 --50.9166665 -50.7499995 -17.9166665 -17.7499995 713 0 2670 --50.7500005 -50.5833335 -17.9166665 -17.7499995 627 0 2670 --50.5833335 -50.4166665 -17.9166665 -17.7499995 524 0 2670 --50.4166665 -50.2499995 -17.9166665 -17.7499995 506 0 2670 --50.2500005 -50.0833335 -17.9166665 -17.7499995 484 0 2670 --50.0833335 -49.9166665 -17.9166665 -17.7499995 498 0 2670 --49.9166665 -49.7499995 -17.9166665 -17.7499995 667 0 2670 --49.7500005 -49.5833335 -17.9166665 -17.7499995 785 0 2670 --49.5833335 -49.4166665 -17.9166665 -17.7499995 588 0 2670 --49.4166665 -49.2499995 -17.9166665 -17.7499995 750 0 2670 --49.2500005 -49.0833335 -17.9166665 -17.7499995 881 0 2670 --49.0833335 -48.9166665 -17.9166665 -17.7499995 736 0 2670 --48.9166665 -48.7499995 -17.9166665 -17.7499995 580 0 2670 --48.7500005 -48.5833335 -17.9166665 -17.7499995 905 0 2670 --48.5833335 -48.4166665 -17.9166665 -17.7499995 703 0 2670 --48.4166665 -48.2499995 -17.9166665 -17.7499995 736 0 2670 --48.2500005 -48.0833335 -17.9166665 -17.7499995 714 0 2670 --48.0833335 -47.9166665 -17.9166665 -17.7499995 814 0 2670 --47.9166665 -47.7499995 -17.9166665 -17.7499995 845 0 2670 --47.7500005 -47.5833335 -17.9166665 -17.7499995 724 0 2670 --47.5833335 -47.4166665 -17.9166665 -17.7499995 864 0 2670 --47.4166665 -47.2499995 -17.9166665 -17.7499995 790 0 2670 --47.2500005 -47.0833335 -17.9166665 -17.7499995 947 0 2670 --47.0833335 -46.9166665 -17.9166665 -17.7499995 731 0 2670 --46.9166665 -46.7499995 -17.9166665 -17.7499995 653 0 2670 --46.7500005 -46.5833335 -17.9166665 -17.7499995 624 0 2670 --46.5833335 -46.4166665 -17.9166665 -17.7499995 579 0 2670 --46.4166665 -46.2499995 -17.9166665 -17.7499995 598 0 2670 --46.2500005 -46.0833335 -17.9166665 -17.7499995 839 0 2670 --46.0833335 -45.9166665 -17.9166665 -17.7499995 802 0 2670 --45.9166665 -45.7499995 -17.9166665 -17.7499995 752 0 2670 --45.7500005 -45.5833335 -17.9166665 -17.7499995 773 0 2670 --45.5833335 -45.4166665 -17.9166665 -17.7499995 818 0 2670 --45.4166665 -45.2499995 -17.9166665 -17.7499995 784 0 2670 --45.2500005 -45.0833335 -17.9166665 -17.7499995 573 0 2670 --45.0833335 -44.9166665 -17.9166665 -17.7499995 687 0 2670 --44.9166665 -44.7499995 -17.9166665 -17.7499995 802 0 2670 --44.7500005 -44.5833335 -17.9166665 -17.7499995 752 0 2670 --44.5833335 -44.4166665 -17.9166665 -17.7499995 743 0 2670 --44.4166665 -44.2499995 -17.9166665 -17.7499995 1181 0 2670 --44.2500005 -44.0833335 -17.9166665 -17.7499995 667 0 2670 --44.0833335 -43.9166665 -17.9166665 -17.7499995 624 0 2670 --43.9166665 -43.7499995 -17.9166665 -17.7499995 1100 0 2670 --43.7500005 -43.5833335 -17.9166665 -17.7499995 1037 0 2670 --43.5833335 -43.4166665 -17.9166665 -17.7499995 723 0 2670 --43.4166665 -43.2499995 -17.9166665 -17.7499995 904 0 2670 --43.2500005 -43.0833335 -17.9166665 -17.7499995 836 0 2670 --43.0833335 -42.9166665 -17.9166665 -17.7499995 900 0 2670 --42.9166665 -42.7499995 -17.9166665 -17.7499995 1041 0 2670 --42.7500005 -42.5833335 -17.9166665 -17.7499995 802 0 2670 --42.5833335 -42.4166665 -17.9166665 -17.7499995 978 0 2670 --42.4166665 -42.2499995 -17.9166665 -17.7499995 565 0 2670 --42.2500005 -42.0833335 -17.9166665 -17.7499995 585 0 2670 --42.0833335 -41.9166665 -17.9166665 -17.7499995 761 0 2670 --41.9166665 -41.7499995 -17.9166665 -17.7499995 566 0 2670 --41.7500005 -41.5833335 -17.9166665 -17.7499995 628 0 2670 --41.5833335 -41.4166665 -17.9166665 -17.7499995 374 0 2670 --41.4166665 -41.2499995 -17.9166665 -17.7499995 386 0 2670 --41.2500005 -41.0833335 -17.9166665 -17.7499995 273 0 2670 --41.0833335 -40.9166665 -17.9166665 -17.7499995 393 0 2670 --40.9166665 -40.7499995 -17.9166665 -17.7499995 288 0 2670 --40.7500005 -40.5833335 -17.9166665 -17.7499995 250 0 2670 --40.5833335 -40.4166665 -17.9166665 -17.7499995 207 0 2670 --40.4166665 -40.2499995 -17.9166665 -17.7499995 129 0 2670 --40.2500005 -40.0833335 -17.9166665 -17.7499995 157 0 2670 --40.0833335 -39.9166665 -17.9166665 -17.7499995 107 0 2670 --65.0833335 -64.9166665 -18.0833335 -17.9166665 2040 0 2670 --64.9166665 -64.7499995 -18.0833335 -17.9166665 1834 0 2670 --64.7500005 -64.5833335 -18.0833335 -17.9166665 1624 0 2670 --64.5833335 -64.4166665 -18.0833335 -17.9166665 2060 0 2670 --64.4166665 -64.2499995 -18.0833335 -17.9166665 1898 0 2670 --64.2500005 -64.0833335 -18.0833335 -17.9166665 1668 0 2670 --64.0833335 -63.9166665 -18.0833335 -17.9166665 1505 0 2670 --63.9166665 -63.7499995 -18.0833335 -17.9166665 1347 0 2670 --63.7500005 -63.5833335 -18.0833335 -17.9166665 1530 0 2670 --63.5833335 -63.4166665 -18.0833335 -17.9166665 714 0 2670 --63.4166665 -63.2499995 -18.0833335 -17.9166665 622 0 2670 --63.2500005 -63.0833335 -18.0833335 -17.9166665 447 0 2670 --63.0833335 -62.9166665 -18.0833335 -17.9166665 365 0 2670 --62.9166665 -62.7499995 -18.0833335 -17.9166665 322 0 2670 --62.7500005 -62.5833335 -18.0833335 -17.9166665 318 0 2670 --62.5833335 -62.4166665 -18.0833335 -17.9166665 308 0 2670 --62.4166665 -62.2499995 -18.0833335 -17.9166665 308 0 2670 --62.2500005 -62.0833335 -18.0833335 -17.9166665 300 0 2670 --62.0833335 -61.9166665 -18.0833335 -17.9166665 296 0 2670 --61.9166665 -61.7499995 -18.0833335 -17.9166665 288 0 2670 --61.7500005 -61.5833335 -18.0833335 -17.9166665 285 0 2670 --61.5833335 -61.4166665 -18.0833335 -17.9166665 278 0 2670 --61.4166665 -61.2499995 -18.0833335 -17.9166665 275 0 2670 --61.2500005 -61.0833335 -18.0833335 -17.9166665 274 0 2670 --61.0833335 -60.9166665 -18.0833335 -17.9166665 321 0 2670 --60.9166665 -60.7499995 -18.0833335 -17.9166665 364 0 2670 --60.7500005 -60.5833335 -18.0833335 -17.9166665 406 0 2670 --60.5833335 -60.4166665 -18.0833335 -17.9166665 422 0 2670 --60.4166665 -60.2499995 -18.0833335 -17.9166665 421 0 2670 --60.2500005 -60.0833335 -18.0833335 -17.9166665 403 0 2670 --60.0833335 -59.9166665 -18.0833335 -17.9166665 430 0 2670 --59.9166665 -59.7499995 -18.0833335 -17.9166665 318 0 2670 --59.7500005 -59.5833335 -18.0833335 -17.9166665 240 0 2670 --59.5833335 -59.4166665 -18.0833335 -17.9166665 371 0 2670 --59.4166665 -59.2499995 -18.0833335 -17.9166665 658 0 2670 --59.2500005 -59.0833335 -18.0833335 -17.9166665 670 0 2670 --59.0833335 -58.9166665 -18.0833335 -17.9166665 452 0 2670 --58.9166665 -58.7499995 -18.0833335 -17.9166665 244 0 2670 --58.7500005 -58.5833335 -18.0833335 -17.9166665 313 0 2670 --58.5833335 -58.4166665 -18.0833335 -17.9166665 181 0 2670 --58.4166665 -58.2499995 -18.0833335 -17.9166665 204 0 2670 --58.2500005 -58.0833335 -18.0833335 -17.9166665 174 0 2670 --58.0833335 -57.9166665 -18.0833335 -17.9166665 203 0 2670 --57.9166665 -57.7499995 -18.0833335 -17.9166665 264 0 2670 --57.7500005 -57.5833335 -18.0833335 -17.9166665 174 0 2670 --57.5833335 -57.4166665 -18.0833335 -17.9166665 200 0 2670 --57.4166665 -57.2499995 -18.0833335 -17.9166665 94 0 2670 --57.2500005 -57.0833335 -18.0833335 -17.9166665 98 0 2670 --57.0833335 -56.9166665 -18.0833335 -17.9166665 102 0 2670 --56.9166665 -56.7499995 -18.0833335 -17.9166665 108 0 2670 --56.7500005 -56.5833335 -18.0833335 -17.9166665 113 0 2670 --56.5833335 -56.4166665 -18.0833335 -17.9166665 119 0 2670 --56.4166665 -56.2499995 -18.0833335 -17.9166665 123 0 2670 --56.2500005 -56.0833335 -18.0833335 -17.9166665 132 0 2670 --56.0833335 -55.9166665 -18.0833335 -17.9166665 137 0 2670 --55.9166665 -55.7499995 -18.0833335 -17.9166665 143 0 2670 --55.7500005 -55.5833335 -18.0833335 -17.9166665 148 0 2670 --55.5833335 -55.4166665 -18.0833335 -17.9166665 158 0 2670 --55.4166665 -55.2499995 -18.0833335 -17.9166665 162 0 2670 --55.2500005 -55.0833335 -18.0833335 -17.9166665 168 0 2670 --55.0833335 -54.9166665 -18.0833335 -17.9166665 170 0 2670 --54.9166665 -54.7499995 -18.0833335 -17.9166665 183 0 2670 --54.7500005 -54.5833335 -18.0833335 -17.9166665 349 0 2670 --54.5833335 -54.4166665 -18.0833335 -17.9166665 280 0 2670 --54.4166665 -54.2499995 -18.0833335 -17.9166665 315 0 2670 --54.2500005 -54.0833335 -18.0833335 -17.9166665 370 0 2670 --54.0833335 -53.9166665 -18.0833335 -17.9166665 322 0 2670 --53.9166665 -53.7499995 -18.0833335 -17.9166665 371 0 2670 --53.7500005 -53.5833335 -18.0833335 -17.9166665 349 0 2670 --53.5833335 -53.4166665 -18.0833335 -17.9166665 431 0 2670 --53.4166665 -53.2499995 -18.0833335 -17.9166665 554 0 2670 --53.2500005 -53.0833335 -18.0833335 -17.9166665 856 0 2670 --53.0833335 -52.9166665 -18.0833335 -17.9166665 879 0 2670 --52.9166665 -52.7499995 -18.0833335 -17.9166665 760 0 2670 --52.7500005 -52.5833335 -18.0833335 -17.9166665 710 0 2670 --52.5833335 -52.4166665 -18.0833335 -17.9166665 685 0 2670 --52.4166665 -52.2499995 -18.0833335 -17.9166665 642 0 2670 --52.2500005 -52.0833335 -18.0833335 -17.9166665 857 0 2670 --52.0833335 -51.9166665 -18.0833335 -17.9166665 790 0 2670 --51.9166665 -51.7499995 -18.0833335 -17.9166665 691 0 2670 --51.7500005 -51.5833335 -18.0833335 -17.9166665 609 0 2670 --51.5833335 -51.4166665 -18.0833335 -17.9166665 743 0 2670 --51.4166665 -51.2499995 -18.0833335 -17.9166665 727 0 2670 --51.2500005 -51.0833335 -18.0833335 -17.9166665 755 0 2670 --51.0833335 -50.9166665 -18.0833335 -17.9166665 710 0 2670 --50.9166665 -50.7499995 -18.0833335 -17.9166665 702 0 2670 --50.7500005 -50.5833335 -18.0833335 -17.9166665 659 0 2670 --50.5833335 -50.4166665 -18.0833335 -17.9166665 580 0 2670 --50.4166665 -50.2499995 -18.0833335 -17.9166665 504 0 2670 --50.2500005 -50.0833335 -18.0833335 -17.9166665 480 0 2670 --50.0833335 -49.9166665 -18.0833335 -17.9166665 588 0 2670 --49.9166665 -49.7499995 -18.0833335 -17.9166665 616 0 2670 --49.7500005 -49.5833335 -18.0833335 -17.9166665 707 0 2670 --49.5833335 -49.4166665 -18.0833335 -17.9166665 531 0 2670 --49.4166665 -49.2499995 -18.0833335 -17.9166665 810 0 2670 --49.2500005 -49.0833335 -18.0833335 -17.9166665 726 0 2670 --49.0833335 -48.9166665 -18.0833335 -17.9166665 635 0 2670 --48.9166665 -48.7499995 -18.0833335 -17.9166665 589 0 2670 --48.7500005 -48.5833335 -18.0833335 -17.9166665 676 0 2670 --48.5833335 -48.4166665 -18.0833335 -17.9166665 737 0 2670 --48.4166665 -48.2499995 -18.0833335 -17.9166665 727 0 2670 --48.2500005 -48.0833335 -18.0833335 -17.9166665 681 0 2670 --48.0833335 -47.9166665 -18.0833335 -17.9166665 784 0 2670 --47.9166665 -47.7499995 -18.0833335 -17.9166665 825 0 2670 --47.7500005 -47.5833335 -18.0833335 -17.9166665 753 0 2670 --47.5833335 -47.4166665 -18.0833335 -17.9166665 849 0 2670 --47.4166665 -47.2499995 -18.0833335 -17.9166665 759 0 2670 --47.2500005 -47.0833335 -18.0833335 -17.9166665 986 0 2670 --47.0833335 -46.9166665 -18.0833335 -17.9166665 730 0 2670 --46.9166665 -46.7499995 -18.0833335 -17.9166665 646 0 2670 --46.7500005 -46.5833335 -18.0833335 -17.9166665 563 0 2670 --46.5833335 -46.4166665 -18.0833335 -17.9166665 806 0 2670 --46.4166665 -46.2499995 -18.0833335 -17.9166665 819 0 2670 --46.2500005 -46.0833335 -18.0833335 -17.9166665 831 0 2670 --46.0833335 -45.9166665 -18.0833335 -17.9166665 797 0 2670 --45.9166665 -45.7499995 -18.0833335 -17.9166665 770 0 2670 --45.7500005 -45.5833335 -18.0833335 -17.9166665 792 0 2670 --45.5833335 -45.4166665 -18.0833335 -17.9166665 762 0 2670 --45.4166665 -45.2499995 -18.0833335 -17.9166665 758 0 2670 --45.2500005 -45.0833335 -18.0833335 -17.9166665 579 0 2670 --45.0833335 -44.9166665 -18.0833335 -17.9166665 706 0 2670 --44.9166665 -44.7499995 -18.0833335 -17.9166665 850 0 2670 --44.7500005 -44.5833335 -18.0833335 -17.9166665 800 0 2670 --44.5833335 -44.4166665 -18.0833335 -17.9166665 657 0 2670 --44.4166665 -44.2499995 -18.0833335 -17.9166665 1047 0 2670 --44.2500005 -44.0833335 -18.0833335 -17.9166665 566 0 2670 --44.0833335 -43.9166665 -18.0833335 -17.9166665 1196 0 2670 --43.9166665 -43.7499995 -18.0833335 -17.9166665 1172 0 2670 --43.7500005 -43.5833335 -18.0833335 -17.9166665 957 0 2670 --43.5833335 -43.4166665 -18.0833335 -17.9166665 968 0 2670 --43.4166665 -43.2499995 -18.0833335 -17.9166665 930 0 2670 --43.2500005 -43.0833335 -18.0833335 -17.9166665 918 0 2670 --43.0833335 -42.9166665 -18.0833335 -17.9166665 1013 0 2670 --42.9166665 -42.7499995 -18.0833335 -17.9166665 917 0 2670 --42.7500005 -42.5833335 -18.0833335 -17.9166665 827 0 2670 --42.5833335 -42.4166665 -18.0833335 -17.9166665 621 0 2670 --42.4166665 -42.2499995 -18.0833335 -17.9166665 482 0 2670 --42.2500005 -42.0833335 -18.0833335 -17.9166665 361 0 2670 --42.0833335 -41.9166665 -18.0833335 -17.9166665 578 0 2670 --41.9166665 -41.7499995 -18.0833335 -17.9166665 619 0 2670 --41.7500005 -41.5833335 -18.0833335 -17.9166665 582 0 2670 --41.5833335 -41.4166665 -18.0833335 -17.9166665 430 0 2670 --41.4166665 -41.2499995 -18.0833335 -17.9166665 645 0 2670 --41.2500005 -41.0833335 -18.0833335 -17.9166665 353 0 2670 --41.0833335 -40.9166665 -18.0833335 -17.9166665 290 0 2670 --40.9166665 -40.7499995 -18.0833335 -17.9166665 295 0 2670 --40.7500005 -40.5833335 -18.0833335 -17.9166665 322 0 2670 --40.5833335 -40.4166665 -18.0833335 -17.9166665 224 0 2670 --40.4166665 -40.2499995 -18.0833335 -17.9166665 167 0 2670 --40.2500005 -40.0833335 -18.0833335 -17.9166665 137 0 2670 --40.0833335 -39.9166665 -18.0833335 -17.9166665 54 0 2670 --65.0833335 -64.9166665 -18.2500005 -18.0833335 2211 0 2670 --64.9166665 -64.7499995 -18.2500005 -18.0833335 1757 0 2670 --64.7500005 -64.5833335 -18.2500005 -18.0833335 1735 0 2670 --64.5833335 -64.4166665 -18.2500005 -18.0833335 1611 0 2670 --64.4166665 -64.2499995 -18.2500005 -18.0833335 2015 0 2670 --64.2500005 -64.0833335 -18.2500005 -18.0833335 1799 0 2670 --64.0833335 -63.9166665 -18.2500005 -18.0833335 1708 0 2670 --63.9166665 -63.7499995 -18.2500005 -18.0833335 1624 0 2670 --63.7500005 -63.5833335 -18.2500005 -18.0833335 1591 0 2670 --63.5833335 -63.4166665 -18.2500005 -18.0833335 641 0 2670 --63.4166665 -63.2499995 -18.2500005 -18.0833335 723 0 2670 --63.2500005 -63.0833335 -18.2500005 -18.0833335 481 0 2670 --63.0833335 -62.9166665 -18.2500005 -18.0833335 375 0 2670 --62.9166665 -62.7499995 -18.2500005 -18.0833335 343 0 2670 --62.7500005 -62.5833335 -18.2500005 -18.0833335 330 0 2670 --62.5833335 -62.4166665 -18.2500005 -18.0833335 324 0 2670 --62.4166665 -62.2499995 -18.2500005 -18.0833335 315 0 2670 --62.2500005 -62.0833335 -18.2500005 -18.0833335 307 0 2670 --62.0833335 -61.9166665 -18.2500005 -18.0833335 303 0 2670 --61.9166665 -61.7499995 -18.2500005 -18.0833335 297 0 2670 --61.7500005 -61.5833335 -18.2500005 -18.0833335 288 0 2670 --61.5833335 -61.4166665 -18.2500005 -18.0833335 281 0 2670 --61.4166665 -61.2499995 -18.2500005 -18.0833335 279 0 2670 --61.2500005 -61.0833335 -18.2500005 -18.0833335 278 0 2670 --61.0833335 -60.9166665 -18.2500005 -18.0833335 279 0 2670 --60.9166665 -60.7499995 -18.2500005 -18.0833335 330 0 2670 --60.7500005 -60.5833335 -18.2500005 -18.0833335 425 0 2670 --60.5833335 -60.4166665 -18.2500005 -18.0833335 418 0 2670 --60.4166665 -60.2499995 -18.2500005 -18.0833335 484 0 2670 --60.2500005 -60.0833335 -18.2500005 -18.0833335 622 0 2670 --60.0833335 -59.9166665 -18.2500005 -18.0833335 391 0 2670 --59.9166665 -59.7499995 -18.2500005 -18.0833335 429 0 2670 --59.7500005 -59.5833335 -18.2500005 -18.0833335 288 0 2670 --59.5833335 -59.4166665 -18.2500005 -18.0833335 220 0 2670 --59.4166665 -59.2499995 -18.2500005 -18.0833335 222 0 2670 --59.2500005 -59.0833335 -18.2500005 -18.0833335 249 0 2670 --59.0833335 -58.9166665 -18.2500005 -18.0833335 356 0 2670 --58.9166665 -58.7499995 -18.2500005 -18.0833335 499 0 2670 --58.7500005 -58.5833335 -18.2500005 -18.0833335 334 0 2670 --58.5833335 -58.4166665 -18.2500005 -18.0833335 519 0 2670 --58.4166665 -58.2499995 -18.2500005 -18.0833335 341 0 2670 --58.2500005 -58.0833335 -18.2500005 -18.0833335 188 0 2670 --58.0833335 -57.9166665 -18.2500005 -18.0833335 218 0 2670 --57.9166665 -57.7499995 -18.2500005 -18.0833335 280 0 2670 --57.7500005 -57.5833335 -18.2500005 -18.0833335 315 0 2670 --57.5833335 -57.4166665 -18.2500005 -18.0833335 92 0 2670 --57.4166665 -57.2499995 -18.2500005 -18.0833335 93 0 2670 --57.2500005 -57.0833335 -18.2500005 -18.0833335 97 0 2670 --57.0833335 -56.9166665 -18.2500005 -18.0833335 102 0 2670 --56.9166665 -56.7499995 -18.2500005 -18.0833335 108 0 2670 --56.7500005 -56.5833335 -18.2500005 -18.0833335 114 0 2670 --56.5833335 -56.4166665 -18.2500005 -18.0833335 118 0 2670 --56.4166665 -56.2499995 -18.2500005 -18.0833335 125 0 2670 --56.2500005 -56.0833335 -18.2500005 -18.0833335 132 0 2670 --56.0833335 -55.9166665 -18.2500005 -18.0833335 139 0 2670 --55.9166665 -55.7499995 -18.2500005 -18.0833335 146 0 2670 --55.7500005 -55.5833335 -18.2500005 -18.0833335 152 0 2670 --55.5833335 -55.4166665 -18.2500005 -18.0833335 158 0 2670 --55.4166665 -55.2499995 -18.2500005 -18.0833335 165 0 2670 --55.2500005 -55.0833335 -18.2500005 -18.0833335 174 0 2670 --55.0833335 -54.9166665 -18.2500005 -18.0833335 180 0 2670 --54.9166665 -54.7499995 -18.2500005 -18.0833335 414 0 2670 --54.7500005 -54.5833335 -18.2500005 -18.0833335 340 0 2670 --54.5833335 -54.4166665 -18.2500005 -18.0833335 258 0 2670 --54.4166665 -54.2499995 -18.2500005 -18.0833335 321 0 2670 --54.2500005 -54.0833335 -18.2500005 -18.0833335 322 0 2670 --54.0833335 -53.9166665 -18.2500005 -18.0833335 316 0 2670 --53.9166665 -53.7499995 -18.2500005 -18.0833335 346 0 2670 --53.7500005 -53.5833335 -18.2500005 -18.0833335 688 0 2670 --53.5833335 -53.4166665 -18.2500005 -18.0833335 424 0 2670 --53.4166665 -53.2499995 -18.2500005 -18.0833335 604 0 2670 --53.2500005 -53.0833335 -18.2500005 -18.0833335 863 0 2670 --53.0833335 -52.9166665 -18.2500005 -18.0833335 809 0 2670 --52.9166665 -52.7499995 -18.2500005 -18.0833335 846 0 2670 --52.7500005 -52.5833335 -18.2500005 -18.0833335 779 0 2670 --52.5833335 -52.4166665 -18.2500005 -18.0833335 654 0 2670 --52.4166665 -52.2499995 -18.2500005 -18.0833335 601 0 2670 --52.2500005 -52.0833335 -18.2500005 -18.0833335 611 0 2670 --52.0833335 -51.9166665 -18.2500005 -18.0833335 852 0 2670 --51.9166665 -51.7499995 -18.2500005 -18.0833335 757 0 2670 --51.7500005 -51.5833335 -18.2500005 -18.0833335 721 0 2670 --51.5833335 -51.4166665 -18.2500005 -18.0833335 648 0 2670 --51.4166665 -51.2499995 -18.2500005 -18.0833335 637 0 2670 --51.2500005 -51.0833335 -18.2500005 -18.0833335 658 0 2670 --51.0833335 -50.9166665 -18.2500005 -18.0833335 761 0 2670 --50.9166665 -50.7499995 -18.2500005 -18.0833335 847 0 2670 --50.7500005 -50.5833335 -18.2500005 -18.0833335 680 0 2670 --50.5833335 -50.4166665 -18.2500005 -18.0833335 641 0 2670 --50.4166665 -50.2499995 -18.2500005 -18.0833335 580 0 2670 --50.2500005 -50.0833335 -18.2500005 -18.0833335 439 0 2670 --50.0833335 -49.9166665 -18.2500005 -18.0833335 517 0 2670 --49.9166665 -49.7499995 -18.2500005 -18.0833335 598 0 2670 --49.7500005 -49.5833335 -18.2500005 -18.0833335 702 0 2670 --49.5833335 -49.4166665 -18.2500005 -18.0833335 498 0 2670 --49.4166665 -49.2499995 -18.2500005 -18.0833335 641 0 2670 --49.2500005 -49.0833335 -18.2500005 -18.0833335 718 0 2670 --49.0833335 -48.9166665 -18.2500005 -18.0833335 756 0 2670 --48.9166665 -48.7499995 -18.2500005 -18.0833335 582 0 2670 --48.7500005 -48.5833335 -18.2500005 -18.0833335 573 0 2670 --48.5833335 -48.4166665 -18.2500005 -18.0833335 685 0 2670 --48.4166665 -48.2499995 -18.2500005 -18.0833335 767 0 2670 --48.2500005 -48.0833335 -18.2500005 -18.0833335 640 0 2670 --48.0833335 -47.9166665 -18.2500005 -18.0833335 824 0 2670 --47.9166665 -47.7499995 -18.2500005 -18.0833335 861 0 2670 --47.7500005 -47.5833335 -18.2500005 -18.0833335 703 0 2670 --47.5833335 -47.4166665 -18.2500005 -18.0833335 738 0 2670 --47.4166665 -47.2499995 -18.2500005 -18.0833335 782 0 2670 --47.2500005 -47.0833335 -18.2500005 -18.0833335 776 0 2670 --47.0833335 -46.9166665 -18.2500005 -18.0833335 848 0 2670 --46.9166665 -46.7499995 -18.2500005 -18.0833335 843 0 2670 --46.7500005 -46.5833335 -18.2500005 -18.0833335 727 0 2670 --46.5833335 -46.4166665 -18.2500005 -18.0833335 1001 0 2670 --46.4166665 -46.2499995 -18.2500005 -18.0833335 774 0 2670 --46.2500005 -46.0833335 -18.2500005 -18.0833335 765 0 2670 --46.0833335 -45.9166665 -18.2500005 -18.0833335 840 0 2670 --45.9166665 -45.7499995 -18.2500005 -18.0833335 834 0 2670 --45.7500005 -45.5833335 -18.2500005 -18.0833335 733 0 2670 --45.5833335 -45.4166665 -18.2500005 -18.0833335 676 0 2670 --45.4166665 -45.2499995 -18.2500005 -18.0833335 709 0 2670 --45.2500005 -45.0833335 -18.2500005 -18.0833335 573 0 2670 --45.0833335 -44.9166665 -18.2500005 -18.0833335 768 0 2670 --44.9166665 -44.7499995 -18.2500005 -18.0833335 863 0 2670 --44.7500005 -44.5833335 -18.2500005 -18.0833335 642 0 2670 --44.5833335 -44.4166665 -18.2500005 -18.0833335 602 0 2670 --44.4166665 -44.2499995 -18.2500005 -18.0833335 573 0 2670 --44.2500005 -44.0833335 -18.2500005 -18.0833335 630 0 2670 --44.0833335 -43.9166665 -18.2500005 -18.0833335 1126 0 2670 --43.9166665 -43.7499995 -18.2500005 -18.0833335 1119 0 2670 --43.7500005 -43.5833335 -18.2500005 -18.0833335 1087 0 2670 --43.5833335 -43.4166665 -18.2500005 -18.0833335 884 0 2670 --43.4166665 -43.2499995 -18.2500005 -18.0833335 1189 0 2670 --43.2500005 -43.0833335 -18.2500005 -18.0833335 1014 0 2670 --43.0833335 -42.9166665 -18.2500005 -18.0833335 770 0 2670 --42.9166665 -42.7499995 -18.2500005 -18.0833335 736 0 2670 --42.7500005 -42.5833335 -18.2500005 -18.0833335 645 0 2670 --42.5833335 -42.4166665 -18.2500005 -18.0833335 520 0 2670 --42.4166665 -42.2499995 -18.2500005 -18.0833335 505 0 2670 --42.2500005 -42.0833335 -18.2500005 -18.0833335 319 0 2670 --42.0833335 -41.9166665 -18.2500005 -18.0833335 380 0 2670 --41.9166665 -41.7499995 -18.2500005 -18.0833335 554 0 2670 --41.7500005 -41.5833335 -18.2500005 -18.0833335 424 0 2670 --41.5833335 -41.4166665 -18.2500005 -18.0833335 400 0 2670 --41.4166665 -41.2499995 -18.2500005 -18.0833335 390 0 2670 --41.2500005 -41.0833335 -18.2500005 -18.0833335 365 0 2670 --41.0833335 -40.9166665 -18.2500005 -18.0833335 248 0 2670 --40.9166665 -40.7499995 -18.2500005 -18.0833335 254 0 2670 --40.7500005 -40.5833335 -18.2500005 -18.0833335 255 0 2670 --40.5833335 -40.4166665 -18.2500005 -18.0833335 255 0 2670 --40.4166665 -40.2499995 -18.2500005 -18.0833335 183 0 2670 --40.2500005 -40.0833335 -18.2500005 -18.0833335 117 0 2670 --40.0833335 -39.9166665 -18.2500005 -18.0833335 76 0 2670 --65.0833335 -64.9166665 -18.4166665 -18.2499995 2450 0 2670 --64.9166665 -64.7499995 -18.4166665 -18.2499995 2577 0 2670 --64.7500005 -64.5833335 -18.4166665 -18.2499995 2094 0 2670 --64.5833335 -64.4166665 -18.4166665 -18.2499995 1691 0 2670 --64.4166665 -64.2499995 -18.4166665 -18.2499995 2410 0 2670 --64.2500005 -64.0833335 -18.4166665 -18.2499995 1656 0 2670 --64.0833335 -63.9166665 -18.4166665 -18.2499995 2061 0 2670 --63.9166665 -63.7499995 -18.4166665 -18.2499995 1653 0 2670 --63.7500005 -63.5833335 -18.4166665 -18.2499995 1255 0 2670 --63.5833335 -63.4166665 -18.4166665 -18.2499995 1098 0 2670 --63.4166665 -63.2499995 -18.4166665 -18.2499995 698 0 2670 --63.2500005 -63.0833335 -18.4166665 -18.2499995 502 0 2670 --63.0833335 -62.9166665 -18.4166665 -18.2499995 396 0 2670 --62.9166665 -62.7499995 -18.4166665 -18.2499995 358 0 2670 --62.7500005 -62.5833335 -18.4166665 -18.2499995 341 0 2670 --62.5833335 -62.4166665 -18.4166665 -18.2499995 328 0 2670 --62.4166665 -62.2499995 -18.4166665 -18.2499995 320 0 2670 --62.2500005 -62.0833335 -18.4166665 -18.2499995 315 0 2670 --62.0833335 -61.9166665 -18.4166665 -18.2499995 305 0 2670 --61.9166665 -61.7499995 -18.4166665 -18.2499995 298 0 2670 --61.7500005 -61.5833335 -18.4166665 -18.2499995 290 0 2670 --61.5833335 -61.4166665 -18.4166665 -18.2499995 287 0 2670 --61.4166665 -61.2499995 -18.4166665 -18.2499995 284 0 2670 --61.2500005 -61.0833335 -18.4166665 -18.2499995 281 0 2670 --61.0833335 -60.9166665 -18.4166665 -18.2499995 280 0 2670 --60.9166665 -60.7499995 -18.4166665 -18.2499995 304 0 2670 --60.7500005 -60.5833335 -18.4166665 -18.2499995 382 0 2670 --60.5833335 -60.4166665 -18.4166665 -18.2499995 450 0 2670 --60.4166665 -60.2499995 -18.4166665 -18.2499995 421 0 2670 --60.2500005 -60.0833335 -18.4166665 -18.2499995 426 0 2670 --60.0833335 -59.9166665 -18.4166665 -18.2499995 414 0 2670 --59.9166665 -59.7499995 -18.4166665 -18.2499995 285 0 2670 --59.7500005 -59.5833335 -18.4166665 -18.2499995 558 0 2670 --59.5833335 -59.4166665 -18.4166665 -18.2499995 286 0 2670 --59.4166665 -59.2499995 -18.4166665 -18.2499995 202 0 2670 --59.2500005 -59.0833335 -18.4166665 -18.2499995 192 0 2670 --59.0833335 -58.9166665 -18.4166665 -18.2499995 217 0 2670 --58.9166665 -58.7499995 -18.4166665 -18.2499995 591 0 2670 --58.7500005 -58.5833335 -18.4166665 -18.2499995 534 0 2670 --58.5833335 -58.4166665 -18.4166665 -18.2499995 383 0 2670 --58.4166665 -58.2499995 -18.4166665 -18.2499995 396 0 2670 --58.2500005 -58.0833335 -18.4166665 -18.2499995 369 0 2670 --58.0833335 -57.9166665 -18.4166665 -18.2499995 333 0 2670 --57.9166665 -57.7499995 -18.4166665 -18.2499995 352 0 2670 --57.7500005 -57.5833335 -18.4166665 -18.2499995 273 0 2670 --57.5833335 -57.4166665 -18.4166665 -18.2499995 90 0 2670 --57.4166665 -57.2499995 -18.4166665 -18.2499995 93 0 2670 --57.2500005 -57.0833335 -18.4166665 -18.2499995 96 0 2670 --57.0833335 -56.9166665 -18.4166665 -18.2499995 103 0 2670 --56.9166665 -56.7499995 -18.4166665 -18.2499995 106 0 2670 --56.7500005 -56.5833335 -18.4166665 -18.2499995 112 0 2670 --56.5833335 -56.4166665 -18.4166665 -18.2499995 119 0 2670 --56.4166665 -56.2499995 -18.4166665 -18.2499995 125 0 2670 --56.2500005 -56.0833335 -18.4166665 -18.2499995 133 0 2670 --56.0833335 -55.9166665 -18.4166665 -18.2499995 137 0 2670 --55.9166665 -55.7499995 -18.4166665 -18.2499995 142 0 2670 --55.7500005 -55.5833335 -18.4166665 -18.2499995 150 0 2670 --55.5833335 -55.4166665 -18.4166665 -18.2499995 157 0 2670 --55.4166665 -55.2499995 -18.4166665 -18.2499995 169 0 2670 --55.2500005 -55.0833335 -18.4166665 -18.2499995 180 0 2670 --55.0833335 -54.9166665 -18.4166665 -18.2499995 187 0 2670 --54.9166665 -54.7499995 -18.4166665 -18.2499995 391 0 2670 --54.7500005 -54.5833335 -18.4166665 -18.2499995 266 0 2670 --54.5833335 -54.4166665 -18.4166665 -18.2499995 262 0 2670 --54.4166665 -54.2499995 -18.4166665 -18.2499995 410 0 2670 --54.2500005 -54.0833335 -18.4166665 -18.2499995 421 0 2670 --54.0833335 -53.9166665 -18.4166665 -18.2499995 434 0 2670 --53.9166665 -53.7499995 -18.4166665 -18.2499995 379 0 2670 --53.7500005 -53.5833335 -18.4166665 -18.2499995 410 0 2670 --53.5833335 -53.4166665 -18.4166665 -18.2499995 446 0 2670 --53.4166665 -53.2499995 -18.4166665 -18.2499995 720 0 2670 --53.2500005 -53.0833335 -18.4166665 -18.2499995 704 0 2670 --53.0833335 -52.9166665 -18.4166665 -18.2499995 832 0 2670 --52.9166665 -52.7499995 -18.4166665 -18.2499995 848 0 2670 --52.7500005 -52.5833335 -18.4166665 -18.2499995 786 0 2670 --52.5833335 -52.4166665 -18.4166665 -18.2499995 743 0 2670 --52.4166665 -52.2499995 -18.4166665 -18.2499995 617 0 2670 --52.2500005 -52.0833335 -18.4166665 -18.2499995 637 0 2670 --52.0833335 -51.9166665 -18.4166665 -18.2499995 652 0 2670 --51.9166665 -51.7499995 -18.4166665 -18.2499995 708 0 2670 --51.7500005 -51.5833335 -18.4166665 -18.2499995 611 0 2670 --51.5833335 -51.4166665 -18.4166665 -18.2499995 622 0 2670 --51.4166665 -51.2499995 -18.4166665 -18.2499995 586 0 2670 --51.2500005 -51.0833335 -18.4166665 -18.2499995 597 0 2670 --51.0833335 -50.9166665 -18.4166665 -18.2499995 678 0 2670 --50.9166665 -50.7499995 -18.4166665 -18.2499995 567 0 2670 --50.7500005 -50.5833335 -18.4166665 -18.2499995 588 0 2670 --50.5833335 -50.4166665 -18.4166665 -18.2499995 763 0 2670 --50.4166665 -50.2499995 -18.4166665 -18.2499995 599 0 2670 --50.2500005 -50.0833335 -18.4166665 -18.2499995 453 0 2670 --50.0833335 -49.9166665 -18.4166665 -18.2499995 461 0 2670 --49.9166665 -49.7499995 -18.4166665 -18.2499995 542 0 2670 --49.7500005 -49.5833335 -18.4166665 -18.2499995 537 0 2670 --49.5833335 -49.4166665 -18.4166665 -18.2499995 606 0 2670 --49.4166665 -49.2499995 -18.4166665 -18.2499995 622 0 2670 --49.2500005 -49.0833335 -18.4166665 -18.2499995 489 0 2670 --49.0833335 -48.9166665 -18.4166665 -18.2499995 522 0 2670 --48.9166665 -48.7499995 -18.4166665 -18.2499995 518 0 2670 --48.7500005 -48.5833335 -18.4166665 -18.2499995 517 0 2670 --48.5833335 -48.4166665 -18.4166665 -18.2499995 573 0 2670 --48.4166665 -48.2499995 -18.4166665 -18.2499995 551 0 2670 --48.2500005 -48.0833335 -18.4166665 -18.2499995 622 0 2670 --48.0833335 -47.9166665 -18.4166665 -18.2499995 738 0 2670 --47.9166665 -47.7499995 -18.4166665 -18.2499995 685 0 2670 --47.7500005 -47.5833335 -18.4166665 -18.2499995 655 0 2670 --47.5833335 -47.4166665 -18.4166665 -18.2499995 770 0 2670 --47.4166665 -47.2499995 -18.4166665 -18.2499995 829 0 2670 --47.2500005 -47.0833335 -18.4166665 -18.2499995 803 0 2670 --47.0833335 -46.9166665 -18.4166665 -18.2499995 769 0 2670 --46.9166665 -46.7499995 -18.4166665 -18.2499995 788 0 2670 --46.7500005 -46.5833335 -18.4166665 -18.2499995 855 0 2670 --46.5833335 -46.4166665 -18.4166665 -18.2499995 925 0 2670 --46.4166665 -46.2499995 -18.4166665 -18.2499995 775 0 2670 --46.2500005 -46.0833335 -18.4166665 -18.2499995 769 0 2670 --46.0833335 -45.9166665 -18.4166665 -18.2499995 909 0 2670 --45.9166665 -45.7499995 -18.4166665 -18.2499995 794 0 2670 --45.7500005 -45.5833335 -18.4166665 -18.2499995 753 0 2670 --45.5833335 -45.4166665 -18.4166665 -18.2499995 745 0 2670 --45.4166665 -45.2499995 -18.4166665 -18.2499995 570 0 2670 --45.2500005 -45.0833335 -18.4166665 -18.2499995 734 0 2670 --45.0833335 -44.9166665 -18.4166665 -18.2499995 764 0 2670 --44.9166665 -44.7499995 -18.4166665 -18.2499995 880 0 2670 --44.7500005 -44.5833335 -18.4166665 -18.2499995 614 0 2670 --44.5833335 -44.4166665 -18.4166665 -18.2499995 652 0 2670 --44.4166665 -44.2499995 -18.4166665 -18.2499995 568 0 2670 --44.2500005 -44.0833335 -18.4166665 -18.2499995 650 0 2670 --44.0833335 -43.9166665 -18.4166665 -18.2499995 972 0 2670 --43.9166665 -43.7499995 -18.4166665 -18.2499995 1160 0 2670 --43.7500005 -43.5833335 -18.4166665 -18.2499995 1294 0 2670 --43.5833335 -43.4166665 -18.4166665 -18.2499995 968 0 2670 --43.4166665 -43.2499995 -18.4166665 -18.2499995 1158 0 2670 --43.2500005 -43.0833335 -18.4166665 -18.2499995 751 0 2670 --43.0833335 -42.9166665 -18.4166665 -18.2499995 757 0 2670 --42.9166665 -42.7499995 -18.4166665 -18.2499995 686 0 2670 --42.7500005 -42.5833335 -18.4166665 -18.2499995 672 0 2670 --42.5833335 -42.4166665 -18.4166665 -18.2499995 594 0 2670 --42.4166665 -42.2499995 -18.4166665 -18.2499995 345 0 2670 --42.2500005 -42.0833335 -18.4166665 -18.2499995 486 0 2670 --42.0833335 -41.9166665 -18.4166665 -18.2499995 286 0 2670 --41.9166665 -41.7499995 -18.4166665 -18.2499995 304 0 2670 --41.7500005 -41.5833335 -18.4166665 -18.2499995 452 0 2670 --41.5833335 -41.4166665 -18.4166665 -18.2499995 342 0 2670 --41.4166665 -41.2499995 -18.4166665 -18.2499995 354 0 2670 --41.2500005 -41.0833335 -18.4166665 -18.2499995 321 0 2670 --41.0833335 -40.9166665 -18.4166665 -18.2499995 292 0 2670 --40.9166665 -40.7499995 -18.4166665 -18.2499995 333 0 2670 --40.7500005 -40.5833335 -18.4166665 -18.2499995 219 0 2670 --40.5833335 -40.4166665 -18.4166665 -18.2499995 188 0 2670 --40.4166665 -40.2499995 -18.4166665 -18.2499995 158 0 2670 --40.2500005 -40.0833335 -18.4166665 -18.2499995 106 0 2670 --40.0833335 -39.9166665 -18.4166665 -18.2499995 62 0 2670 --65.0833335 -64.9166665 -18.5833335 -18.4166665 2215 0 2670 --64.9166665 -64.7499995 -18.5833335 -18.4166665 1515 0 2670 --64.7500005 -64.5833335 -18.5833335 -18.4166665 1553 0 2670 --64.5833335 -64.4166665 -18.5833335 -18.4166665 2147 0 2670 --64.4166665 -64.2499995 -18.5833335 -18.4166665 1148 0 2670 --64.2500005 -64.0833335 -18.5833335 -18.4166665 2011 0 2670 --64.0833335 -63.9166665 -18.5833335 -18.4166665 2016 0 2670 --63.9166665 -63.7499995 -18.5833335 -18.4166665 1865 0 2670 --63.7500005 -63.5833335 -18.5833335 -18.4166665 1495 0 2670 --63.5833335 -63.4166665 -18.5833335 -18.4166665 856 0 2670 --63.4166665 -63.2499995 -18.5833335 -18.4166665 710 0 2670 --63.2500005 -63.0833335 -18.5833335 -18.4166665 467 0 2670 --63.0833335 -62.9166665 -18.5833335 -18.4166665 375 0 2670 --62.9166665 -62.7499995 -18.5833335 -18.4166665 360 0 2670 --62.7500005 -62.5833335 -18.5833335 -18.4166665 348 0 2670 --62.5833335 -62.4166665 -18.5833335 -18.4166665 335 0 2670 --62.4166665 -62.2499995 -18.5833335 -18.4166665 329 0 2670 --62.2500005 -62.0833335 -18.5833335 -18.4166665 321 0 2670 --62.0833335 -61.9166665 -18.5833335 -18.4166665 311 0 2670 --61.9166665 -61.7499995 -18.5833335 -18.4166665 301 0 2670 --61.7500005 -61.5833335 -18.5833335 -18.4166665 298 0 2670 --61.5833335 -61.4166665 -18.5833335 -18.4166665 290 0 2670 --61.4166665 -61.2499995 -18.5833335 -18.4166665 288 0 2670 --61.2500005 -61.0833335 -18.5833335 -18.4166665 287 0 2670 --61.0833335 -60.9166665 -18.5833335 -18.4166665 280 0 2670 --60.9166665 -60.7499995 -18.5833335 -18.4166665 305 0 2670 --60.7500005 -60.5833335 -18.5833335 -18.4166665 307 0 2670 --60.5833335 -60.4166665 -18.5833335 -18.4166665 369 0 2670 --60.4166665 -60.2499995 -18.5833335 -18.4166665 387 0 2670 --60.2500005 -60.0833335 -18.5833335 -18.4166665 346 0 2670 --60.0833335 -59.9166665 -18.5833335 -18.4166665 437 0 2670 --59.9166665 -59.7499995 -18.5833335 -18.4166665 265 0 2670 --59.7500005 -59.5833335 -18.5833335 -18.4166665 224 0 2670 --59.5833335 -59.4166665 -18.5833335 -18.4166665 207 0 2670 --59.4166665 -59.2499995 -18.5833335 -18.4166665 250 0 2670 --59.2500005 -59.0833335 -18.5833335 -18.4166665 454 0 2670 --59.0833335 -58.9166665 -18.5833335 -18.4166665 168 0 2670 --58.9166665 -58.7499995 -18.5833335 -18.4166665 199 0 2670 --58.7500005 -58.5833335 -18.5833335 -18.4166665 235 0 2670 --58.5833335 -58.4166665 -18.5833335 -18.4166665 215 0 2670 --58.4166665 -58.2499995 -18.5833335 -18.4166665 226 0 2670 --58.2500005 -58.0833335 -18.5833335 -18.4166665 331 0 2670 --58.0833335 -57.9166665 -18.5833335 -18.4166665 242 0 2670 --57.9166665 -57.7499995 -18.5833335 -18.4166665 265 0 2670 --57.7500005 -57.5833335 -18.5833335 -18.4166665 211 0 2670 --57.5833335 -57.4166665 -18.5833335 -18.4166665 91 0 2670 --57.4166665 -57.2499995 -18.5833335 -18.4166665 94 0 2670 --57.2500005 -57.0833335 -18.5833335 -18.4166665 98 0 2670 --57.0833335 -56.9166665 -18.5833335 -18.4166665 101 0 2670 --56.9166665 -56.7499995 -18.5833335 -18.4166665 108 0 2670 --56.7500005 -56.5833335 -18.5833335 -18.4166665 111 0 2670 --56.5833335 -56.4166665 -18.5833335 -18.4166665 116 0 2670 --56.4166665 -56.2499995 -18.5833335 -18.4166665 120 0 2670 --56.2500005 -56.0833335 -18.5833335 -18.4166665 125 0 2670 --56.0833335 -55.9166665 -18.5833335 -18.4166665 134 0 2670 --55.9166665 -55.7499995 -18.5833335 -18.4166665 144 0 2670 --55.7500005 -55.5833335 -18.5833335 -18.4166665 151 0 2670 --55.5833335 -55.4166665 -18.5833335 -18.4166665 161 0 2670 --55.4166665 -55.2499995 -18.5833335 -18.4166665 171 0 2670 --55.2500005 -55.0833335 -18.5833335 -18.4166665 180 0 2670 --55.0833335 -54.9166665 -18.5833335 -18.4166665 197 0 2670 --54.9166665 -54.7499995 -18.5833335 -18.4166665 385 0 2670 --54.7500005 -54.5833335 -18.5833335 -18.4166665 211 0 2670 --54.5833335 -54.4166665 -18.5833335 -18.4166665 306 0 2670 --54.4166665 -54.2499995 -18.5833335 -18.4166665 342 0 2670 --54.2500005 -54.0833335 -18.5833335 -18.4166665 348 0 2670 --54.0833335 -53.9166665 -18.5833335 -18.4166665 329 0 2670 --53.9166665 -53.7499995 -18.5833335 -18.4166665 363 0 2670 --53.7500005 -53.5833335 -18.5833335 -18.4166665 343 0 2670 --53.5833335 -53.4166665 -18.5833335 -18.4166665 532 0 2670 --53.4166665 -53.2499995 -18.5833335 -18.4166665 609 0 2670 --53.2500005 -53.0833335 -18.5833335 -18.4166665 712 0 2670 --53.0833335 -52.9166665 -18.5833335 -18.4166665 822 0 2670 --52.9166665 -52.7499995 -18.5833335 -18.4166665 806 0 2670 --52.7500005 -52.5833335 -18.5833335 -18.4166665 826 0 2670 --52.5833335 -52.4166665 -18.5833335 -18.4166665 818 0 2670 --52.4166665 -52.2499995 -18.5833335 -18.4166665 708 0 2670 --52.2500005 -52.0833335 -18.5833335 -18.4166665 680 0 2670 --52.0833335 -51.9166665 -18.5833335 -18.4166665 702 0 2670 --51.9166665 -51.7499995 -18.5833335 -18.4166665 575 0 2670 --51.7500005 -51.5833335 -18.5833335 -18.4166665 516 0 2670 --51.5833335 -51.4166665 -18.5833335 -18.4166665 564 0 2670 --51.4166665 -51.2499995 -18.5833335 -18.4166665 596 0 2670 --51.2500005 -51.0833335 -18.5833335 -18.4166665 481 0 2670 --51.0833335 -50.9166665 -18.5833335 -18.4166665 587 0 2670 --50.9166665 -50.7499995 -18.5833335 -18.4166665 566 0 2670 --50.7500005 -50.5833335 -18.5833335 -18.4166665 553 0 2670 --50.5833335 -50.4166665 -18.5833335 -18.4166665 477 0 2670 --50.4166665 -50.2499995 -18.5833335 -18.4166665 478 0 2670 --50.2500005 -50.0833335 -18.5833335 -18.4166665 462 0 2670 --50.0833335 -49.9166665 -18.5833335 -18.4166665 435 0 2670 --49.9166665 -49.7499995 -18.5833335 -18.4166665 595 0 2670 --49.7500005 -49.5833335 -18.5833335 -18.4166665 510 0 2670 --49.5833335 -49.4166665 -18.5833335 -18.4166665 425 0 2670 --49.4166665 -49.2499995 -18.5833335 -18.4166665 498 0 2670 --49.2500005 -49.0833335 -18.5833335 -18.4166665 498 0 2670 --49.0833335 -48.9166665 -18.5833335 -18.4166665 630 0 2670 --48.9166665 -48.7499995 -18.5833335 -18.4166665 768 0 2670 --48.7500005 -48.5833335 -18.5833335 -18.4166665 656 0 2670 --48.5833335 -48.4166665 -18.5833335 -18.4166665 849 0 2670 --48.4166665 -48.2499995 -18.5833335 -18.4166665 668 0 2670 --48.2500005 -48.0833335 -18.5833335 -18.4166665 813 0 2670 --48.0833335 -47.9166665 -18.5833335 -18.4166665 668 0 2670 --47.9166665 -47.7499995 -18.5833335 -18.4166665 640 0 2670 --47.7500005 -47.5833335 -18.5833335 -18.4166665 712 0 2670 --47.5833335 -47.4166665 -18.5833335 -18.4166665 777 0 2670 --47.4166665 -47.2499995 -18.5833335 -18.4166665 775 0 2670 --47.2500005 -47.0833335 -18.5833335 -18.4166665 947 0 2670 --47.0833335 -46.9166665 -18.5833335 -18.4166665 826 0 2670 --46.9166665 -46.7499995 -18.5833335 -18.4166665 960 0 2670 --46.7500005 -46.5833335 -18.5833335 -18.4166665 934 0 2670 --46.5833335 -46.4166665 -18.5833335 -18.4166665 853 0 2670 --46.4166665 -46.2499995 -18.5833335 -18.4166665 995 0 2670 --46.2500005 -46.0833335 -18.5833335 -18.4166665 917 0 2670 --46.0833335 -45.9166665 -18.5833335 -18.4166665 901 0 2670 --45.9166665 -45.7499995 -18.5833335 -18.4166665 774 0 2670 --45.7500005 -45.5833335 -18.5833335 -18.4166665 753 0 2670 --45.5833335 -45.4166665 -18.5833335 -18.4166665 591 0 2670 --45.4166665 -45.2499995 -18.5833335 -18.4166665 578 0 2670 --45.2500005 -45.0833335 -18.5833335 -18.4166665 715 0 2670 --45.0833335 -44.9166665 -18.5833335 -18.4166665 820 0 2670 --44.9166665 -44.7499995 -18.5833335 -18.4166665 866 0 2670 --44.7500005 -44.5833335 -18.5833335 -18.4166665 633 0 2670 --44.5833335 -44.4166665 -18.5833335 -18.4166665 642 0 2670 --44.4166665 -44.2499995 -18.5833335 -18.4166665 626 0 2670 --44.2500005 -44.0833335 -18.5833335 -18.4166665 570 0 2670 --44.0833335 -43.9166665 -18.5833335 -18.4166665 1015 0 2670 --43.9166665 -43.7499995 -18.5833335 -18.4166665 1111 0 2670 --43.7500005 -43.5833335 -18.5833335 -18.4166665 1166 0 2670 --43.5833335 -43.4166665 -18.5833335 -18.4166665 976 0 2670 --43.4166665 -43.2499995 -18.5833335 -18.4166665 805 0 2670 --43.2500005 -43.0833335 -18.5833335 -18.4166665 833 0 2670 --43.0833335 -42.9166665 -18.5833335 -18.4166665 774 0 2670 --42.9166665 -42.7499995 -18.5833335 -18.4166665 768 0 2670 --42.7500005 -42.5833335 -18.5833335 -18.4166665 669 0 2670 --42.5833335 -42.4166665 -18.5833335 -18.4166665 675 0 2670 --42.4166665 -42.2499995 -18.5833335 -18.4166665 671 0 2670 --42.2500005 -42.0833335 -18.5833335 -18.4166665 391 0 2670 --42.0833335 -41.9166665 -18.5833335 -18.4166665 251 0 2670 --41.9166665 -41.7499995 -18.5833335 -18.4166665 358 0 2670 --41.7500005 -41.5833335 -18.5833335 -18.4166665 306 0 2670 --41.5833335 -41.4166665 -18.5833335 -18.4166665 537 0 2670 --41.4166665 -41.2499995 -18.5833335 -18.4166665 485 0 2670 --41.2500005 -41.0833335 -18.5833335 -18.4166665 851 0 2670 --41.0833335 -40.9166665 -18.5833335 -18.4166665 341 0 2670 --40.9166665 -40.7499995 -18.5833335 -18.4166665 518 0 2670 --40.7500005 -40.5833335 -18.5833335 -18.4166665 195 0 2670 --40.5833335 -40.4166665 -18.5833335 -18.4166665 168 0 2670 --40.4166665 -40.2499995 -18.5833335 -18.4166665 134 0 2670 --40.2500005 -40.0833335 -18.5833335 -18.4166665 93 0 2670 --40.0833335 -39.9166665 -18.5833335 -18.4166665 83 0 2670 --65.0833335 -64.9166665 -18.7500005 -18.5833335 2264 0 2670 --64.9166665 -64.7499995 -18.7500005 -18.5833335 1928 0 2670 --64.7500005 -64.5833335 -18.7500005 -18.5833335 1696 0 2670 --64.5833335 -64.4166665 -18.7500005 -18.5833335 1106 0 2670 --64.4166665 -64.2499995 -18.7500005 -18.5833335 1025 0 2670 --64.2500005 -64.0833335 -18.7500005 -18.5833335 2231 0 2670 --64.0833335 -63.9166665 -18.7500005 -18.5833335 1740 0 2670 --63.9166665 -63.7499995 -18.7500005 -18.5833335 1628 0 2670 --63.7500005 -63.5833335 -18.7500005 -18.5833335 765 0 2670 --63.5833335 -63.4166665 -18.7500005 -18.5833335 697 0 2670 --63.4166665 -63.2499995 -18.7500005 -18.5833335 566 0 2670 --63.2500005 -63.0833335 -18.7500005 -18.5833335 451 0 2670 --63.0833335 -62.9166665 -18.7500005 -18.5833335 390 0 2670 --62.9166665 -62.7499995 -18.7500005 -18.5833335 367 0 2670 --62.7500005 -62.5833335 -18.7500005 -18.5833335 351 0 2670 --62.5833335 -62.4166665 -18.7500005 -18.5833335 346 0 2670 --62.4166665 -62.2499995 -18.7500005 -18.5833335 333 0 2670 --62.2500005 -62.0833335 -18.7500005 -18.5833335 327 0 2670 --62.0833335 -61.9166665 -18.7500005 -18.5833335 318 0 2670 --61.9166665 -61.7499995 -18.7500005 -18.5833335 310 0 2670 --61.7500005 -61.5833335 -18.7500005 -18.5833335 302 0 2670 --61.5833335 -61.4166665 -18.7500005 -18.5833335 297 0 2670 --61.4166665 -61.2499995 -18.7500005 -18.5833335 292 0 2670 --61.2500005 -61.0833335 -18.7500005 -18.5833335 287 0 2670 --61.0833335 -60.9166665 -18.7500005 -18.5833335 360 0 2670 --60.9166665 -60.7499995 -18.7500005 -18.5833335 312 0 2670 --60.7500005 -60.5833335 -18.7500005 -18.5833335 403 0 2670 --60.5833335 -60.4166665 -18.7500005 -18.5833335 373 0 2670 --60.4166665 -60.2499995 -18.7500005 -18.5833335 353 0 2670 --60.2500005 -60.0833335 -18.7500005 -18.5833335 314 0 2670 --60.0833335 -59.9166665 -18.7500005 -18.5833335 365 0 2670 --59.9166665 -59.7499995 -18.7500005 -18.5833335 331 0 2670 --59.7500005 -59.5833335 -18.7500005 -18.5833335 241 0 2670 --59.5833335 -59.4166665 -18.7500005 -18.5833335 201 0 2670 --59.4166665 -59.2499995 -18.7500005 -18.5833335 179 0 2670 --59.2500005 -59.0833335 -18.7500005 -18.5833335 167 0 2670 --59.0833335 -58.9166665 -18.7500005 -18.5833335 151 0 2670 --58.9166665 -58.7499995 -18.7500005 -18.5833335 201 0 2670 --58.7500005 -58.5833335 -18.7500005 -18.5833335 161 0 2670 --58.5833335 -58.4166665 -18.7500005 -18.5833335 165 0 2670 --58.4166665 -58.2499995 -18.7500005 -18.5833335 152 0 2670 --58.2500005 -58.0833335 -18.7500005 -18.5833335 139 0 2670 --58.0833335 -57.9166665 -18.7500005 -18.5833335 137 0 2670 --57.9166665 -57.7499995 -18.7500005 -18.5833335 139 0 2670 --57.7500005 -57.5833335 -18.7500005 -18.5833335 128 0 2670 --57.5833335 -57.4166665 -18.7500005 -18.5833335 89 0 2670 --57.4166665 -57.2499995 -18.7500005 -18.5833335 90 0 2670 --57.2500005 -57.0833335 -18.7500005 -18.5833335 98 0 2670 --57.0833335 -56.9166665 -18.7500005 -18.5833335 102 0 2670 --56.9166665 -56.7499995 -18.7500005 -18.5833335 104 0 2670 --56.7500005 -56.5833335 -18.7500005 -18.5833335 108 0 2670 --56.5833335 -56.4166665 -18.7500005 -18.5833335 111 0 2670 --56.4166665 -56.2499995 -18.7500005 -18.5833335 117 0 2670 --56.2500005 -56.0833335 -18.7500005 -18.5833335 126 0 2670 --56.0833335 -55.9166665 -18.7500005 -18.5833335 133 0 2670 --55.9166665 -55.7499995 -18.7500005 -18.5833335 140 0 2670 --55.7500005 -55.5833335 -18.7500005 -18.5833335 152 0 2670 --55.5833335 -55.4166665 -18.7500005 -18.5833335 159 0 2670 --55.4166665 -55.2499995 -18.7500005 -18.5833335 166 0 2670 --55.2500005 -55.0833335 -18.7500005 -18.5833335 170 0 2670 --55.0833335 -54.9166665 -18.7500005 -18.5833335 210 0 2670 --54.9166665 -54.7499995 -18.7500005 -18.5833335 465 0 2670 --54.7500005 -54.5833335 -18.7500005 -18.5833335 285 0 2670 --54.5833335 -54.4166665 -18.7500005 -18.5833335 279 0 2670 --54.4166665 -54.2499995 -18.7500005 -18.5833335 312 0 2670 --54.2500005 -54.0833335 -18.7500005 -18.5833335 391 0 2670 --54.0833335 -53.9166665 -18.7500005 -18.5833335 411 0 2670 --53.9166665 -53.7499995 -18.7500005 -18.5833335 346 0 2670 --53.7500005 -53.5833335 -18.7500005 -18.5833335 395 0 2670 --53.5833335 -53.4166665 -18.7500005 -18.5833335 562 0 2670 --53.4166665 -53.2499995 -18.7500005 -18.5833335 607 0 2670 --53.2500005 -53.0833335 -18.7500005 -18.5833335 708 0 2670 --53.0833335 -52.9166665 -18.7500005 -18.5833335 711 0 2670 --52.9166665 -52.7499995 -18.7500005 -18.5833335 826 0 2670 --52.7500005 -52.5833335 -18.7500005 -18.5833335 824 0 2670 --52.5833335 -52.4166665 -18.7500005 -18.5833335 698 0 2670 --52.4166665 -52.2499995 -18.7500005 -18.5833335 692 0 2670 --52.2500005 -52.0833335 -18.7500005 -18.5833335 681 0 2670 --52.0833335 -51.9166665 -18.7500005 -18.5833335 699 0 2670 --51.9166665 -51.7499995 -18.7500005 -18.5833335 582 0 2670 --51.7500005 -51.5833335 -18.7500005 -18.5833335 572 0 2670 --51.5833335 -51.4166665 -18.7500005 -18.5833335 579 0 2670 --51.4166665 -51.2499995 -18.7500005 -18.5833335 454 0 2670 --51.2500005 -51.0833335 -18.7500005 -18.5833335 571 0 2670 --51.0833335 -50.9166665 -18.7500005 -18.5833335 510 0 2670 --50.9166665 -50.7499995 -18.7500005 -18.5833335 522 0 2670 --50.7500005 -50.5833335 -18.7500005 -18.5833335 551 0 2670 --50.5833335 -50.4166665 -18.7500005 -18.5833335 530 0 2670 --50.4166665 -50.2499995 -18.7500005 -18.5833335 427 0 2670 --50.2500005 -50.0833335 -18.7500005 -18.5833335 399 0 2670 --50.0833335 -49.9166665 -18.7500005 -18.5833335 422 0 2670 --49.9166665 -49.7499995 -18.7500005 -18.5833335 435 0 2670 --49.7500005 -49.5833335 -18.7500005 -18.5833335 494 0 2670 --49.5833335 -49.4166665 -18.7500005 -18.5833335 567 0 2670 --49.4166665 -49.2499995 -18.7500005 -18.5833335 473 0 2670 --49.2500005 -49.0833335 -18.7500005 -18.5833335 706 0 2670 --49.0833335 -48.9166665 -18.7500005 -18.5833335 751 0 2670 --48.9166665 -48.7499995 -18.7500005 -18.5833335 767 0 2670 --48.7500005 -48.5833335 -18.7500005 -18.5833335 896 0 2670 --48.5833335 -48.4166665 -18.7500005 -18.5833335 657 0 2670 --48.4166665 -48.2499995 -18.7500005 -18.5833335 575 0 2670 --48.2500005 -48.0833335 -18.7500005 -18.5833335 944 0 2670 --48.0833335 -47.9166665 -18.7500005 -18.5833335 915 0 2670 --47.9166665 -47.7499995 -18.7500005 -18.5833335 933 0 2670 --47.7500005 -47.5833335 -18.7500005 -18.5833335 820 0 2670 --47.5833335 -47.4166665 -18.7500005 -18.5833335 845 0 2670 --47.4166665 -47.2499995 -18.7500005 -18.5833335 787 0 2670 --47.2500005 -47.0833335 -18.7500005 -18.5833335 921 0 2670 --47.0833335 -46.9166665 -18.7500005 -18.5833335 998 0 2670 --46.9166665 -46.7499995 -18.7500005 -18.5833335 1163 0 2670 --46.7500005 -46.5833335 -18.7500005 -18.5833335 903 0 2670 --46.5833335 -46.4166665 -18.7500005 -18.5833335 841 0 2670 --46.4166665 -46.2499995 -18.7500005 -18.5833335 957 0 2670 --46.2500005 -46.0833335 -18.7500005 -18.5833335 813 0 2670 --46.0833335 -45.9166665 -18.7500005 -18.5833335 804 0 2670 --45.9166665 -45.7499995 -18.7500005 -18.5833335 810 0 2670 --45.7500005 -45.5833335 -18.7500005 -18.5833335 835 0 2670 --45.5833335 -45.4166665 -18.7500005 -18.5833335 704 0 2670 --45.4166665 -45.2499995 -18.7500005 -18.5833335 583 0 2670 --45.2500005 -45.0833335 -18.7500005 -18.5833335 570 0 2670 --45.0833335 -44.9166665 -18.7500005 -18.5833335 599 0 2670 --44.9166665 -44.7499995 -18.7500005 -18.5833335 732 0 2670 --44.7500005 -44.5833335 -18.7500005 -18.5833335 716 0 2670 --44.5833335 -44.4166665 -18.7500005 -18.5833335 635 0 2670 --44.4166665 -44.2499995 -18.7500005 -18.5833335 603 0 2670 --44.2500005 -44.0833335 -18.7500005 -18.5833335 570 0 2670 --44.0833335 -43.9166665 -18.7500005 -18.5833335 586 0 2670 --43.9166665 -43.7499995 -18.7500005 -18.5833335 990 0 2670 --43.7500005 -43.5833335 -18.7500005 -18.5833335 1021 0 2670 --43.5833335 -43.4166665 -18.7500005 -18.5833335 1239 0 2670 --43.4166665 -43.2499995 -18.7500005 -18.5833335 761 0 2670 --43.2500005 -43.0833335 -18.7500005 -18.5833335 789 0 2670 --43.0833335 -42.9166665 -18.7500005 -18.5833335 888 0 2670 --42.9166665 -42.7499995 -18.7500005 -18.5833335 833 0 2670 --42.7500005 -42.5833335 -18.7500005 -18.5833335 898 0 2670 --42.5833335 -42.4166665 -18.7500005 -18.5833335 846 0 2670 --42.4166665 -42.2499995 -18.7500005 -18.5833335 871 0 2670 --42.2500005 -42.0833335 -18.7500005 -18.5833335 396 0 2670 --42.0833335 -41.9166665 -18.7500005 -18.5833335 377 0 2670 --41.9166665 -41.7499995 -18.7500005 -18.5833335 192 0 2670 --41.7500005 -41.5833335 -18.7500005 -18.5833335 279 0 2670 --41.5833335 -41.4166665 -18.7500005 -18.5833335 409 0 2670 --41.4166665 -41.2499995 -18.7500005 -18.5833335 315 0 2670 --41.2500005 -41.0833335 -18.7500005 -18.5833335 242 0 2670 --41.0833335 -40.9166665 -18.7500005 -18.5833335 202 0 2670 --40.9166665 -40.7499995 -18.7500005 -18.5833335 200 0 2670 --40.7500005 -40.5833335 -18.7500005 -18.5833335 201 0 2670 --40.5833335 -40.4166665 -18.7500005 -18.5833335 121 0 2670 --40.4166665 -40.2499995 -18.7500005 -18.5833335 175 0 2670 --40.2500005 -40.0833335 -18.7500005 -18.5833335 30 0 2670 --40.0833335 -39.9166665 -18.7500005 -18.5833335 21 0 2670 --65.0833335 -64.9166665 -18.9166665 -18.7499995 2211 0 2670 --64.9166665 -64.7499995 -18.9166665 -18.7499995 2342 0 2670 --64.7500005 -64.5833335 -18.9166665 -18.7499995 2599 0 2670 --64.5833335 -64.4166665 -18.9166665 -18.7499995 1519 0 2670 --64.4166665 -64.2499995 -18.9166665 -18.7499995 2040 0 2670 --64.2500005 -64.0833335 -18.9166665 -18.7499995 2257 0 2670 --64.0833335 -63.9166665 -18.9166665 -18.7499995 2008 0 2670 --63.9166665 -63.7499995 -18.9166665 -18.7499995 1125 0 2670 --63.7500005 -63.5833335 -18.9166665 -18.7499995 763 0 2670 --63.5833335 -63.4166665 -18.9166665 -18.7499995 723 0 2670 --63.4166665 -63.2499995 -18.9166665 -18.7499995 429 0 2670 --63.2500005 -63.0833335 -18.9166665 -18.7499995 421 0 2670 --63.0833335 -62.9166665 -18.9166665 -18.7499995 392 0 2670 --62.9166665 -62.7499995 -18.9166665 -18.7499995 376 0 2670 --62.7500005 -62.5833335 -18.9166665 -18.7499995 360 0 2670 --62.5833335 -62.4166665 -18.9166665 -18.7499995 345 0 2670 --62.4166665 -62.2499995 -18.9166665 -18.7499995 337 0 2670 --62.2500005 -62.0833335 -18.9166665 -18.7499995 334 0 2670 --62.0833335 -61.9166665 -18.9166665 -18.7499995 329 0 2670 --61.9166665 -61.7499995 -18.9166665 -18.7499995 312 0 2670 --61.7500005 -61.5833335 -18.9166665 -18.7499995 343 0 2670 --61.5833335 -61.4166665 -18.9166665 -18.7499995 335 0 2670 --61.4166665 -61.2499995 -18.9166665 -18.7499995 356 0 2670 --61.2500005 -61.0833335 -18.9166665 -18.7499995 338 0 2670 --61.0833335 -60.9166665 -18.9166665 -18.7499995 351 0 2670 --60.9166665 -60.7499995 -18.9166665 -18.7499995 416 0 2670 --60.7500005 -60.5833335 -18.9166665 -18.7499995 406 0 2670 --60.5833335 -60.4166665 -18.9166665 -18.7499995 425 0 2670 --60.4166665 -60.2499995 -18.9166665 -18.7499995 310 0 2670 --60.2500005 -60.0833335 -18.9166665 -18.7499995 310 0 2670 --60.0833335 -59.9166665 -18.9166665 -18.7499995 271 0 2670 --59.9166665 -59.7499995 -18.9166665 -18.7499995 336 0 2670 --59.7500005 -59.5833335 -18.9166665 -18.7499995 335 0 2670 --59.5833335 -59.4166665 -18.9166665 -18.7499995 240 0 2670 --59.4166665 -59.2499995 -18.9166665 -18.7499995 208 0 2670 --59.2500005 -59.0833335 -18.9166665 -18.7499995 167 0 2670 --59.0833335 -58.9166665 -18.9166665 -18.7499995 170 0 2670 --58.9166665 -58.7499995 -18.9166665 -18.7499995 136 0 2670 --58.7500005 -58.5833335 -18.9166665 -18.7499995 129 0 2670 --58.5833335 -58.4166665 -18.9166665 -18.7499995 121 0 2670 --58.4166665 -58.2499995 -18.9166665 -18.7499995 109 0 2670 --58.2500005 -58.0833335 -18.9166665 -18.7499995 104 0 2670 --58.0833335 -57.9166665 -18.9166665 -18.7499995 90 0 2670 --57.9166665 -57.7499995 -18.9166665 -18.7499995 87 0 2670 --57.7500005 -57.5833335 -18.9166665 -18.7499995 87 0 2670 --57.5833335 -57.4166665 -18.9166665 -18.7499995 90 0 2670 --57.4166665 -57.2499995 -18.9166665 -18.7499995 88 0 2670 --57.2500005 -57.0833335 -18.9166665 -18.7499995 92 0 2670 --57.0833335 -56.9166665 -18.9166665 -18.7499995 95 0 2670 --56.9166665 -56.7499995 -18.9166665 -18.7499995 101 0 2670 --56.7500005 -56.5833335 -18.9166665 -18.7499995 103 0 2670 --56.5833335 -56.4166665 -18.9166665 -18.7499995 109 0 2670 --56.4166665 -56.2499995 -18.9166665 -18.7499995 116 0 2670 --56.2500005 -56.0833335 -18.9166665 -18.7499995 125 0 2670 --56.0833335 -55.9166665 -18.9166665 -18.7499995 130 0 2670 --55.9166665 -55.7499995 -18.9166665 -18.7499995 140 0 2670 --55.7500005 -55.5833335 -18.9166665 -18.7499995 145 0 2670 --55.5833335 -55.4166665 -18.9166665 -18.7499995 154 0 2670 --55.4166665 -55.2499995 -18.9166665 -18.7499995 157 0 2670 --55.2500005 -55.0833335 -18.9166665 -18.7499995 159 0 2670 --55.0833335 -54.9166665 -18.9166665 -18.7499995 255 0 2670 --54.9166665 -54.7499995 -18.9166665 -18.7499995 324 0 2670 --54.7500005 -54.5833335 -18.9166665 -18.7499995 382 0 2670 --54.5833335 -54.4166665 -18.9166665 -18.7499995 342 0 2670 --54.4166665 -54.2499995 -18.9166665 -18.7499995 347 0 2670 --54.2500005 -54.0833335 -18.9166665 -18.7499995 406 0 2670 --54.0833335 -53.9166665 -18.9166665 -18.7499995 451 0 2670 --53.9166665 -53.7499995 -18.9166665 -18.7499995 537 0 2670 --53.7500005 -53.5833335 -18.9166665 -18.7499995 607 0 2670 --53.5833335 -53.4166665 -18.9166665 -18.7499995 709 0 2670 --53.4166665 -53.2499995 -18.9166665 -18.7499995 527 0 2670 --53.2500005 -53.0833335 -18.9166665 -18.7499995 710 0 2670 --53.0833335 -52.9166665 -18.9166665 -18.7499995 688 0 2670 --52.9166665 -52.7499995 -18.9166665 -18.7499995 736 0 2670 --52.7500005 -52.5833335 -18.9166665 -18.7499995 827 0 2670 --52.5833335 -52.4166665 -18.9166665 -18.7499995 822 0 2670 --52.4166665 -52.2499995 -18.9166665 -18.7499995 563 0 2670 --52.2500005 -52.0833335 -18.9166665 -18.7499995 571 0 2670 --52.0833335 -51.9166665 -18.9166665 -18.7499995 619 0 2670 --51.9166665 -51.7499995 -18.9166665 -18.7499995 578 0 2670 --51.7500005 -51.5833335 -18.9166665 -18.7499995 509 0 2670 --51.5833335 -51.4166665 -18.9166665 -18.7499995 485 0 2670 --51.4166665 -51.2499995 -18.9166665 -18.7499995 619 0 2670 --51.2500005 -51.0833335 -18.9166665 -18.7499995 466 0 2670 --51.0833335 -50.9166665 -18.9166665 -18.7499995 486 0 2670 --50.9166665 -50.7499995 -18.9166665 -18.7499995 524 0 2670 --50.7500005 -50.5833335 -18.9166665 -18.7499995 525 0 2670 --50.5833335 -50.4166665 -18.9166665 -18.7499995 481 0 2670 --50.4166665 -50.2499995 -18.9166665 -18.7499995 444 0 2670 --50.2500005 -50.0833335 -18.9166665 -18.7499995 507 0 2670 --50.0833335 -49.9166665 -18.9166665 -18.7499995 422 0 2670 --49.9166665 -49.7499995 -18.9166665 -18.7499995 454 0 2670 --49.7500005 -49.5833335 -18.9166665 -18.7499995 563 0 2670 --49.5833335 -49.4166665 -18.9166665 -18.7499995 610 0 2670 --49.4166665 -49.2499995 -18.9166665 -18.7499995 630 0 2670 --49.2500005 -49.0833335 -18.9166665 -18.7499995 668 0 2670 --49.0833335 -48.9166665 -18.9166665 -18.7499995 687 0 2670 --48.9166665 -48.7499995 -18.9166665 -18.7499995 821 0 2670 --48.7500005 -48.5833335 -18.9166665 -18.7499995 822 0 2670 --48.5833335 -48.4166665 -18.9166665 -18.7499995 809 0 2670 --48.4166665 -48.2499995 -18.9166665 -18.7499995 872 0 2670 --48.2500005 -48.0833335 -18.9166665 -18.7499995 733 0 2670 --48.0833335 -47.9166665 -18.9166665 -18.7499995 903 0 2670 --47.9166665 -47.7499995 -18.9166665 -18.7499995 992 0 2670 --47.7500005 -47.5833335 -18.9166665 -18.7499995 891 0 2670 --47.5833335 -47.4166665 -18.9166665 -18.7499995 1030 0 2670 --47.4166665 -47.2499995 -18.9166665 -18.7499995 999 0 2670 --47.2500005 -47.0833335 -18.9166665 -18.7499995 944 0 2670 --47.0833335 -46.9166665 -18.9166665 -18.7499995 1016 0 2670 --46.9166665 -46.7499995 -18.9166665 -18.7499995 903 0 2670 --46.7500005 -46.5833335 -18.9166665 -18.7499995 858 0 2670 --46.5833335 -46.4166665 -18.9166665 -18.7499995 850 0 2670 --46.4166665 -46.2499995 -18.9166665 -18.7499995 869 0 2670 --46.2500005 -46.0833335 -18.9166665 -18.7499995 853 0 2670 --46.0833335 -45.9166665 -18.9166665 -18.7499995 860 0 2670 --45.9166665 -45.7499995 -18.9166665 -18.7499995 1015 0 2670 --45.7500005 -45.5833335 -18.9166665 -18.7499995 696 0 2670 --45.5833335 -45.4166665 -18.9166665 -18.7499995 633 0 2670 --45.4166665 -45.2499995 -18.9166665 -18.7499995 579 0 2670 --45.2500005 -45.0833335 -18.9166665 -18.7499995 574 0 2670 --45.0833335 -44.9166665 -18.9166665 -18.7499995 581 0 2670 --44.9166665 -44.7499995 -18.9166665 -18.7499995 612 0 2670 --44.7500005 -44.5833335 -18.9166665 -18.7499995 694 0 2670 --44.5833335 -44.4166665 -18.9166665 -18.7499995 727 0 2670 --44.4166665 -44.2499995 -18.9166665 -18.7499995 687 0 2670 --44.2500005 -44.0833335 -18.9166665 -18.7499995 630 0 2670 --44.0833335 -43.9166665 -18.9166665 -18.7499995 701 0 2670 --43.9166665 -43.7499995 -18.9166665 -18.7499995 1322 0 2670 --43.7500005 -43.5833335 -18.9166665 -18.7499995 1090 0 2670 --43.5833335 -43.4166665 -18.9166665 -18.7499995 719 0 2670 --43.4166665 -43.2499995 -18.9166665 -18.7499995 669 0 2670 --43.2500005 -43.0833335 -18.9166665 -18.7499995 745 0 2670 --43.0833335 -42.9166665 -18.9166665 -18.7499995 822 0 2670 --42.9166665 -42.7499995 -18.9166665 -18.7499995 933 0 2670 --42.7500005 -42.5833335 -18.9166665 -18.7499995 866 0 2670 --42.5833335 -42.4166665 -18.9166665 -18.7499995 803 0 2670 --42.4166665 -42.2499995 -18.9166665 -18.7499995 764 0 2670 --42.2500005 -42.0833335 -18.9166665 -18.7499995 420 0 2670 --42.0833335 -41.9166665 -18.9166665 -18.7499995 231 0 2670 --41.9166665 -41.7499995 -18.9166665 -18.7499995 232 0 2670 --41.7500005 -41.5833335 -18.9166665 -18.7499995 257 0 2670 --41.5833335 -41.4166665 -18.9166665 -18.7499995 290 0 2670 --41.4166665 -41.2499995 -18.9166665 -18.7499995 514 0 2670 --41.2500005 -41.0833335 -18.9166665 -18.7499995 485 0 2670 --41.0833335 -40.9166665 -18.9166665 -18.7499995 467 0 2670 --40.9166665 -40.7499995 -18.9166665 -18.7499995 308 0 2670 --40.7500005 -40.5833335 -18.9166665 -18.7499995 407 0 2670 --40.5833335 -40.4166665 -18.9166665 -18.7499995 162 0 2670 --40.4166665 -40.2499995 -18.9166665 -18.7499995 150 0 2670 --40.2500005 -40.0833335 -18.9166665 -18.7499995 92 0 2670 --40.0833335 -39.9166665 -18.9166665 -18.7499995 65 0 2670 --65.0833335 -64.9166665 -19.0833335 -18.9166665 2682 0 2670 --64.9166665 -64.7499995 -19.0833335 -18.9166665 2802 0 2670 --64.7500005 -64.5833335 -19.0833335 -18.9166665 2641 0 2670 --64.5833335 -64.4166665 -19.0833335 -18.9166665 1791 0 2670 --64.4166665 -64.2499995 -19.0833335 -18.9166665 2621 0 2670 --64.2500005 -64.0833335 -19.0833335 -18.9166665 1560 0 2670 --64.0833335 -63.9166665 -19.0833335 -18.9166665 1408 0 2670 --63.9166665 -63.7499995 -19.0833335 -18.9166665 1086 0 2670 --63.7500005 -63.5833335 -19.0833335 -18.9166665 744 0 2670 --63.5833335 -63.4166665 -19.0833335 -18.9166665 1049 0 2670 --63.4166665 -63.2499995 -19.0833335 -18.9166665 517 0 2670 --63.2500005 -63.0833335 -19.0833335 -18.9166665 498 0 2670 --63.0833335 -62.9166665 -19.0833335 -18.9166665 408 0 2670 --62.9166665 -62.7499995 -19.0833335 -18.9166665 378 0 2670 --62.7500005 -62.5833335 -19.0833335 -18.9166665 363 0 2670 --62.5833335 -62.4166665 -19.0833335 -18.9166665 353 0 2670 --62.4166665 -62.2499995 -19.0833335 -18.9166665 343 0 2670 --62.2500005 -62.0833335 -19.0833335 -18.9166665 343 0 2670 --62.0833335 -61.9166665 -19.0833335 -18.9166665 357 0 2670 --61.9166665 -61.7499995 -19.0833335 -18.9166665 368 0 2670 --61.7500005 -61.5833335 -19.0833335 -18.9166665 388 0 2670 --61.5833335 -61.4166665 -19.0833335 -18.9166665 391 0 2670 --61.4166665 -61.2499995 -19.0833335 -18.9166665 369 0 2670 --61.2500005 -61.0833335 -19.0833335 -18.9166665 363 0 2670 --61.0833335 -60.9166665 -19.0833335 -18.9166665 414 0 2670 --60.9166665 -60.7499995 -19.0833335 -18.9166665 394 0 2670 --60.7500005 -60.5833335 -19.0833335 -18.9166665 377 0 2670 --60.5833335 -60.4166665 -19.0833335 -18.9166665 360 0 2670 --60.4166665 -60.2499995 -19.0833335 -18.9166665 291 0 2670 --60.2500005 -60.0833335 -19.0833335 -18.9166665 285 0 2670 --60.0833335 -59.9166665 -19.0833335 -18.9166665 241 0 2670 --59.9166665 -59.7499995 -19.0833335 -18.9166665 244 0 2670 --59.7500005 -59.5833335 -19.0833335 -18.9166665 292 0 2670 --59.5833335 -59.4166665 -19.0833335 -18.9166665 378 0 2670 --59.4166665 -59.2499995 -19.0833335 -18.9166665 334 0 2670 --59.2500005 -59.0833335 -19.0833335 -18.9166665 229 0 2670 --59.0833335 -58.9166665 -19.0833335 -18.9166665 172 0 2670 --58.9166665 -58.7499995 -19.0833335 -18.9166665 133 0 2670 --58.7500005 -58.5833335 -19.0833335 -18.9166665 122 0 2670 --58.5833335 -58.4166665 -19.0833335 -18.9166665 110 0 2670 --58.4166665 -58.2499995 -19.0833335 -18.9166665 102 0 2670 --58.2500005 -58.0833335 -19.0833335 -18.9166665 100 0 2670 --58.0833335 -57.9166665 -19.0833335 -18.9166665 110 0 2670 --57.9166665 -57.7499995 -19.0833335 -18.9166665 158 0 2670 --57.7500005 -57.5833335 -19.0833335 -18.9166665 107 0 2670 --57.5833335 -57.4166665 -19.0833335 -18.9166665 87 0 2670 --57.4166665 -57.2499995 -19.0833335 -18.9166665 89 0 2670 --57.2500005 -57.0833335 -19.0833335 -18.9166665 89 0 2670 --57.0833335 -56.9166665 -19.0833335 -18.9166665 93 0 2670 --56.9166665 -56.7499995 -19.0833335 -18.9166665 95 0 2670 --56.7500005 -56.5833335 -19.0833335 -18.9166665 102 0 2670 --56.5833335 -56.4166665 -19.0833335 -18.9166665 109 0 2670 --56.4166665 -56.2499995 -19.0833335 -18.9166665 117 0 2670 --56.2500005 -56.0833335 -19.0833335 -18.9166665 121 0 2670 --56.0833335 -55.9166665 -19.0833335 -18.9166665 130 0 2670 --55.9166665 -55.7499995 -19.0833335 -18.9166665 134 0 2670 --55.7500005 -55.5833335 -19.0833335 -18.9166665 138 0 2670 --55.5833335 -55.4166665 -19.0833335 -18.9166665 143 0 2670 --55.4166665 -55.2499995 -19.0833335 -18.9166665 149 0 2670 --55.2500005 -55.0833335 -19.0833335 -18.9166665 158 0 2670 --55.0833335 -54.9166665 -19.0833335 -18.9166665 616 0 2670 --54.9166665 -54.7499995 -19.0833335 -18.9166665 504 0 2670 --54.7500005 -54.5833335 -19.0833335 -18.9166665 544 0 2670 --54.5833335 -54.4166665 -19.0833335 -18.9166665 456 0 2670 --54.4166665 -54.2499995 -19.0833335 -18.9166665 316 0 2670 --54.2500005 -54.0833335 -19.0833335 -18.9166665 337 0 2670 --54.0833335 -53.9166665 -19.0833335 -18.9166665 446 0 2670 --53.9166665 -53.7499995 -19.0833335 -18.9166665 423 0 2670 --53.7500005 -53.5833335 -19.0833335 -18.9166665 539 0 2670 --53.5833335 -53.4166665 -19.0833335 -18.9166665 554 0 2670 --53.4166665 -53.2499995 -19.0833335 -18.9166665 658 0 2670 --53.2500005 -53.0833335 -19.0833335 -18.9166665 544 0 2670 --53.0833335 -52.9166665 -19.0833335 -18.9166665 604 0 2670 --52.9166665 -52.7499995 -19.0833335 -18.9166665 690 0 2670 --52.7500005 -52.5833335 -19.0833335 -18.9166665 670 0 2670 --52.5833335 -52.4166665 -19.0833335 -18.9166665 537 0 2670 --52.4166665 -52.2499995 -19.0833335 -18.9166665 578 0 2670 --52.2500005 -52.0833335 -19.0833335 -18.9166665 599 0 2670 --52.0833335 -51.9166665 -19.0833335 -18.9166665 555 0 2670 --51.9166665 -51.7499995 -19.0833335 -18.9166665 587 0 2670 --51.7500005 -51.5833335 -19.0833335 -18.9166665 646 0 2670 --51.5833335 -51.4166665 -19.0833335 -18.9166665 530 0 2670 --51.4166665 -51.2499995 -19.0833335 -18.9166665 457 0 2670 --51.2500005 -51.0833335 -19.0833335 -18.9166665 454 0 2670 --51.0833335 -50.9166665 -19.0833335 -18.9166665 477 0 2670 --50.9166665 -50.7499995 -19.0833335 -18.9166665 450 0 2670 --50.7500005 -50.5833335 -19.0833335 -18.9166665 418 0 2670 --50.5833335 -50.4166665 -19.0833335 -18.9166665 399 0 2670 --50.4166665 -50.2499995 -19.0833335 -18.9166665 405 0 2670 --50.2500005 -50.0833335 -19.0833335 -18.9166665 621 0 2670 --50.0833335 -49.9166665 -19.0833335 -18.9166665 536 0 2670 --49.9166665 -49.7499995 -19.0833335 -18.9166665 523 0 2670 --49.7500005 -49.5833335 -19.0833335 -18.9166665 548 0 2670 --49.5833335 -49.4166665 -19.0833335 -18.9166665 584 0 2670 --49.4166665 -49.2499995 -19.0833335 -18.9166665 638 0 2670 --49.2500005 -49.0833335 -19.0833335 -18.9166665 637 0 2670 --49.0833335 -48.9166665 -19.0833335 -18.9166665 687 0 2670 --48.9166665 -48.7499995 -19.0833335 -18.9166665 725 0 2670 --48.7500005 -48.5833335 -19.0833335 -18.9166665 768 0 2670 --48.5833335 -48.4166665 -19.0833335 -18.9166665 796 0 2670 --48.4166665 -48.2499995 -19.0833335 -18.9166665 875 0 2670 --48.2500005 -48.0833335 -19.0833335 -18.9166665 871 0 2670 --48.0833335 -47.9166665 -19.0833335 -18.9166665 727 0 2670 --47.9166665 -47.7499995 -19.0833335 -18.9166665 930 0 2670 --47.7500005 -47.5833335 -19.0833335 -18.9166665 1008 0 2670 --47.5833335 -47.4166665 -19.0833335 -18.9166665 1001 0 2670 --47.4166665 -47.2499995 -19.0833335 -18.9166665 944 0 2670 --47.2500005 -47.0833335 -19.0833335 -18.9166665 905 0 2670 --47.0833335 -46.9166665 -19.0833335 -18.9166665 980 0 2670 --46.9166665 -46.7499995 -19.0833335 -18.9166665 972 0 2670 --46.7500005 -46.5833335 -19.0833335 -18.9166665 903 0 2670 --46.5833335 -46.4166665 -19.0833335 -18.9166665 881 0 2670 --46.4166665 -46.2499995 -19.0833335 -18.9166665 1038 0 2670 --46.2500005 -46.0833335 -19.0833335 -18.9166665 1078 0 2670 --46.0833335 -45.9166665 -19.0833335 -18.9166665 923 0 2670 --45.9166665 -45.7499995 -19.0833335 -18.9166665 925 0 2670 --45.7500005 -45.5833335 -19.0833335 -18.9166665 838 0 2670 --45.5833335 -45.4166665 -19.0833335 -18.9166665 593 0 2670 --45.4166665 -45.2499995 -19.0833335 -18.9166665 600 0 2670 --45.2500005 -45.0833335 -19.0833335 -18.9166665 674 0 2670 --45.0833335 -44.9166665 -19.0833335 -18.9166665 678 0 2670 --44.9166665 -44.7499995 -19.0833335 -18.9166665 733 0 2670 --44.7500005 -44.5833335 -19.0833335 -18.9166665 766 0 2670 --44.5833335 -44.4166665 -19.0833335 -18.9166665 792 0 2670 --44.4166665 -44.2499995 -19.0833335 -18.9166665 725 0 2670 --44.2500005 -44.0833335 -19.0833335 -18.9166665 667 0 2670 --44.0833335 -43.9166665 -19.0833335 -18.9166665 654 0 2670 --43.9166665 -43.7499995 -19.0833335 -18.9166665 742 0 2670 --43.7500005 -43.5833335 -19.0833335 -18.9166665 1399 0 2670 --43.5833335 -43.4166665 -19.0833335 -18.9166665 754 0 2670 --43.4166665 -43.2499995 -19.0833335 -18.9166665 688 0 2670 --43.2500005 -43.0833335 -19.0833335 -18.9166665 825 0 2670 --43.0833335 -42.9166665 -19.0833335 -18.9166665 592 0 2670 --42.9166665 -42.7499995 -19.0833335 -18.9166665 728 0 2670 --42.7500005 -42.5833335 -19.0833335 -18.9166665 780 0 2670 --42.5833335 -42.4166665 -19.0833335 -18.9166665 626 0 2670 --42.4166665 -42.2499995 -19.0833335 -18.9166665 301 0 2670 --42.2500005 -42.0833335 -19.0833335 -18.9166665 207 0 2670 --42.0833335 -41.9166665 -19.0833335 -18.9166665 240 0 2670 --41.9166665 -41.7499995 -19.0833335 -18.9166665 254 0 2670 --41.7500005 -41.5833335 -19.0833335 -18.9166665 220 0 2670 --41.5833335 -41.4166665 -19.0833335 -18.9166665 280 0 2670 --41.4166665 -41.2499995 -19.0833335 -18.9166665 431 0 2670 --41.2500005 -41.0833335 -19.0833335 -18.9166665 264 0 2670 --41.0833335 -40.9166665 -19.0833335 -18.9166665 765 0 2670 --40.9166665 -40.7499995 -19.0833335 -18.9166665 231 0 2670 --40.7500005 -40.5833335 -19.0833335 -18.9166665 227 0 2670 --40.5833335 -40.4166665 -19.0833335 -18.9166665 155 0 2670 --40.4166665 -40.2499995 -19.0833335 -18.9166665 134 0 2670 --40.2500005 -40.0833335 -19.0833335 -18.9166665 91 0 2670 --40.0833335 -39.9166665 -19.0833335 -18.9166665 34 0 2670 --65.0833335 -64.9166665 -19.2500005 -19.0833335 3130 0 2670 --64.9166665 -64.7499995 -19.2500005 -19.0833335 3160 0 2670 --64.7500005 -64.5833335 -19.2500005 -19.0833335 2620 0 2670 --64.5833335 -64.4166665 -19.2500005 -19.0833335 2213 0 2670 --64.4166665 -64.2499995 -19.2500005 -19.0833335 2274 0 2670 --64.2500005 -64.0833335 -19.2500005 -19.0833335 2025 0 2670 --64.0833335 -63.9166665 -19.2500005 -19.0833335 1173 0 2670 --63.9166665 -63.7499995 -19.2500005 -19.0833335 1560 0 2670 --63.7500005 -63.5833335 -19.2500005 -19.0833335 586 0 2670 --63.5833335 -63.4166665 -19.2500005 -19.0833335 810 0 2670 --63.4166665 -63.2499995 -19.2500005 -19.0833335 749 0 2670 --63.2500005 -63.0833335 -19.2500005 -19.0833335 594 0 2670 --63.0833335 -62.9166665 -19.2500005 -19.0833335 514 0 2670 --62.9166665 -62.7499995 -19.2500005 -19.0833335 428 0 2670 --62.7500005 -62.5833335 -19.2500005 -19.0833335 375 0 2670 --62.5833335 -62.4166665 -19.2500005 -19.0833335 374 0 2670 --62.4166665 -62.2499995 -19.2500005 -19.0833335 367 0 2670 --62.2500005 -62.0833335 -19.2500005 -19.0833335 356 0 2670 --62.0833335 -61.9166665 -19.2500005 -19.0833335 346 0 2670 --61.9166665 -61.7499995 -19.2500005 -19.0833335 352 0 2670 --61.7500005 -61.5833335 -19.2500005 -19.0833335 326 0 2670 --61.5833335 -61.4166665 -19.2500005 -19.0833335 364 0 2670 --61.4166665 -61.2499995 -19.2500005 -19.0833335 314 0 2670 --61.2500005 -61.0833335 -19.2500005 -19.0833335 314 0 2670 --61.0833335 -60.9166665 -19.2500005 -19.0833335 272 0 2670 --60.9166665 -60.7499995 -19.2500005 -19.0833335 300 0 2670 --60.7500005 -60.5833335 -19.2500005 -19.0833335 323 0 2670 --60.5833335 -60.4166665 -19.2500005 -19.0833335 312 0 2670 --60.4166665 -60.2499995 -19.2500005 -19.0833335 284 0 2670 --60.2500005 -60.0833335 -19.2500005 -19.0833335 227 0 2670 --60.0833335 -59.9166665 -19.2500005 -19.0833335 200 0 2670 --59.9166665 -59.7499995 -19.2500005 -19.0833335 236 0 2670 --59.7500005 -59.5833335 -19.2500005 -19.0833335 258 0 2670 --59.5833335 -59.4166665 -19.2500005 -19.0833335 271 0 2670 --59.4166665 -59.2499995 -19.2500005 -19.0833335 290 0 2670 --59.2500005 -59.0833335 -19.2500005 -19.0833335 330 0 2670 --59.0833335 -58.9166665 -19.2500005 -19.0833335 218 0 2670 --58.9166665 -58.7499995 -19.2500005 -19.0833335 164 0 2670 --58.7500005 -58.5833335 -19.2500005 -19.0833335 123 0 2670 --58.5833335 -58.4166665 -19.2500005 -19.0833335 112 0 2670 --58.4166665 -58.2499995 -19.2500005 -19.0833335 102 0 2670 --58.2500005 -58.0833335 -19.2500005 -19.0833335 96 0 2670 --58.0833335 -57.9166665 -19.2500005 -19.0833335 103 0 2670 --57.9166665 -57.7499995 -19.2500005 -19.0833335 108 0 2670 --57.7500005 -57.5833335 -19.2500005 -19.0833335 149 0 2670 --57.5833335 -57.4166665 -19.2500005 -19.0833335 561 0 2670 --57.4166665 -57.2499995 -19.2500005 -19.0833335 87 0 2670 --57.2500005 -57.0833335 -19.2500005 -19.0833335 85 0 2670 --57.0833335 -56.9166665 -19.2500005 -19.0833335 90 0 2670 --56.9166665 -56.7499995 -19.2500005 -19.0833335 95 0 2670 --56.7500005 -56.5833335 -19.2500005 -19.0833335 101 0 2670 --56.5833335 -56.4166665 -19.2500005 -19.0833335 106 0 2670 --56.4166665 -56.2499995 -19.2500005 -19.0833335 113 0 2670 --56.2500005 -56.0833335 -19.2500005 -19.0833335 118 0 2670 --56.0833335 -55.9166665 -19.2500005 -19.0833335 126 0 2670 --55.9166665 -55.7499995 -19.2500005 -19.0833335 128 0 2670 --55.7500005 -55.5833335 -19.2500005 -19.0833335 135 0 2670 --55.5833335 -55.4166665 -19.2500005 -19.0833335 138 0 2670 --55.4166665 -55.2499995 -19.2500005 -19.0833335 139 0 2670 --55.2500005 -55.0833335 -19.2500005 -19.0833335 155 0 2670 --55.0833335 -54.9166665 -19.2500005 -19.0833335 429 0 2670 --54.9166665 -54.7499995 -19.2500005 -19.0833335 523 0 2670 --54.7500005 -54.5833335 -19.2500005 -19.0833335 699 0 2670 --54.5833335 -54.4166665 -19.2500005 -19.0833335 657 0 2670 --54.4166665 -54.2499995 -19.2500005 -19.0833335 418 0 2670 --54.2500005 -54.0833335 -19.2500005 -19.0833335 356 0 2670 --54.0833335 -53.9166665 -19.2500005 -19.0833335 401 0 2670 --53.9166665 -53.7499995 -19.2500005 -19.0833335 583 0 2670 --53.7500005 -53.5833335 -19.2500005 -19.0833335 578 0 2670 --53.5833335 -53.4166665 -19.2500005 -19.0833335 564 0 2670 --53.4166665 -53.2499995 -19.2500005 -19.0833335 641 0 2670 --53.2500005 -53.0833335 -19.2500005 -19.0833335 623 0 2670 --53.0833335 -52.9166665 -19.2500005 -19.0833335 575 0 2670 --52.9166665 -52.7499995 -19.2500005 -19.0833335 599 0 2670 --52.7500005 -52.5833335 -19.2500005 -19.0833335 584 0 2670 --52.5833335 -52.4166665 -19.2500005 -19.0833335 566 0 2670 --52.4166665 -52.2499995 -19.2500005 -19.0833335 504 0 2670 --52.2500005 -52.0833335 -19.2500005 -19.0833335 524 0 2670 --52.0833335 -51.9166665 -19.2500005 -19.0833335 581 0 2670 --51.9166665 -51.7499995 -19.2500005 -19.0833335 697 0 2670 --51.7500005 -51.5833335 -19.2500005 -19.0833335 445 0 2670 --51.5833335 -51.4166665 -19.2500005 -19.0833335 417 0 2670 --51.4166665 -51.2499995 -19.2500005 -19.0833335 428 0 2670 --51.2500005 -51.0833335 -19.2500005 -19.0833335 433 0 2670 --51.0833335 -50.9166665 -19.2500005 -19.0833335 358 0 2670 --50.9166665 -50.7499995 -19.2500005 -19.0833335 455 0 2670 --50.7500005 -50.5833335 -19.2500005 -19.0833335 345 0 2670 --50.5833335 -50.4166665 -19.2500005 -19.0833335 449 0 2670 --50.4166665 -50.2499995 -19.2500005 -19.0833335 446 0 2670 --50.2500005 -50.0833335 -19.2500005 -19.0833335 478 0 2670 --50.0833335 -49.9166665 -19.2500005 -19.0833335 477 0 2670 --49.9166665 -49.7499995 -19.2500005 -19.0833335 529 0 2670 --49.7500005 -49.5833335 -19.2500005 -19.0833335 552 0 2670 --49.5833335 -49.4166665 -19.2500005 -19.0833335 566 0 2670 --49.4166665 -49.2499995 -19.2500005 -19.0833335 624 0 2670 --49.2500005 -49.0833335 -19.2500005 -19.0833335 649 0 2670 --49.0833335 -48.9166665 -19.2500005 -19.0833335 696 0 2670 --48.9166665 -48.7499995 -19.2500005 -19.0833335 706 0 2670 --48.7500005 -48.5833335 -19.2500005 -19.0833335 710 0 2670 --48.5833335 -48.4166665 -19.2500005 -19.0833335 774 0 2670 --48.4166665 -48.2499995 -19.2500005 -19.0833335 826 0 2670 --48.2500005 -48.0833335 -19.2500005 -19.0833335 885 0 2670 --48.0833335 -47.9166665 -19.2500005 -19.0833335 929 0 2670 --47.9166665 -47.7499995 -19.2500005 -19.0833335 849 0 2670 --47.7500005 -47.5833335 -19.2500005 -19.0833335 891 0 2670 --47.5833335 -47.4166665 -19.2500005 -19.0833335 938 0 2670 --47.4166665 -47.2499995 -19.2500005 -19.0833335 832 0 2670 --47.2500005 -47.0833335 -19.2500005 -19.0833335 809 0 2670 --47.0833335 -46.9166665 -19.2500005 -19.0833335 962 0 2670 --46.9166665 -46.7499995 -19.2500005 -19.0833335 904 0 2670 --46.7500005 -46.5833335 -19.2500005 -19.0833335 1012 0 2670 --46.5833335 -46.4166665 -19.2500005 -19.0833335 1023 0 2670 --46.4166665 -46.2499995 -19.2500005 -19.0833335 890 0 2670 --46.2500005 -46.0833335 -19.2500005 -19.0833335 1014 0 2670 --46.0833335 -45.9166665 -19.2500005 -19.0833335 1054 0 2670 --45.9166665 -45.7499995 -19.2500005 -19.0833335 831 0 2670 --45.7500005 -45.5833335 -19.2500005 -19.0833335 709 0 2670 --45.5833335 -45.4166665 -19.2500005 -19.0833335 627 0 2670 --45.4166665 -45.2499995 -19.2500005 -19.0833335 668 0 2670 --45.2500005 -45.0833335 -19.2500005 -19.0833335 669 0 2670 --45.0833335 -44.9166665 -19.2500005 -19.0833335 669 0 2670 --44.9166665 -44.7499995 -19.2500005 -19.0833335 696 0 2670 --44.7500005 -44.5833335 -19.2500005 -19.0833335 675 0 2670 --44.5833335 -44.4166665 -19.2500005 -19.0833335 732 0 2670 --44.4166665 -44.2499995 -19.2500005 -19.0833335 807 0 2670 --44.2500005 -44.0833335 -19.2500005 -19.0833335 704 0 2670 --44.0833335 -43.9166665 -19.2500005 -19.0833335 720 0 2670 --43.9166665 -43.7499995 -19.2500005 -19.0833335 1022 0 2670 --43.7500005 -43.5833335 -19.2500005 -19.0833335 1119 0 2670 --43.5833335 -43.4166665 -19.2500005 -19.0833335 1240 0 2670 --43.4166665 -43.2499995 -19.2500005 -19.0833335 561 0 2670 --43.2500005 -43.0833335 -19.2500005 -19.0833335 749 0 2670 --43.0833335 -42.9166665 -19.2500005 -19.0833335 731 0 2670 --42.9166665 -42.7499995 -19.2500005 -19.0833335 464 0 2670 --42.7500005 -42.5833335 -19.2500005 -19.0833335 418 0 2670 --42.5833335 -42.4166665 -19.2500005 -19.0833335 286 0 2670 --42.4166665 -42.2499995 -19.2500005 -19.0833335 266 0 2670 --42.2500005 -42.0833335 -19.2500005 -19.0833335 239 0 2670 --42.0833335 -41.9166665 -19.2500005 -19.0833335 407 0 2670 --41.9166665 -41.7499995 -19.2500005 -19.0833335 386 0 2670 --41.7500005 -41.5833335 -19.2500005 -19.0833335 331 0 2670 --41.5833335 -41.4166665 -19.2500005 -19.0833335 185 0 2670 --41.4166665 -41.2499995 -19.2500005 -19.0833335 387 0 2670 --41.2500005 -41.0833335 -19.2500005 -19.0833335 214 0 2670 --41.0833335 -40.9166665 -19.2500005 -19.0833335 268 0 2670 --40.9166665 -40.7499995 -19.2500005 -19.0833335 402 0 2670 --40.7500005 -40.5833335 -19.2500005 -19.0833335 179 0 2670 --40.5833335 -40.4166665 -19.2500005 -19.0833335 149 0 2670 --40.4166665 -40.2499995 -19.2500005 -19.0833335 142 0 2670 --40.2500005 -40.0833335 -19.2500005 -19.0833335 80 0 2670 --40.0833335 -39.9166665 -19.2500005 -19.0833335 48 0 2670 --65.0833335 -64.9166665 -19.4166665 -19.2499995 2222 0 2670 --64.9166665 -64.7499995 -19.4166665 -19.2499995 2792 0 2670 --64.7500005 -64.5833335 -19.4166665 -19.2499995 3224 0 2670 --64.5833335 -64.4166665 -19.4166665 -19.2499995 2332 0 2670 --64.4166665 -64.2499995 -19.4166665 -19.2499995 2112 0 2670 --64.2500005 -64.0833335 -19.4166665 -19.2499995 1769 0 2670 --64.0833335 -63.9166665 -19.4166665 -19.2499995 920 0 2670 --63.9166665 -63.7499995 -19.4166665 -19.2499995 1550 0 2670 --63.7500005 -63.5833335 -19.4166665 -19.2499995 845 0 2670 --63.5833335 -63.4166665 -19.4166665 -19.2499995 1062 0 2670 --63.4166665 -63.2499995 -19.4166665 -19.2499995 1364 0 2670 --63.2500005 -63.0833335 -19.4166665 -19.2499995 673 0 2670 --63.0833335 -62.9166665 -19.4166665 -19.2499995 571 0 2670 --62.9166665 -62.7499995 -19.4166665 -19.2499995 491 0 2670 --62.7500005 -62.5833335 -19.4166665 -19.2499995 400 0 2670 --62.5833335 -62.4166665 -19.4166665 -19.2499995 394 0 2670 --62.4166665 -62.2499995 -19.4166665 -19.2499995 383 0 2670 --62.2500005 -62.0833335 -19.4166665 -19.2499995 372 0 2670 --62.0833335 -61.9166665 -19.4166665 -19.2499995 353 0 2670 --61.9166665 -61.7499995 -19.4166665 -19.2499995 339 0 2670 --61.7500005 -61.5833335 -19.4166665 -19.2499995 331 0 2670 --61.5833335 -61.4166665 -19.4166665 -19.2499995 338 0 2670 --61.4166665 -61.2499995 -19.4166665 -19.2499995 321 0 2670 --61.2500005 -61.0833335 -19.4166665 -19.2499995 296 0 2670 --61.0833335 -60.9166665 -19.4166665 -19.2499995 269 0 2670 --60.9166665 -60.7499995 -19.4166665 -19.2499995 269 0 2670 --60.7500005 -60.5833335 -19.4166665 -19.2499995 246 0 2670 --60.5833335 -60.4166665 -19.4166665 -19.2499995 283 0 2670 --60.4166665 -60.2499995 -19.4166665 -19.2499995 272 0 2670 --60.2500005 -60.0833335 -19.4166665 -19.2499995 207 0 2670 --60.0833335 -59.9166665 -19.4166665 -19.2499995 176 0 2670 --59.9166665 -59.7499995 -19.4166665 -19.2499995 180 0 2670 --59.7500005 -59.5833335 -19.4166665 -19.2499995 203 0 2670 --59.5833335 -59.4166665 -19.4166665 -19.2499995 186 0 2670 --59.4166665 -59.2499995 -19.4166665 -19.2499995 245 0 2670 --59.2500005 -59.0833335 -19.4166665 -19.2499995 271 0 2670 --59.0833335 -58.9166665 -19.4166665 -19.2499995 311 0 2670 --58.9166665 -58.7499995 -19.4166665 -19.2499995 205 0 2670 --58.7500005 -58.5833335 -19.4166665 -19.2499995 135 0 2670 --58.5833335 -58.4166665 -19.4166665 -19.2499995 107 0 2670 --58.4166665 -58.2499995 -19.4166665 -19.2499995 100 0 2670 --58.2500005 -58.0833335 -19.4166665 -19.2499995 100 0 2670 --58.0833335 -57.9166665 -19.4166665 -19.2499995 84 0 2670 --57.9166665 -57.7499995 -19.4166665 -19.2499995 83 0 2670 --57.7500005 -57.5833335 -19.4166665 -19.2499995 83 0 2670 --57.5833335 -57.4166665 -19.4166665 -19.2499995 288 0 2670 --57.4166665 -57.2499995 -19.4166665 -19.2499995 86 0 2670 --57.2500005 -57.0833335 -19.4166665 -19.2499995 84 0 2670 --57.0833335 -56.9166665 -19.4166665 -19.2499995 90 0 2670 --56.9166665 -56.7499995 -19.4166665 -19.2499995 95 0 2670 --56.7500005 -56.5833335 -19.4166665 -19.2499995 99 0 2670 --56.5833335 -56.4166665 -19.4166665 -19.2499995 104 0 2670 --56.4166665 -56.2499995 -19.4166665 -19.2499995 108 0 2670 --56.2500005 -56.0833335 -19.4166665 -19.2499995 115 0 2670 --56.0833335 -55.9166665 -19.4166665 -19.2499995 118 0 2670 --55.9166665 -55.7499995 -19.4166665 -19.2499995 124 0 2670 --55.7500005 -55.5833335 -19.4166665 -19.2499995 127 0 2670 --55.5833335 -55.4166665 -19.4166665 -19.2499995 133 0 2670 --55.4166665 -55.2499995 -19.4166665 -19.2499995 145 0 2670 --55.2500005 -55.0833335 -19.4166665 -19.2499995 166 0 2670 --55.0833335 -54.9166665 -19.4166665 -19.2499995 255 0 2670 --54.9166665 -54.7499995 -19.4166665 -19.2499995 393 0 2670 --54.7500005 -54.5833335 -19.4166665 -19.2499995 638 0 2670 --54.5833335 -54.4166665 -19.4166665 -19.2499995 707 0 2670 --54.4166665 -54.2499995 -19.4166665 -19.2499995 390 0 2670 --54.2500005 -54.0833335 -19.4166665 -19.2499995 344 0 2670 --54.0833335 -53.9166665 -19.4166665 -19.2499995 398 0 2670 --53.9166665 -53.7499995 -19.4166665 -19.2499995 585 0 2670 --53.7500005 -53.5833335 -19.4166665 -19.2499995 490 0 2670 --53.5833335 -53.4166665 -19.4166665 -19.2499995 561 0 2670 --53.4166665 -53.2499995 -19.4166665 -19.2499995 562 0 2670 --53.2500005 -53.0833335 -19.4166665 -19.2499995 669 0 2670 --53.0833335 -52.9166665 -19.4166665 -19.2499995 605 0 2670 --52.9166665 -52.7499995 -19.4166665 -19.2499995 576 0 2670 --52.7500005 -52.5833335 -19.4166665 -19.2499995 441 0 2670 --52.5833335 -52.4166665 -19.4166665 -19.2499995 518 0 2670 --52.4166665 -52.2499995 -19.4166665 -19.2499995 507 0 2670 --52.2500005 -52.0833335 -19.4166665 -19.2499995 531 0 2670 --52.0833335 -51.9166665 -19.4166665 -19.2499995 500 0 2670 --51.9166665 -51.7499995 -19.4166665 -19.2499995 676 0 2670 --51.7500005 -51.5833335 -19.4166665 -19.2499995 486 0 2670 --51.5833335 -51.4166665 -19.4166665 -19.2499995 587 0 2670 --51.4166665 -51.2499995 -19.4166665 -19.2499995 477 0 2670 --51.2500005 -51.0833335 -19.4166665 -19.2499995 390 0 2670 --51.0833335 -50.9166665 -19.4166665 -19.2499995 388 0 2670 --50.9166665 -50.7499995 -19.4166665 -19.2499995 325 0 2670 --50.7500005 -50.5833335 -19.4166665 -19.2499995 447 0 2670 --50.5833335 -50.4166665 -19.4166665 -19.2499995 418 0 2670 --50.4166665 -50.2499995 -19.4166665 -19.2499995 463 0 2670 --50.2500005 -50.0833335 -19.4166665 -19.2499995 450 0 2670 --50.0833335 -49.9166665 -19.4166665 -19.2499995 470 0 2670 --49.9166665 -49.7499995 -19.4166665 -19.2499995 513 0 2670 --49.7500005 -49.5833335 -19.4166665 -19.2499995 662 0 2670 --49.5833335 -49.4166665 -19.4166665 -19.2499995 562 0 2670 --49.4166665 -49.2499995 -19.4166665 -19.2499995 544 0 2670 --49.2500005 -49.0833335 -19.4166665 -19.2499995 583 0 2670 --49.0833335 -48.9166665 -19.4166665 -19.2499995 609 0 2670 --48.9166665 -48.7499995 -19.4166665 -19.2499995 652 0 2670 --48.7500005 -48.5833335 -19.4166665 -19.2499995 715 0 2670 --48.5833335 -48.4166665 -19.4166665 -19.2499995 747 0 2670 --48.4166665 -48.2499995 -19.4166665 -19.2499995 749 0 2670 --48.2500005 -48.0833335 -19.4166665 -19.2499995 791 0 2670 --48.0833335 -47.9166665 -19.4166665 -19.2499995 971 0 2670 --47.9166665 -47.7499995 -19.4166665 -19.2499995 978 0 2670 --47.7500005 -47.5833335 -19.4166665 -19.2499995 907 0 2670 --47.5833335 -47.4166665 -19.4166665 -19.2499995 999 0 2670 --47.4166665 -47.2499995 -19.4166665 -19.2499995 994 0 2670 --47.2500005 -47.0833335 -19.4166665 -19.2499995 875 0 2670 --47.0833335 -46.9166665 -19.4166665 -19.2499995 884 0 2670 --46.9166665 -46.7499995 -19.4166665 -19.2499995 868 0 2670 --46.7500005 -46.5833335 -19.4166665 -19.2499995 874 0 2670 --46.5833335 -46.4166665 -19.4166665 -19.2499995 924 0 2670 --46.4166665 -46.2499995 -19.4166665 -19.2499995 998 0 2670 --46.2500005 -46.0833335 -19.4166665 -19.2499995 1145 0 2670 --46.0833335 -45.9166665 -19.4166665 -19.2499995 1107 0 2670 --45.9166665 -45.7499995 -19.4166665 -19.2499995 816 0 2670 --45.7500005 -45.5833335 -19.4166665 -19.2499995 674 0 2670 --45.5833335 -45.4166665 -19.4166665 -19.2499995 648 0 2670 --45.4166665 -45.2499995 -19.4166665 -19.2499995 623 0 2670 --45.2500005 -45.0833335 -19.4166665 -19.2499995 658 0 2670 --45.0833335 -44.9166665 -19.4166665 -19.2499995 657 0 2670 --44.9166665 -44.7499995 -19.4166665 -19.2499995 689 0 2670 --44.7500005 -44.5833335 -19.4166665 -19.2499995 716 0 2670 --44.5833335 -44.4166665 -19.4166665 -19.2499995 689 0 2670 --44.4166665 -44.2499995 -19.4166665 -19.2499995 819 0 2670 --44.2500005 -44.0833335 -19.4166665 -19.2499995 679 0 2670 --44.0833335 -43.9166665 -19.4166665 -19.2499995 641 0 2670 --43.9166665 -43.7499995 -19.4166665 -19.2499995 777 0 2670 --43.7500005 -43.5833335 -19.4166665 -19.2499995 784 0 2670 --43.5833335 -43.4166665 -19.4166665 -19.2499995 1039 0 2670 --43.4166665 -43.2499995 -19.4166665 -19.2499995 727 0 2670 --43.2500005 -43.0833335 -19.4166665 -19.2499995 661 0 2670 --43.0833335 -42.9166665 -19.4166665 -19.2499995 571 0 2670 --42.9166665 -42.7499995 -19.4166665 -19.2499995 829 0 2670 --42.7500005 -42.5833335 -19.4166665 -19.2499995 848 0 2670 --42.5833335 -42.4166665 -19.4166665 -19.2499995 288 0 2670 --42.4166665 -42.2499995 -19.4166665 -19.2499995 255 0 2670 --42.2500005 -42.0833335 -19.4166665 -19.2499995 233 0 2670 --42.0833335 -41.9166665 -19.4166665 -19.2499995 282 0 2670 --41.9166665 -41.7499995 -19.4166665 -19.2499995 320 0 2670 --41.7500005 -41.5833335 -19.4166665 -19.2499995 661 0 2670 --41.5833335 -41.4166665 -19.4166665 -19.2499995 761 0 2670 --41.4166665 -41.2499995 -19.4166665 -19.2499995 500 0 2670 --41.2500005 -41.0833335 -19.4166665 -19.2499995 230 0 2670 --41.0833335 -40.9166665 -19.4166665 -19.2499995 252 0 2670 --40.9166665 -40.7499995 -19.4166665 -19.2499995 560 0 2670 --40.7500005 -40.5833335 -19.4166665 -19.2499995 146 0 2670 --40.5833335 -40.4166665 -19.4166665 -19.2499995 509 0 2670 --40.4166665 -40.2499995 -19.4166665 -19.2499995 152 0 2670 --40.2500005 -40.0833335 -19.4166665 -19.2499995 46 0 2670 --40.0833335 -39.9166665 -19.4166665 -19.2499995 21 0 2670 --65.0833335 -64.9166665 -19.5833335 -19.4166665 2720 0 2670 --64.9166665 -64.7499995 -19.5833335 -19.4166665 2525 0 2670 --64.7500005 -64.5833335 -19.5833335 -19.4166665 3614 0 2670 --64.5833335 -64.4166665 -19.5833335 -19.4166665 2307 0 2670 --64.4166665 -64.2499995 -19.5833335 -19.4166665 2252 0 2670 --64.2500005 -64.0833335 -19.5833335 -19.4166665 2187 0 2670 --64.0833335 -63.9166665 -19.5833335 -19.4166665 1181 0 2670 --63.9166665 -63.7499995 -19.5833335 -19.4166665 1194 0 2670 --63.7500005 -63.5833335 -19.5833335 -19.4166665 841 0 2670 --63.5833335 -63.4166665 -19.5833335 -19.4166665 901 0 2670 --63.4166665 -63.2499995 -19.5833335 -19.4166665 1056 0 2670 --63.2500005 -63.0833335 -19.5833335 -19.4166665 748 0 2670 --63.0833335 -62.9166665 -19.5833335 -19.4166665 597 0 2670 --62.9166665 -62.7499995 -19.5833335 -19.4166665 505 0 2670 --62.7500005 -62.5833335 -19.5833335 -19.4166665 444 0 2670 --62.5833335 -62.4166665 -19.5833335 -19.4166665 417 0 2670 --62.4166665 -62.2499995 -19.5833335 -19.4166665 403 0 2670 --62.2500005 -62.0833335 -19.5833335 -19.4166665 384 0 2670 --62.0833335 -61.9166665 -19.5833335 -19.4166665 366 0 2670 --61.9166665 -61.7499995 -19.5833335 -19.4166665 344 0 2670 --61.7500005 -61.5833335 -19.5833335 -19.4166665 327 0 2670 --61.5833335 -61.4166665 -19.5833335 -19.4166665 309 0 2670 --61.4166665 -61.2499995 -19.5833335 -19.4166665 302 0 2670 --61.2500005 -61.0833335 -19.5833335 -19.4166665 303 0 2670 --61.0833335 -60.9166665 -19.5833335 -19.4166665 296 0 2670 --60.9166665 -60.7499995 -19.5833335 -19.4166665 257 0 2670 --60.7500005 -60.5833335 -19.5833335 -19.4166665 218 0 2670 --60.5833335 -60.4166665 -19.5833335 -19.4166665 217 0 2670 --60.4166665 -60.2499995 -19.5833335 -19.4166665 240 0 2670 --60.2500005 -60.0833335 -19.5833335 -19.4166665 228 0 2670 --60.0833335 -59.9166665 -19.5833335 -19.4166665 157 0 2670 --59.9166665 -59.7499995 -19.5833335 -19.4166665 155 0 2670 --59.7500005 -59.5833335 -19.5833335 -19.4166665 142 0 2670 --59.5833335 -59.4166665 -19.5833335 -19.4166665 139 0 2670 --59.4166665 -59.2499995 -19.5833335 -19.4166665 186 0 2670 --59.2500005 -59.0833335 -19.5833335 -19.4166665 224 0 2670 --59.0833335 -58.9166665 -19.5833335 -19.4166665 304 0 2670 --58.9166665 -58.7499995 -19.5833335 -19.4166665 193 0 2670 --58.7500005 -58.5833335 -19.5833335 -19.4166665 122 0 2670 --58.5833335 -58.4166665 -19.5833335 -19.4166665 96 0 2670 --58.4166665 -58.2499995 -19.5833335 -19.4166665 94 0 2670 --58.2500005 -58.0833335 -19.5833335 -19.4166665 85 0 2670 --58.0833335 -57.9166665 -19.5833335 -19.4166665 83 0 2670 --57.9166665 -57.7499995 -19.5833335 -19.4166665 83 0 2670 --57.7500005 -57.5833335 -19.5833335 -19.4166665 81 0 2670 --57.5833335 -57.4166665 -19.5833335 -19.4166665 83 0 2670 --57.4166665 -57.2499995 -19.5833335 -19.4166665 85 0 2670 --57.2500005 -57.0833335 -19.5833335 -19.4166665 89 0 2670 --57.0833335 -56.9166665 -19.5833335 -19.4166665 90 0 2670 --56.9166665 -56.7499995 -19.5833335 -19.4166665 93 0 2670 --56.7500005 -56.5833335 -19.5833335 -19.4166665 98 0 2670 --56.5833335 -56.4166665 -19.5833335 -19.4166665 102 0 2670 --56.4166665 -56.2499995 -19.5833335 -19.4166665 106 0 2670 --56.2500005 -56.0833335 -19.5833335 -19.4166665 112 0 2670 --56.0833335 -55.9166665 -19.5833335 -19.4166665 115 0 2670 --55.9166665 -55.7499995 -19.5833335 -19.4166665 118 0 2670 --55.7500005 -55.5833335 -19.5833335 -19.4166665 121 0 2670 --55.5833335 -55.4166665 -19.5833335 -19.4166665 125 0 2670 --55.4166665 -55.2499995 -19.5833335 -19.4166665 142 0 2670 --55.2500005 -55.0833335 -19.5833335 -19.4166665 451 0 2670 --55.0833335 -54.9166665 -19.5833335 -19.4166665 291 0 2670 --54.9166665 -54.7499995 -19.5833335 -19.4166665 469 0 2670 --54.7500005 -54.5833335 -19.5833335 -19.4166665 459 0 2670 --54.5833335 -54.4166665 -19.5833335 -19.4166665 692 0 2670 --54.4166665 -54.2499995 -19.5833335 -19.4166665 584 0 2670 --54.2500005 -54.0833335 -19.5833335 -19.4166665 388 0 2670 --54.0833335 -53.9166665 -19.5833335 -19.4166665 508 0 2670 --53.9166665 -53.7499995 -19.5833335 -19.4166665 654 0 2670 --53.7500005 -53.5833335 -19.5833335 -19.4166665 558 0 2670 --53.5833335 -53.4166665 -19.5833335 -19.4166665 522 0 2670 --53.4166665 -53.2499995 -19.5833335 -19.4166665 573 0 2670 --53.2500005 -53.0833335 -19.5833335 -19.4166665 515 0 2670 --53.0833335 -52.9166665 -19.5833335 -19.4166665 554 0 2670 --52.9166665 -52.7499995 -19.5833335 -19.4166665 488 0 2670 --52.7500005 -52.5833335 -19.5833335 -19.4166665 454 0 2670 --52.5833335 -52.4166665 -19.5833335 -19.4166665 431 0 2670 --52.4166665 -52.2499995 -19.5833335 -19.4166665 445 0 2670 --52.2500005 -52.0833335 -19.5833335 -19.4166665 436 0 2670 --52.0833335 -51.9166665 -19.5833335 -19.4166665 479 0 2670 --51.9166665 -51.7499995 -19.5833335 -19.4166665 717 0 2670 --51.7500005 -51.5833335 -19.5833335 -19.4166665 513 0 2670 --51.5833335 -51.4166665 -19.5833335 -19.4166665 438 0 2670 --51.4166665 -51.2499995 -19.5833335 -19.4166665 409 0 2670 --51.2500005 -51.0833335 -19.5833335 -19.4166665 426 0 2670 --51.0833335 -50.9166665 -19.5833335 -19.4166665 378 0 2670 --50.9166665 -50.7499995 -19.5833335 -19.4166665 341 0 2670 --50.7500005 -50.5833335 -19.5833335 -19.4166665 385 0 2670 --50.5833335 -50.4166665 -19.5833335 -19.4166665 464 0 2670 --50.4166665 -50.2499995 -19.5833335 -19.4166665 463 0 2670 --50.2500005 -50.0833335 -19.5833335 -19.4166665 451 0 2670 --50.0833335 -49.9166665 -19.5833335 -19.4166665 492 0 2670 --49.9166665 -49.7499995 -19.5833335 -19.4166665 606 0 2670 --49.7500005 -49.5833335 -19.5833335 -19.4166665 507 0 2670 --49.5833335 -49.4166665 -19.5833335 -19.4166665 520 0 2670 --49.4166665 -49.2499995 -19.5833335 -19.4166665 549 0 2670 --49.2500005 -49.0833335 -19.5833335 -19.4166665 665 0 2670 --49.0833335 -48.9166665 -19.5833335 -19.4166665 620 0 2670 --48.9166665 -48.7499995 -19.5833335 -19.4166665 675 0 2670 --48.7500005 -48.5833335 -19.5833335 -19.4166665 676 0 2670 --48.5833335 -48.4166665 -19.5833335 -19.4166665 752 0 2670 --48.4166665 -48.2499995 -19.5833335 -19.4166665 834 0 2670 --48.2500005 -48.0833335 -19.5833335 -19.4166665 819 0 2670 --48.0833335 -47.9166665 -19.5833335 -19.4166665 876 0 2670 --47.9166665 -47.7499995 -19.5833335 -19.4166665 985 0 2670 --47.7500005 -47.5833335 -19.5833335 -19.4166665 1010 0 2670 --47.5833335 -47.4166665 -19.5833335 -19.4166665 921 0 2670 --47.4166665 -47.2499995 -19.5833335 -19.4166665 1088 0 2670 --47.2500005 -47.0833335 -19.5833335 -19.4166665 907 0 2670 --47.0833335 -46.9166665 -19.5833335 -19.4166665 877 0 2670 --46.9166665 -46.7499995 -19.5833335 -19.4166665 986 0 2670 --46.7500005 -46.5833335 -19.5833335 -19.4166665 958 0 2670 --46.5833335 -46.4166665 -19.5833335 -19.4166665 908 0 2670 --46.4166665 -46.2499995 -19.5833335 -19.4166665 1007 0 2670 --46.2500005 -46.0833335 -19.5833335 -19.4166665 1071 0 2670 --46.0833335 -45.9166665 -19.5833335 -19.4166665 905 0 2670 --45.9166665 -45.7499995 -19.5833335 -19.4166665 693 0 2670 --45.7500005 -45.5833335 -19.5833335 -19.4166665 652 0 2670 --45.5833335 -45.4166665 -19.5833335 -19.4166665 696 0 2670 --45.4166665 -45.2499995 -19.5833335 -19.4166665 712 0 2670 --45.2500005 -45.0833335 -19.5833335 -19.4166665 693 0 2670 --45.0833335 -44.9166665 -19.5833335 -19.4166665 639 0 2670 --44.9166665 -44.7499995 -19.5833335 -19.4166665 666 0 2670 --44.7500005 -44.5833335 -19.5833335 -19.4166665 772 0 2670 --44.5833335 -44.4166665 -19.5833335 -19.4166665 702 0 2670 --44.4166665 -44.2499995 -19.5833335 -19.4166665 762 0 2670 --44.2500005 -44.0833335 -19.5833335 -19.4166665 783 0 2670 --44.0833335 -43.9166665 -19.5833335 -19.4166665 681 0 2670 --43.9166665 -43.7499995 -19.5833335 -19.4166665 706 0 2670 --43.7500005 -43.5833335 -19.5833335 -19.4166665 855 0 2670 --43.5833335 -43.4166665 -19.5833335 -19.4166665 1471 0 2670 --43.4166665 -43.2499995 -19.5833335 -19.4166665 630 0 2670 --43.2500005 -43.0833335 -19.5833335 -19.4166665 701 0 2670 --43.0833335 -42.9166665 -19.5833335 -19.4166665 861 0 2670 --42.9166665 -42.7499995 -19.5833335 -19.4166665 929 0 2670 --42.7500005 -42.5833335 -19.5833335 -19.4166665 587 0 2670 --42.5833335 -42.4166665 -19.5833335 -19.4166665 247 0 2670 --42.4166665 -42.2499995 -19.5833335 -19.4166665 479 0 2670 --42.2500005 -42.0833335 -19.5833335 -19.4166665 467 0 2670 --42.0833335 -41.9166665 -19.5833335 -19.4166665 726 0 2670 --41.9166665 -41.7499995 -19.5833335 -19.4166665 522 0 2670 --41.7500005 -41.5833335 -19.5833335 -19.4166665 336 0 2670 --41.5833335 -41.4166665 -19.5833335 -19.4166665 277 0 2670 --41.4166665 -41.2499995 -19.5833335 -19.4166665 199 0 2670 --41.2500005 -41.0833335 -19.5833335 -19.4166665 156 0 2670 --41.0833335 -40.9166665 -19.5833335 -19.4166665 67 0 2670 --40.9166665 -40.7499995 -19.5833335 -19.4166665 451 0 2670 --40.7500005 -40.5833335 -19.5833335 -19.4166665 152 0 2670 --40.5833335 -40.4166665 -19.5833335 -19.4166665 126 0 2670 --40.4166665 -40.2499995 -19.5833335 -19.4166665 32 0 2670 --40.2500005 -40.0833335 -19.5833335 -19.4166665 30 0 2670 --40.0833335 -39.9166665 -19.5833335 -19.4166665 17 0 2670 --65.0833335 -64.9166665 -19.7500005 -19.5833335 3089 0 2670 --64.9166665 -64.7499995 -19.7500005 -19.5833335 2206 0 2670 --64.7500005 -64.5833335 -19.7500005 -19.5833335 3192 0 2670 --64.5833335 -64.4166665 -19.7500005 -19.5833335 2169 0 2670 --64.4166665 -64.2499995 -19.7500005 -19.5833335 1820 0 2670 --64.2500005 -64.0833335 -19.7500005 -19.5833335 2088 0 2670 --64.0833335 -63.9166665 -19.7500005 -19.5833335 1807 0 2670 --63.9166665 -63.7499995 -19.7500005 -19.5833335 1043 0 2670 --63.7500005 -63.5833335 -19.7500005 -19.5833335 927 0 2670 --63.5833335 -63.4166665 -19.7500005 -19.5833335 1012 0 2670 --63.4166665 -63.2499995 -19.7500005 -19.5833335 1411 0 2670 --63.2500005 -63.0833335 -19.7500005 -19.5833335 772 0 2670 --63.0833335 -62.9166665 -19.7500005 -19.5833335 616 0 2670 --62.9166665 -62.7499995 -19.7500005 -19.5833335 529 0 2670 --62.7500005 -62.5833335 -19.7500005 -19.5833335 467 0 2670 --62.5833335 -62.4166665 -19.7500005 -19.5833335 444 0 2670 --62.4166665 -62.2499995 -19.7500005 -19.5833335 420 0 2670 --62.2500005 -62.0833335 -19.7500005 -19.5833335 396 0 2670 --62.0833335 -61.9166665 -19.7500005 -19.5833335 371 0 2670 --61.9166665 -61.7499995 -19.7500005 -19.5833335 425 0 2670 --61.7500005 -61.5833335 -19.7500005 -19.5833335 393 0 2670 --61.5833335 -61.4166665 -19.7500005 -19.5833335 346 0 2670 --61.4166665 -61.2499995 -19.7500005 -19.5833335 290 0 2670 --61.2500005 -61.0833335 -19.7500005 -19.5833335 273 0 2670 --61.0833335 -60.9166665 -19.7500005 -19.5833335 269 0 2670 --60.9166665 -60.7499995 -19.7500005 -19.5833335 237 0 2670 --60.7500005 -60.5833335 -19.7500005 -19.5833335 221 0 2670 --60.5833335 -60.4166665 -19.7500005 -19.5833335 207 0 2670 --60.4166665 -60.2499995 -19.7500005 -19.5833335 189 0 2670 --60.2500005 -60.0833335 -19.7500005 -19.5833335 209 0 2670 --60.0833335 -59.9166665 -19.7500005 -19.5833335 164 0 2670 --59.9166665 -59.7499995 -19.7500005 -19.5833335 137 0 2670 --59.7500005 -59.5833335 -19.7500005 -19.5833335 129 0 2670 --59.5833335 -59.4166665 -19.7500005 -19.5833335 119 0 2670 --59.4166665 -59.2499995 -19.7500005 -19.5833335 136 0 2670 --59.2500005 -59.0833335 -19.7500005 -19.5833335 168 0 2670 --59.0833335 -58.9166665 -19.7500005 -19.5833335 203 0 2670 --58.9166665 -58.7499995 -19.7500005 -19.5833335 176 0 2670 --58.7500005 -58.5833335 -19.7500005 -19.5833335 111 0 2670 --58.5833335 -58.4166665 -19.7500005 -19.5833335 84 0 2670 --58.4166665 -58.2499995 -19.7500005 -19.5833335 82 0 2670 --58.2500005 -58.0833335 -19.7500005 -19.5833335 81 0 2670 --58.0833335 -57.9166665 -19.7500005 -19.5833335 82 0 2670 --57.9166665 -57.7499995 -19.7500005 -19.5833335 81 0 2670 --57.7500005 -57.5833335 -19.7500005 -19.5833335 83 0 2670 --57.5833335 -57.4166665 -19.7500005 -19.5833335 84 0 2670 --57.4166665 -57.2499995 -19.7500005 -19.5833335 87 0 2670 --57.2500005 -57.0833335 -19.7500005 -19.5833335 89 0 2670 --57.0833335 -56.9166665 -19.7500005 -19.5833335 99 0 2670 --56.9166665 -56.7499995 -19.7500005 -19.5833335 93 0 2670 --56.7500005 -56.5833335 -19.7500005 -19.5833335 96 0 2670 --56.5833335 -56.4166665 -19.7500005 -19.5833335 101 0 2670 --56.4166665 -56.2499995 -19.7500005 -19.5833335 106 0 2670 --56.2500005 -56.0833335 -19.7500005 -19.5833335 109 0 2670 --56.0833335 -55.9166665 -19.7500005 -19.5833335 111 0 2670 --55.9166665 -55.7499995 -19.7500005 -19.5833335 117 0 2670 --55.7500005 -55.5833335 -19.7500005 -19.5833335 117 0 2670 --55.5833335 -55.4166665 -19.7500005 -19.5833335 119 0 2670 --55.4166665 -55.2499995 -19.7500005 -19.5833335 230 0 2670 --55.2500005 -55.0833335 -19.7500005 -19.5833335 354 0 2670 --55.0833335 -54.9166665 -19.7500005 -19.5833335 388 0 2670 --54.9166665 -54.7499995 -19.7500005 -19.5833335 535 0 2670 --54.7500005 -54.5833335 -19.7500005 -19.5833335 367 0 2670 --54.5833335 -54.4166665 -19.7500005 -19.5833335 472 0 2670 --54.4166665 -54.2499995 -19.7500005 -19.5833335 679 0 2670 --54.2500005 -54.0833335 -19.7500005 -19.5833335 600 0 2670 --54.0833335 -53.9166665 -19.7500005 -19.5833335 536 0 2670 --53.9166665 -53.7499995 -19.7500005 -19.5833335 632 0 2670 --53.7500005 -53.5833335 -19.7500005 -19.5833335 554 0 2670 --53.5833335 -53.4166665 -19.7500005 -19.5833335 442 0 2670 --53.4166665 -53.2499995 -19.7500005 -19.5833335 556 0 2670 --53.2500005 -53.0833335 -19.7500005 -19.5833335 475 0 2670 --53.0833335 -52.9166665 -19.7500005 -19.5833335 521 0 2670 --52.9166665 -52.7499995 -19.7500005 -19.5833335 424 0 2670 --52.7500005 -52.5833335 -19.7500005 -19.5833335 406 0 2670 --52.5833335 -52.4166665 -19.7500005 -19.5833335 428 0 2670 --52.4166665 -52.2499995 -19.7500005 -19.5833335 358 0 2670 --52.2500005 -52.0833335 -19.7500005 -19.5833335 407 0 2670 --52.0833335 -51.9166665 -19.7500005 -19.5833335 532 0 2670 --51.9166665 -51.7499995 -19.7500005 -19.5833335 497 0 2670 --51.7500005 -51.5833335 -19.7500005 -19.5833335 493 0 2670 --51.5833335 -51.4166665 -19.7500005 -19.5833335 471 0 2670 --51.4166665 -51.2499995 -19.7500005 -19.5833335 402 0 2670 --51.2500005 -51.0833335 -19.7500005 -19.5833335 390 0 2670 --51.0833335 -50.9166665 -19.7500005 -19.5833335 379 0 2670 --50.9166665 -50.7499995 -19.7500005 -19.5833335 446 0 2670 --50.7500005 -50.5833335 -19.7500005 -19.5833335 467 0 2670 --50.5833335 -50.4166665 -19.7500005 -19.5833335 450 0 2670 --50.4166665 -50.2499995 -19.7500005 -19.5833335 437 0 2670 --50.2500005 -50.0833335 -19.7500005 -19.5833335 447 0 2670 --50.0833335 -49.9166665 -19.7500005 -19.5833335 465 0 2670 --49.9166665 -49.7499995 -19.7500005 -19.5833335 510 0 2670 --49.7500005 -49.5833335 -19.7500005 -19.5833335 492 0 2670 --49.5833335 -49.4166665 -19.7500005 -19.5833335 481 0 2670 --49.4166665 -49.2499995 -19.7500005 -19.5833335 539 0 2670 --49.2500005 -49.0833335 -19.7500005 -19.5833335 588 0 2670 --49.0833335 -48.9166665 -19.7500005 -19.5833335 698 0 2670 --48.9166665 -48.7499995 -19.7500005 -19.5833335 734 0 2670 --48.7500005 -48.5833335 -19.7500005 -19.5833335 629 0 2670 --48.5833335 -48.4166665 -19.7500005 -19.5833335 683 0 2670 --48.4166665 -48.2499995 -19.7500005 -19.5833335 704 0 2670 --48.2500005 -48.0833335 -19.7500005 -19.5833335 716 0 2670 --48.0833335 -47.9166665 -19.7500005 -19.5833335 768 0 2670 --47.9166665 -47.7499995 -19.7500005 -19.5833335 833 0 2670 --47.7500005 -47.5833335 -19.7500005 -19.5833335 1021 0 2670 --47.5833335 -47.4166665 -19.7500005 -19.5833335 1045 0 2670 --47.4166665 -47.2499995 -19.7500005 -19.5833335 1070 0 2670 --47.2500005 -47.0833335 -19.7500005 -19.5833335 1169 0 2670 --47.0833335 -46.9166665 -19.7500005 -19.5833335 982 0 2670 --46.9166665 -46.7499995 -19.7500005 -19.5833335 1042 0 2670 --46.7500005 -46.5833335 -19.7500005 -19.5833335 937 0 2670 --46.5833335 -46.4166665 -19.7500005 -19.5833335 993 0 2670 --46.4166665 -46.2499995 -19.7500005 -19.5833335 1013 0 2670 --46.2500005 -46.0833335 -19.7500005 -19.5833335 1101 0 2670 --46.0833335 -45.9166665 -19.7500005 -19.5833335 1049 0 2670 --45.9166665 -45.7499995 -19.7500005 -19.5833335 688 0 2670 --45.7500005 -45.5833335 -19.7500005 -19.5833335 648 0 2670 --45.5833335 -45.4166665 -19.7500005 -19.5833335 632 0 2670 --45.4166665 -45.2499995 -19.7500005 -19.5833335 667 0 2670 --45.2500005 -45.0833335 -19.7500005 -19.5833335 760 0 2670 --45.0833335 -44.9166665 -19.7500005 -19.5833335 766 0 2670 --44.9166665 -44.7499995 -19.7500005 -19.5833335 878 0 2670 --44.7500005 -44.5833335 -19.7500005 -19.5833335 989 0 2670 --44.5833335 -44.4166665 -19.7500005 -19.5833335 703 0 2670 --44.4166665 -44.2499995 -19.7500005 -19.5833335 793 0 2670 --44.2500005 -44.0833335 -19.7500005 -19.5833335 878 0 2670 --44.0833335 -43.9166665 -19.7500005 -19.5833335 727 0 2670 --43.9166665 -43.7499995 -19.7500005 -19.5833335 840 0 2670 --43.7500005 -43.5833335 -19.7500005 -19.5833335 766 0 2670 --43.5833335 -43.4166665 -19.7500005 -19.5833335 742 0 2670 --43.4166665 -43.2499995 -19.7500005 -19.5833335 946 0 2670 --43.2500005 -43.0833335 -19.7500005 -19.5833335 863 0 2670 --43.0833335 -42.9166665 -19.7500005 -19.5833335 689 0 2670 --42.9166665 -42.7499995 -19.7500005 -19.5833335 520 0 2670 --42.7500005 -42.5833335 -19.7500005 -19.5833335 437 0 2670 --42.5833335 -42.4166665 -19.7500005 -19.5833335 262 0 2670 --42.4166665 -42.2499995 -19.7500005 -19.5833335 511 0 2670 --42.2500005 -42.0833335 -19.7500005 -19.5833335 689 0 2670 --42.0833335 -41.9166665 -19.7500005 -19.5833335 704 0 2670 --41.9166665 -41.7499995 -19.7500005 -19.5833335 384 0 2670 --41.7500005 -41.5833335 -19.7500005 -19.5833335 596 0 2670 --41.5833335 -41.4166665 -19.7500005 -19.5833335 233 0 2670 --41.4166665 -41.2499995 -19.7500005 -19.5833335 304 0 2670 --41.2500005 -41.0833335 -19.7500005 -19.5833335 425 0 2670 --41.0833335 -40.9166665 -19.7500005 -19.5833335 354 0 2670 --40.9166665 -40.7499995 -19.7500005 -19.5833335 172 0 2670 --40.7500005 -40.5833335 -19.7500005 -19.5833335 144 0 2670 --40.5833335 -40.4166665 -19.7500005 -19.5833335 317 0 2670 --40.4166665 -40.2499995 -19.7500005 -19.5833335 144 0 2670 --40.2500005 -40.0833335 -19.7500005 -19.5833335 47 0 2670 --40.0833335 -39.9166665 -19.7500005 -19.5833335 1 0 2670 --65.0833335 -64.9166665 -19.9166665 -19.7499995 3042 0 2670 --64.9166665 -64.7499995 -19.9166665 -19.7499995 3440 0 2670 --64.7500005 -64.5833335 -19.9166665 -19.7499995 2244 0 2670 --64.5833335 -64.4166665 -19.9166665 -19.7499995 2388 0 2670 --64.4166665 -64.2499995 -19.9166665 -19.7499995 2023 0 2670 --64.2500005 -64.0833335 -19.9166665 -19.7499995 2005 0 2670 --64.0833335 -63.9166665 -19.9166665 -19.7499995 1204 0 2670 --63.9166665 -63.7499995 -19.9166665 -19.7499995 1341 0 2670 --63.7500005 -63.5833335 -19.9166665 -19.7499995 1169 0 2670 --63.5833335 -63.4166665 -19.9166665 -19.7499995 1308 0 2670 --63.4166665 -63.2499995 -19.9166665 -19.7499995 1239 0 2670 --63.2500005 -63.0833335 -19.9166665 -19.7499995 769 0 2670 --63.0833335 -62.9166665 -19.9166665 -19.7499995 620 0 2670 --62.9166665 -62.7499995 -19.9166665 -19.7499995 538 0 2670 --62.7500005 -62.5833335 -19.9166665 -19.7499995 490 0 2670 --62.5833335 -62.4166665 -19.9166665 -19.7499995 456 0 2670 --62.4166665 -62.2499995 -19.9166665 -19.7499995 427 0 2670 --62.2500005 -62.0833335 -19.9166665 -19.7499995 400 0 2670 --62.0833335 -61.9166665 -19.9166665 -19.7499995 375 0 2670 --61.9166665 -61.7499995 -19.9166665 -19.7499995 360 0 2670 --61.7500005 -61.5833335 -19.9166665 -19.7499995 388 0 2670 --61.5833335 -61.4166665 -19.9166665 -19.7499995 343 0 2670 --61.4166665 -61.2499995 -19.9166665 -19.7499995 308 0 2670 --61.2500005 -61.0833335 -19.9166665 -19.7499995 263 0 2670 --61.0833335 -60.9166665 -19.9166665 -19.7499995 231 0 2670 --60.9166665 -60.7499995 -19.9166665 -19.7499995 216 0 2670 --60.7500005 -60.5833335 -19.9166665 -19.7499995 212 0 2670 --60.5833335 -60.4166665 -19.9166665 -19.7499995 199 0 2670 --60.4166665 -60.2499995 -19.9166665 -19.7499995 187 0 2670 --60.2500005 -60.0833335 -19.9166665 -19.7499995 174 0 2670 --60.0833335 -59.9166665 -19.9166665 -19.7499995 163 0 2670 --59.9166665 -59.7499995 -19.9166665 -19.7499995 138 0 2670 --59.7500005 -59.5833335 -19.9166665 -19.7499995 127 0 2670 --59.5833335 -59.4166665 -19.9166665 -19.7499995 118 0 2670 --59.4166665 -59.2499995 -19.9166665 -19.7499995 111 0 2670 --59.2500005 -59.0833335 -19.9166665 -19.7499995 112 0 2670 --59.0833335 -58.9166665 -19.9166665 -19.7499995 122 0 2670 --58.9166665 -58.7499995 -19.9166665 -19.7499995 118 0 2670 --58.7500005 -58.5833335 -19.9166665 -19.7499995 95 0 2670 --58.5833335 -58.4166665 -19.9166665 -19.7499995 91 0 2670 --58.4166665 -58.2499995 -19.9166665 -19.7499995 81 0 2670 --58.2500005 -58.0833335 -19.9166665 -19.7499995 79 0 2670 --58.0833335 -57.9166665 -19.9166665 -19.7499995 80 0 2670 --57.9166665 -57.7499995 -19.9166665 -19.7499995 101 0 2670 --57.7500005 -57.5833335 -19.9166665 -19.7499995 84 0 2670 --57.5833335 -57.4166665 -19.9166665 -19.7499995 84 0 2670 --57.4166665 -57.2499995 -19.9166665 -19.7499995 88 0 2670 --57.2500005 -57.0833335 -19.9166665 -19.7499995 96 0 2670 --57.0833335 -56.9166665 -19.9166665 -19.7499995 108 0 2670 --56.9166665 -56.7499995 -19.9166665 -19.7499995 95 0 2670 --56.7500005 -56.5833335 -19.9166665 -19.7499995 99 0 2670 --56.5833335 -56.4166665 -19.9166665 -19.7499995 103 0 2670 --56.4166665 -56.2499995 -19.9166665 -19.7499995 111 0 2670 --56.2500005 -56.0833335 -19.9166665 -19.7499995 115 0 2670 --56.0833335 -55.9166665 -19.9166665 -19.7499995 118 0 2670 --55.9166665 -55.7499995 -19.9166665 -19.7499995 123 0 2670 --55.7500005 -55.5833335 -19.9166665 -19.7499995 129 0 2670 --55.5833335 -55.4166665 -19.9166665 -19.7499995 144 0 2670 --55.4166665 -55.2499995 -19.9166665 -19.7499995 338 0 2670 --55.2500005 -55.0833335 -19.9166665 -19.7499995 357 0 2670 --55.0833335 -54.9166665 -19.9166665 -19.7499995 362 0 2670 --54.9166665 -54.7499995 -19.9166665 -19.7499995 294 0 2670 --54.7500005 -54.5833335 -19.9166665 -19.7499995 326 0 2670 --54.5833335 -54.4166665 -19.9166665 -19.7499995 350 0 2670 --54.4166665 -54.2499995 -19.9166665 -19.7499995 652 0 2670 --54.2500005 -54.0833335 -19.9166665 -19.7499995 637 0 2670 --54.0833335 -53.9166665 -19.9166665 -19.7499995 526 0 2670 --53.9166665 -53.7499995 -19.9166665 -19.7499995 598 0 2670 --53.7500005 -53.5833335 -19.9166665 -19.7499995 573 0 2670 --53.5833335 -53.4166665 -19.9166665 -19.7499995 488 0 2670 --53.4166665 -53.2499995 -19.9166665 -19.7499995 487 0 2670 --53.2500005 -53.0833335 -19.9166665 -19.7499995 402 0 2670 --53.0833335 -52.9166665 -19.9166665 -19.7499995 457 0 2670 --52.9166665 -52.7499995 -19.9166665 -19.7499995 483 0 2670 --52.7500005 -52.5833335 -19.9166665 -19.7499995 439 0 2670 --52.5833335 -52.4166665 -19.9166665 -19.7499995 475 0 2670 --52.4166665 -52.2499995 -19.9166665 -19.7499995 417 0 2670 --52.2500005 -52.0833335 -19.9166665 -19.7499995 413 0 2670 --52.0833335 -51.9166665 -19.9166665 -19.7499995 442 0 2670 --51.9166665 -51.7499995 -19.9166665 -19.7499995 493 0 2670 --51.7500005 -51.5833335 -19.9166665 -19.7499995 520 0 2670 --51.5833335 -51.4166665 -19.9166665 -19.7499995 447 0 2670 --51.4166665 -51.2499995 -19.9166665 -19.7499995 446 0 2670 --51.2500005 -51.0833335 -19.9166665 -19.7499995 430 0 2670 --51.0833335 -50.9166665 -19.9166665 -19.7499995 344 0 2670 --50.9166665 -50.7499995 -19.9166665 -19.7499995 386 0 2670 --50.7500005 -50.5833335 -19.9166665 -19.7499995 387 0 2670 --50.5833335 -50.4166665 -19.9166665 -19.7499995 415 0 2670 --50.4166665 -50.2499995 -19.9166665 -19.7499995 420 0 2670 --50.2500005 -50.0833335 -19.9166665 -19.7499995 423 0 2670 --50.0833335 -49.9166665 -19.9166665 -19.7499995 426 0 2670 --49.9166665 -49.7499995 -19.9166665 -19.7499995 477 0 2670 --49.7500005 -49.5833335 -19.9166665 -19.7499995 419 0 2670 --49.5833335 -49.4166665 -19.9166665 -19.7499995 461 0 2670 --49.4166665 -49.2499995 -19.9166665 -19.7499995 523 0 2670 --49.2500005 -49.0833335 -19.9166665 -19.7499995 536 0 2670 --49.0833335 -48.9166665 -19.9166665 -19.7499995 576 0 2670 --48.9166665 -48.7499995 -19.9166665 -19.7499995 585 0 2670 --48.7500005 -48.5833335 -19.9166665 -19.7499995 569 0 2670 --48.5833335 -48.4166665 -19.9166665 -19.7499995 638 0 2670 --48.4166665 -48.2499995 -19.9166665 -19.7499995 559 0 2670 --48.2500005 -48.0833335 -19.9166665 -19.7499995 669 0 2670 --48.0833335 -47.9166665 -19.9166665 -19.7499995 756 0 2670 --47.9166665 -47.7499995 -19.9166665 -19.7499995 694 0 2670 --47.7500005 -47.5833335 -19.9166665 -19.7499995 735 0 2670 --47.5833335 -47.4166665 -19.9166665 -19.7499995 959 0 2670 --47.4166665 -47.2499995 -19.9166665 -19.7499995 1104 0 2670 --47.2500005 -47.0833335 -19.9166665 -19.7499995 1040 0 2670 --47.0833335 -46.9166665 -19.9166665 -19.7499995 1142 0 2670 --46.9166665 -46.7499995 -19.9166665 -19.7499995 1184 0 2670 --46.7500005 -46.5833335 -19.9166665 -19.7499995 1202 0 2670 --46.5833335 -46.4166665 -19.9166665 -19.7499995 1062 0 2670 --46.4166665 -46.2499995 -19.9166665 -19.7499995 1182 0 2670 --46.2500005 -46.0833335 -19.9166665 -19.7499995 986 0 2670 --46.0833335 -45.9166665 -19.9166665 -19.7499995 693 0 2670 --45.9166665 -45.7499995 -19.9166665 -19.7499995 675 0 2670 --45.7500005 -45.5833335 -19.9166665 -19.7499995 694 0 2670 --45.5833335 -45.4166665 -19.9166665 -19.7499995 624 0 2670 --45.4166665 -45.2499995 -19.9166665 -19.7499995 736 0 2670 --45.2500005 -45.0833335 -19.9166665 -19.7499995 777 0 2670 --45.0833335 -44.9166665 -19.9166665 -19.7499995 804 0 2670 --44.9166665 -44.7499995 -19.9166665 -19.7499995 699 0 2670 --44.7500005 -44.5833335 -19.9166665 -19.7499995 848 0 2670 --44.5833335 -44.4166665 -19.9166665 -19.7499995 832 0 2670 --44.4166665 -44.2499995 -19.9166665 -19.7499995 752 0 2670 --44.2500005 -44.0833335 -19.9166665 -19.7499995 917 0 2670 --44.0833335 -43.9166665 -19.9166665 -19.7499995 836 0 2670 --43.9166665 -43.7499995 -19.9166665 -19.7499995 795 0 2670 --43.7500005 -43.5833335 -19.9166665 -19.7499995 1185 0 2670 --43.5833335 -43.4166665 -19.9166665 -19.7499995 812 0 2670 --43.4166665 -43.2499995 -19.9166665 -19.7499995 710 0 2670 --43.2500005 -43.0833335 -19.9166665 -19.7499995 873 0 2670 --43.0833335 -42.9166665 -19.9166665 -19.7499995 654 0 2670 --42.9166665 -42.7499995 -19.9166665 -19.7499995 799 0 2670 --42.7500005 -42.5833335 -19.9166665 -19.7499995 333 0 2670 --42.5833335 -42.4166665 -19.9166665 -19.7499995 276 0 2670 --42.4166665 -42.2499995 -19.9166665 -19.7499995 576 0 2670 --42.2500005 -42.0833335 -19.9166665 -19.7499995 799 0 2670 --42.0833335 -41.9166665 -19.9166665 -19.7499995 931 0 2670 --41.9166665 -41.7499995 -19.9166665 -19.7499995 583 0 2670 --41.7500005 -41.5833335 -19.9166665 -19.7499995 481 0 2670 --41.5833335 -41.4166665 -19.9166665 -19.7499995 275 0 2670 --41.4166665 -41.2499995 -19.9166665 -19.7499995 649 0 2670 --41.2500005 -41.0833335 -19.9166665 -19.7499995 376 0 2670 --41.0833335 -40.9166665 -19.9166665 -19.7499995 361 0 2670 --40.9166665 -40.7499995 -19.9166665 -19.7499995 270 0 2670 --40.7500005 -40.5833335 -19.9166665 -19.7499995 177 0 2670 --40.5833335 -40.4166665 -19.9166665 -19.7499995 674 0 2670 --40.4166665 -40.2499995 -19.9166665 -19.7499995 65 0 2670 --40.2500005 -40.0833335 -19.9166665 -19.7499995 45 0 2670 --40.0833335 -39.9166665 -19.9166665 -19.7499995 0 -19 -1670 --65.0833335 -64.9166665 -20.0833335 -19.9166665 3229 0 2670 --64.9166665 -64.7499995 -20.0833335 -19.9166665 3833 0 2670 --64.7500005 -64.5833335 -20.0833335 -19.9166665 2391 0 2670 --64.5833335 -64.4166665 -20.0833335 -19.9166665 2972 0 2670 --64.4166665 -64.2499995 -20.0833335 -19.9166665 2600 0 2670 --64.2500005 -64.0833335 -20.0833335 -19.9166665 1973 0 2670 --64.0833335 -63.9166665 -20.0833335 -19.9166665 1261 0 2670 --63.9166665 -63.7499995 -20.0833335 -19.9166665 1532 0 2670 --63.7500005 -63.5833335 -20.0833335 -19.9166665 1013 0 2670 --63.5833335 -63.4166665 -20.0833335 -19.9166665 914 0 2670 --63.4166665 -63.2499995 -20.0833335 -19.9166665 844 0 2670 --63.2500005 -63.0833335 -20.0833335 -19.9166665 616 0 2670 --63.0833335 -62.9166665 -20.0833335 -19.9166665 572 0 2670 --62.9166665 -62.7499995 -20.0833335 -19.9166665 534 0 2670 --62.7500005 -62.5833335 -20.0833335 -19.9166665 493 0 2670 --62.5833335 -62.4166665 -20.0833335 -19.9166665 457 0 2670 --62.4166665 -62.2499995 -20.0833335 -19.9166665 427 0 2670 --62.2500005 -62.0833335 -20.0833335 -19.9166665 395 0 2670 --62.0833335 -61.9166665 -20.0833335 -19.9166665 370 0 2670 --61.9166665 -61.7499995 -20.0833335 -19.9166665 368 0 2670 --61.7500005 -61.5833335 -20.0833335 -19.9166665 356 0 2670 --61.5833335 -61.4166665 -20.0833335 -19.9166665 358 0 2670 --61.4166665 -61.2499995 -20.0833335 -19.9166665 326 0 2670 --61.2500005 -61.0833335 -20.0833335 -19.9166665 257 0 2670 --61.0833335 -60.9166665 -20.0833335 -19.9166665 250 0 2670 --60.9166665 -60.7499995 -20.0833335 -19.9166665 218 0 2670 --60.7500005 -60.5833335 -20.0833335 -19.9166665 198 0 2670 --60.5833335 -60.4166665 -20.0833335 -19.9166665 189 0 2670 --60.4166665 -60.2499995 -20.0833335 -19.9166665 181 0 2670 --60.2500005 -60.0833335 -20.0833335 -19.9166665 168 0 2670 --60.0833335 -59.9166665 -20.0833335 -19.9166665 155 0 2670 --59.9166665 -59.7499995 -20.0833335 -19.9166665 143 0 2670 --59.7500005 -59.5833335 -20.0833335 -19.9166665 132 0 2670 --59.5833335 -59.4166665 -20.0833335 -19.9166665 117 0 2670 --59.4166665 -59.2499995 -20.0833335 -19.9166665 114 0 2670 --59.2500005 -59.0833335 -20.0833335 -19.9166665 106 0 2670 --59.0833335 -58.9166665 -20.0833335 -19.9166665 101 0 2670 --58.9166665 -58.7499995 -20.0833335 -19.9166665 93 0 2670 --58.7500005 -58.5833335 -20.0833335 -19.9166665 92 0 2670 --58.5833335 -58.4166665 -20.0833335 -19.9166665 92 0 2670 --58.4166665 -58.2499995 -20.0833335 -19.9166665 85 0 2670 --58.2500005 -58.0833335 -20.0833335 -19.9166665 80 0 2670 --58.0833335 -57.9166665 -20.0833335 -19.9166665 83 0 2670 --57.9166665 -57.7499995 -20.0833335 -19.9166665 81 0 2670 --57.7500005 -57.5833335 -20.0833335 -19.9166665 81 0 2670 --57.5833335 -57.4166665 -20.0833335 -19.9166665 84 0 2670 --57.4166665 -57.2499995 -20.0833335 -19.9166665 87 0 2670 --57.2500005 -57.0833335 -20.0833335 -19.9166665 156 0 2670 --57.0833335 -56.9166665 -20.0833335 -19.9166665 273 0 2670 --56.9166665 -56.7499995 -20.0833335 -19.9166665 149 0 2670 --56.7500005 -56.5833335 -20.0833335 -19.9166665 105 0 2670 --56.5833335 -56.4166665 -20.0833335 -19.9166665 106 0 2670 --56.4166665 -56.2499995 -20.0833335 -19.9166665 160 0 2670 --56.2500005 -56.0833335 -20.0833335 -19.9166665 121 0 2670 --56.0833335 -55.9166665 -20.0833335 -19.9166665 125 0 2670 --55.9166665 -55.7499995 -20.0833335 -19.9166665 133 0 2670 --55.7500005 -55.5833335 -20.0833335 -19.9166665 141 0 2670 --55.5833335 -55.4166665 -20.0833335 -19.9166665 434 0 2670 --55.4166665 -55.2499995 -20.0833335 -19.9166665 211 0 2670 --55.2500005 -55.0833335 -20.0833335 -19.9166665 290 0 2670 --55.0833335 -54.9166665 -20.0833335 -19.9166665 310 0 2670 --54.9166665 -54.7499995 -20.0833335 -19.9166665 325 0 2670 --54.7500005 -54.5833335 -20.0833335 -19.9166665 290 0 2670 --54.5833335 -54.4166665 -20.0833335 -19.9166665 434 0 2670 --54.4166665 -54.2499995 -20.0833335 -19.9166665 631 0 2670 --54.2500005 -54.0833335 -20.0833335 -19.9166665 578 0 2670 --54.0833335 -53.9166665 -20.0833335 -19.9166665 504 0 2670 --53.9166665 -53.7499995 -20.0833335 -19.9166665 533 0 2670 --53.7500005 -53.5833335 -20.0833335 -19.9166665 556 0 2670 --53.5833335 -53.4166665 -20.0833335 -19.9166665 489 0 2670 --53.4166665 -53.2499995 -20.0833335 -19.9166665 457 0 2670 --53.2500005 -53.0833335 -20.0833335 -19.9166665 388 0 2670 --53.0833335 -52.9166665 -20.0833335 -19.9166665 421 0 2670 --52.9166665 -52.7499995 -20.0833335 -19.9166665 432 0 2670 --52.7500005 -52.5833335 -20.0833335 -19.9166665 417 0 2670 --52.5833335 -52.4166665 -20.0833335 -19.9166665 419 0 2670 --52.4166665 -52.2499995 -20.0833335 -19.9166665 407 0 2670 --52.2500005 -52.0833335 -20.0833335 -19.9166665 339 0 2670 --52.0833335 -51.9166665 -20.0833335 -19.9166665 408 0 2670 --51.9166665 -51.7499995 -20.0833335 -19.9166665 497 0 2670 --51.7500005 -51.5833335 -20.0833335 -19.9166665 415 0 2670 --51.5833335 -51.4166665 -20.0833335 -19.9166665 429 0 2670 --51.4166665 -51.2499995 -20.0833335 -19.9166665 400 0 2670 --51.2500005 -51.0833335 -20.0833335 -19.9166665 379 0 2670 --51.0833335 -50.9166665 -20.0833335 -19.9166665 323 0 2670 --50.9166665 -50.7499995 -20.0833335 -19.9166665 370 0 2670 --50.7500005 -50.5833335 -20.0833335 -19.9166665 386 0 2670 --50.5833335 -50.4166665 -20.0833335 -19.9166665 420 0 2670 --50.4166665 -50.2499995 -20.0833335 -19.9166665 473 0 2670 --50.2500005 -50.0833335 -20.0833335 -19.9166665 415 0 2670 --50.0833335 -49.9166665 -20.0833335 -19.9166665 389 0 2670 --49.9166665 -49.7499995 -20.0833335 -19.9166665 450 0 2670 --49.7500005 -49.5833335 -20.0833335 -19.9166665 445 0 2670 --49.5833335 -49.4166665 -20.0833335 -19.9166665 417 0 2670 --49.4166665 -49.2499995 -20.0833335 -19.9166665 444 0 2670 --49.2500005 -49.0833335 -20.0833335 -19.9166665 467 0 2670 --49.0833335 -48.9166665 -20.0833335 -19.9166665 524 0 2670 --48.9166665 -48.7499995 -20.0833335 -19.9166665 581 0 2670 --48.7500005 -48.5833335 -20.0833335 -19.9166665 487 0 2670 --48.5833335 -48.4166665 -20.0833335 -19.9166665 505 0 2670 --48.4166665 -48.2499995 -20.0833335 -19.9166665 553 0 2670 --48.2500005 -48.0833335 -20.0833335 -19.9166665 561 0 2670 --48.0833335 -47.9166665 -20.0833335 -19.9166665 534 0 2670 --47.9166665 -47.7499995 -20.0833335 -19.9166665 533 0 2670 --47.7500005 -47.5833335 -20.0833335 -19.9166665 549 0 2670 --47.5833335 -47.4166665 -20.0833335 -19.9166665 547 0 2670 --47.4166665 -47.2499995 -20.0833335 -19.9166665 946 0 2670 --47.2500005 -47.0833335 -20.0833335 -19.9166665 1150 0 2670 --47.0833335 -46.9166665 -20.0833335 -19.9166665 1065 0 2670 --46.9166665 -46.7499995 -20.0833335 -19.9166665 1173 0 2670 --46.7500005 -46.5833335 -20.0833335 -19.9166665 1139 0 2670 --46.5833335 -46.4166665 -20.0833335 -19.9166665 988 0 2670 --46.4166665 -46.2499995 -20.0833335 -19.9166665 981 0 2670 --46.2500005 -46.0833335 -20.0833335 -19.9166665 815 0 2670 --46.0833335 -45.9166665 -20.0833335 -19.9166665 677 0 2670 --45.9166665 -45.7499995 -20.0833335 -19.9166665 694 0 2670 --45.7500005 -45.5833335 -20.0833335 -19.9166665 667 0 2670 --45.5833335 -45.4166665 -20.0833335 -19.9166665 672 0 2670 --45.4166665 -45.2499995 -20.0833335 -19.9166665 844 0 2670 --45.2500005 -45.0833335 -20.0833335 -19.9166665 790 0 2670 --45.0833335 -44.9166665 -20.0833335 -19.9166665 768 0 2670 --44.9166665 -44.7499995 -20.0833335 -19.9166665 754 0 2670 --44.7500005 -44.5833335 -20.0833335 -19.9166665 772 0 2670 --44.5833335 -44.4166665 -20.0833335 -19.9166665 907 0 2670 --44.4166665 -44.2499995 -20.0833335 -19.9166665 800 0 2670 --44.2500005 -44.0833335 -20.0833335 -19.9166665 783 0 2670 --44.0833335 -43.9166665 -20.0833335 -19.9166665 1013 0 2670 --43.9166665 -43.7499995 -20.0833335 -19.9166665 799 0 2670 --43.7500005 -43.5833335 -20.0833335 -19.9166665 1334 0 2670 --43.5833335 -43.4166665 -20.0833335 -19.9166665 858 0 2670 --43.4166665 -43.2499995 -20.0833335 -19.9166665 730 0 2670 --43.2500005 -43.0833335 -20.0833335 -19.9166665 700 0 2670 --43.0833335 -42.9166665 -20.0833335 -19.9166665 855 0 2670 --42.9166665 -42.7499995 -20.0833335 -19.9166665 613 0 2670 --42.7500005 -42.5833335 -20.0833335 -19.9166665 276 0 2670 --42.5833335 -42.4166665 -20.0833335 -19.9166665 289 0 2670 --42.4166665 -42.2499995 -20.0833335 -19.9166665 520 0 2670 --42.2500005 -42.0833335 -20.0833335 -19.9166665 918 0 2670 --42.0833335 -41.9166665 -20.0833335 -19.9166665 793 0 2670 --41.9166665 -41.7499995 -20.0833335 -19.9166665 656 0 2670 --41.7500005 -41.5833335 -20.0833335 -19.9166665 494 0 2670 --41.5833335 -41.4166665 -20.0833335 -19.9166665 418 0 2670 --41.4166665 -41.2499995 -20.0833335 -19.9166665 665 0 2670 --41.2500005 -41.0833335 -20.0833335 -19.9166665 507 0 2670 --41.0833335 -40.9166665 -20.0833335 -19.9166665 396 0 2670 --40.9166665 -40.7499995 -20.0833335 -19.9166665 895 0 2670 --40.7500005 -40.5833335 -20.0833335 -19.9166665 750 0 2670 --40.5833335 -40.4166665 -20.0833335 -19.9166665 482 0 2670 --40.4166665 -40.2499995 -20.0833335 -19.9166665 17 0 2670 --40.2500005 -40.0833335 -20.0833335 -19.9166665 22 0 2670 --40.0833335 -39.9166665 -20.0833335 -19.9166665 0 -32 -1670 --65.0833335 -64.9166665 -20.2500005 -20.0833335 3270 0 2670 --64.9166665 -64.7499995 -20.2500005 -20.0833335 4052 0 2670 --64.7500005 -64.5833335 -20.2500005 -20.0833335 2538 0 2670 --64.5833335 -64.4166665 -20.2500005 -20.0833335 2521 0 2670 --64.4166665 -64.2499995 -20.2500005 -20.0833335 2269 0 2670 --64.2500005 -64.0833335 -20.2500005 -20.0833335 1632 0 2670 --64.0833335 -63.9166665 -20.2500005 -20.0833335 1188 0 2670 --63.9166665 -63.7499995 -20.2500005 -20.0833335 989 0 2670 --63.7500005 -63.5833335 -20.2500005 -20.0833335 970 0 2670 --63.5833335 -63.4166665 -20.2500005 -20.0833335 886 0 2670 --63.4166665 -63.2499995 -20.2500005 -20.0833335 942 0 2670 --63.2500005 -63.0833335 -20.2500005 -20.0833335 838 0 2670 --63.0833335 -62.9166665 -20.2500005 -20.0833335 601 0 2670 --62.9166665 -62.7499995 -20.2500005 -20.0833335 523 0 2670 --62.7500005 -62.5833335 -20.2500005 -20.0833335 485 0 2670 --62.5833335 -62.4166665 -20.2500005 -20.0833335 450 0 2670 --62.4166665 -62.2499995 -20.2500005 -20.0833335 420 0 2670 --62.2500005 -62.0833335 -20.2500005 -20.0833335 393 0 2670 --62.0833335 -61.9166665 -20.2500005 -20.0833335 367 0 2670 --61.9166665 -61.7499995 -20.2500005 -20.0833335 347 0 2670 --61.7500005 -61.5833335 -20.2500005 -20.0833335 316 0 2670 --61.5833335 -61.4166665 -20.2500005 -20.0833335 293 0 2670 --61.4166665 -61.2499995 -20.2500005 -20.0833335 283 0 2670 --61.2500005 -61.0833335 -20.2500005 -20.0833335 252 0 2670 --61.0833335 -60.9166665 -20.2500005 -20.0833335 232 0 2670 --60.9166665 -60.7499995 -20.2500005 -20.0833335 215 0 2670 --60.7500005 -60.5833335 -20.2500005 -20.0833335 198 0 2670 --60.5833335 -60.4166665 -20.2500005 -20.0833335 184 0 2670 --60.4166665 -60.2499995 -20.2500005 -20.0833335 172 0 2670 --60.2500005 -60.0833335 -20.2500005 -20.0833335 160 0 2670 --60.0833335 -59.9166665 -20.2500005 -20.0833335 150 0 2670 --59.9166665 -59.7499995 -20.2500005 -20.0833335 139 0 2670 --59.7500005 -59.5833335 -20.2500005 -20.0833335 128 0 2670 --59.5833335 -59.4166665 -20.2500005 -20.0833335 121 0 2670 --59.4166665 -59.2499995 -20.2500005 -20.0833335 111 0 2670 --59.2500005 -59.0833335 -20.2500005 -20.0833335 106 0 2670 --59.0833335 -58.9166665 -20.2500005 -20.0833335 102 0 2670 --58.9166665 -58.7499995 -20.2500005 -20.0833335 97 0 2670 --58.7500005 -58.5833335 -20.2500005 -20.0833335 90 0 2670 --58.5833335 -58.4166665 -20.2500005 -20.0833335 90 0 2670 --58.4166665 -58.2499995 -20.2500005 -20.0833335 87 0 2670 --58.2500005 -58.0833335 -20.2500005 -20.0833335 80 0 2670 --58.0833335 -57.9166665 -20.2500005 -20.0833335 81 0 2670 --57.9166665 -57.7499995 -20.2500005 -20.0833335 80 0 2670 --57.7500005 -57.5833335 -20.2500005 -20.0833335 82 0 2670 --57.5833335 -57.4166665 -20.2500005 -20.0833335 85 0 2670 --57.4166665 -57.2499995 -20.2500005 -20.0833335 84 0 2670 --57.2500005 -57.0833335 -20.2500005 -20.0833335 123 0 2670 --57.0833335 -56.9166665 -20.2500005 -20.0833335 542 0 2670 --56.9166665 -56.7499995 -20.2500005 -20.0833335 304 0 2670 --56.7500005 -56.5833335 -20.2500005 -20.0833335 115 0 2670 --56.5833335 -56.4166665 -20.2500005 -20.0833335 114 0 2670 --56.4166665 -56.2499995 -20.2500005 -20.0833335 156 0 2670 --56.2500005 -56.0833335 -20.2500005 -20.0833335 157 0 2670 --56.0833335 -55.9166665 -20.2500005 -20.0833335 131 0 2670 --55.9166665 -55.7499995 -20.2500005 -20.0833335 141 0 2670 --55.7500005 -55.5833335 -20.2500005 -20.0833335 213 0 2670 --55.5833335 -55.4166665 -20.2500005 -20.0833335 212 0 2670 --55.4166665 -55.2499995 -20.2500005 -20.0833335 457 0 2670 --55.2500005 -55.0833335 -20.2500005 -20.0833335 221 0 2670 --55.0833335 -54.9166665 -20.2500005 -20.0833335 237 0 2670 --54.9166665 -54.7499995 -20.2500005 -20.0833335 273 0 2670 --54.7500005 -54.5833335 -20.2500005 -20.0833335 435 0 2670 --54.5833335 -54.4166665 -20.2500005 -20.0833335 615 0 2670 --54.4166665 -54.2499995 -20.2500005 -20.0833335 616 0 2670 --54.2500005 -54.0833335 -20.2500005 -20.0833335 573 0 2670 --54.0833335 -53.9166665 -20.2500005 -20.0833335 546 0 2670 --53.9166665 -53.7499995 -20.2500005 -20.0833335 461 0 2670 --53.7500005 -53.5833335 -20.2500005 -20.0833335 439 0 2670 --53.5833335 -53.4166665 -20.2500005 -20.0833335 516 0 2670 --53.4166665 -53.2499995 -20.2500005 -20.0833335 493 0 2670 --53.2500005 -53.0833335 -20.2500005 -20.0833335 398 0 2670 --53.0833335 -52.9166665 -20.2500005 -20.0833335 360 0 2670 --52.9166665 -52.7499995 -20.2500005 -20.0833335 426 0 2670 --52.7500005 -52.5833335 -20.2500005 -20.0833335 439 0 2670 --52.5833335 -52.4166665 -20.2500005 -20.0833335 367 0 2670 --52.4166665 -52.2499995 -20.2500005 -20.0833335 401 0 2670 --52.2500005 -52.0833335 -20.2500005 -20.0833335 362 0 2670 --52.0833335 -51.9166665 -20.2500005 -20.0833335 399 0 2670 --51.9166665 -51.7499995 -20.2500005 -20.0833335 444 0 2670 --51.7500005 -51.5833335 -20.2500005 -20.0833335 368 0 2670 --51.5833335 -51.4166665 -20.2500005 -20.0833335 396 0 2670 --51.4166665 -51.2499995 -20.2500005 -20.0833335 427 0 2670 --51.2500005 -51.0833335 -20.2500005 -20.0833335 336 0 2670 --51.0833335 -50.9166665 -20.2500005 -20.0833335 343 0 2670 --50.9166665 -50.7499995 -20.2500005 -20.0833335 425 0 2670 --50.7500005 -50.5833335 -20.2500005 -20.0833335 429 0 2670 --50.5833335 -50.4166665 -20.2500005 -20.0833335 460 0 2670 --50.4166665 -50.2499995 -20.2500005 -20.0833335 475 0 2670 --50.2500005 -50.0833335 -20.2500005 -20.0833335 469 0 2670 --50.0833335 -49.9166665 -20.2500005 -20.0833335 460 0 2670 --49.9166665 -49.7499995 -20.2500005 -20.0833335 476 0 2670 --49.7500005 -49.5833335 -20.2500005 -20.0833335 420 0 2670 --49.5833335 -49.4166665 -20.2500005 -20.0833335 472 0 2670 --49.4166665 -49.2499995 -20.2500005 -20.0833335 446 0 2670 --49.2500005 -49.0833335 -20.2500005 -20.0833335 458 0 2670 --49.0833335 -48.9166665 -20.2500005 -20.0833335 455 0 2670 --48.9166665 -48.7499995 -20.2500005 -20.0833335 446 0 2670 --48.7500005 -48.5833335 -20.2500005 -20.0833335 442 0 2670 --48.5833335 -48.4166665 -20.2500005 -20.0833335 499 0 2670 --48.4166665 -48.2499995 -20.2500005 -20.0833335 492 0 2670 --48.2500005 -48.0833335 -20.2500005 -20.0833335 542 0 2670 --48.0833335 -47.9166665 -20.2500005 -20.0833335 542 0 2670 --47.9166665 -47.7499995 -20.2500005 -20.0833335 570 0 2670 --47.7500005 -47.5833335 -20.2500005 -20.0833335 726 0 2670 --47.5833335 -47.4166665 -20.2500005 -20.0833335 690 0 2670 --47.4166665 -47.2499995 -20.2500005 -20.0833335 670 0 2670 --47.2500005 -47.0833335 -20.2500005 -20.0833335 903 0 2670 --47.0833335 -46.9166665 -20.2500005 -20.0833335 1017 0 2670 --46.9166665 -46.7499995 -20.2500005 -20.0833335 1208 0 2670 --46.7500005 -46.5833335 -20.2500005 -20.0833335 1303 0 2670 --46.5833335 -46.4166665 -20.2500005 -20.0833335 1046 0 2670 --46.4166665 -46.2499995 -20.2500005 -20.0833335 780 0 2670 --46.2500005 -46.0833335 -20.2500005 -20.0833335 798 0 2670 --46.0833335 -45.9166665 -20.2500005 -20.0833335 774 0 2670 --45.9166665 -45.7499995 -20.2500005 -20.0833335 671 0 2670 --45.7500005 -45.5833335 -20.2500005 -20.0833335 665 0 2670 --45.5833335 -45.4166665 -20.2500005 -20.0833335 744 0 2670 --45.4166665 -45.2499995 -20.2500005 -20.0833335 1003 0 2670 --45.2500005 -45.0833335 -20.2500005 -20.0833335 844 0 2670 --45.0833335 -44.9166665 -20.2500005 -20.0833335 843 0 2670 --44.9166665 -44.7499995 -20.2500005 -20.0833335 779 0 2670 --44.7500005 -44.5833335 -20.2500005 -20.0833335 880 0 2670 --44.5833335 -44.4166665 -20.2500005 -20.0833335 995 0 2670 --44.4166665 -44.2499995 -20.2500005 -20.0833335 841 0 2670 --44.2500005 -44.0833335 -20.2500005 -20.0833335 783 0 2670 --44.0833335 -43.9166665 -20.2500005 -20.0833335 1030 0 2670 --43.9166665 -43.7499995 -20.2500005 -20.0833335 965 0 2670 --43.7500005 -43.5833335 -20.2500005 -20.0833335 1139 0 2670 --43.5833335 -43.4166665 -20.2500005 -20.0833335 1032 0 2670 --43.4166665 -43.2499995 -20.2500005 -20.0833335 832 0 2670 --43.2500005 -43.0833335 -20.2500005 -20.0833335 798 0 2670 --43.0833335 -42.9166665 -20.2500005 -20.0833335 571 0 2670 --42.9166665 -42.7499995 -20.2500005 -20.0833335 357 0 2670 --42.7500005 -42.5833335 -20.2500005 -20.0833335 419 0 2670 --42.5833335 -42.4166665 -20.2500005 -20.0833335 425 0 2670 --42.4166665 -42.2499995 -20.2500005 -20.0833335 612 0 2670 --42.2500005 -42.0833335 -20.2500005 -20.0833335 1071 0 2670 --42.0833335 -41.9166665 -20.2500005 -20.0833335 667 0 2670 --41.9166665 -41.7499995 -20.2500005 -20.0833335 716 0 2670 --41.7500005 -41.5833335 -20.2500005 -20.0833335 616 0 2670 --41.5833335 -41.4166665 -20.2500005 -20.0833335 825 0 2670 --41.4166665 -41.2499995 -20.2500005 -20.0833335 1046 0 2670 --41.2500005 -41.0833335 -20.2500005 -20.0833335 584 0 2670 --41.0833335 -40.9166665 -20.2500005 -20.0833335 1113 0 2670 --40.9166665 -40.7499995 -20.2500005 -20.0833335 955 0 2670 --40.7500005 -40.5833335 -20.2500005 -20.0833335 763 0 2670 --40.5833335 -40.4166665 -20.2500005 -20.0833335 106 0 2670 --40.4166665 -40.2499995 -20.2500005 -20.0833335 186 0 2670 --40.2500005 -40.0833335 -20.2500005 -20.0833335 0 -10 -1670 --40.0833335 -39.9166665 -20.2500005 -20.0833335 0 -38 -1670 --65.0833335 -64.9166665 -20.4166665 -20.2499995 3307 0 2670 --64.9166665 -64.7499995 -20.4166665 -20.2499995 2577 0 2670 --64.7500005 -64.5833335 -20.4166665 -20.2499995 2513 0 2670 --64.5833335 -64.4166665 -20.4166665 -20.2499995 1672 0 2670 --64.4166665 -64.2499995 -20.4166665 -20.2499995 2138 0 2670 --64.2500005 -64.0833335 -20.4166665 -20.2499995 1365 0 2670 --64.0833335 -63.9166665 -20.4166665 -20.2499995 1213 0 2670 --63.9166665 -63.7499995 -20.4166665 -20.2499995 1210 0 2670 --63.7500005 -63.5833335 -20.4166665 -20.2499995 1305 0 2670 --63.5833335 -63.4166665 -20.4166665 -20.2499995 1128 0 2670 --63.4166665 -63.2499995 -20.4166665 -20.2499995 914 0 2670 --63.2500005 -63.0833335 -20.4166665 -20.2499995 756 0 2670 --63.0833335 -62.9166665 -20.4166665 -20.2499995 610 0 2670 --62.9166665 -62.7499995 -20.4166665 -20.2499995 545 0 2670 --62.7500005 -62.5833335 -20.4166665 -20.2499995 488 0 2670 --62.5833335 -62.4166665 -20.4166665 -20.2499995 446 0 2670 --62.4166665 -62.2499995 -20.4166665 -20.2499995 414 0 2670 --62.2500005 -62.0833335 -20.4166665 -20.2499995 380 0 2670 --62.0833335 -61.9166665 -20.4166665 -20.2499995 364 0 2670 --61.9166665 -61.7499995 -20.4166665 -20.2499995 336 0 2670 --61.7500005 -61.5833335 -20.4166665 -20.2499995 313 0 2670 --61.5833335 -61.4166665 -20.4166665 -20.2499995 290 0 2670 --61.4166665 -61.2499995 -20.4166665 -20.2499995 272 0 2670 --61.2500005 -61.0833335 -20.4166665 -20.2499995 248 0 2670 --61.0833335 -60.9166665 -20.4166665 -20.2499995 228 0 2670 --60.9166665 -60.7499995 -20.4166665 -20.2499995 211 0 2670 --60.7500005 -60.5833335 -20.4166665 -20.2499995 196 0 2670 --60.5833335 -60.4166665 -20.4166665 -20.2499995 181 0 2670 --60.4166665 -60.2499995 -20.4166665 -20.2499995 550 0 2670 --60.2500005 -60.0833335 -20.4166665 -20.2499995 153 0 2670 --60.0833335 -59.9166665 -20.4166665 -20.2499995 145 0 2670 --59.9166665 -59.7499995 -20.4166665 -20.2499995 137 0 2670 --59.7500005 -59.5833335 -20.4166665 -20.2499995 126 0 2670 --59.5833335 -59.4166665 -20.4166665 -20.2499995 121 0 2670 --59.4166665 -59.2499995 -20.4166665 -20.2499995 111 0 2670 --59.2500005 -59.0833335 -20.4166665 -20.2499995 108 0 2670 --59.0833335 -58.9166665 -20.4166665 -20.2499995 101 0 2670 --58.9166665 -58.7499995 -20.4166665 -20.2499995 98 0 2670 --58.7500005 -58.5833335 -20.4166665 -20.2499995 96 0 2670 --58.5833335 -58.4166665 -20.4166665 -20.2499995 89 0 2670 --58.4166665 -58.2499995 -20.4166665 -20.2499995 91 0 2670 --58.2500005 -58.0833335 -20.4166665 -20.2499995 88 0 2670 --58.0833335 -57.9166665 -20.4166665 -20.2499995 80 0 2670 --57.9166665 -57.7499995 -20.4166665 -20.2499995 80 0 2670 --57.7500005 -57.5833335 -20.4166665 -20.2499995 82 0 2670 --57.5833335 -57.4166665 -20.4166665 -20.2499995 82 0 2670 --57.4166665 -57.2499995 -20.4166665 -20.2499995 84 0 2670 --57.2500005 -57.0833335 -20.4166665 -20.2499995 158 0 2670 --57.0833335 -56.9166665 -20.4166665 -20.2499995 263 0 2670 --56.9166665 -56.7499995 -20.4166665 -20.2499995 157 0 2670 --56.7500005 -56.5833335 -20.4166665 -20.2499995 125 0 2670 --56.5833335 -56.4166665 -20.4166665 -20.2499995 138 0 2670 --56.4166665 -56.2499995 -20.4166665 -20.2499995 141 0 2670 --56.2500005 -56.0833335 -20.4166665 -20.2499995 198 0 2670 --56.0833335 -55.9166665 -20.4166665 -20.2499995 146 0 2670 --55.9166665 -55.7499995 -20.4166665 -20.2499995 144 0 2670 --55.7500005 -55.5833335 -20.4166665 -20.2499995 398 0 2670 --55.5833335 -55.4166665 -20.4166665 -20.2499995 237 0 2670 --55.4166665 -55.2499995 -20.4166665 -20.2499995 213 0 2670 --55.2500005 -55.0833335 -20.4166665 -20.2499995 222 0 2670 --55.0833335 -54.9166665 -20.4166665 -20.2499995 269 0 2670 --54.9166665 -54.7499995 -20.4166665 -20.2499995 346 0 2670 --54.7500005 -54.5833335 -20.4166665 -20.2499995 524 0 2670 --54.5833335 -54.4166665 -20.4166665 -20.2499995 603 0 2670 --54.4166665 -54.2499995 -20.4166665 -20.2499995 618 0 2670 --54.2500005 -54.0833335 -20.4166665 -20.2499995 560 0 2670 --54.0833335 -53.9166665 -20.4166665 -20.2499995 497 0 2670 --53.9166665 -53.7499995 -20.4166665 -20.2499995 446 0 2670 --53.7500005 -53.5833335 -20.4166665 -20.2499995 481 0 2670 --53.5833335 -53.4166665 -20.4166665 -20.2499995 504 0 2670 --53.4166665 -53.2499995 -20.4166665 -20.2499995 437 0 2670 --53.2500005 -53.0833335 -20.4166665 -20.2499995 411 0 2670 --53.0833335 -52.9166665 -20.4166665 -20.2499995 356 0 2670 --52.9166665 -52.7499995 -20.4166665 -20.2499995 362 0 2670 --52.7500005 -52.5833335 -20.4166665 -20.2499995 442 0 2670 --52.5833335 -52.4166665 -20.4166665 -20.2499995 416 0 2670 --52.4166665 -52.2499995 -20.4166665 -20.2499995 404 0 2670 --52.2500005 -52.0833335 -20.4166665 -20.2499995 315 0 2670 --52.0833335 -51.9166665 -20.4166665 -20.2499995 402 0 2670 --51.9166665 -51.7499995 -20.4166665 -20.2499995 402 0 2670 --51.7500005 -51.5833335 -20.4166665 -20.2499995 379 0 2670 --51.5833335 -51.4166665 -20.4166665 -20.2499995 360 0 2670 --51.4166665 -51.2499995 -20.4166665 -20.2499995 325 0 2670 --51.2500005 -51.0833335 -20.4166665 -20.2499995 323 0 2670 --51.0833335 -50.9166665 -20.4166665 -20.2499995 359 0 2670 --50.9166665 -50.7499995 -20.4166665 -20.2499995 351 0 2670 --50.7500005 -50.5833335 -20.4166665 -20.2499995 433 0 2670 --50.5833335 -50.4166665 -20.4166665 -20.2499995 446 0 2670 --50.4166665 -50.2499995 -20.4166665 -20.2499995 442 0 2670 --50.2500005 -50.0833335 -20.4166665 -20.2499995 483 0 2670 --50.0833335 -49.9166665 -20.4166665 -20.2499995 496 0 2670 --49.9166665 -49.7499995 -20.4166665 -20.2499995 526 0 2670 --49.7500005 -49.5833335 -20.4166665 -20.2499995 481 0 2670 --49.5833335 -49.4166665 -20.4166665 -20.2499995 517 0 2670 --49.4166665 -49.2499995 -20.4166665 -20.2499995 484 0 2670 --49.2500005 -49.0833335 -20.4166665 -20.2499995 462 0 2670 --49.0833335 -48.9166665 -20.4166665 -20.2499995 494 0 2670 --48.9166665 -48.7499995 -20.4166665 -20.2499995 490 0 2670 --48.7500005 -48.5833335 -20.4166665 -20.2499995 517 0 2670 --48.5833335 -48.4166665 -20.4166665 -20.2499995 459 0 2670 --48.4166665 -48.2499995 -20.4166665 -20.2499995 512 0 2670 --48.2500005 -48.0833335 -20.4166665 -20.2499995 551 0 2670 --48.0833335 -47.9166665 -20.4166665 -20.2499995 535 0 2670 --47.9166665 -47.7499995 -20.4166665 -20.2499995 623 0 2670 --47.7500005 -47.5833335 -20.4166665 -20.2499995 769 0 2670 --47.5833335 -47.4166665 -20.4166665 -20.2499995 943 0 2670 --47.4166665 -47.2499995 -20.4166665 -20.2499995 753 0 2670 --47.2500005 -47.0833335 -20.4166665 -20.2499995 845 0 2670 --47.0833335 -46.9166665 -20.4166665 -20.2499995 669 0 2670 --46.9166665 -46.7499995 -20.4166665 -20.2499995 717 0 2670 --46.7500005 -46.5833335 -20.4166665 -20.2499995 915 0 2670 --46.5833335 -46.4166665 -20.4166665 -20.2499995 869 0 2670 --46.4166665 -46.2499995 -20.4166665 -20.2499995 851 0 2670 --46.2500005 -46.0833335 -20.4166665 -20.2499995 809 0 2670 --46.0833335 -45.9166665 -20.4166665 -20.2499995 715 0 2670 --45.9166665 -45.7499995 -20.4166665 -20.2499995 710 0 2670 --45.7500005 -45.5833335 -20.4166665 -20.2499995 689 0 2670 --45.5833335 -45.4166665 -20.4166665 -20.2499995 818 0 2670 --45.4166665 -45.2499995 -20.4166665 -20.2499995 1062 0 2670 --45.2500005 -45.0833335 -20.4166665 -20.2499995 905 0 2670 --45.0833335 -44.9166665 -20.4166665 -20.2499995 800 0 2670 --44.9166665 -44.7499995 -20.4166665 -20.2499995 795 0 2670 --44.7500005 -44.5833335 -20.4166665 -20.2499995 778 0 2670 --44.5833335 -44.4166665 -20.4166665 -20.2499995 1068 0 2670 --44.4166665 -44.2499995 -20.4166665 -20.2499995 845 0 2670 --44.2500005 -44.0833335 -20.4166665 -20.2499995 919 0 2670 --44.0833335 -43.9166665 -20.4166665 -20.2499995 1125 0 2670 --43.9166665 -43.7499995 -20.4166665 -20.2499995 1033 0 2670 --43.7500005 -43.5833335 -20.4166665 -20.2499995 1069 0 2670 --43.5833335 -43.4166665 -20.4166665 -20.2499995 1200 0 2670 --43.4166665 -43.2499995 -20.4166665 -20.2499995 790 0 2670 --43.2500005 -43.0833335 -20.4166665 -20.2499995 600 0 2670 --43.0833335 -42.9166665 -20.4166665 -20.2499995 574 0 2670 --42.9166665 -42.7499995 -20.4166665 -20.2499995 502 0 2670 --42.7500005 -42.5833335 -20.4166665 -20.2499995 414 0 2670 --42.5833335 -42.4166665 -20.4166665 -20.2499995 719 0 2670 --42.4166665 -42.2499995 -20.4166665 -20.2499995 695 0 2670 --42.2500005 -42.0833335 -20.4166665 -20.2499995 841 0 2670 --42.0833335 -41.9166665 -20.4166665 -20.2499995 949 0 2670 --41.9166665 -41.7499995 -20.4166665 -20.2499995 798 0 2670 --41.7500005 -41.5833335 -20.4166665 -20.2499995 926 0 2670 --41.5833335 -41.4166665 -20.4166665 -20.2499995 896 0 2670 --41.4166665 -41.2499995 -20.4166665 -20.2499995 1155 0 2670 --41.2500005 -41.0833335 -20.4166665 -20.2499995 863 0 2670 --41.0833335 -40.9166665 -20.4166665 -20.2499995 1038 0 2670 --40.9166665 -40.7499995 -20.4166665 -20.2499995 896 0 2670 --40.7500005 -40.5833335 -20.4166665 -20.2499995 659 0 2670 --40.5833335 -40.4166665 -20.4166665 -20.2499995 450 0 2670 --40.4166665 -40.2499995 -20.4166665 -20.2499995 15 0 2670 --40.2500005 -40.0833335 -20.4166665 -20.2499995 0 -27 -1670 --40.0833335 -39.9166665 -20.4166665 -20.2499995 0 -43 -1670 --65.0833335 -64.9166665 -20.5833335 -20.4166665 3395 0 2670 --64.9166665 -64.7499995 -20.5833335 -20.4166665 3448 0 2670 --64.7500005 -64.5833335 -20.5833335 -20.4166665 1533 0 2670 --64.5833335 -64.4166665 -20.5833335 -20.4166665 1812 0 2670 --64.4166665 -64.2499995 -20.5833335 -20.4166665 1735 0 2670 --64.2500005 -64.0833335 -20.5833335 -20.4166665 1089 0 2670 --64.0833335 -63.9166665 -20.5833335 -20.4166665 1263 0 2670 --63.9166665 -63.7499995 -20.5833335 -20.4166665 1221 0 2670 --63.7500005 -63.5833335 -20.5833335 -20.4166665 1513 0 2670 --63.5833335 -63.4166665 -20.5833335 -20.4166665 1058 0 2670 --63.4166665 -63.2499995 -20.5833335 -20.4166665 973 0 2670 --63.2500005 -63.0833335 -20.5833335 -20.4166665 778 0 2670 --63.0833335 -62.9166665 -20.5833335 -20.4166665 651 0 2670 --62.9166665 -62.7499995 -20.5833335 -20.4166665 524 0 2670 --62.7500005 -62.5833335 -20.5833335 -20.4166665 482 0 2670 --62.5833335 -62.4166665 -20.5833335 -20.4166665 437 0 2670 --62.4166665 -62.2499995 -20.5833335 -20.4166665 402 0 2670 --62.2500005 -62.0833335 -20.5833335 -20.4166665 369 0 2670 --62.0833335 -61.9166665 -20.5833335 -20.4166665 348 0 2670 --61.9166665 -61.7499995 -20.5833335 -20.4166665 324 0 2670 --61.7500005 -61.5833335 -20.5833335 -20.4166665 301 0 2670 --61.5833335 -61.4166665 -20.5833335 -20.4166665 276 0 2670 --61.4166665 -61.2499995 -20.5833335 -20.4166665 254 0 2670 --61.2500005 -61.0833335 -20.5833335 -20.4166665 229 0 2670 --61.0833335 -60.9166665 -20.5833335 -20.4166665 220 0 2670 --60.9166665 -60.7499995 -20.5833335 -20.4166665 201 0 2670 --60.7500005 -60.5833335 -20.5833335 -20.4166665 189 0 2670 --60.5833335 -60.4166665 -20.5833335 -20.4166665 174 0 2670 --60.4166665 -60.2499995 -20.5833335 -20.4166665 162 0 2670 --60.2500005 -60.0833335 -20.5833335 -20.4166665 151 0 2670 --60.0833335 -59.9166665 -20.5833335 -20.4166665 138 0 2670 --59.9166665 -59.7499995 -20.5833335 -20.4166665 132 0 2670 --59.7500005 -59.5833335 -20.5833335 -20.4166665 126 0 2670 --59.5833335 -59.4166665 -20.5833335 -20.4166665 119 0 2670 --59.4166665 -59.2499995 -20.5833335 -20.4166665 111 0 2670 --59.2500005 -59.0833335 -20.5833335 -20.4166665 107 0 2670 --59.0833335 -58.9166665 -20.5833335 -20.4166665 103 0 2670 --58.9166665 -58.7499995 -20.5833335 -20.4166665 98 0 2670 --58.7500005 -58.5833335 -20.5833335 -20.4166665 95 0 2670 --58.5833335 -58.4166665 -20.5833335 -20.4166665 93 0 2670 --58.4166665 -58.2499995 -20.5833335 -20.4166665 94 0 2670 --58.2500005 -58.0833335 -20.5833335 -20.4166665 89 0 2670 --58.0833335 -57.9166665 -20.5833335 -20.4166665 79 0 2670 --57.9166665 -57.7499995 -20.5833335 -20.4166665 80 0 2670 --57.7500005 -57.5833335 -20.5833335 -20.4166665 79 0 2670 --57.5833335 -57.4166665 -20.5833335 -20.4166665 83 0 2670 --57.4166665 -57.2499995 -20.5833335 -20.4166665 96 0 2670 --57.2500005 -57.0833335 -20.5833335 -20.4166665 210 0 2670 --57.0833335 -56.9166665 -20.5833335 -20.4166665 159 0 2670 --56.9166665 -56.7499995 -20.5833335 -20.4166665 323 0 2670 --56.7500005 -56.5833335 -20.5833335 -20.4166665 200 0 2670 --56.5833335 -56.4166665 -20.5833335 -20.4166665 183 0 2670 --56.4166665 -56.2499995 -20.5833335 -20.4166665 128 0 2670 --56.2500005 -56.0833335 -20.5833335 -20.4166665 215 0 2670 --56.0833335 -55.9166665 -20.5833335 -20.4166665 212 0 2670 --55.9166665 -55.7499995 -20.5833335 -20.4166665 158 0 2670 --55.7500005 -55.5833335 -20.5833335 -20.4166665 185 0 2670 --55.5833335 -55.4166665 -20.5833335 -20.4166665 281 0 2670 --55.4166665 -55.2499995 -20.5833335 -20.4166665 302 0 2670 --55.2500005 -55.0833335 -20.5833335 -20.4166665 248 0 2670 --55.0833335 -54.9166665 -20.5833335 -20.4166665 283 0 2670 --54.9166665 -54.7499995 -20.5833335 -20.4166665 493 0 2670 --54.7500005 -54.5833335 -20.5833335 -20.4166665 527 0 2670 --54.5833335 -54.4166665 -20.5833335 -20.4166665 632 0 2670 --54.4166665 -54.2499995 -20.5833335 -20.4166665 499 0 2670 --54.2500005 -54.0833335 -20.5833335 -20.4166665 490 0 2670 --54.0833335 -53.9166665 -20.5833335 -20.4166665 551 0 2670 --53.9166665 -53.7499995 -20.5833335 -20.4166665 453 0 2670 --53.7500005 -53.5833335 -20.5833335 -20.4166665 414 0 2670 --53.5833335 -53.4166665 -20.5833335 -20.4166665 426 0 2670 --53.4166665 -53.2499995 -20.5833335 -20.4166665 459 0 2670 --53.2500005 -53.0833335 -20.5833335 -20.4166665 370 0 2670 --53.0833335 -52.9166665 -20.5833335 -20.4166665 370 0 2670 --52.9166665 -52.7499995 -20.5833335 -20.4166665 315 0 2670 --52.7500005 -52.5833335 -20.5833335 -20.4166665 399 0 2670 --52.5833335 -52.4166665 -20.5833335 -20.4166665 400 0 2670 --52.4166665 -52.2499995 -20.5833335 -20.4166665 402 0 2670 --52.2500005 -52.0833335 -20.5833335 -20.4166665 387 0 2670 --52.0833335 -51.9166665 -20.5833335 -20.4166665 369 0 2670 --51.9166665 -51.7499995 -20.5833335 -20.4166665 382 0 2670 --51.7500005 -51.5833335 -20.5833335 -20.4166665 321 0 2670 --51.5833335 -51.4166665 -20.5833335 -20.4166665 311 0 2670 --51.4166665 -51.2499995 -20.5833335 -20.4166665 361 0 2670 --51.2500005 -51.0833335 -20.5833335 -20.4166665 326 0 2670 --51.0833335 -50.9166665 -20.5833335 -20.4166665 365 0 2670 --50.9166665 -50.7499995 -20.5833335 -20.4166665 375 0 2670 --50.7500005 -50.5833335 -20.5833335 -20.4166665 359 0 2670 --50.5833335 -50.4166665 -20.5833335 -20.4166665 352 0 2670 --50.4166665 -50.2499995 -20.5833335 -20.4166665 408 0 2670 --50.2500005 -50.0833335 -20.5833335 -20.4166665 396 0 2670 --50.0833335 -49.9166665 -20.5833335 -20.4166665 458 0 2670 --49.9166665 -49.7499995 -20.5833335 -20.4166665 499 0 2670 --49.7500005 -49.5833335 -20.5833335 -20.4166665 489 0 2670 --49.5833335 -49.4166665 -20.5833335 -20.4166665 452 0 2670 --49.4166665 -49.2499995 -20.5833335 -20.4166665 538 0 2670 --49.2500005 -49.0833335 -20.5833335 -20.4166665 482 0 2670 --49.0833335 -48.9166665 -20.5833335 -20.4166665 508 0 2670 --48.9166665 -48.7499995 -20.5833335 -20.4166665 493 0 2670 --48.7500005 -48.5833335 -20.5833335 -20.4166665 568 0 2670 --48.5833335 -48.4166665 -20.5833335 -20.4166665 513 0 2670 --48.4166665 -48.2499995 -20.5833335 -20.4166665 493 0 2670 --48.2500005 -48.0833335 -20.5833335 -20.4166665 566 0 2670 --48.0833335 -47.9166665 -20.5833335 -20.4166665 602 0 2670 --47.9166665 -47.7499995 -20.5833335 -20.4166665 573 0 2670 --47.7500005 -47.5833335 -20.5833335 -20.4166665 794 0 2670 --47.5833335 -47.4166665 -20.5833335 -20.4166665 924 0 2670 --47.4166665 -47.2499995 -20.5833335 -20.4166665 826 0 2670 --47.2500005 -47.0833335 -20.5833335 -20.4166665 1100 0 2670 --47.0833335 -46.9166665 -20.5833335 -20.4166665 1066 0 2670 --46.9166665 -46.7499995 -20.5833335 -20.4166665 740 0 2670 --46.7500005 -46.5833335 -20.5833335 -20.4166665 709 0 2670 --46.5833335 -46.4166665 -20.5833335 -20.4166665 1044 0 2670 --46.4166665 -46.2499995 -20.5833335 -20.4166665 945 0 2670 --46.2500005 -46.0833335 -20.5833335 -20.4166665 822 0 2670 --46.0833335 -45.9166665 -20.5833335 -20.4166665 814 0 2670 --45.9166665 -45.7499995 -20.5833335 -20.4166665 795 0 2670 --45.7500005 -45.5833335 -20.5833335 -20.4166665 853 0 2670 --45.5833335 -45.4166665 -20.5833335 -20.4166665 811 0 2670 --45.4166665 -45.2499995 -20.5833335 -20.4166665 936 0 2670 --45.2500005 -45.0833335 -20.5833335 -20.4166665 870 0 2670 --45.0833335 -44.9166665 -20.5833335 -20.4166665 806 0 2670 --44.9166665 -44.7499995 -20.5833335 -20.4166665 841 0 2670 --44.7500005 -44.5833335 -20.5833335 -20.4166665 898 0 2670 --44.5833335 -44.4166665 -20.5833335 -20.4166665 803 0 2670 --44.4166665 -44.2499995 -20.5833335 -20.4166665 1094 0 2670 --44.2500005 -44.0833335 -20.5833335 -20.4166665 1045 0 2670 --44.0833335 -43.9166665 -20.5833335 -20.4166665 858 0 2670 --43.9166665 -43.7499995 -20.5833335 -20.4166665 944 0 2670 --43.7500005 -43.5833335 -20.5833335 -20.4166665 1300 0 2670 --43.5833335 -43.4166665 -20.5833335 -20.4166665 1015 0 2670 --43.4166665 -43.2499995 -20.5833335 -20.4166665 750 0 2670 --43.2500005 -43.0833335 -20.5833335 -20.4166665 734 0 2670 --43.0833335 -42.9166665 -20.5833335 -20.4166665 540 0 2670 --42.9166665 -42.7499995 -20.5833335 -20.4166665 668 0 2670 --42.7500005 -42.5833335 -20.5833335 -20.4166665 480 0 2670 --42.5833335 -42.4166665 -20.5833335 -20.4166665 839 0 2670 --42.4166665 -42.2499995 -20.5833335 -20.4166665 1033 0 2670 --42.2500005 -42.0833335 -20.5833335 -20.4166665 1105 0 2670 --42.0833335 -41.9166665 -20.5833335 -20.4166665 1056 0 2670 --41.9166665 -41.7499995 -20.5833335 -20.4166665 1750 0 2670 --41.7500005 -41.5833335 -20.5833335 -20.4166665 854 0 2670 --41.5833335 -41.4166665 -20.5833335 -20.4166665 423 0 2670 --41.4166665 -41.2499995 -20.5833335 -20.4166665 473 0 2670 --41.2500005 -41.0833335 -20.5833335 -20.4166665 555 0 2670 --41.0833335 -40.9166665 -20.5833335 -20.4166665 1089 0 2670 --40.9166665 -40.7499995 -20.5833335 -20.4166665 662 0 2670 --40.7500005 -40.5833335 -20.5833335 -20.4166665 673 0 2670 --40.5833335 -40.4166665 -20.5833335 -20.4166665 21 0 2670 --40.4166665 -40.2499995 -20.5833335 -20.4166665 0 -8 -1670 --40.2500005 -40.0833335 -20.5833335 -20.4166665 0 -32 -1670 --40.0833335 -39.9166665 -20.5833335 -20.4166665 0 -60 -1670 --65.0833335 -64.9166665 -20.7500005 -20.5833335 3663 0 2670 --64.9166665 -64.7499995 -20.7500005 -20.5833335 3133 0 2670 --64.7500005 -64.5833335 -20.7500005 -20.5833335 3147 0 2670 --64.5833335 -64.4166665 -20.7500005 -20.5833335 2796 0 2670 --64.4166665 -64.2499995 -20.7500005 -20.5833335 1655 0 2670 --64.2500005 -64.0833335 -20.7500005 -20.5833335 1054 0 2670 --64.0833335 -63.9166665 -20.7500005 -20.5833335 1024 0 2670 --63.9166665 -63.7499995 -20.7500005 -20.5833335 1425 0 2670 --63.7500005 -63.5833335 -20.7500005 -20.5833335 1098 0 2670 --63.5833335 -63.4166665 -20.7500005 -20.5833335 1017 0 2670 --63.4166665 -63.2499995 -20.7500005 -20.5833335 840 0 2670 --63.2500005 -63.0833335 -20.7500005 -20.5833335 732 0 2670 --63.0833335 -62.9166665 -20.7500005 -20.5833335 587 0 2670 --62.9166665 -62.7499995 -20.7500005 -20.5833335 510 0 2670 --62.7500005 -62.5833335 -20.7500005 -20.5833335 454 0 2670 --62.5833335 -62.4166665 -20.7500005 -20.5833335 421 0 2670 --62.4166665 -62.2499995 -20.7500005 -20.5833335 389 0 2670 --62.2500005 -62.0833335 -20.7500005 -20.5833335 353 0 2670 --62.0833335 -61.9166665 -20.7500005 -20.5833335 334 0 2670 --61.9166665 -61.7499995 -20.7500005 -20.5833335 315 0 2670 --61.7500005 -61.5833335 -20.7500005 -20.5833335 285 0 2670 --61.5833335 -61.4166665 -20.7500005 -20.5833335 265 0 2670 --61.4166665 -61.2499995 -20.7500005 -20.5833335 246 0 2670 --61.2500005 -61.0833335 -20.7500005 -20.5833335 227 0 2670 --61.0833335 -60.9166665 -20.7500005 -20.5833335 211 0 2670 --60.9166665 -60.7499995 -20.7500005 -20.5833335 195 0 2670 --60.7500005 -60.5833335 -20.7500005 -20.5833335 178 0 2670 --60.5833335 -60.4166665 -20.7500005 -20.5833335 170 0 2670 --60.4166665 -60.2499995 -20.7500005 -20.5833335 156 0 2670 --60.2500005 -60.0833335 -20.7500005 -20.5833335 146 0 2670 --60.0833335 -59.9166665 -20.7500005 -20.5833335 136 0 2670 --59.9166665 -59.7499995 -20.7500005 -20.5833335 128 0 2670 --59.7500005 -59.5833335 -20.7500005 -20.5833335 123 0 2670 --59.5833335 -59.4166665 -20.7500005 -20.5833335 116 0 2670 --59.4166665 -59.2499995 -20.7500005 -20.5833335 113 0 2670 --59.2500005 -59.0833335 -20.7500005 -20.5833335 106 0 2670 --59.0833335 -58.9166665 -20.7500005 -20.5833335 104 0 2670 --58.9166665 -58.7499995 -20.7500005 -20.5833335 101 0 2670 --58.7500005 -58.5833335 -20.7500005 -20.5833335 99 0 2670 --58.5833335 -58.4166665 -20.7500005 -20.5833335 95 0 2670 --58.4166665 -58.2499995 -20.7500005 -20.5833335 90 0 2670 --58.2500005 -58.0833335 -20.7500005 -20.5833335 91 0 2670 --58.0833335 -57.9166665 -20.7500005 -20.5833335 81 0 2670 --57.9166665 -57.7499995 -20.7500005 -20.5833335 80 0 2670 --57.7500005 -57.5833335 -20.7500005 -20.5833335 81 0 2670 --57.5833335 -57.4166665 -20.7500005 -20.5833335 195 0 2670 --57.4166665 -57.2499995 -20.7500005 -20.5833335 131 0 2670 --57.2500005 -57.0833335 -20.7500005 -20.5833335 158 0 2670 --57.0833335 -56.9166665 -20.7500005 -20.5833335 351 0 2670 --56.9166665 -56.7499995 -20.7500005 -20.5833335 536 0 2670 --56.7500005 -56.5833335 -20.7500005 -20.5833335 347 0 2670 --56.5833335 -56.4166665 -20.7500005 -20.5833335 166 0 2670 --56.4166665 -56.2499995 -20.7500005 -20.5833335 200 0 2670 --56.2500005 -56.0833335 -20.7500005 -20.5833335 153 0 2670 --56.0833335 -55.9166665 -20.7500005 -20.5833335 205 0 2670 --55.9166665 -55.7499995 -20.7500005 -20.5833335 187 0 2670 --55.7500005 -55.5833335 -20.7500005 -20.5833335 286 0 2670 --55.5833335 -55.4166665 -20.7500005 -20.5833335 286 0 2670 --55.4166665 -55.2499995 -20.7500005 -20.5833335 247 0 2670 --55.2500005 -55.0833335 -20.7500005 -20.5833335 291 0 2670 --55.0833335 -54.9166665 -20.7500005 -20.5833335 305 0 2670 --54.9166665 -54.7499995 -20.7500005 -20.5833335 506 0 2670 --54.7500005 -54.5833335 -20.7500005 -20.5833335 482 0 2670 --54.5833335 -54.4166665 -20.7500005 -20.5833335 560 0 2670 --54.4166665 -54.2499995 -20.7500005 -20.5833335 595 0 2670 --54.2500005 -54.0833335 -20.7500005 -20.5833335 567 0 2670 --54.0833335 -53.9166665 -20.7500005 -20.5833335 471 0 2670 --53.9166665 -53.7499995 -20.7500005 -20.5833335 445 0 2670 --53.7500005 -53.5833335 -20.7500005 -20.5833335 370 0 2670 --53.5833335 -53.4166665 -20.7500005 -20.5833335 388 0 2670 --53.4166665 -53.2499995 -20.7500005 -20.5833335 433 0 2670 --53.2500005 -53.0833335 -20.7500005 -20.5833335 442 0 2670 --53.0833335 -52.9166665 -20.7500005 -20.5833335 404 0 2670 --52.9166665 -52.7499995 -20.7500005 -20.5833335 431 0 2670 --52.7500005 -52.5833335 -20.7500005 -20.5833335 296 0 2670 --52.5833335 -52.4166665 -20.7500005 -20.5833335 392 0 2670 --52.4166665 -52.2499995 -20.7500005 -20.5833335 351 0 2670 --52.2500005 -52.0833335 -20.7500005 -20.5833335 386 0 2670 --52.0833335 -51.9166665 -20.7500005 -20.5833335 308 0 2670 --51.9166665 -51.7499995 -20.7500005 -20.5833335 299 0 2670 --51.7500005 -51.5833335 -20.7500005 -20.5833335 315 0 2670 --51.5833335 -51.4166665 -20.7500005 -20.5833335 278 0 2670 --51.4166665 -51.2499995 -20.7500005 -20.5833335 310 0 2670 --51.2500005 -51.0833335 -20.7500005 -20.5833335 324 0 2670 --51.0833335 -50.9166665 -20.7500005 -20.5833335 344 0 2670 --50.9166665 -50.7499995 -20.7500005 -20.5833335 375 0 2670 --50.7500005 -50.5833335 -20.7500005 -20.5833335 435 0 2670 --50.5833335 -50.4166665 -20.7500005 -20.5833335 422 0 2670 --50.4166665 -50.2499995 -20.7500005 -20.5833335 435 0 2670 --50.2500005 -50.0833335 -20.7500005 -20.5833335 498 0 2670 --50.0833335 -49.9166665 -20.7500005 -20.5833335 454 0 2670 --49.9166665 -49.7499995 -20.7500005 -20.5833335 458 0 2670 --49.7500005 -49.5833335 -20.7500005 -20.5833335 528 0 2670 --49.5833335 -49.4166665 -20.7500005 -20.5833335 521 0 2670 --49.4166665 -49.2499995 -20.7500005 -20.5833335 511 0 2670 --49.2500005 -49.0833335 -20.7500005 -20.5833335 513 0 2670 --49.0833335 -48.9166665 -20.7500005 -20.5833335 518 0 2670 --48.9166665 -48.7499995 -20.7500005 -20.5833335 558 0 2670 --48.7500005 -48.5833335 -20.7500005 -20.5833335 566 0 2670 --48.5833335 -48.4166665 -20.7500005 -20.5833335 541 0 2670 --48.4166665 -48.2499995 -20.7500005 -20.5833335 470 0 2670 --48.2500005 -48.0833335 -20.7500005 -20.5833335 532 0 2670 --48.0833335 -47.9166665 -20.7500005 -20.5833335 649 0 2670 --47.9166665 -47.7499995 -20.7500005 -20.5833335 757 0 2670 --47.7500005 -47.5833335 -20.7500005 -20.5833335 666 0 2670 --47.5833335 -47.4166665 -20.7500005 -20.5833335 752 0 2670 --47.4166665 -47.2499995 -20.7500005 -20.5833335 719 0 2670 --47.2500005 -47.0833335 -20.7500005 -20.5833335 881 0 2670 --47.0833335 -46.9166665 -20.7500005 -20.5833335 796 0 2670 --46.9166665 -46.7499995 -20.7500005 -20.5833335 707 0 2670 --46.7500005 -46.5833335 -20.7500005 -20.5833335 787 0 2670 --46.5833335 -46.4166665 -20.7500005 -20.5833335 673 0 2670 --46.4166665 -46.2499995 -20.7500005 -20.5833335 689 0 2670 --46.2500005 -46.0833335 -20.7500005 -20.5833335 912 0 2670 --46.0833335 -45.9166665 -20.7500005 -20.5833335 781 0 2670 --45.9166665 -45.7499995 -20.7500005 -20.5833335 770 0 2670 --45.7500005 -45.5833335 -20.7500005 -20.5833335 809 0 2670 --45.5833335 -45.4166665 -20.7500005 -20.5833335 809 0 2670 --45.4166665 -45.2499995 -20.7500005 -20.5833335 829 0 2670 --45.2500005 -45.0833335 -20.7500005 -20.5833335 1024 0 2670 --45.0833335 -44.9166665 -20.7500005 -20.5833335 983 0 2670 --44.9166665 -44.7499995 -20.7500005 -20.5833335 959 0 2670 --44.7500005 -44.5833335 -20.7500005 -20.5833335 953 0 2670 --44.5833335 -44.4166665 -20.7500005 -20.5833335 1005 0 2670 --44.4166665 -44.2499995 -20.7500005 -20.5833335 1057 0 2670 --44.2500005 -44.0833335 -20.7500005 -20.5833335 1014 0 2670 --44.0833335 -43.9166665 -20.7500005 -20.5833335 972 0 2670 --43.9166665 -43.7499995 -20.7500005 -20.5833335 996 0 2670 --43.7500005 -43.5833335 -20.7500005 -20.5833335 860 0 2670 --43.5833335 -43.4166665 -20.7500005 -20.5833335 804 0 2670 --43.4166665 -43.2499995 -20.7500005 -20.5833335 745 0 2670 --43.2500005 -43.0833335 -20.7500005 -20.5833335 728 0 2670 --43.0833335 -42.9166665 -20.7500005 -20.5833335 642 0 2670 --42.9166665 -42.7499995 -20.7500005 -20.5833335 714 0 2670 --42.7500005 -42.5833335 -20.7500005 -20.5833335 654 0 2670 --42.5833335 -42.4166665 -20.7500005 -20.5833335 1189 0 2670 --42.4166665 -42.2499995 -20.7500005 -20.5833335 863 0 2670 --42.2500005 -42.0833335 -20.7500005 -20.5833335 758 0 2670 --42.0833335 -41.9166665 -20.7500005 -20.5833335 834 0 2670 --41.9166665 -41.7499995 -20.7500005 -20.5833335 819 0 2670 --41.7500005 -41.5833335 -20.7500005 -20.5833335 761 0 2670 --41.5833335 -41.4166665 -20.7500005 -20.5833335 264 0 2670 --41.4166665 -41.2499995 -20.7500005 -20.5833335 421 0 2670 --41.2500005 -41.0833335 -20.7500005 -20.5833335 125 0 2670 --41.0833335 -40.9166665 -20.7500005 -20.5833335 664 0 2670 --40.9166665 -40.7499995 -20.7500005 -20.5833335 648 0 2670 --40.7500005 -40.5833335 -20.7500005 -20.5833335 43 0 2670 --40.5833335 -40.4166665 -20.7500005 -20.5833335 2 0 2670 --40.4166665 -40.2499995 -20.7500005 -20.5833335 0 -16 -1670 --40.2500005 -40.0833335 -20.7500005 -20.5833335 0 -39 -1670 --40.0833335 -39.9166665 -20.7500005 -20.5833335 0 -61 -1670 --65.0833335 -64.9166665 -20.9166665 -20.7499995 2933 0 2670 --64.9166665 -64.7499995 -20.9166665 -20.7499995 2787 0 2670 --64.7500005 -64.5833335 -20.9166665 -20.7499995 2036 0 2670 --64.5833335 -64.4166665 -20.9166665 -20.7499995 2620 0 2670 --64.4166665 -64.2499995 -20.9166665 -20.7499995 1310 0 2670 --64.2500005 -64.0833335 -20.9166665 -20.7499995 927 0 2670 --64.0833335 -63.9166665 -20.9166665 -20.7499995 1071 0 2670 --63.9166665 -63.7499995 -20.9166665 -20.7499995 1135 0 2670 --63.7500005 -63.5833335 -20.9166665 -20.7499995 840 0 2670 --63.5833335 -63.4166665 -20.9166665 -20.7499995 1145 0 2670 --63.4166665 -63.2499995 -20.9166665 -20.7499995 634 0 2670 --63.2500005 -63.0833335 -20.9166665 -20.7499995 647 0 2670 --63.0833335 -62.9166665 -20.9166665 -20.7499995 558 0 2670 --62.9166665 -62.7499995 -20.9166665 -20.7499995 475 0 2670 --62.7500005 -62.5833335 -20.9166665 -20.7499995 430 0 2670 --62.5833335 -62.4166665 -20.9166665 -20.7499995 390 0 2670 --62.4166665 -62.2499995 -20.9166665 -20.7499995 373 0 2670 --62.2500005 -62.0833335 -20.9166665 -20.7499995 354 0 2670 --62.0833335 -61.9166665 -20.9166665 -20.7499995 323 0 2670 --61.9166665 -61.7499995 -20.9166665 -20.7499995 302 0 2670 --61.7500005 -61.5833335 -20.9166665 -20.7499995 280 0 2670 --61.5833335 -61.4166665 -20.9166665 -20.7499995 257 0 2670 --61.4166665 -61.2499995 -20.9166665 -20.7499995 240 0 2670 --61.2500005 -61.0833335 -20.9166665 -20.7499995 220 0 2670 --61.0833335 -60.9166665 -20.9166665 -20.7499995 202 0 2670 --60.9166665 -60.7499995 -20.9166665 -20.7499995 190 0 2670 --60.7500005 -60.5833335 -20.9166665 -20.7499995 173 0 2670 --60.5833335 -60.4166665 -20.9166665 -20.7499995 161 0 2670 --60.4166665 -60.2499995 -20.9166665 -20.7499995 149 0 2670 --60.2500005 -60.0833335 -20.9166665 -20.7499995 142 0 2670 --60.0833335 -59.9166665 -20.9166665 -20.7499995 135 0 2670 --59.9166665 -59.7499995 -20.9166665 -20.7499995 128 0 2670 --59.7500005 -59.5833335 -20.9166665 -20.7499995 122 0 2670 --59.5833335 -59.4166665 -20.9166665 -20.7499995 117 0 2670 --59.4166665 -59.2499995 -20.9166665 -20.7499995 112 0 2670 --59.2500005 -59.0833335 -20.9166665 -20.7499995 106 0 2670 --59.0833335 -58.9166665 -20.9166665 -20.7499995 101 0 2670 --58.9166665 -58.7499995 -20.9166665 -20.7499995 98 0 2670 --58.7500005 -58.5833335 -20.9166665 -20.7499995 96 0 2670 --58.5833335 -58.4166665 -20.9166665 -20.7499995 91 0 2670 --58.4166665 -58.2499995 -20.9166665 -20.7499995 89 0 2670 --58.2500005 -58.0833335 -20.9166665 -20.7499995 87 0 2670 --58.0833335 -57.9166665 -20.9166665 -20.7499995 84 0 2670 --57.9166665 -57.7499995 -20.9166665 -20.7499995 80 0 2670 --57.7500005 -57.5833335 -20.9166665 -20.7499995 86 0 2670 --57.5833335 -57.4166665 -20.9166665 -20.7499995 104 0 2670 --57.4166665 -57.2499995 -20.9166665 -20.7499995 114 0 2670 --57.2500005 -57.0833335 -20.9166665 -20.7499995 137 0 2670 --57.0833335 -56.9166665 -20.9166665 -20.7499995 214 0 2670 --56.9166665 -56.7499995 -20.9166665 -20.7499995 607 0 2670 --56.7500005 -56.5833335 -20.9166665 -20.7499995 529 0 2670 --56.5833335 -56.4166665 -20.9166665 -20.7499995 257 0 2670 --56.4166665 -56.2499995 -20.9166665 -20.7499995 331 0 2670 --56.2500005 -56.0833335 -20.9166665 -20.7499995 187 0 2670 --56.0833335 -55.9166665 -20.9166665 -20.7499995 157 0 2670 --55.9166665 -55.7499995 -20.9166665 -20.7499995 236 0 2670 --55.7500005 -55.5833335 -20.9166665 -20.7499995 211 0 2670 --55.5833335 -55.4166665 -20.9166665 -20.7499995 307 0 2670 --55.4166665 -55.2499995 -20.9166665 -20.7499995 308 0 2670 --55.2500005 -55.0833335 -20.9166665 -20.7499995 257 0 2670 --55.0833335 -54.9166665 -20.9166665 -20.7499995 319 0 2670 --54.9166665 -54.7499995 -20.9166665 -20.7499995 510 0 2670 --54.7500005 -54.5833335 -20.9166665 -20.7499995 463 0 2670 --54.5833335 -54.4166665 -20.9166665 -20.7499995 504 0 2670 --54.4166665 -54.2499995 -20.9166665 -20.7499995 514 0 2670 --54.2500005 -54.0833335 -20.9166665 -20.7499995 526 0 2670 --54.0833335 -53.9166665 -20.9166665 -20.7499995 460 0 2670 --53.9166665 -53.7499995 -20.9166665 -20.7499995 439 0 2670 --53.7500005 -53.5833335 -20.9166665 -20.7499995 450 0 2670 --53.5833335 -53.4166665 -20.9166665 -20.7499995 372 0 2670 --53.4166665 -53.2499995 -20.9166665 -20.7499995 412 0 2670 --53.2500005 -53.0833335 -20.9166665 -20.7499995 393 0 2670 --53.0833335 -52.9166665 -20.9166665 -20.7499995 421 0 2670 --52.9166665 -52.7499995 -20.9166665 -20.7499995 408 0 2670 --52.7500005 -52.5833335 -20.9166665 -20.7499995 378 0 2670 --52.5833335 -52.4166665 -20.9166665 -20.7499995 328 0 2670 --52.4166665 -52.2499995 -20.9166665 -20.7499995 339 0 2670 --52.2500005 -52.0833335 -20.9166665 -20.7499995 335 0 2670 --52.0833335 -51.9166665 -20.9166665 -20.7499995 395 0 2670 --51.9166665 -51.7499995 -20.9166665 -20.7499995 323 0 2670 --51.7500005 -51.5833335 -20.9166665 -20.7499995 273 0 2670 --51.5833335 -51.4166665 -20.9166665 -20.7499995 363 0 2670 --51.4166665 -51.2499995 -20.9166665 -20.7499995 356 0 2670 --51.2500005 -51.0833335 -20.9166665 -20.7499995 396 0 2670 --51.0833335 -50.9166665 -20.9166665 -20.7499995 341 0 2670 --50.9166665 -50.7499995 -20.9166665 -20.7499995 321 0 2670 --50.7500005 -50.5833335 -20.9166665 -20.7499995 339 0 2670 --50.5833335 -50.4166665 -20.9166665 -20.7499995 390 0 2670 --50.4166665 -50.2499995 -20.9166665 -20.7499995 378 0 2670 --50.2500005 -50.0833335 -20.9166665 -20.7499995 420 0 2670 --50.0833335 -49.9166665 -20.9166665 -20.7499995 443 0 2670 --49.9166665 -49.7499995 -20.9166665 -20.7499995 474 0 2670 --49.7500005 -49.5833335 -20.9166665 -20.7499995 504 0 2670 --49.5833335 -49.4166665 -20.9166665 -20.7499995 542 0 2670 --49.4166665 -49.2499995 -20.9166665 -20.7499995 501 0 2670 --49.2500005 -49.0833335 -20.9166665 -20.7499995 507 0 2670 --49.0833335 -48.9166665 -20.9166665 -20.7499995 506 0 2670 --48.9166665 -48.7499995 -20.9166665 -20.7499995 525 0 2670 --48.7500005 -48.5833335 -20.9166665 -20.7499995 543 0 2670 --48.5833335 -48.4166665 -20.9166665 -20.7499995 573 0 2670 --48.4166665 -48.2499995 -20.9166665 -20.7499995 539 0 2670 --48.2500005 -48.0833335 -20.9166665 -20.7499995 522 0 2670 --48.0833335 -47.9166665 -20.9166665 -20.7499995 569 0 2670 --47.9166665 -47.7499995 -20.9166665 -20.7499995 642 0 2670 --47.7500005 -47.5833335 -20.9166665 -20.7499995 830 0 2670 --47.5833335 -47.4166665 -20.9166665 -20.7499995 794 0 2670 --47.4166665 -47.2499995 -20.9166665 -20.7499995 762 0 2670 --47.2500005 -47.0833335 -20.9166665 -20.7499995 814 0 2670 --47.0833335 -46.9166665 -20.9166665 -20.7499995 848 0 2670 --46.9166665 -46.7499995 -20.9166665 -20.7499995 816 0 2670 --46.7500005 -46.5833335 -20.9166665 -20.7499995 907 0 2670 --46.5833335 -46.4166665 -20.9166665 -20.7499995 853 0 2670 --46.4166665 -46.2499995 -20.9166665 -20.7499995 832 0 2670 --46.2500005 -46.0833335 -20.9166665 -20.7499995 766 0 2670 --46.0833335 -45.9166665 -20.9166665 -20.7499995 958 0 2670 --45.9166665 -45.7499995 -20.9166665 -20.7499995 840 0 2670 --45.7500005 -45.5833335 -20.9166665 -20.7499995 789 0 2670 --45.5833335 -45.4166665 -20.9166665 -20.7499995 834 0 2670 --45.4166665 -45.2499995 -20.9166665 -20.7499995 890 0 2670 --45.2500005 -45.0833335 -20.9166665 -20.7499995 888 0 2670 --45.0833335 -44.9166665 -20.9166665 -20.7499995 966 0 2670 --44.9166665 -44.7499995 -20.9166665 -20.7499995 1072 0 2670 --44.7500005 -44.5833335 -20.9166665 -20.7499995 1056 0 2670 --44.5833335 -44.4166665 -20.9166665 -20.7499995 1103 0 2670 --44.4166665 -44.2499995 -20.9166665 -20.7499995 1116 0 2670 --44.2500005 -44.0833335 -20.9166665 -20.7499995 1052 0 2670 --44.0833335 -43.9166665 -20.9166665 -20.7499995 951 0 2670 --43.9166665 -43.7499995 -20.9166665 -20.7499995 1026 0 2670 --43.7500005 -43.5833335 -20.9166665 -20.7499995 760 0 2670 --43.5833335 -43.4166665 -20.9166665 -20.7499995 805 0 2670 --43.4166665 -43.2499995 -20.9166665 -20.7499995 750 0 2670 --43.2500005 -43.0833335 -20.9166665 -20.7499995 656 0 2670 --43.0833335 -42.9166665 -20.9166665 -20.7499995 759 0 2670 --42.9166665 -42.7499995 -20.9166665 -20.7499995 759 0 2670 --42.7500005 -42.5833335 -20.9166665 -20.7499995 788 0 2670 --42.5833335 -42.4166665 -20.9166665 -20.7499995 1201 0 2670 --42.4166665 -42.2499995 -20.9166665 -20.7499995 615 0 2670 --42.2500005 -42.0833335 -20.9166665 -20.7499995 725 0 2670 --42.0833335 -41.9166665 -20.9166665 -20.7499995 366 0 2670 --41.9166665 -41.7499995 -20.9166665 -20.7499995 699 0 2670 --41.7500005 -41.5833335 -20.9166665 -20.7499995 672 0 2670 --41.5833335 -41.4166665 -20.9166665 -20.7499995 619 0 2670 --41.4166665 -41.2499995 -20.9166665 -20.7499995 207 0 2670 --41.2500005 -41.0833335 -20.9166665 -20.7499995 79 0 2670 --41.0833335 -40.9166665 -20.9166665 -20.7499995 94 0 2670 --40.9166665 -40.7499995 -20.9166665 -20.7499995 49 0 2670 --40.7500005 -40.5833335 -20.9166665 -20.7499995 0 -1 -1670 --40.5833335 -40.4166665 -20.9166665 -20.7499995 0 -19 -1670 --40.4166665 -40.2499995 -20.9166665 -20.7499995 0 -30 -1670 --40.2500005 -40.0833335 -20.9166665 -20.7499995 0 -47 -1670 --40.0833335 -39.9166665 -20.9166665 -20.7499995 0 -969 -1670 --65.0833335 -64.9166665 -21.0833335 -20.9166665 2325 0 2670 --64.9166665 -64.7499995 -21.0833335 -20.9166665 3578 0 2670 --64.7500005 -64.5833335 -21.0833335 -20.9166665 2465 0 2670 --64.5833335 -64.4166665 -21.0833335 -20.9166665 2479 0 2670 --64.4166665 -64.2499995 -21.0833335 -20.9166665 1388 0 2670 --64.2500005 -64.0833335 -21.0833335 -20.9166665 1020 0 2670 --64.0833335 -63.9166665 -21.0833335 -20.9166665 623 0 2670 --63.9166665 -63.7499995 -21.0833335 -20.9166665 763 0 2670 --63.7500005 -63.5833335 -21.0833335 -20.9166665 700 0 2670 --63.5833335 -63.4166665 -21.0833335 -20.9166665 941 0 2670 --63.4166665 -63.2499995 -21.0833335 -20.9166665 550 0 2670 --63.2500005 -63.0833335 -21.0833335 -20.9166665 565 0 2670 --63.0833335 -62.9166665 -21.0833335 -20.9166665 552 0 2670 --62.9166665 -62.7499995 -21.0833335 -20.9166665 438 0 2670 --62.7500005 -62.5833335 -21.0833335 -20.9166665 393 0 2670 --62.5833335 -62.4166665 -21.0833335 -20.9166665 365 0 2670 --62.4166665 -62.2499995 -21.0833335 -20.9166665 348 0 2670 --62.2500005 -62.0833335 -21.0833335 -20.9166665 330 0 2670 --62.0833335 -61.9166665 -21.0833335 -20.9166665 313 0 2670 --61.9166665 -61.7499995 -21.0833335 -20.9166665 291 0 2670 --61.7500005 -61.5833335 -21.0833335 -20.9166665 266 0 2670 --61.5833335 -61.4166665 -21.0833335 -20.9166665 249 0 2670 --61.4166665 -61.2499995 -21.0833335 -20.9166665 228 0 2670 --61.2500005 -61.0833335 -21.0833335 -20.9166665 211 0 2670 --61.0833335 -60.9166665 -21.0833335 -20.9166665 194 0 2670 --60.9166665 -60.7499995 -21.0833335 -20.9166665 179 0 2670 --60.7500005 -60.5833335 -21.0833335 -20.9166665 168 0 2670 --60.5833335 -60.4166665 -21.0833335 -20.9166665 157 0 2670 --60.4166665 -60.2499995 -21.0833335 -20.9166665 148 0 2670 --60.2500005 -60.0833335 -21.0833335 -20.9166665 142 0 2670 --60.0833335 -59.9166665 -21.0833335 -20.9166665 134 0 2670 --59.9166665 -59.7499995 -21.0833335 -20.9166665 128 0 2670 --59.7500005 -59.5833335 -21.0833335 -20.9166665 124 0 2670 --59.5833335 -59.4166665 -21.0833335 -20.9166665 120 0 2670 --59.4166665 -59.2499995 -21.0833335 -20.9166665 112 0 2670 --59.2500005 -59.0833335 -21.0833335 -20.9166665 106 0 2670 --59.0833335 -58.9166665 -21.0833335 -20.9166665 104 0 2670 --58.9166665 -58.7499995 -21.0833335 -20.9166665 98 0 2670 --58.7500005 -58.5833335 -21.0833335 -20.9166665 97 0 2670 --58.5833335 -58.4166665 -21.0833335 -20.9166665 95 0 2670 --58.4166665 -58.2499995 -21.0833335 -20.9166665 90 0 2670 --58.2500005 -58.0833335 -21.0833335 -20.9166665 85 0 2670 --58.0833335 -57.9166665 -21.0833335 -20.9166665 84 0 2670 --57.9166665 -57.7499995 -21.0833335 -20.9166665 78 0 2670 --57.7500005 -57.5833335 -21.0833335 -20.9166665 91 0 2670 --57.5833335 -57.4166665 -21.0833335 -20.9166665 101 0 2670 --57.4166665 -57.2499995 -21.0833335 -20.9166665 340 0 2670 --57.2500005 -57.0833335 -21.0833335 -20.9166665 154 0 2670 --57.0833335 -56.9166665 -21.0833335 -20.9166665 211 0 2670 --56.9166665 -56.7499995 -21.0833335 -20.9166665 602 0 2670 --56.7500005 -56.5833335 -21.0833335 -20.9166665 647 0 2670 --56.5833335 -56.4166665 -21.0833335 -20.9166665 368 0 2670 --56.4166665 -56.2499995 -21.0833335 -20.9166665 273 0 2670 --56.2500005 -56.0833335 -21.0833335 -20.9166665 218 0 2670 --56.0833335 -55.9166665 -21.0833335 -20.9166665 191 0 2670 --55.9166665 -55.7499995 -21.0833335 -20.9166665 280 0 2670 --55.7500005 -55.5833335 -21.0833335 -20.9166665 290 0 2670 --55.5833335 -55.4166665 -21.0833335 -20.9166665 250 0 2670 --55.4166665 -55.2499995 -21.0833335 -20.9166665 442 0 2670 --55.2500005 -55.0833335 -21.0833335 -20.9166665 534 0 2670 --55.0833335 -54.9166665 -21.0833335 -20.9166665 452 0 2670 --54.9166665 -54.7499995 -21.0833335 -20.9166665 489 0 2670 --54.7500005 -54.5833335 -21.0833335 -20.9166665 493 0 2670 --54.5833335 -54.4166665 -21.0833335 -20.9166665 402 0 2670 --54.4166665 -54.2499995 -21.0833335 -20.9166665 472 0 2670 --54.2500005 -54.0833335 -21.0833335 -20.9166665 446 0 2670 --54.0833335 -53.9166665 -21.0833335 -20.9166665 443 0 2670 --53.9166665 -53.7499995 -21.0833335 -20.9166665 416 0 2670 --53.7500005 -53.5833335 -21.0833335 -20.9166665 429 0 2670 --53.5833335 -53.4166665 -21.0833335 -20.9166665 434 0 2670 --53.4166665 -53.2499995 -21.0833335 -20.9166665 373 0 2670 --53.2500005 -53.0833335 -21.0833335 -20.9166665 359 0 2670 --53.0833335 -52.9166665 -21.0833335 -20.9166665 435 0 2670 --52.9166665 -52.7499995 -21.0833335 -20.9166665 428 0 2670 --52.7500005 -52.5833335 -21.0833335 -20.9166665 405 0 2670 --52.5833335 -52.4166665 -21.0833335 -20.9166665 357 0 2670 --52.4166665 -52.2499995 -21.0833335 -20.9166665 363 0 2670 --52.2500005 -52.0833335 -21.0833335 -20.9166665 295 0 2670 --52.0833335 -51.9166665 -21.0833335 -20.9166665 310 0 2670 --51.9166665 -51.7499995 -21.0833335 -20.9166665 381 0 2670 --51.7500005 -51.5833335 -21.0833335 -20.9166665 273 0 2670 --51.5833335 -51.4166665 -21.0833335 -20.9166665 348 0 2670 --51.4166665 -51.2499995 -21.0833335 -20.9166665 380 0 2670 --51.2500005 -51.0833335 -21.0833335 -20.9166665 441 0 2670 --51.0833335 -50.9166665 -21.0833335 -20.9166665 349 0 2670 --50.9166665 -50.7499995 -21.0833335 -20.9166665 346 0 2670 --50.7500005 -50.5833335 -21.0833335 -20.9166665 387 0 2670 --50.5833335 -50.4166665 -21.0833335 -20.9166665 360 0 2670 --50.4166665 -50.2499995 -21.0833335 -20.9166665 367 0 2670 --50.2500005 -50.0833335 -21.0833335 -20.9166665 428 0 2670 --50.0833335 -49.9166665 -21.0833335 -20.9166665 451 0 2670 --49.9166665 -49.7499995 -21.0833335 -20.9166665 428 0 2670 --49.7500005 -49.5833335 -21.0833335 -20.9166665 468 0 2670 --49.5833335 -49.4166665 -21.0833335 -20.9166665 478 0 2670 --49.4166665 -49.2499995 -21.0833335 -20.9166665 471 0 2670 --49.2500005 -49.0833335 -21.0833335 -20.9166665 522 0 2670 --49.0833335 -48.9166665 -21.0833335 -20.9166665 557 0 2670 --48.9166665 -48.7499995 -21.0833335 -20.9166665 526 0 2670 --48.7500005 -48.5833335 -21.0833335 -20.9166665 539 0 2670 --48.5833335 -48.4166665 -21.0833335 -20.9166665 581 0 2670 --48.4166665 -48.2499995 -21.0833335 -20.9166665 619 0 2670 --48.2500005 -48.0833335 -21.0833335 -20.9166665 506 0 2670 --48.0833335 -47.9166665 -21.0833335 -20.9166665 510 0 2670 --47.9166665 -47.7499995 -21.0833335 -20.9166665 534 0 2670 --47.7500005 -47.5833335 -21.0833335 -20.9166665 828 0 2670 --47.5833335 -47.4166665 -21.0833335 -20.9166665 786 0 2670 --47.4166665 -47.2499995 -21.0833335 -20.9166665 770 0 2670 --47.2500005 -47.0833335 -21.0833335 -20.9166665 827 0 2670 --47.0833335 -46.9166665 -21.0833335 -20.9166665 1105 0 2670 --46.9166665 -46.7499995 -21.0833335 -20.9166665 1045 0 2670 --46.7500005 -46.5833335 -21.0833335 -20.9166665 958 0 2670 --46.5833335 -46.4166665 -21.0833335 -20.9166665 1031 0 2670 --46.4166665 -46.2499995 -21.0833335 -20.9166665 1110 0 2670 --46.2500005 -46.0833335 -21.0833335 -20.9166665 838 0 2670 --46.0833335 -45.9166665 -21.0833335 -20.9166665 768 0 2670 --45.9166665 -45.7499995 -21.0833335 -20.9166665 946 0 2670 --45.7500005 -45.5833335 -21.0833335 -20.9166665 1138 0 2670 --45.5833335 -45.4166665 -21.0833335 -20.9166665 775 0 2670 --45.4166665 -45.2499995 -21.0833335 -20.9166665 893 0 2670 --45.2500005 -45.0833335 -21.0833335 -20.9166665 850 0 2670 --45.0833335 -44.9166665 -21.0833335 -20.9166665 923 0 2670 --44.9166665 -44.7499995 -21.0833335 -20.9166665 943 0 2670 --44.7500005 -44.5833335 -21.0833335 -20.9166665 911 0 2670 --44.5833335 -44.4166665 -21.0833335 -20.9166665 963 0 2670 --44.4166665 -44.2499995 -21.0833335 -20.9166665 1094 0 2670 --44.2500005 -44.0833335 -21.0833335 -20.9166665 1055 0 2670 --44.0833335 -43.9166665 -21.0833335 -20.9166665 1038 0 2670 --43.9166665 -43.7499995 -21.0833335 -20.9166665 1126 0 2670 --43.7500005 -43.5833335 -21.0833335 -20.9166665 885 0 2670 --43.5833335 -43.4166665 -21.0833335 -20.9166665 736 0 2670 --43.4166665 -43.2499995 -21.0833335 -20.9166665 845 0 2670 --43.2500005 -43.0833335 -21.0833335 -20.9166665 760 0 2670 --43.0833335 -42.9166665 -21.0833335 -20.9166665 816 0 2670 --42.9166665 -42.7499995 -21.0833335 -20.9166665 382 0 2670 --42.7500005 -42.5833335 -21.0833335 -20.9166665 407 0 2670 --42.5833335 -42.4166665 -21.0833335 -20.9166665 706 0 2670 --42.4166665 -42.2499995 -21.0833335 -20.9166665 410 0 2670 --42.2500005 -42.0833335 -21.0833335 -20.9166665 445 0 2670 --42.0833335 -41.9166665 -21.0833335 -20.9166665 237 0 2670 --41.9166665 -41.7499995 -21.0833335 -20.9166665 266 0 2670 --41.7500005 -41.5833335 -21.0833335 -20.9166665 422 0 2670 --41.5833335 -41.4166665 -21.0833335 -20.9166665 555 0 2670 --41.4166665 -41.2499995 -21.0833335 -20.9166665 599 0 2670 --41.2500005 -41.0833335 -21.0833335 -20.9166665 176 0 2670 --41.0833335 -40.9166665 -21.0833335 -20.9166665 7 0 2670 --40.9166665 -40.7499995 -21.0833335 -20.9166665 5 0 2670 --40.7500005 -40.5833335 -21.0833335 -20.9166665 0 -9 -1670 --40.5833335 -40.4166665 -21.0833335 -20.9166665 0 -20 -1670 --40.4166665 -40.2499995 -21.0833335 -20.9166665 0 -34 -1670 --40.2500005 -40.0833335 -21.0833335 -20.9166665 0 -498 -1670 --40.0833335 -39.9166665 -21.0833335 -20.9166665 0 -1446 -1670 --65.0833335 -64.9166665 -21.2500005 -21.0833335 2972 0 2670 --64.9166665 -64.7499995 -21.2500005 -21.0833335 2756 0 2670 --64.7500005 -64.5833335 -21.2500005 -21.0833335 3049 0 2670 --64.5833335 -64.4166665 -21.2500005 -21.0833335 1738 0 2670 --64.4166665 -64.2499995 -21.2500005 -21.0833335 1164 0 2670 --64.2500005 -64.0833335 -21.2500005 -21.0833335 1512 0 2670 --64.0833335 -63.9166665 -21.2500005 -21.0833335 728 0 2670 --63.9166665 -63.7499995 -21.2500005 -21.0833335 821 0 2670 --63.7500005 -63.5833335 -21.2500005 -21.0833335 569 0 2670 --63.5833335 -63.4166665 -21.2500005 -21.0833335 898 0 2670 --63.4166665 -63.2499995 -21.2500005 -21.0833335 435 0 2670 --63.2500005 -63.0833335 -21.2500005 -21.0833335 472 0 2670 --63.0833335 -62.9166665 -21.2500005 -21.0833335 572 0 2670 --62.9166665 -62.7499995 -21.2500005 -21.0833335 403 0 2670 --62.7500005 -62.5833335 -21.2500005 -21.0833335 361 0 2670 --62.5833335 -62.4166665 -21.2500005 -21.0833335 333 0 2670 --62.4166665 -62.2499995 -21.2500005 -21.0833335 320 0 2670 --62.2500005 -62.0833335 -21.2500005 -21.0833335 306 0 2670 --62.0833335 -61.9166665 -21.2500005 -21.0833335 294 0 2670 --61.9166665 -61.7499995 -21.2500005 -21.0833335 277 0 2670 --61.7500005 -61.5833335 -21.2500005 -21.0833335 259 0 2670 --61.5833335 -61.4166665 -21.2500005 -21.0833335 238 0 2670 --61.4166665 -61.2499995 -21.2500005 -21.0833335 219 0 2670 --61.2500005 -61.0833335 -21.2500005 -21.0833335 202 0 2670 --61.0833335 -60.9166665 -21.2500005 -21.0833335 188 0 2670 --60.9166665 -60.7499995 -21.2500005 -21.0833335 175 0 2670 --60.7500005 -60.5833335 -21.2500005 -21.0833335 164 0 2670 --60.5833335 -60.4166665 -21.2500005 -21.0833335 154 0 2670 --60.4166665 -60.2499995 -21.2500005 -21.0833335 147 0 2670 --60.2500005 -60.0833335 -21.2500005 -21.0833335 141 0 2670 --60.0833335 -59.9166665 -21.2500005 -21.0833335 139 0 2670 --59.9166665 -59.7499995 -21.2500005 -21.0833335 134 0 2670 --59.7500005 -59.5833335 -21.2500005 -21.0833335 126 0 2670 --59.5833335 -59.4166665 -21.2500005 -21.0833335 118 0 2670 --59.4166665 -59.2499995 -21.2500005 -21.0833335 113 0 2670 --59.2500005 -59.0833335 -21.2500005 -21.0833335 111 0 2670 --59.0833335 -58.9166665 -21.2500005 -21.0833335 106 0 2670 --58.9166665 -58.7499995 -21.2500005 -21.0833335 100 0 2670 --58.7500005 -58.5833335 -21.2500005 -21.0833335 99 0 2670 --58.5833335 -58.4166665 -21.2500005 -21.0833335 95 0 2670 --58.4166665 -58.2499995 -21.2500005 -21.0833335 89 0 2670 --58.2500005 -58.0833335 -21.2500005 -21.0833335 86 0 2670 --58.0833335 -57.9166665 -21.2500005 -21.0833335 84 0 2670 --57.9166665 -57.7499995 -21.2500005 -21.0833335 84 0 2670 --57.7500005 -57.5833335 -21.2500005 -21.0833335 97 0 2670 --57.5833335 -57.4166665 -21.2500005 -21.0833335 118 0 2670 --57.4166665 -57.2499995 -21.2500005 -21.0833335 160 0 2670 --57.2500005 -57.0833335 -21.2500005 -21.0833335 176 0 2670 --57.0833335 -56.9166665 -21.2500005 -21.0833335 252 0 2670 --56.9166665 -56.7499995 -21.2500005 -21.0833335 628 0 2670 --56.7500005 -56.5833335 -21.2500005 -21.0833335 589 0 2670 --56.5833335 -56.4166665 -21.2500005 -21.0833335 332 0 2670 --56.4166665 -56.2499995 -21.2500005 -21.0833335 274 0 2670 --56.2500005 -56.0833335 -21.2500005 -21.0833335 234 0 2670 --56.0833335 -55.9166665 -21.2500005 -21.0833335 301 0 2670 --55.9166665 -55.7499995 -21.2500005 -21.0833335 195 0 2670 --55.7500005 -55.5833335 -21.2500005 -21.0833335 262 0 2670 --55.5833335 -55.4166665 -21.2500005 -21.0833335 470 0 2670 --55.4166665 -55.2499995 -21.2500005 -21.0833335 487 0 2670 --55.2500005 -55.0833335 -21.2500005 -21.0833335 548 0 2670 --55.0833335 -54.9166665 -21.2500005 -21.0833335 442 0 2670 --54.9166665 -54.7499995 -21.2500005 -21.0833335 422 0 2670 --54.7500005 -54.5833335 -21.2500005 -21.0833335 468 0 2670 --54.5833335 -54.4166665 -21.2500005 -21.0833335 522 0 2670 --54.4166665 -54.2499995 -21.2500005 -21.0833335 445 0 2670 --54.2500005 -54.0833335 -21.2500005 -21.0833335 447 0 2670 --54.0833335 -53.9166665 -21.2500005 -21.0833335 367 0 2670 --53.9166665 -53.7499995 -21.2500005 -21.0833335 441 0 2670 --53.7500005 -53.5833335 -21.2500005 -21.0833335 388 0 2670 --53.5833335 -53.4166665 -21.2500005 -21.0833335 383 0 2670 --53.4166665 -53.2499995 -21.2500005 -21.0833335 422 0 2670 --53.2500005 -53.0833335 -21.2500005 -21.0833335 331 0 2670 --53.0833335 -52.9166665 -21.2500005 -21.0833335 401 0 2670 --52.9166665 -52.7499995 -21.2500005 -21.0833335 437 0 2670 --52.7500005 -52.5833335 -21.2500005 -21.0833335 398 0 2670 --52.5833335 -52.4166665 -21.2500005 -21.0833335 398 0 2670 --52.4166665 -52.2499995 -21.2500005 -21.0833335 355 0 2670 --52.2500005 -52.0833335 -21.2500005 -21.0833335 364 0 2670 --52.0833335 -51.9166665 -21.2500005 -21.0833335 316 0 2670 --51.9166665 -51.7499995 -21.2500005 -21.0833335 273 0 2670 --51.7500005 -51.5833335 -21.2500005 -21.0833335 271 0 2670 --51.5833335 -51.4166665 -21.2500005 -21.0833335 322 0 2670 --51.4166665 -51.2499995 -21.2500005 -21.0833335 365 0 2670 --51.2500005 -51.0833335 -21.2500005 -21.0833335 400 0 2670 --51.0833335 -50.9166665 -21.2500005 -21.0833335 425 0 2670 --50.9166665 -50.7499995 -21.2500005 -21.0833335 406 0 2670 --50.7500005 -50.5833335 -21.2500005 -21.0833335 387 0 2670 --50.5833335 -50.4166665 -21.2500005 -21.0833335 382 0 2670 --50.4166665 -50.2499995 -21.2500005 -21.0833335 380 0 2670 --50.2500005 -50.0833335 -21.2500005 -21.0833335 376 0 2670 --50.0833335 -49.9166665 -21.2500005 -21.0833335 408 0 2670 --49.9166665 -49.7499995 -21.2500005 -21.0833335 397 0 2670 --49.7500005 -49.5833335 -21.2500005 -21.0833335 391 0 2670 --49.5833335 -49.4166665 -21.2500005 -21.0833335 416 0 2670 --49.4166665 -49.2499995 -21.2500005 -21.0833335 417 0 2670 --49.2500005 -49.0833335 -21.2500005 -21.0833335 459 0 2670 --49.0833335 -48.9166665 -21.2500005 -21.0833335 548 0 2670 --48.9166665 -48.7499995 -21.2500005 -21.0833335 562 0 2670 --48.7500005 -48.5833335 -21.2500005 -21.0833335 587 0 2670 --48.5833335 -48.4166665 -21.2500005 -21.0833335 595 0 2670 --48.4166665 -48.2499995 -21.2500005 -21.0833335 566 0 2670 --48.2500005 -48.0833335 -21.2500005 -21.0833335 499 0 2670 --48.0833335 -47.9166665 -21.2500005 -21.0833335 582 0 2670 --47.9166665 -47.7499995 -21.2500005 -21.0833335 561 0 2670 --47.7500005 -47.5833335 -21.2500005 -21.0833335 529 0 2670 --47.5833335 -47.4166665 -21.2500005 -21.0833335 600 0 2670 --47.4166665 -47.2499995 -21.2500005 -21.0833335 714 0 2670 --47.2500005 -47.0833335 -21.2500005 -21.0833335 926 0 2670 --47.0833335 -46.9166665 -21.2500005 -21.0833335 935 0 2670 --46.9166665 -46.7499995 -21.2500005 -21.0833335 987 0 2670 --46.7500005 -46.5833335 -21.2500005 -21.0833335 1107 0 2670 --46.5833335 -46.4166665 -21.2500005 -21.0833335 1100 0 2670 --46.4166665 -46.2499995 -21.2500005 -21.0833335 994 0 2670 --46.2500005 -46.0833335 -21.2500005 -21.0833335 918 0 2670 --46.0833335 -45.9166665 -21.2500005 -21.0833335 780 0 2670 --45.9166665 -45.7499995 -21.2500005 -21.0833335 843 0 2670 --45.7500005 -45.5833335 -21.2500005 -21.0833335 849 0 2670 --45.5833335 -45.4166665 -21.2500005 -21.0833335 851 0 2670 --45.4166665 -45.2499995 -21.2500005 -21.0833335 897 0 2670 --45.2500005 -45.0833335 -21.2500005 -21.0833335 828 0 2670 --45.0833335 -44.9166665 -21.2500005 -21.0833335 886 0 2670 --44.9166665 -44.7499995 -21.2500005 -21.0833335 901 0 2670 --44.7500005 -44.5833335 -21.2500005 -21.0833335 933 0 2670 --44.5833335 -44.4166665 -21.2500005 -21.0833335 919 0 2670 --44.4166665 -44.2499995 -21.2500005 -21.0833335 997 0 2670 --44.2500005 -44.0833335 -21.2500005 -21.0833335 956 0 2670 --44.0833335 -43.9166665 -21.2500005 -21.0833335 943 0 2670 --43.9166665 -43.7499995 -21.2500005 -21.0833335 1110 0 2670 --43.7500005 -43.5833335 -21.2500005 -21.0833335 1186 0 2670 --43.5833335 -43.4166665 -21.2500005 -21.0833335 836 0 2670 --43.4166665 -43.2499995 -21.2500005 -21.0833335 747 0 2670 --43.2500005 -43.0833335 -21.2500005 -21.0833335 605 0 2670 --43.0833335 -42.9166665 -21.2500005 -21.0833335 388 0 2670 --42.9166665 -42.7499995 -21.2500005 -21.0833335 327 0 2670 --42.7500005 -42.5833335 -21.2500005 -21.0833335 684 0 2670 --42.5833335 -42.4166665 -21.2500005 -21.0833335 265 0 2670 --42.4166665 -42.2499995 -21.2500005 -21.0833335 272 0 2670 --42.2500005 -42.0833335 -21.2500005 -21.0833335 196 0 2670 --42.0833335 -41.9166665 -21.2500005 -21.0833335 260 0 2670 --41.9166665 -41.7499995 -21.2500005 -21.0833335 158 0 2670 --41.7500005 -41.5833335 -21.2500005 -21.0833335 104 0 2670 --41.5833335 -41.4166665 -21.2500005 -21.0833335 149 0 2670 --41.4166665 -41.2499995 -21.2500005 -21.0833335 46 0 2670 --41.2500005 -41.0833335 -21.2500005 -21.0833335 58 0 2670 --41.0833335 -40.9166665 -21.2500005 -21.0833335 21 0 2670 --40.9166665 -40.7499995 -21.2500005 -21.0833335 0 -4 -1670 --40.7500005 -40.5833335 -21.2500005 -21.0833335 0 -14 -1670 --40.5833335 -40.4166665 -21.2500005 -21.0833335 0 -18 -1670 --40.4166665 -40.2499995 -21.2500005 -21.0833335 0 -41 -1670 --40.2500005 -40.0833335 -21.2500005 -21.0833335 0 -883 -1670 --40.0833335 -39.9166665 -21.2500005 -21.0833335 0 -1379 -1670 --65.0833335 -64.9166665 -21.4166665 -21.2499995 3301 0 2670 --64.9166665 -64.7499995 -21.4166665 -21.2499995 2623 0 2670 --64.7500005 -64.5833335 -21.4166665 -21.2499995 2455 0 2670 --64.5833335 -64.4166665 -21.4166665 -21.2499995 2577 0 2670 --64.4166665 -64.2499995 -21.4166665 -21.2499995 2549 0 2670 --64.2500005 -64.0833335 -21.4166665 -21.2499995 1074 0 2670 --64.0833335 -63.9166665 -21.4166665 -21.2499995 842 0 2670 --63.9166665 -63.7499995 -21.4166665 -21.2499995 767 0 2670 --63.7500005 -63.5833335 -21.4166665 -21.2499995 1088 0 2670 --63.5833335 -63.4166665 -21.4166665 -21.2499995 591 0 2670 --63.4166665 -63.2499995 -21.4166665 -21.2499995 355 0 2670 --63.2500005 -63.0833335 -21.4166665 -21.2499995 377 0 2670 --63.0833335 -62.9166665 -21.4166665 -21.2499995 532 0 2670 --62.9166665 -62.7499995 -21.4166665 -21.2499995 370 0 2670 --62.7500005 -62.5833335 -21.4166665 -21.2499995 322 0 2670 --62.5833335 -62.4166665 -21.4166665 -21.2499995 308 0 2670 --62.4166665 -62.2499995 -21.4166665 -21.2499995 293 0 2670 --62.2500005 -62.0833335 -21.4166665 -21.2499995 285 0 2670 --62.0833335 -61.9166665 -21.4166665 -21.2499995 273 0 2670 --61.9166665 -61.7499995 -21.4166665 -21.2499995 260 0 2670 --61.7500005 -61.5833335 -21.4166665 -21.2499995 244 0 2670 --61.5833335 -61.4166665 -21.4166665 -21.2499995 229 0 2670 --61.4166665 -61.2499995 -21.4166665 -21.2499995 213 0 2670 --61.2500005 -61.0833335 -21.4166665 -21.2499995 193 0 2670 --61.0833335 -60.9166665 -21.4166665 -21.2499995 185 0 2670 --60.9166665 -60.7499995 -21.4166665 -21.2499995 176 0 2670 --60.7500005 -60.5833335 -21.4166665 -21.2499995 163 0 2670 --60.5833335 -60.4166665 -21.4166665 -21.2499995 157 0 2670 --60.4166665 -60.2499995 -21.4166665 -21.2499995 152 0 2670 --60.2500005 -60.0833335 -21.4166665 -21.2499995 145 0 2670 --60.0833335 -59.9166665 -21.4166665 -21.2499995 139 0 2670 --59.9166665 -59.7499995 -21.4166665 -21.2499995 131 0 2670 --59.7500005 -59.5833335 -21.4166665 -21.2499995 127 0 2670 --59.5833335 -59.4166665 -21.4166665 -21.2499995 121 0 2670 --59.4166665 -59.2499995 -21.4166665 -21.2499995 111 0 2670 --59.2500005 -59.0833335 -21.4166665 -21.2499995 110 0 2670 --59.0833335 -58.9166665 -21.4166665 -21.2499995 107 0 2670 --58.9166665 -58.7499995 -21.4166665 -21.2499995 100 0 2670 --58.7500005 -58.5833335 -21.4166665 -21.2499995 99 0 2670 --58.5833335 -58.4166665 -21.4166665 -21.2499995 93 0 2670 --58.4166665 -58.2499995 -21.4166665 -21.2499995 94 0 2670 --58.2500005 -58.0833335 -21.4166665 -21.2499995 86 0 2670 --58.0833335 -57.9166665 -21.4166665 -21.2499995 82 0 2670 --57.9166665 -57.7499995 -21.4166665 -21.2499995 82 0 2670 --57.7500005 -57.5833335 -21.4166665 -21.2499995 95 0 2670 --57.5833335 -57.4166665 -21.4166665 -21.2499995 115 0 2670 --57.4166665 -57.2499995 -21.4166665 -21.2499995 167 0 2670 --57.2500005 -57.0833335 -21.4166665 -21.2499995 226 0 2670 --57.0833335 -56.9166665 -21.4166665 -21.2499995 258 0 2670 --56.9166665 -56.7499995 -21.4166665 -21.2499995 414 0 2670 --56.7500005 -56.5833335 -21.4166665 -21.2499995 417 0 2670 --56.5833335 -56.4166665 -21.4166665 -21.2499995 314 0 2670 --56.4166665 -56.2499995 -21.4166665 -21.2499995 266 0 2670 --56.2500005 -56.0833335 -21.4166665 -21.2499995 235 0 2670 --56.0833335 -55.9166665 -21.4166665 -21.2499995 326 0 2670 --55.9166665 -55.7499995 -21.4166665 -21.2499995 277 0 2670 --55.7500005 -55.5833335 -21.4166665 -21.2499995 423 0 2670 --55.5833335 -55.4166665 -21.4166665 -21.2499995 538 0 2670 --55.4166665 -55.2499995 -21.4166665 -21.2499995 479 0 2670 --55.2500005 -55.0833335 -21.4166665 -21.2499995 445 0 2670 --55.0833335 -54.9166665 -21.4166665 -21.2499995 420 0 2670 --54.9166665 -54.7499995 -21.4166665 -21.2499995 369 0 2670 --54.7500005 -54.5833335 -21.4166665 -21.2499995 368 0 2670 --54.5833335 -54.4166665 -21.4166665 -21.2499995 485 0 2670 --54.4166665 -54.2499995 -21.4166665 -21.2499995 472 0 2670 --54.2500005 -54.0833335 -21.4166665 -21.2499995 373 0 2670 --54.0833335 -53.9166665 -21.4166665 -21.2499995 390 0 2670 --53.9166665 -53.7499995 -21.4166665 -21.2499995 386 0 2670 --53.7500005 -53.5833335 -21.4166665 -21.2499995 383 0 2670 --53.5833335 -53.4166665 -21.4166665 -21.2499995 393 0 2670 --53.4166665 -53.2499995 -21.4166665 -21.2499995 353 0 2670 --53.2500005 -53.0833335 -21.4166665 -21.2499995 367 0 2670 --53.0833335 -52.9166665 -21.4166665 -21.2499995 390 0 2670 --52.9166665 -52.7499995 -21.4166665 -21.2499995 393 0 2670 --52.7500005 -52.5833335 -21.4166665 -21.2499995 411 0 2670 --52.5833335 -52.4166665 -21.4166665 -21.2499995 309 0 2670 --52.4166665 -52.2499995 -21.4166665 -21.2499995 326 0 2670 --52.2500005 -52.0833335 -21.4166665 -21.2499995 333 0 2670 --52.0833335 -51.9166665 -21.4166665 -21.2499995 317 0 2670 --51.9166665 -51.7499995 -21.4166665 -21.2499995 333 0 2670 --51.7500005 -51.5833335 -21.4166665 -21.2499995 375 0 2670 --51.5833335 -51.4166665 -21.4166665 -21.2499995 311 0 2670 --51.4166665 -51.2499995 -21.4166665 -21.2499995 346 0 2670 --51.2500005 -51.0833335 -21.4166665 -21.2499995 353 0 2670 --51.0833335 -50.9166665 -21.4166665 -21.2499995 363 0 2670 --50.9166665 -50.7499995 -21.4166665 -21.2499995 377 0 2670 --50.7500005 -50.5833335 -21.4166665 -21.2499995 428 0 2670 --50.5833335 -50.4166665 -21.4166665 -21.2499995 425 0 2670 --50.4166665 -50.2499995 -21.4166665 -21.2499995 404 0 2670 --50.2500005 -50.0833335 -21.4166665 -21.2499995 369 0 2670 --50.0833335 -49.9166665 -21.4166665 -21.2499995 403 0 2670 --49.9166665 -49.7499995 -21.4166665 -21.2499995 383 0 2670 --49.7500005 -49.5833335 -21.4166665 -21.2499995 381 0 2670 --49.5833335 -49.4166665 -21.4166665 -21.2499995 429 0 2670 --49.4166665 -49.2499995 -21.4166665 -21.2499995 437 0 2670 --49.2500005 -49.0833335 -21.4166665 -21.2499995 493 0 2670 --49.0833335 -48.9166665 -21.4166665 -21.2499995 510 0 2670 --48.9166665 -48.7499995 -21.4166665 -21.2499995 492 0 2670 --48.7500005 -48.5833335 -21.4166665 -21.2499995 568 0 2670 --48.5833335 -48.4166665 -21.4166665 -21.2499995 633 0 2670 --48.4166665 -48.2499995 -21.4166665 -21.2499995 591 0 2670 --48.2500005 -48.0833335 -21.4166665 -21.2499995 603 0 2670 --48.0833335 -47.9166665 -21.4166665 -21.2499995 572 0 2670 --47.9166665 -47.7499995 -21.4166665 -21.2499995 633 0 2670 --47.7500005 -47.5833335 -21.4166665 -21.2499995 625 0 2670 --47.5833335 -47.4166665 -21.4166665 -21.2499995 650 0 2670 --47.4166665 -47.2499995 -21.4166665 -21.2499995 778 0 2670 --47.2500005 -47.0833335 -21.4166665 -21.2499995 678 0 2670 --47.0833335 -46.9166665 -21.4166665 -21.2499995 635 0 2670 --46.9166665 -46.7499995 -21.4166665 -21.2499995 760 0 2670 --46.7500005 -46.5833335 -21.4166665 -21.2499995 980 0 2670 --46.5833335 -46.4166665 -21.4166665 -21.2499995 941 0 2670 --46.4166665 -46.2499995 -21.4166665 -21.2499995 842 0 2670 --46.2500005 -46.0833335 -21.4166665 -21.2499995 837 0 2670 --46.0833335 -45.9166665 -21.4166665 -21.2499995 772 0 2670 --45.9166665 -45.7499995 -21.4166665 -21.2499995 774 0 2670 --45.7500005 -45.5833335 -21.4166665 -21.2499995 865 0 2670 --45.5833335 -45.4166665 -21.4166665 -21.2499995 968 0 2670 --45.4166665 -45.2499995 -21.4166665 -21.2499995 952 0 2670 --45.2500005 -45.0833335 -21.4166665 -21.2499995 846 0 2670 --45.0833335 -44.9166665 -21.4166665 -21.2499995 1153 0 2670 --44.9166665 -44.7499995 -21.4166665 -21.2499995 915 0 2670 --44.7500005 -44.5833335 -21.4166665 -21.2499995 958 0 2670 --44.5833335 -44.4166665 -21.4166665 -21.2499995 951 0 2670 --44.4166665 -44.2499995 -21.4166665 -21.2499995 1015 0 2670 --44.2500005 -44.0833335 -21.4166665 -21.2499995 1052 0 2670 --44.0833335 -43.9166665 -21.4166665 -21.2499995 1054 0 2670 --43.9166665 -43.7499995 -21.4166665 -21.2499995 1113 0 2670 --43.7500005 -43.5833335 -21.4166665 -21.2499995 1164 0 2670 --43.5833335 -43.4166665 -21.4166665 -21.2499995 886 0 2670 --43.4166665 -43.2499995 -21.4166665 -21.2499995 646 0 2670 --43.2500005 -43.0833335 -21.4166665 -21.2499995 487 0 2670 --43.0833335 -42.9166665 -21.4166665 -21.2499995 380 0 2670 --42.9166665 -42.7499995 -21.4166665 -21.2499995 299 0 2670 --42.7500005 -42.5833335 -21.4166665 -21.2499995 234 0 2670 --42.5833335 -42.4166665 -21.4166665 -21.2499995 261 0 2670 --42.4166665 -42.2499995 -21.4166665 -21.2499995 362 0 2670 --42.2500005 -42.0833335 -21.4166665 -21.2499995 482 0 2670 --42.0833335 -41.9166665 -21.4166665 -21.2499995 179 0 2670 --41.9166665 -41.7499995 -21.4166665 -21.2499995 330 0 2670 --41.7500005 -41.5833335 -21.4166665 -21.2499995 126 0 2670 --41.5833335 -41.4166665 -21.4166665 -21.2499995 126 0 2670 --41.4166665 -41.2499995 -21.4166665 -21.2499995 71 0 2670 --41.2500005 -41.0833335 -21.4166665 -21.2499995 59 0 2670 --41.0833335 -40.9166665 -21.4166665 -21.2499995 16 0 2670 --40.9166665 -40.7499995 -21.4166665 -21.2499995 0 -12 -1670 --40.7500005 -40.5833335 -21.4166665 -21.2499995 0 -21 -1670 --40.5833335 -40.4166665 -21.4166665 -21.2499995 0 -20 -1670 --40.4166665 -40.2499995 -21.4166665 -21.2499995 0 -42 -1670 --40.2500005 -40.0833335 -21.4166665 -21.2499995 0 -758 -1670 --40.0833335 -39.9166665 -21.4166665 -21.2499995 0 -1286 -1670 --65.0833335 -64.9166665 -21.5833335 -21.4166665 3822 0 2670 --64.9166665 -64.7499995 -21.5833335 -21.4166665 2663 0 2670 --64.7500005 -64.5833335 -21.5833335 -21.4166665 2197 0 2670 --64.5833335 -64.4166665 -21.5833335 -21.4166665 2204 0 2670 --64.4166665 -64.2499995 -21.5833335 -21.4166665 2177 0 2670 --64.2500005 -64.0833335 -21.5833335 -21.4166665 1296 0 2670 --64.0833335 -63.9166665 -21.5833335 -21.4166665 1159 0 2670 --63.9166665 -63.7499995 -21.5833335 -21.4166665 936 0 2670 --63.7500005 -63.5833335 -21.5833335 -21.4166665 868 0 2670 --63.5833335 -63.4166665 -21.5833335 -21.4166665 552 0 2670 --63.4166665 -63.2499995 -21.5833335 -21.4166665 393 0 2670 --63.2500005 -63.0833335 -21.5833335 -21.4166665 455 0 2670 --63.0833335 -62.9166665 -21.5833335 -21.4166665 425 0 2670 --62.9166665 -62.7499995 -21.5833335 -21.4166665 310 0 2670 --62.7500005 -62.5833335 -21.5833335 -21.4166665 300 0 2670 --62.5833335 -62.4166665 -21.5833335 -21.4166665 288 0 2670 --62.4166665 -62.2499995 -21.5833335 -21.4166665 274 0 2670 --62.2500005 -62.0833335 -21.5833335 -21.4166665 267 0 2670 --62.0833335 -61.9166665 -21.5833335 -21.4166665 252 0 2670 --61.9166665 -61.7499995 -21.5833335 -21.4166665 242 0 2670 --61.7500005 -61.5833335 -21.5833335 -21.4166665 231 0 2670 --61.5833335 -61.4166665 -21.5833335 -21.4166665 222 0 2670 --61.4166665 -61.2499995 -21.5833335 -21.4166665 211 0 2670 --61.2500005 -61.0833335 -21.5833335 -21.4166665 197 0 2670 --61.0833335 -60.9166665 -21.5833335 -21.4166665 183 0 2670 --60.9166665 -60.7499995 -21.5833335 -21.4166665 175 0 2670 --60.7500005 -60.5833335 -21.5833335 -21.4166665 167 0 2670 --60.5833335 -60.4166665 -21.5833335 -21.4166665 162 0 2670 --60.4166665 -60.2499995 -21.5833335 -21.4166665 155 0 2670 --60.2500005 -60.0833335 -21.5833335 -21.4166665 147 0 2670 --60.0833335 -59.9166665 -21.5833335 -21.4166665 139 0 2670 --59.9166665 -59.7499995 -21.5833335 -21.4166665 130 0 2670 --59.7500005 -59.5833335 -21.5833335 -21.4166665 126 0 2670 --59.5833335 -59.4166665 -21.5833335 -21.4166665 123 0 2670 --59.4166665 -59.2499995 -21.5833335 -21.4166665 117 0 2670 --59.2500005 -59.0833335 -21.5833335 -21.4166665 108 0 2670 --59.0833335 -58.9166665 -21.5833335 -21.4166665 107 0 2670 --58.9166665 -58.7499995 -21.5833335 -21.4166665 101 0 2670 --58.7500005 -58.5833335 -21.5833335 -21.4166665 101 0 2670 --58.5833335 -58.4166665 -21.5833335 -21.4166665 99 0 2670 --58.4166665 -58.2499995 -21.5833335 -21.4166665 92 0 2670 --58.2500005 -58.0833335 -21.5833335 -21.4166665 90 0 2670 --58.0833335 -57.9166665 -21.5833335 -21.4166665 83 0 2670 --57.9166665 -57.7499995 -21.5833335 -21.4166665 81 0 2670 --57.7500005 -57.5833335 -21.5833335 -21.4166665 99 0 2670 --57.5833335 -57.4166665 -21.5833335 -21.4166665 145 0 2670 --57.4166665 -57.2499995 -21.5833335 -21.4166665 218 0 2670 --57.2500005 -57.0833335 -21.5833335 -21.4166665 321 0 2670 --57.0833335 -56.9166665 -21.5833335 -21.4166665 507 0 2670 --56.9166665 -56.7499995 -21.5833335 -21.4166665 384 0 2670 --56.7500005 -56.5833335 -21.5833335 -21.4166665 408 0 2670 --56.5833335 -56.4166665 -21.5833335 -21.4166665 340 0 2670 --56.4166665 -56.2499995 -21.5833335 -21.4166665 251 0 2670 --56.2500005 -56.0833335 -21.5833335 -21.4166665 284 0 2670 --56.0833335 -55.9166665 -21.5833335 -21.4166665 249 0 2670 --55.9166665 -55.7499995 -21.5833335 -21.4166665 381 0 2670 --55.7500005 -55.5833335 -21.5833335 -21.4166665 457 0 2670 --55.5833335 -55.4166665 -21.5833335 -21.4166665 546 0 2670 --55.4166665 -55.2499995 -21.5833335 -21.4166665 476 0 2670 --55.2500005 -55.0833335 -21.5833335 -21.4166665 363 0 2670 --55.0833335 -54.9166665 -21.5833335 -21.4166665 376 0 2670 --54.9166665 -54.7499995 -21.5833335 -21.4166665 351 0 2670 --54.7500005 -54.5833335 -21.5833335 -21.4166665 338 0 2670 --54.5833335 -54.4166665 -21.5833335 -21.4166665 342 0 2670 --54.4166665 -54.2499995 -21.5833335 -21.4166665 350 0 2670 --54.2500005 -54.0833335 -21.5833335 -21.4166665 395 0 2670 --54.0833335 -53.9166665 -21.5833335 -21.4166665 342 0 2670 --53.9166665 -53.7499995 -21.5833335 -21.4166665 342 0 2670 --53.7500005 -53.5833335 -21.5833335 -21.4166665 393 0 2670 --53.5833335 -53.4166665 -21.5833335 -21.4166665 378 0 2670 --53.4166665 -53.2499995 -21.5833335 -21.4166665 312 0 2670 --53.2500005 -53.0833335 -21.5833335 -21.4166665 406 0 2670 --53.0833335 -52.9166665 -21.5833335 -21.4166665 342 0 2670 --52.9166665 -52.7499995 -21.5833335 -21.4166665 371 0 2670 --52.7500005 -52.5833335 -21.5833335 -21.4166665 395 0 2670 --52.5833335 -52.4166665 -21.5833335 -21.4166665 367 0 2670 --52.4166665 -52.2499995 -21.5833335 -21.4166665 333 0 2670 --52.2500005 -52.0833335 -21.5833335 -21.4166665 377 0 2670 --52.0833335 -51.9166665 -21.5833335 -21.4166665 255 0 2670 --51.9166665 -51.7499995 -21.5833335 -21.4166665 365 0 2670 --51.7500005 -51.5833335 -21.5833335 -21.4166665 384 0 2670 --51.5833335 -51.4166665 -21.5833335 -21.4166665 405 0 2670 --51.4166665 -51.2499995 -21.5833335 -21.4166665 367 0 2670 --51.2500005 -51.0833335 -21.5833335 -21.4166665 397 0 2670 --51.0833335 -50.9166665 -21.5833335 -21.4166665 353 0 2670 --50.9166665 -50.7499995 -21.5833335 -21.4166665 407 0 2670 --50.7500005 -50.5833335 -21.5833335 -21.4166665 364 0 2670 --50.5833335 -50.4166665 -21.5833335 -21.4166665 423 0 2670 --50.4166665 -50.2499995 -21.5833335 -21.4166665 478 0 2670 --50.2500005 -50.0833335 -21.5833335 -21.4166665 423 0 2670 --50.0833335 -49.9166665 -21.5833335 -21.4166665 480 0 2670 --49.9166665 -49.7499995 -21.5833335 -21.4166665 422 0 2670 --49.7500005 -49.5833335 -21.5833335 -21.4166665 419 0 2670 --49.5833335 -49.4166665 -21.5833335 -21.4166665 411 0 2670 --49.4166665 -49.2499995 -21.5833335 -21.4166665 442 0 2670 --49.2500005 -49.0833335 -21.5833335 -21.4166665 434 0 2670 --49.0833335 -48.9166665 -21.5833335 -21.4166665 486 0 2670 --48.9166665 -48.7499995 -21.5833335 -21.4166665 533 0 2670 --48.7500005 -48.5833335 -21.5833335 -21.4166665 534 0 2670 --48.5833335 -48.4166665 -21.5833335 -21.4166665 575 0 2670 --48.4166665 -48.2499995 -21.5833335 -21.4166665 629 0 2670 --48.2500005 -48.0833335 -21.5833335 -21.4166665 601 0 2670 --48.0833335 -47.9166665 -21.5833335 -21.4166665 535 0 2670 --47.9166665 -47.7499995 -21.5833335 -21.4166665 650 0 2670 --47.7500005 -47.5833335 -21.5833335 -21.4166665 853 0 2670 --47.5833335 -47.4166665 -21.5833335 -21.4166665 730 0 2670 --47.4166665 -47.2499995 -21.5833335 -21.4166665 661 0 2670 --47.2500005 -47.0833335 -21.5833335 -21.4166665 585 0 2670 --47.0833335 -46.9166665 -21.5833335 -21.4166665 649 0 2670 --46.9166665 -46.7499995 -21.5833335 -21.4166665 928 0 2670 --46.7500005 -46.5833335 -21.5833335 -21.4166665 886 0 2670 --46.5833335 -46.4166665 -21.5833335 -21.4166665 940 0 2670 --46.4166665 -46.2499995 -21.5833335 -21.4166665 815 0 2670 --46.2500005 -46.0833335 -21.5833335 -21.4166665 849 0 2670 --46.0833335 -45.9166665 -21.5833335 -21.4166665 806 0 2670 --45.9166665 -45.7499995 -21.5833335 -21.4166665 832 0 2670 --45.7500005 -45.5833335 -21.5833335 -21.4166665 796 0 2670 --45.5833335 -45.4166665 -21.5833335 -21.4166665 836 0 2670 --45.4166665 -45.2499995 -21.5833335 -21.4166665 969 0 2670 --45.2500005 -45.0833335 -21.5833335 -21.4166665 967 0 2670 --45.0833335 -44.9166665 -21.5833335 -21.4166665 983 0 2670 --44.9166665 -44.7499995 -21.5833335 -21.4166665 1035 0 2670 --44.7500005 -44.5833335 -21.5833335 -21.4166665 1006 0 2670 --44.5833335 -44.4166665 -21.5833335 -21.4166665 1003 0 2670 --44.4166665 -44.2499995 -21.5833335 -21.4166665 951 0 2670 --44.2500005 -44.0833335 -21.5833335 -21.4166665 983 0 2670 --44.0833335 -43.9166665 -21.5833335 -21.4166665 1107 0 2670 --43.9166665 -43.7499995 -21.5833335 -21.4166665 1179 0 2670 --43.7500005 -43.5833335 -21.5833335 -21.4166665 809 0 2670 --43.5833335 -43.4166665 -21.5833335 -21.4166665 848 0 2670 --43.4166665 -43.2499995 -21.5833335 -21.4166665 542 0 2670 --43.2500005 -43.0833335 -21.5833335 -21.4166665 410 0 2670 --43.0833335 -42.9166665 -21.5833335 -21.4166665 388 0 2670 --42.9166665 -42.7499995 -21.5833335 -21.4166665 291 0 2670 --42.7500005 -42.5833335 -21.5833335 -21.4166665 238 0 2670 --42.5833335 -42.4166665 -21.5833335 -21.4166665 304 0 2670 --42.4166665 -42.2499995 -21.5833335 -21.4166665 188 0 2670 --42.2500005 -42.0833335 -21.5833335 -21.4166665 139 0 2670 --42.0833335 -41.9166665 -21.5833335 -21.4166665 354 0 2670 --41.9166665 -41.7499995 -21.5833335 -21.4166665 150 0 2670 --41.7500005 -41.5833335 -21.5833335 -21.4166665 100 0 2670 --41.5833335 -41.4166665 -21.5833335 -21.4166665 83 0 2670 --41.4166665 -41.2499995 -21.5833335 -21.4166665 54 0 2670 --41.2500005 -41.0833335 -21.5833335 -21.4166665 18 0 2670 --41.0833335 -40.9166665 -21.5833335 -21.4166665 0 -3 -1670 --40.9166665 -40.7499995 -21.5833335 -21.4166665 0 -15 -1670 --40.7500005 -40.5833335 -21.5833335 -21.4166665 0 -22 -1670 --40.5833335 -40.4166665 -21.5833335 -21.4166665 0 -31 -1670 --40.4166665 -40.2499995 -21.5833335 -21.4166665 0 -34 -1670 --40.2500005 -40.0833335 -21.5833335 -21.4166665 0 -531 -1670 --40.0833335 -39.9166665 -21.5833335 -21.4166665 0 -1048 -1670 --65.0833335 -64.9166665 -21.7500005 -21.5833335 4023 0 2670 --64.9166665 -64.7499995 -21.7500005 -21.5833335 2083 0 2670 --64.7500005 -64.5833335 -21.7500005 -21.5833335 1750 0 2670 --64.5833335 -64.4166665 -21.7500005 -21.5833335 2185 0 2670 --64.4166665 -64.2499995 -21.7500005 -21.5833335 1433 0 2670 --64.2500005 -64.0833335 -21.7500005 -21.5833335 1207 0 2670 --64.0833335 -63.9166665 -21.7500005 -21.5833335 1480 0 2670 --63.9166665 -63.7499995 -21.7500005 -21.5833335 1177 0 2670 --63.7500005 -63.5833335 -21.7500005 -21.5833335 1138 0 2670 --63.5833335 -63.4166665 -21.7500005 -21.5833335 591 0 2670 --63.4166665 -63.2499995 -21.7500005 -21.5833335 438 0 2670 --63.2500005 -63.0833335 -21.7500005 -21.5833335 489 0 2670 --63.0833335 -62.9166665 -21.7500005 -21.5833335 317 0 2670 --62.9166665 -62.7499995 -21.7500005 -21.5833335 308 0 2670 --62.7500005 -62.5833335 -21.7500005 -21.5833335 294 0 2670 --62.5833335 -62.4166665 -21.7500005 -21.5833335 284 0 2670 --62.4166665 -62.2499995 -21.7500005 -21.5833335 274 0 2670 --62.2500005 -62.0833335 -21.7500005 -21.5833335 257 0 2670 --62.0833335 -61.9166665 -21.7500005 -21.5833335 248 0 2670 --61.9166665 -61.7499995 -21.7500005 -21.5833335 240 0 2670 --61.7500005 -61.5833335 -21.7500005 -21.5833335 226 0 2670 --61.5833335 -61.4166665 -21.7500005 -21.5833335 218 0 2670 --61.4166665 -61.2499995 -21.7500005 -21.5833335 206 0 2670 --61.2500005 -61.0833335 -21.7500005 -21.5833335 198 0 2670 --61.0833335 -60.9166665 -21.7500005 -21.5833335 191 0 2670 --60.9166665 -60.7499995 -21.7500005 -21.5833335 179 0 2670 --60.7500005 -60.5833335 -21.7500005 -21.5833335 171 0 2670 --60.5833335 -60.4166665 -21.7500005 -21.5833335 163 0 2670 --60.4166665 -60.2499995 -21.7500005 -21.5833335 155 0 2670 --60.2500005 -60.0833335 -21.7500005 -21.5833335 148 0 2670 --60.0833335 -59.9166665 -21.7500005 -21.5833335 143 0 2670 --59.9166665 -59.7499995 -21.7500005 -21.5833335 136 0 2670 --59.7500005 -59.5833335 -21.7500005 -21.5833335 129 0 2670 --59.5833335 -59.4166665 -21.7500005 -21.5833335 123 0 2670 --59.4166665 -59.2499995 -21.7500005 -21.5833335 118 0 2670 --59.2500005 -59.0833335 -21.7500005 -21.5833335 114 0 2670 --59.0833335 -58.9166665 -21.7500005 -21.5833335 109 0 2670 --58.9166665 -58.7499995 -21.7500005 -21.5833335 107 0 2670 --58.7500005 -58.5833335 -21.7500005 -21.5833335 105 0 2670 --58.5833335 -58.4166665 -21.7500005 -21.5833335 99 0 2670 --58.4166665 -58.2499995 -21.7500005 -21.5833335 95 0 2670 --58.2500005 -58.0833335 -21.7500005 -21.5833335 92 0 2670 --58.0833335 -57.9166665 -21.7500005 -21.5833335 85 0 2670 --57.9166665 -57.7499995 -21.7500005 -21.5833335 84 0 2670 --57.7500005 -57.5833335 -21.7500005 -21.5833335 105 0 2670 --57.5833335 -57.4166665 -21.7500005 -21.5833335 128 0 2670 --57.4166665 -57.2499995 -21.7500005 -21.5833335 205 0 2670 --57.2500005 -57.0833335 -21.7500005 -21.5833335 246 0 2670 --57.0833335 -56.9166665 -21.7500005 -21.5833335 332 0 2670 --56.9166665 -56.7499995 -21.7500005 -21.5833335 439 0 2670 --56.7500005 -56.5833335 -21.7500005 -21.5833335 408 0 2670 --56.5833335 -56.4166665 -21.7500005 -21.5833335 314 0 2670 --56.4166665 -56.2499995 -21.7500005 -21.5833335 316 0 2670 --56.2500005 -56.0833335 -21.7500005 -21.5833335 295 0 2670 --56.0833335 -55.9166665 -21.7500005 -21.5833335 320 0 2670 --55.9166665 -55.7499995 -21.7500005 -21.5833335 432 0 2670 --55.7500005 -55.5833335 -21.7500005 -21.5833335 571 0 2670 --55.5833335 -55.4166665 -21.7500005 -21.5833335 495 0 2670 --55.4166665 -55.2499995 -21.7500005 -21.5833335 461 0 2670 --55.2500005 -55.0833335 -21.7500005 -21.5833335 380 0 2670 --55.0833335 -54.9166665 -21.7500005 -21.5833335 338 0 2670 --54.9166665 -54.7499995 -21.7500005 -21.5833335 391 0 2670 --54.7500005 -54.5833335 -21.7500005 -21.5833335 354 0 2670 --54.5833335 -54.4166665 -21.7500005 -21.5833335 321 0 2670 --54.4166665 -54.2499995 -21.7500005 -21.5833335 306 0 2670 --54.2500005 -54.0833335 -21.7500005 -21.5833335 336 0 2670 --54.0833335 -53.9166665 -21.7500005 -21.5833335 366 0 2670 --53.9166665 -53.7499995 -21.7500005 -21.5833335 338 0 2670 --53.7500005 -53.5833335 -21.7500005 -21.5833335 363 0 2670 --53.5833335 -53.4166665 -21.7500005 -21.5833335 375 0 2670 --53.4166665 -53.2499995 -21.7500005 -21.5833335 332 0 2670 --53.2500005 -53.0833335 -21.7500005 -21.5833335 362 0 2670 --53.0833335 -52.9166665 -21.7500005 -21.5833335 348 0 2670 --52.9166665 -52.7499995 -21.7500005 -21.5833335 275 0 2670 --52.7500005 -52.5833335 -21.7500005 -21.5833335 341 0 2670 --52.5833335 -52.4166665 -21.7500005 -21.5833335 334 0 2670 --52.4166665 -52.2499995 -21.7500005 -21.5833335 279 0 2670 --52.2500005 -52.0833335 -21.7500005 -21.5833335 257 0 2670 --52.0833335 -51.9166665 -21.7500005 -21.5833335 267 0 2670 --51.9166665 -51.7499995 -21.7500005 -21.5833335 338 0 2670 --51.7500005 -51.5833335 -21.7500005 -21.5833335 306 0 2670 --51.5833335 -51.4166665 -21.7500005 -21.5833335 337 0 2670 --51.4166665 -51.2499995 -21.7500005 -21.5833335 391 0 2670 --51.2500005 -51.0833335 -21.7500005 -21.5833335 363 0 2670 --51.0833335 -50.9166665 -21.7500005 -21.5833335 401 0 2670 --50.9166665 -50.7499995 -21.7500005 -21.5833335 402 0 2670 --50.7500005 -50.5833335 -21.7500005 -21.5833335 411 0 2670 --50.5833335 -50.4166665 -21.7500005 -21.5833335 402 0 2670 --50.4166665 -50.2499995 -21.7500005 -21.5833335 397 0 2670 --50.2500005 -50.0833335 -21.7500005 -21.5833335 422 0 2670 --50.0833335 -49.9166665 -21.7500005 -21.5833335 435 0 2670 --49.9166665 -49.7499995 -21.7500005 -21.5833335 464 0 2670 --49.7500005 -49.5833335 -21.7500005 -21.5833335 459 0 2670 --49.5833335 -49.4166665 -21.7500005 -21.5833335 445 0 2670 --49.4166665 -49.2499995 -21.7500005 -21.5833335 456 0 2670 --49.2500005 -49.0833335 -21.7500005 -21.5833335 401 0 2670 --49.0833335 -48.9166665 -21.7500005 -21.5833335 447 0 2670 --48.9166665 -48.7499995 -21.7500005 -21.5833335 496 0 2670 --48.7500005 -48.5833335 -21.7500005 -21.5833335 539 0 2670 --48.5833335 -48.4166665 -21.7500005 -21.5833335 546 0 2670 --48.4166665 -48.2499995 -21.7500005 -21.5833335 603 0 2670 --48.2500005 -48.0833335 -21.7500005 -21.5833335 640 0 2670 --48.0833335 -47.9166665 -21.7500005 -21.5833335 570 0 2670 --47.9166665 -47.7499995 -21.7500005 -21.5833335 542 0 2670 --47.7500005 -47.5833335 -21.7500005 -21.5833335 664 0 2670 --47.5833335 -47.4166665 -21.7500005 -21.5833335 648 0 2670 --47.4166665 -47.2499995 -21.7500005 -21.5833335 798 0 2670 --47.2500005 -47.0833335 -21.7500005 -21.5833335 593 0 2670 --47.0833335 -46.9166665 -21.7500005 -21.5833335 594 0 2670 --46.9166665 -46.7499995 -21.7500005 -21.5833335 983 0 2670 --46.7500005 -46.5833335 -21.7500005 -21.5833335 1229 0 2670 --46.5833335 -46.4166665 -21.7500005 -21.5833335 906 0 2670 --46.4166665 -46.2499995 -21.7500005 -21.5833335 1092 0 2670 --46.2500005 -46.0833335 -21.7500005 -21.5833335 1029 0 2670 --46.0833335 -45.9166665 -21.7500005 -21.5833335 960 0 2670 --45.9166665 -45.7499995 -21.7500005 -21.5833335 876 0 2670 --45.7500005 -45.5833335 -21.7500005 -21.5833335 864 0 2670 --45.5833335 -45.4166665 -21.7500005 -21.5833335 963 0 2670 --45.4166665 -45.2499995 -21.7500005 -21.5833335 852 0 2670 --45.2500005 -45.0833335 -21.7500005 -21.5833335 900 0 2670 --45.0833335 -44.9166665 -21.7500005 -21.5833335 934 0 2670 --44.9166665 -44.7499995 -21.7500005 -21.5833335 1064 0 2670 --44.7500005 -44.5833335 -21.7500005 -21.5833335 1050 0 2670 --44.5833335 -44.4166665 -21.7500005 -21.5833335 982 0 2670 --44.4166665 -44.2499995 -21.7500005 -21.5833335 995 0 2670 --44.2500005 -44.0833335 -21.7500005 -21.5833335 1107 0 2670 --44.0833335 -43.9166665 -21.7500005 -21.5833335 1093 0 2670 --43.9166665 -43.7499995 -21.7500005 -21.5833335 936 0 2670 --43.7500005 -43.5833335 -21.7500005 -21.5833335 770 0 2670 --43.5833335 -43.4166665 -21.7500005 -21.5833335 752 0 2670 --43.4166665 -43.2499995 -21.7500005 -21.5833335 853 0 2670 --43.2500005 -43.0833335 -21.7500005 -21.5833335 775 0 2670 --43.0833335 -42.9166665 -21.7500005 -21.5833335 583 0 2670 --42.9166665 -42.7499995 -21.7500005 -21.5833335 578 0 2670 --42.7500005 -42.5833335 -21.7500005 -21.5833335 422 0 2670 --42.5833335 -42.4166665 -21.7500005 -21.5833335 260 0 2670 --42.4166665 -42.2499995 -21.7500005 -21.5833335 174 0 2670 --42.2500005 -42.0833335 -21.7500005 -21.5833335 101 0 2670 --42.0833335 -41.9166665 -21.7500005 -21.5833335 120 0 2670 --41.9166665 -41.7499995 -21.7500005 -21.5833335 164 0 2670 --41.7500005 -41.5833335 -21.7500005 -21.5833335 197 0 2670 --41.5833335 -41.4166665 -21.7500005 -21.5833335 30 0 2670 --41.4166665 -41.2499995 -21.7500005 -21.5833335 15 0 2670 --41.2500005 -41.0833335 -21.7500005 -21.5833335 3 0 2670 --41.0833335 -40.9166665 -21.7500005 -21.5833335 0 -2 -1670 --40.9166665 -40.7499995 -21.7500005 -21.5833335 0 -14 -1670 --40.7500005 -40.5833335 -21.7500005 -21.5833335 0 -19 -1670 --40.5833335 -40.4166665 -21.7500005 -21.5833335 0 -31 -1670 --40.4166665 -40.2499995 -21.7500005 -21.5833335 0 -38 -1670 --40.2500005 -40.0833335 -21.7500005 -21.5833335 0 -139 -1670 --40.0833335 -39.9166665 -21.7500005 -21.5833335 0 -709 -1670 --65.0833335 -64.9166665 -21.9166665 -21.7499995 4029 0 2670 --64.9166665 -64.7499995 -21.9166665 -21.7499995 2192 0 2670 --64.7500005 -64.5833335 -21.9166665 -21.7499995 2099 0 2670 --64.5833335 -64.4166665 -21.9166665 -21.7499995 1503 0 2670 --64.4166665 -64.2499995 -21.9166665 -21.7499995 1092 0 2670 --64.2500005 -64.0833335 -21.9166665 -21.7499995 1257 0 2670 --64.0833335 -63.9166665 -21.9166665 -21.7499995 1790 0 2670 --63.9166665 -63.7499995 -21.9166665 -21.7499995 1293 0 2670 --63.7500005 -63.5833335 -21.9166665 -21.7499995 903 0 2670 --63.5833335 -63.4166665 -21.9166665 -21.7499995 562 0 2670 --63.4166665 -63.2499995 -21.9166665 -21.7499995 446 0 2670 --63.2500005 -63.0833335 -21.9166665 -21.7499995 365 0 2670 --63.0833335 -62.9166665 -21.9166665 -21.7499995 308 0 2670 --62.9166665 -62.7499995 -21.9166665 -21.7499995 302 0 2670 --62.7500005 -62.5833335 -21.9166665 -21.7499995 290 0 2670 --62.5833335 -62.4166665 -21.9166665 -21.7499995 279 0 2670 --62.4166665 -62.2499995 -21.9166665 -21.7499995 264 0 2670 --62.2500005 -62.0833335 -21.9166665 -21.7499995 255 0 2670 --62.0833335 -61.9166665 -21.9166665 -21.7499995 249 0 2670 --61.9166665 -61.7499995 -21.9166665 -21.7499995 235 0 2670 --61.7500005 -61.5833335 -21.9166665 -21.7499995 225 0 2670 --61.5833335 -61.4166665 -21.9166665 -21.7499995 213 0 2670 --61.4166665 -61.2499995 -21.9166665 -21.7499995 204 0 2670 --61.2500005 -61.0833335 -21.9166665 -21.7499995 198 0 2670 --61.0833335 -60.9166665 -21.9166665 -21.7499995 189 0 2670 --60.9166665 -60.7499995 -21.9166665 -21.7499995 180 0 2670 --60.7500005 -60.5833335 -21.9166665 -21.7499995 174 0 2670 --60.5833335 -60.4166665 -21.9166665 -21.7499995 163 0 2670 --60.4166665 -60.2499995 -21.9166665 -21.7499995 153 0 2670 --60.2500005 -60.0833335 -21.9166665 -21.7499995 151 0 2670 --60.0833335 -59.9166665 -21.9166665 -21.7499995 144 0 2670 --59.9166665 -59.7499995 -21.9166665 -21.7499995 134 0 2670 --59.7500005 -59.5833335 -21.9166665 -21.7499995 130 0 2670 --59.5833335 -59.4166665 -21.9166665 -21.7499995 124 0 2670 --59.4166665 -59.2499995 -21.9166665 -21.7499995 117 0 2670 --59.2500005 -59.0833335 -21.9166665 -21.7499995 112 0 2670 --59.0833335 -58.9166665 -21.9166665 -21.7499995 110 0 2670 --58.9166665 -58.7499995 -21.9166665 -21.7499995 109 0 2670 --58.7500005 -58.5833335 -21.9166665 -21.7499995 99 0 2670 --58.5833335 -58.4166665 -21.9166665 -21.7499995 98 0 2670 --58.4166665 -58.2499995 -21.9166665 -21.7499995 94 0 2670 --58.2500005 -58.0833335 -21.9166665 -21.7499995 89 0 2670 --58.0833335 -57.9166665 -21.9166665 -21.7499995 83 0 2670 --57.9166665 -57.7499995 -21.9166665 -21.7499995 78 0 2670 --57.7500005 -57.5833335 -21.9166665 -21.7499995 96 0 2670 --57.5833335 -57.4166665 -21.9166665 -21.7499995 153 0 2670 --57.4166665 -57.2499995 -21.9166665 -21.7499995 261 0 2670 --57.2500005 -57.0833335 -21.9166665 -21.7499995 182 0 2670 --57.0833335 -56.9166665 -21.9166665 -21.7499995 384 0 2670 --56.9166665 -56.7499995 -21.9166665 -21.7499995 387 0 2670 --56.7500005 -56.5833335 -21.9166665 -21.7499995 272 0 2670 --56.5833335 -56.4166665 -21.9166665 -21.7499995 283 0 2670 --56.4166665 -56.2499995 -21.9166665 -21.7499995 288 0 2670 --56.2500005 -56.0833335 -21.9166665 -21.7499995 374 0 2670 --56.0833335 -55.9166665 -21.9166665 -21.7499995 457 0 2670 --55.9166665 -55.7499995 -21.9166665 -21.7499995 579 0 2670 --55.7500005 -55.5833335 -21.9166665 -21.7499995 612 0 2670 --55.5833335 -55.4166665 -21.9166665 -21.7499995 465 0 2670 --55.4166665 -55.2499995 -21.9166665 -21.7499995 435 0 2670 --55.2500005 -55.0833335 -21.9166665 -21.7499995 408 0 2670 --55.0833335 -54.9166665 -21.9166665 -21.7499995 324 0 2670 --54.9166665 -54.7499995 -21.9166665 -21.7499995 302 0 2670 --54.7500005 -54.5833335 -21.9166665 -21.7499995 316 0 2670 --54.5833335 -54.4166665 -21.9166665 -21.7499995 293 0 2670 --54.4166665 -54.2499995 -21.9166665 -21.7499995 380 0 2670 --54.2500005 -54.0833335 -21.9166665 -21.7499995 381 0 2670 --54.0833335 -53.9166665 -21.9166665 -21.7499995 301 0 2670 --53.9166665 -53.7499995 -21.9166665 -21.7499995 301 0 2670 --53.7500005 -53.5833335 -21.9166665 -21.7499995 334 0 2670 --53.5833335 -53.4166665 -21.9166665 -21.7499995 297 0 2670 --53.4166665 -53.2499995 -21.9166665 -21.7499995 368 0 2670 --53.2500005 -53.0833335 -21.9166665 -21.7499995 401 0 2670 --53.0833335 -52.9166665 -21.9166665 -21.7499995 435 0 2670 --52.9166665 -52.7499995 -21.9166665 -21.7499995 424 0 2670 --52.7500005 -52.5833335 -21.9166665 -21.7499995 377 0 2670 --52.5833335 -52.4166665 -21.9166665 -21.7499995 380 0 2670 --52.4166665 -52.2499995 -21.9166665 -21.7499995 254 0 2670 --52.2500005 -52.0833335 -21.9166665 -21.7499995 276 0 2670 --52.0833335 -51.9166665 -21.9166665 -21.7499995 350 0 2670 --51.9166665 -51.7499995 -21.9166665 -21.7499995 353 0 2670 --51.7500005 -51.5833335 -21.9166665 -21.7499995 334 0 2670 --51.5833335 -51.4166665 -21.9166665 -21.7499995 323 0 2670 --51.4166665 -51.2499995 -21.9166665 -21.7499995 332 0 2670 --51.2500005 -51.0833335 -21.9166665 -21.7499995 341 0 2670 --51.0833335 -50.9166665 -21.9166665 -21.7499995 411 0 2670 --50.9166665 -50.7499995 -21.9166665 -21.7499995 443 0 2670 --50.7500005 -50.5833335 -21.9166665 -21.7499995 440 0 2670 --50.5833335 -50.4166665 -21.9166665 -21.7499995 463 0 2670 --50.4166665 -50.2499995 -21.9166665 -21.7499995 438 0 2670 --50.2500005 -50.0833335 -21.9166665 -21.7499995 437 0 2670 --50.0833335 -49.9166665 -21.9166665 -21.7499995 454 0 2670 --49.9166665 -49.7499995 -21.9166665 -21.7499995 494 0 2670 --49.7500005 -49.5833335 -21.9166665 -21.7499995 497 0 2670 --49.5833335 -49.4166665 -21.9166665 -21.7499995 456 0 2670 --49.4166665 -49.2499995 -21.9166665 -21.7499995 448 0 2670 --49.2500005 -49.0833335 -21.9166665 -21.7499995 461 0 2670 --49.0833335 -48.9166665 -21.9166665 -21.7499995 427 0 2670 --48.9166665 -48.7499995 -21.9166665 -21.7499995 422 0 2670 --48.7500005 -48.5833335 -21.9166665 -21.7499995 420 0 2670 --48.5833335 -48.4166665 -21.9166665 -21.7499995 533 0 2670 --48.4166665 -48.2499995 -21.9166665 -21.7499995 573 0 2670 --48.2500005 -48.0833335 -21.9166665 -21.7499995 666 0 2670 --48.0833335 -47.9166665 -21.9166665 -21.7499995 713 0 2670 --47.9166665 -47.7499995 -21.9166665 -21.7499995 688 0 2670 --47.7500005 -47.5833335 -21.9166665 -21.7499995 670 0 2670 --47.5833335 -47.4166665 -21.9166665 -21.7499995 544 0 2670 --47.4166665 -47.2499995 -21.9166665 -21.7499995 621 0 2670 --47.2500005 -47.0833335 -21.9166665 -21.7499995 625 0 2670 --47.0833335 -46.9166665 -21.9166665 -21.7499995 744 0 2670 --46.9166665 -46.7499995 -21.9166665 -21.7499995 857 0 2670 --46.7500005 -46.5833335 -21.9166665 -21.7499995 1294 0 2670 --46.5833335 -46.4166665 -21.9166665 -21.7499995 1355 0 2670 --46.4166665 -46.2499995 -21.9166665 -21.7499995 1115 0 2670 --46.2500005 -46.0833335 -21.9166665 -21.7499995 1221 0 2670 --46.0833335 -45.9166665 -21.9166665 -21.7499995 1038 0 2670 --45.9166665 -45.7499995 -21.9166665 -21.7499995 891 0 2670 --45.7500005 -45.5833335 -21.9166665 -21.7499995 859 0 2670 --45.5833335 -45.4166665 -21.9166665 -21.7499995 889 0 2670 --45.4166665 -45.2499995 -21.9166665 -21.7499995 930 0 2670 --45.2500005 -45.0833335 -21.9166665 -21.7499995 908 0 2670 --45.0833335 -44.9166665 -21.9166665 -21.7499995 978 0 2670 --44.9166665 -44.7499995 -21.9166665 -21.7499995 1089 0 2670 --44.7500005 -44.5833335 -21.9166665 -21.7499995 1124 0 2670 --44.5833335 -44.4166665 -21.9166665 -21.7499995 998 0 2670 --44.4166665 -44.2499995 -21.9166665 -21.7499995 1108 0 2670 --44.2500005 -44.0833335 -21.9166665 -21.7499995 1217 0 2670 --44.0833335 -43.9166665 -21.9166665 -21.7499995 982 0 2670 --43.9166665 -43.7499995 -21.9166665 -21.7499995 828 0 2670 --43.7500005 -43.5833335 -21.9166665 -21.7499995 892 0 2670 --43.5833335 -43.4166665 -21.9166665 -21.7499995 707 0 2670 --43.4166665 -43.2499995 -21.9166665 -21.7499995 592 0 2670 --43.2500005 -43.0833335 -21.9166665 -21.7499995 653 0 2670 --43.0833335 -42.9166665 -21.9166665 -21.7499995 526 0 2670 --42.9166665 -42.7499995 -21.9166665 -21.7499995 569 0 2670 --42.7500005 -42.5833335 -21.9166665 -21.7499995 282 0 2670 --42.5833335 -42.4166665 -21.9166665 -21.7499995 282 0 2670 --42.4166665 -42.2499995 -21.9166665 -21.7499995 342 0 2670 --42.2500005 -42.0833335 -21.9166665 -21.7499995 155 0 2670 --42.0833335 -41.9166665 -21.9166665 -21.7499995 110 0 2670 --41.9166665 -41.7499995 -21.9166665 -21.7499995 1066 0 2670 --41.7500005 -41.5833335 -21.9166665 -21.7499995 67 0 2670 --41.5833335 -41.4166665 -21.9166665 -21.7499995 38 0 2670 --41.4166665 -41.2499995 -21.9166665 -21.7499995 6 0 2670 --41.2500005 -41.0833335 -21.9166665 -21.7499995 2 0 2670 --41.0833335 -40.9166665 -21.9166665 -21.7499995 0 0 2670 --40.9166665 -40.7499995 -21.9166665 -21.7499995 0 -21 -1670 --40.7500005 -40.5833335 -21.9166665 -21.7499995 0 -20 -1670 --40.5833335 -40.4166665 -21.9166665 -21.7499995 0 -31 -1670 --40.4166665 -40.2499995 -21.9166665 -21.7499995 0 -51 -1670 --40.2500005 -40.0833335 -21.9166665 -21.7499995 0 -83 -1670 --40.0833335 -39.9166665 -21.9166665 -21.7499995 0 -473 -1670 --65.0833335 -64.9166665 -22.0833335 -21.9166665 3194 0 2670 --64.9166665 -64.7499995 -22.0833335 -21.9166665 2374 0 2670 --64.7500005 -64.5833335 -22.0833335 -21.9166665 1968 0 2670 --64.5833335 -64.4166665 -22.0833335 -21.9166665 1344 0 2670 --64.4166665 -64.2499995 -22.0833335 -21.9166665 1166 0 2670 --64.2500005 -64.0833335 -22.0833335 -21.9166665 862 0 2670 --64.0833335 -63.9166665 -22.0833335 -21.9166665 835 0 2670 --63.9166665 -63.7499995 -22.0833335 -21.9166665 750 0 2670 --63.7500005 -63.5833335 -22.0833335 -21.9166665 636 0 2670 --63.5833335 -63.4166665 -22.0833335 -21.9166665 521 0 2670 --63.4166665 -63.2499995 -22.0833335 -21.9166665 405 0 2670 --63.2500005 -63.0833335 -22.0833335 -21.9166665 349 0 2670 --63.0833335 -62.9166665 -22.0833335 -21.9166665 303 0 2670 --62.9166665 -62.7499995 -22.0833335 -21.9166665 288 0 2670 --62.7500005 -62.5833335 -22.0833335 -21.9166665 281 0 2670 --62.5833335 -62.4166665 -22.0833335 -21.9166665 274 0 2670 --62.4166665 -62.2499995 -22.0833335 -21.9166665 261 0 2670 --62.2500005 -62.0833335 -22.0833335 -21.9166665 254 0 2670 --62.0833335 -61.9166665 -22.0833335 -21.9166665 244 0 2670 --61.9166665 -61.7499995 -22.0833335 -21.9166665 234 0 2670 --61.7500005 -61.5833335 -22.0833335 -21.9166665 224 0 2670 --61.5833335 -61.4166665 -22.0833335 -21.9166665 212 0 2670 --61.4166665 -61.2499995 -22.0833335 -21.9166665 204 0 2670 --61.2500005 -61.0833335 -22.0833335 -21.9166665 195 0 2670 --61.0833335 -60.9166665 -22.0833335 -21.9166665 187 0 2670 --60.9166665 -60.7499995 -22.0833335 -21.9166665 177 0 2670 --60.7500005 -60.5833335 -22.0833335 -21.9166665 168 0 2670 --60.5833335 -60.4166665 -22.0833335 -21.9166665 163 0 2670 --60.4166665 -60.2499995 -22.0833335 -21.9166665 157 0 2670 --60.2500005 -60.0833335 -22.0833335 -21.9166665 147 0 2670 --60.0833335 -59.9166665 -22.0833335 -21.9166665 140 0 2670 --59.9166665 -59.7499995 -22.0833335 -21.9166665 134 0 2670 --59.7500005 -59.5833335 -22.0833335 -21.9166665 130 0 2670 --59.5833335 -59.4166665 -22.0833335 -21.9166665 123 0 2670 --59.4166665 -59.2499995 -22.0833335 -21.9166665 115 0 2670 --59.2500005 -59.0833335 -22.0833335 -21.9166665 112 0 2670 --59.0833335 -58.9166665 -22.0833335 -21.9166665 109 0 2670 --58.9166665 -58.7499995 -22.0833335 -21.9166665 102 0 2670 --58.7500005 -58.5833335 -22.0833335 -21.9166665 100 0 2670 --58.5833335 -58.4166665 -22.0833335 -21.9166665 97 0 2670 --58.4166665 -58.2499995 -22.0833335 -21.9166665 92 0 2670 --58.2500005 -58.0833335 -22.0833335 -21.9166665 87 0 2670 --58.0833335 -57.9166665 -22.0833335 -21.9166665 74 0 2670 --57.9166665 -57.7499995 -22.0833335 -21.9166665 84 0 2670 --57.7500005 -57.5833335 -22.0833335 -21.9166665 93 0 2670 --57.5833335 -57.4166665 -22.0833335 -21.9166665 150 0 2670 --57.4166665 -57.2499995 -22.0833335 -21.9166665 143 0 2670 --57.2500005 -57.0833335 -22.0833335 -21.9166665 193 0 2670 --57.0833335 -56.9166665 -22.0833335 -21.9166665 263 0 2670 --56.9166665 -56.7499995 -22.0833335 -21.9166665 332 0 2670 --56.7500005 -56.5833335 -22.0833335 -21.9166665 213 0 2670 --56.5833335 -56.4166665 -22.0833335 -21.9166665 207 0 2670 --56.4166665 -56.2499995 -22.0833335 -21.9166665 225 0 2670 --56.2500005 -56.0833335 -22.0833335 -21.9166665 286 0 2670 --56.0833335 -55.9166665 -22.0833335 -21.9166665 487 0 2670 --55.9166665 -55.7499995 -22.0833335 -21.9166665 648 0 2670 --55.7500005 -55.5833335 -22.0833335 -21.9166665 615 0 2670 --55.5833335 -55.4166665 -22.0833335 -21.9166665 572 0 2670 --55.4166665 -55.2499995 -22.0833335 -21.9166665 425 0 2670 --55.2500005 -55.0833335 -22.0833335 -21.9166665 386 0 2670 --55.0833335 -54.9166665 -22.0833335 -21.9166665 406 0 2670 --54.9166665 -54.7499995 -22.0833335 -21.9166665 313 0 2670 --54.7500005 -54.5833335 -22.0833335 -21.9166665 305 0 2670 --54.5833335 -54.4166665 -22.0833335 -21.9166665 291 0 2670 --54.4166665 -54.2499995 -22.0833335 -21.9166665 290 0 2670 --54.2500005 -54.0833335 -22.0833335 -21.9166665 291 0 2670 --54.0833335 -53.9166665 -22.0833335 -21.9166665 338 0 2670 --53.9166665 -53.7499995 -22.0833335 -21.9166665 337 0 2670 --53.7500005 -53.5833335 -22.0833335 -21.9166665 313 0 2670 --53.5833335 -53.4166665 -22.0833335 -21.9166665 309 0 2670 --53.4166665 -53.2499995 -22.0833335 -21.9166665 395 0 2670 --53.2500005 -53.0833335 -22.0833335 -21.9166665 375 0 2670 --53.0833335 -52.9166665 -22.0833335 -21.9166665 346 0 2670 --52.9166665 -52.7499995 -22.0833335 -21.9166665 425 0 2670 --52.7500005 -52.5833335 -22.0833335 -21.9166665 399 0 2670 --52.5833335 -52.4166665 -22.0833335 -21.9166665 293 0 2670 --52.4166665 -52.2499995 -22.0833335 -21.9166665 252 0 2670 --52.2500005 -52.0833335 -22.0833335 -21.9166665 345 0 2670 --52.0833335 -51.9166665 -22.0833335 -21.9166665 349 0 2670 --51.9166665 -51.7499995 -22.0833335 -21.9166665 388 0 2670 --51.7500005 -51.5833335 -22.0833335 -21.9166665 394 0 2670 --51.5833335 -51.4166665 -22.0833335 -21.9166665 384 0 2670 --51.4166665 -51.2499995 -22.0833335 -21.9166665 389 0 2670 --51.2500005 -51.0833335 -22.0833335 -21.9166665 410 0 2670 --51.0833335 -50.9166665 -22.0833335 -21.9166665 407 0 2670 --50.9166665 -50.7499995 -22.0833335 -21.9166665 386 0 2670 --50.7500005 -50.5833335 -22.0833335 -21.9166665 447 0 2670 --50.5833335 -50.4166665 -22.0833335 -21.9166665 430 0 2670 --50.4166665 -50.2499995 -22.0833335 -21.9166665 488 0 2670 --50.2500005 -50.0833335 -22.0833335 -21.9166665 471 0 2670 --50.0833335 -49.9166665 -22.0833335 -21.9166665 460 0 2670 --49.9166665 -49.7499995 -22.0833335 -21.9166665 467 0 2670 --49.7500005 -49.5833335 -22.0833335 -21.9166665 467 0 2670 --49.5833335 -49.4166665 -22.0833335 -21.9166665 550 0 2670 --49.4166665 -49.2499995 -22.0833335 -21.9166665 530 0 2670 --49.2500005 -49.0833335 -22.0833335 -21.9166665 476 0 2670 --49.0833335 -48.9166665 -22.0833335 -21.9166665 505 0 2670 --48.9166665 -48.7499995 -22.0833335 -21.9166665 480 0 2670 --48.7500005 -48.5833335 -22.0833335 -21.9166665 478 0 2670 --48.5833335 -48.4166665 -22.0833335 -21.9166665 525 0 2670 --48.4166665 -48.2499995 -22.0833335 -21.9166665 511 0 2670 --48.2500005 -48.0833335 -22.0833335 -21.9166665 583 0 2670 --48.0833335 -47.9166665 -22.0833335 -21.9166665 790 0 2670 --47.9166665 -47.7499995 -22.0833335 -21.9166665 879 0 2670 --47.7500005 -47.5833335 -22.0833335 -21.9166665 745 0 2670 --47.5833335 -47.4166665 -22.0833335 -21.9166665 746 0 2670 --47.4166665 -47.2499995 -22.0833335 -21.9166665 600 0 2670 --47.2500005 -47.0833335 -22.0833335 -21.9166665 594 0 2670 --47.0833335 -46.9166665 -22.0833335 -21.9166665 612 0 2670 --46.9166665 -46.7499995 -22.0833335 -21.9166665 726 0 2670 --46.7500005 -46.5833335 -22.0833335 -21.9166665 1250 0 2670 --46.5833335 -46.4166665 -22.0833335 -21.9166665 1323 0 2670 --46.4166665 -46.2499995 -22.0833335 -21.9166665 1174 0 2670 --46.2500005 -46.0833335 -22.0833335 -21.9166665 1278 0 2670 --46.0833335 -45.9166665 -22.0833335 -21.9166665 1343 0 2670 --45.9166665 -45.7499995 -22.0833335 -21.9166665 853 0 2670 --45.7500005 -45.5833335 -22.0833335 -21.9166665 867 0 2670 --45.5833335 -45.4166665 -22.0833335 -21.9166665 1157 0 2670 --45.4166665 -45.2499995 -22.0833335 -21.9166665 914 0 2670 --45.2500005 -45.0833335 -22.0833335 -21.9166665 921 0 2670 --45.0833335 -44.9166665 -22.0833335 -21.9166665 908 0 2670 --44.9166665 -44.7499995 -22.0833335 -21.9166665 956 0 2670 --44.7500005 -44.5833335 -22.0833335 -21.9166665 1537 0 2670 --44.5833335 -44.4166665 -22.0833335 -21.9166665 1135 0 2670 --44.4166665 -44.2499995 -22.0833335 -21.9166665 1158 0 2670 --44.2500005 -44.0833335 -22.0833335 -21.9166665 1239 0 2670 --44.0833335 -43.9166665 -22.0833335 -21.9166665 1172 0 2670 --43.9166665 -43.7499995 -22.0833335 -21.9166665 821 0 2670 --43.7500005 -43.5833335 -22.0833335 -21.9166665 847 0 2670 --43.5833335 -43.4166665 -22.0833335 -21.9166665 533 0 2670 --43.4166665 -43.2499995 -22.0833335 -21.9166665 392 0 2670 --43.2500005 -43.0833335 -22.0833335 -21.9166665 381 0 2670 --43.0833335 -42.9166665 -22.0833335 -21.9166665 362 0 2670 --42.9166665 -42.7499995 -22.0833335 -21.9166665 560 0 2670 --42.7500005 -42.5833335 -22.0833335 -21.9166665 329 0 2670 --42.5833335 -42.4166665 -22.0833335 -21.9166665 663 0 2670 --42.4166665 -42.2499995 -22.0833335 -21.9166665 510 0 2670 --42.2500005 -42.0833335 -22.0833335 -21.9166665 347 0 2670 --42.0833335 -41.9166665 -22.0833335 -21.9166665 601 0 2670 --41.9166665 -41.7499995 -22.0833335 -21.9166665 101 0 2670 --41.7500005 -41.5833335 -22.0833335 -21.9166665 77 0 2670 --41.5833335 -41.4166665 -22.0833335 -21.9166665 2 0 2670 --41.4166665 -41.2499995 -22.0833335 -21.9166665 1 0 2670 --41.2500005 -41.0833335 -22.0833335 -21.9166665 3 0 2670 --41.0833335 -40.9166665 -22.0833335 -21.9166665 4 0 2670 --40.9166665 -40.7499995 -22.0833335 -21.9166665 0 -16 -1670 --40.7500005 -40.5833335 -22.0833335 -21.9166665 0 -29 -1670 --40.5833335 -40.4166665 -22.0833335 -21.9166665 0 -47 -1670 --40.4166665 -40.2499995 -22.0833335 -21.9166665 0 -53 -1670 --40.2500005 -40.0833335 -22.0833335 -21.9166665 0 -62 -1670 --40.0833335 -39.9166665 -22.0833335 -21.9166665 0 -443 -1670 --65.0833335 -64.9166665 -22.2500005 -22.0833335 2897 0 2670 --64.9166665 -64.7499995 -22.2500005 -22.0833335 2755 0 2670 --64.7500005 -64.5833335 -22.2500005 -22.0833335 1310 0 2670 --64.5833335 -64.4166665 -22.2500005 -22.0833335 1199 0 2670 --64.4166665 -64.2499995 -22.2500005 -22.0833335 873 0 2670 --64.2500005 -64.0833335 -22.2500005 -22.0833335 691 0 2670 --64.0833335 -63.9166665 -22.2500005 -22.0833335 615 0 2670 --63.9166665 -63.7499995 -22.2500005 -22.0833335 740 0 2670 --63.7500005 -63.5833335 -22.2500005 -22.0833335 587 0 2670 --63.5833335 -63.4166665 -22.2500005 -22.0833335 429 0 2670 --63.4166665 -63.2499995 -22.2500005 -22.0833335 379 0 2670 --63.2500005 -63.0833335 -22.2500005 -22.0833335 336 0 2670 --63.0833335 -62.9166665 -22.2500005 -22.0833335 296 0 2670 --62.9166665 -62.7499995 -22.2500005 -22.0833335 275 0 2670 --62.7500005 -62.5833335 -22.2500005 -22.0833335 269 0 2670 --62.5833335 -62.4166665 -22.2500005 -22.0833335 264 0 2670 --62.4166665 -62.2499995 -22.2500005 -22.0833335 258 0 2670 --62.2500005 -62.0833335 -22.2500005 -22.0833335 248 0 2670 --62.0833335 -61.9166665 -22.2500005 -22.0833335 237 0 2670 --61.9166665 -61.7499995 -22.2500005 -22.0833335 229 0 2670 --61.7500005 -61.5833335 -22.2500005 -22.0833335 217 0 2670 --61.5833335 -61.4166665 -22.2500005 -22.0833335 210 0 2670 --61.4166665 -61.2499995 -22.2500005 -22.0833335 202 0 2670 --61.2500005 -61.0833335 -22.2500005 -22.0833335 192 0 2670 --61.0833335 -60.9166665 -22.2500005 -22.0833335 185 0 2670 --60.9166665 -60.7499995 -22.2500005 -22.0833335 173 0 2670 --60.7500005 -60.5833335 -22.2500005 -22.0833335 168 0 2670 --60.5833335 -60.4166665 -22.2500005 -22.0833335 160 0 2670 --60.4166665 -60.2499995 -22.2500005 -22.0833335 153 0 2670 --60.2500005 -60.0833335 -22.2500005 -22.0833335 145 0 2670 --60.0833335 -59.9166665 -22.2500005 -22.0833335 137 0 2670 --59.9166665 -59.7499995 -22.2500005 -22.0833335 131 0 2670 --59.7500005 -59.5833335 -22.2500005 -22.0833335 124 0 2670 --59.5833335 -59.4166665 -22.2500005 -22.0833335 122 0 2670 --59.4166665 -59.2499995 -22.2500005 -22.0833335 117 0 2670 --59.2500005 -59.0833335 -22.2500005 -22.0833335 113 0 2670 --59.0833335 -58.9166665 -22.2500005 -22.0833335 108 0 2670 --58.9166665 -58.7499995 -22.2500005 -22.0833335 104 0 2670 --58.7500005 -58.5833335 -22.2500005 -22.0833335 104 0 2670 --58.5833335 -58.4166665 -22.2500005 -22.0833335 96 0 2670 --58.4166665 -58.2499995 -22.2500005 -22.0833335 94 0 2670 --58.2500005 -58.0833335 -22.2500005 -22.0833335 86 0 2670 --58.0833335 -57.9166665 -22.2500005 -22.0833335 80 0 2670 --57.9166665 -57.7499995 -22.2500005 -22.0833335 86 0 2670 --57.7500005 -57.5833335 -22.2500005 -22.0833335 95 0 2670 --57.5833335 -57.4166665 -22.2500005 -22.0833335 108 0 2670 --57.4166665 -57.2499995 -22.2500005 -22.0833335 126 0 2670 --57.2500005 -57.0833335 -22.2500005 -22.0833335 157 0 2670 --57.0833335 -56.9166665 -22.2500005 -22.0833335 221 0 2670 --56.9166665 -56.7499995 -22.2500005 -22.0833335 260 0 2670 --56.7500005 -56.5833335 -22.2500005 -22.0833335 195 0 2670 --56.5833335 -56.4166665 -22.2500005 -22.0833335 198 0 2670 --56.4166665 -56.2499995 -22.2500005 -22.0833335 249 0 2670 --56.2500005 -56.0833335 -22.2500005 -22.0833335 325 0 2670 --56.0833335 -55.9166665 -22.2500005 -22.0833335 537 0 2670 --55.9166665 -55.7499995 -22.2500005 -22.0833335 635 0 2670 --55.7500005 -55.5833335 -22.2500005 -22.0833335 494 0 2670 --55.5833335 -55.4166665 -22.2500005 -22.0833335 480 0 2670 --55.4166665 -55.2499995 -22.2500005 -22.0833335 435 0 2670 --55.2500005 -55.0833335 -22.2500005 -22.0833335 412 0 2670 --55.0833335 -54.9166665 -22.2500005 -22.0833335 455 0 2670 --54.9166665 -54.7499995 -22.2500005 -22.0833335 424 0 2670 --54.7500005 -54.5833335 -22.2500005 -22.0833335 354 0 2670 --54.5833335 -54.4166665 -22.2500005 -22.0833335 354 0 2670 --54.4166665 -54.2499995 -22.2500005 -22.0833335 315 0 2670 --54.2500005 -54.0833335 -22.2500005 -22.0833335 325 0 2670 --54.0833335 -53.9166665 -22.2500005 -22.0833335 372 0 2670 --53.9166665 -53.7499995 -22.2500005 -22.0833335 360 0 2670 --53.7500005 -53.5833335 -22.2500005 -22.0833335 285 0 2670 --53.5833335 -53.4166665 -22.2500005 -22.0833335 388 0 2670 --53.4166665 -53.2499995 -22.2500005 -22.0833335 397 0 2670 --53.2500005 -53.0833335 -22.2500005 -22.0833335 344 0 2670 --53.0833335 -52.9166665 -22.2500005 -22.0833335 337 0 2670 --52.9166665 -52.7499995 -22.2500005 -22.0833335 371 0 2670 --52.7500005 -52.5833335 -22.2500005 -22.0833335 284 0 2670 --52.5833335 -52.4166665 -22.2500005 -22.0833335 258 0 2670 --52.4166665 -52.2499995 -22.2500005 -22.0833335 392 0 2670 --52.2500005 -52.0833335 -22.2500005 -22.0833335 335 0 2670 --52.0833335 -51.9166665 -22.2500005 -22.0833335 412 0 2670 --51.9166665 -51.7499995 -22.2500005 -22.0833335 369 0 2670 --51.7500005 -51.5833335 -22.2500005 -22.0833335 398 0 2670 --51.5833335 -51.4166665 -22.2500005 -22.0833335 356 0 2670 --51.4166665 -51.2499995 -22.2500005 -22.0833335 418 0 2670 --51.2500005 -51.0833335 -22.2500005 -22.0833335 479 0 2670 --51.0833335 -50.9166665 -22.2500005 -22.0833335 445 0 2670 --50.9166665 -50.7499995 -22.2500005 -22.0833335 474 0 2670 --50.7500005 -50.5833335 -22.2500005 -22.0833335 477 0 2670 --50.5833335 -50.4166665 -22.2500005 -22.0833335 408 0 2670 --50.4166665 -50.2499995 -22.2500005 -22.0833335 409 0 2670 --50.2500005 -50.0833335 -22.2500005 -22.0833335 486 0 2670 --50.0833335 -49.9166665 -22.2500005 -22.0833335 612 0 2670 --49.9166665 -49.7499995 -22.2500005 -22.0833335 536 0 2670 --49.7500005 -49.5833335 -22.2500005 -22.0833335 622 0 2670 --49.5833335 -49.4166665 -22.2500005 -22.0833335 568 0 2670 --49.4166665 -49.2499995 -22.2500005 -22.0833335 477 0 2670 --49.2500005 -49.0833335 -22.2500005 -22.0833335 499 0 2670 --49.0833335 -48.9166665 -22.2500005 -22.0833335 553 0 2670 --48.9166665 -48.7499995 -22.2500005 -22.0833335 497 0 2670 --48.7500005 -48.5833335 -22.2500005 -22.0833335 531 0 2670 --48.5833335 -48.4166665 -22.2500005 -22.0833335 640 0 2670 --48.4166665 -48.2499995 -22.2500005 -22.0833335 507 0 2670 --48.2500005 -48.0833335 -22.2500005 -22.0833335 676 0 2670 --48.0833335 -47.9166665 -22.2500005 -22.0833335 789 0 2670 --47.9166665 -47.7499995 -22.2500005 -22.0833335 775 0 2670 --47.7500005 -47.5833335 -22.2500005 -22.0833335 676 0 2670 --47.5833335 -47.4166665 -22.2500005 -22.0833335 662 0 2670 --47.4166665 -47.2499995 -22.2500005 -22.0833335 617 0 2670 --47.2500005 -47.0833335 -22.2500005 -22.0833335 639 0 2670 --47.0833335 -46.9166665 -22.2500005 -22.0833335 667 0 2670 --46.9166665 -46.7499995 -22.2500005 -22.0833335 720 0 2670 --46.7500005 -46.5833335 -22.2500005 -22.0833335 1032 0 2670 --46.5833335 -46.4166665 -22.2500005 -22.0833335 1131 0 2670 --46.4166665 -46.2499995 -22.2500005 -22.0833335 1363 0 2670 --46.2500005 -46.0833335 -22.2500005 -22.0833335 874 0 2670 --46.0833335 -45.9166665 -22.2500005 -22.0833335 874 0 2670 --45.9166665 -45.7499995 -22.2500005 -22.0833335 828 0 2670 --45.7500005 -45.5833335 -22.2500005 -22.0833335 920 0 2670 --45.5833335 -45.4166665 -22.2500005 -22.0833335 1072 0 2670 --45.4166665 -45.2499995 -22.2500005 -22.0833335 974 0 2670 --45.2500005 -45.0833335 -22.2500005 -22.0833335 1035 0 2670 --45.0833335 -44.9166665 -22.2500005 -22.0833335 992 0 2670 --44.9166665 -44.7499995 -22.2500005 -22.0833335 1497 0 2670 --44.7500005 -44.5833335 -22.2500005 -22.0833335 1236 0 2670 --44.5833335 -44.4166665 -22.2500005 -22.0833335 1228 0 2670 --44.4166665 -44.2499995 -22.2500005 -22.0833335 1407 0 2670 --44.2500005 -44.0833335 -22.2500005 -22.0833335 703 0 2670 --44.0833335 -43.9166665 -22.2500005 -22.0833335 515 0 2670 --43.9166665 -43.7499995 -22.2500005 -22.0833335 739 0 2670 --43.7500005 -43.5833335 -22.2500005 -22.0833335 491 0 2670 --43.5833335 -43.4166665 -22.2500005 -22.0833335 676 0 2670 --43.4166665 -43.2499995 -22.2500005 -22.0833335 361 0 2670 --43.2500005 -43.0833335 -22.2500005 -22.0833335 301 0 2670 --43.0833335 -42.9166665 -22.2500005 -22.0833335 743 0 2670 --42.9166665 -42.7499995 -22.2500005 -22.0833335 888 0 2670 --42.7500005 -42.5833335 -22.2500005 -22.0833335 960 0 2670 --42.5833335 -42.4166665 -22.2500005 -22.0833335 859 0 2670 --42.4166665 -42.2499995 -22.2500005 -22.0833335 735 0 2670 --42.2500005 -42.0833335 -22.2500005 -22.0833335 1055 0 2670 --42.0833335 -41.9166665 -22.2500005 -22.0833335 150 0 2670 --41.9166665 -41.7499995 -22.2500005 -22.0833335 133 0 2670 --41.7500005 -41.5833335 -22.2500005 -22.0833335 43 0 2670 --41.5833335 -41.4166665 -22.2500005 -22.0833335 8 0 2670 --41.4166665 -41.2499995 -22.2500005 -22.0833335 5 0 2670 --41.2500005 -41.0833335 -22.2500005 -22.0833335 0 -8 -1670 --41.0833335 -40.9166665 -22.2500005 -22.0833335 0 -25 -1670 --40.9166665 -40.7499995 -22.2500005 -22.0833335 0 -48 -1670 --40.7500005 -40.5833335 -22.2500005 -22.0833335 0 -57 -1670 --40.5833335 -40.4166665 -22.2500005 -22.0833335 0 -83 -1670 --40.4166665 -40.2499995 -22.2500005 -22.0833335 0 -44 -1670 --40.2500005 -40.0833335 -22.2500005 -22.0833335 0 -129 -1670 --40.0833335 -39.9166665 -22.2500005 -22.0833335 0 -284 -1670 --65.0833335 -64.9166665 -22.4166665 -22.2499995 3308 0 2670 --64.9166665 -64.7499995 -22.4166665 -22.2499995 2855 0 2670 --64.7500005 -64.5833335 -22.4166665 -22.2499995 1509 0 2670 --64.5833335 -64.4166665 -22.4166665 -22.2499995 840 0 2670 --64.4166665 -64.2499995 -22.4166665 -22.2499995 1268 0 2670 --64.2500005 -64.0833335 -22.4166665 -22.2499995 827 0 2670 --64.0833335 -63.9166665 -22.4166665 -22.2499995 836 0 2670 --63.9166665 -63.7499995 -22.4166665 -22.2499995 898 0 2670 --63.7500005 -63.5833335 -22.4166665 -22.2499995 463 0 2670 --63.5833335 -63.4166665 -22.4166665 -22.2499995 410 0 2670 --63.4166665 -63.2499995 -22.4166665 -22.2499995 362 0 2670 --63.2500005 -63.0833335 -22.4166665 -22.2499995 320 0 2670 --63.0833335 -62.9166665 -22.4166665 -22.2499995 290 0 2670 --62.9166665 -62.7499995 -22.4166665 -22.2499995 266 0 2670 --62.7500005 -62.5833335 -22.4166665 -22.2499995 262 0 2670 --62.5833335 -62.4166665 -22.4166665 -22.2499995 255 0 2670 --62.4166665 -62.2499995 -22.4166665 -22.2499995 247 0 2670 --62.2500005 -62.0833335 -22.4166665 -22.2499995 240 0 2670 --62.0833335 -61.9166665 -22.4166665 -22.2499995 233 0 2670 --61.9166665 -61.7499995 -22.4166665 -22.2499995 227 0 2670 --61.7500005 -61.5833335 -22.4166665 -22.2499995 214 0 2670 --61.5833335 -61.4166665 -22.4166665 -22.2499995 206 0 2670 --61.4166665 -61.2499995 -22.4166665 -22.2499995 199 0 2670 --61.2500005 -61.0833335 -22.4166665 -22.2499995 190 0 2670 --61.0833335 -60.9166665 -22.4166665 -22.2499995 184 0 2670 --60.9166665 -60.7499995 -22.4166665 -22.2499995 174 0 2670 --60.7500005 -60.5833335 -22.4166665 -22.2499995 166 0 2670 --60.5833335 -60.4166665 -22.4166665 -22.2499995 157 0 2670 --60.4166665 -60.2499995 -22.4166665 -22.2499995 150 0 2670 --60.2500005 -60.0833335 -22.4166665 -22.2499995 142 0 2670 --60.0833335 -59.9166665 -22.4166665 -22.2499995 135 0 2670 --59.9166665 -59.7499995 -22.4166665 -22.2499995 130 0 2670 --59.7500005 -59.5833335 -22.4166665 -22.2499995 124 0 2670 --59.5833335 -59.4166665 -22.4166665 -22.2499995 122 0 2670 --59.4166665 -59.2499995 -22.4166665 -22.2499995 115 0 2670 --59.2500005 -59.0833335 -22.4166665 -22.2499995 108 0 2670 --59.0833335 -58.9166665 -22.4166665 -22.2499995 103 0 2670 --58.9166665 -58.7499995 -22.4166665 -22.2499995 104 0 2670 --58.7500005 -58.5833335 -22.4166665 -22.2499995 102 0 2670 --58.5833335 -58.4166665 -22.4166665 -22.2499995 97 0 2670 --58.4166665 -58.2499995 -22.4166665 -22.2499995 94 0 2670 --58.2500005 -58.0833335 -22.4166665 -22.2499995 86 0 2670 --58.0833335 -57.9166665 -22.4166665 -22.2499995 81 0 2670 --57.9166665 -57.7499995 -22.4166665 -22.2499995 88 0 2670 --57.7500005 -57.5833335 -22.4166665 -22.2499995 99 0 2670 --57.5833335 -57.4166665 -22.4166665 -22.2499995 265 0 2670 --57.4166665 -57.2499995 -22.4166665 -22.2499995 140 0 2670 --57.2500005 -57.0833335 -22.4166665 -22.2499995 168 0 2670 --57.0833335 -56.9166665 -22.4166665 -22.2499995 182 0 2670 --56.9166665 -56.7499995 -22.4166665 -22.2499995 170 0 2670 --56.7500005 -56.5833335 -22.4166665 -22.2499995 209 0 2670 --56.5833335 -56.4166665 -22.4166665 -22.2499995 226 0 2670 --56.4166665 -56.2499995 -22.4166665 -22.2499995 300 0 2670 --56.2500005 -56.0833335 -22.4166665 -22.2499995 358 0 2670 --56.0833335 -55.9166665 -22.4166665 -22.2499995 357 0 2670 --55.9166665 -55.7499995 -22.4166665 -22.2499995 686 0 2670 --55.7500005 -55.5833335 -22.4166665 -22.2499995 635 0 2670 --55.5833335 -55.4166665 -22.4166665 -22.2499995 518 0 2670 --55.4166665 -55.2499995 -22.4166665 -22.2499995 479 0 2670 --55.2500005 -55.0833335 -22.4166665 -22.2499995 413 0 2670 --55.0833335 -54.9166665 -22.4166665 -22.2499995 353 0 2670 --54.9166665 -54.7499995 -22.4166665 -22.2499995 388 0 2670 --54.7500005 -54.5833335 -22.4166665 -22.2499995 351 0 2670 --54.5833335 -54.4166665 -22.4166665 -22.2499995 324 0 2670 --54.4166665 -54.2499995 -22.4166665 -22.2499995 327 0 2670 --54.2500005 -54.0833335 -22.4166665 -22.2499995 411 0 2670 --54.0833335 -53.9166665 -22.4166665 -22.2499995 410 0 2670 --53.9166665 -53.7499995 -22.4166665 -22.2499995 380 0 2670 --53.7500005 -53.5833335 -22.4166665 -22.2499995 376 0 2670 --53.5833335 -53.4166665 -22.4166665 -22.2499995 262 0 2670 --53.4166665 -53.2499995 -22.4166665 -22.2499995 309 0 2670 --53.2500005 -53.0833335 -22.4166665 -22.2499995 276 0 2670 --53.0833335 -52.9166665 -22.4166665 -22.2499995 273 0 2670 --52.9166665 -52.7499995 -22.4166665 -22.2499995 252 0 2670 --52.7500005 -52.5833335 -22.4166665 -22.2499995 332 0 2670 --52.5833335 -52.4166665 -22.4166665 -22.2499995 369 0 2670 --52.4166665 -52.2499995 -22.4166665 -22.2499995 428 0 2670 --52.2500005 -52.0833335 -22.4166665 -22.2499995 390 0 2670 --52.0833335 -51.9166665 -22.4166665 -22.2499995 388 0 2670 --51.9166665 -51.7499995 -22.4166665 -22.2499995 337 0 2670 --51.7500005 -51.5833335 -22.4166665 -22.2499995 391 0 2670 --51.5833335 -51.4166665 -22.4166665 -22.2499995 453 0 2670 --51.4166665 -51.2499995 -22.4166665 -22.2499995 457 0 2670 --51.2500005 -51.0833335 -22.4166665 -22.2499995 441 0 2670 --51.0833335 -50.9166665 -22.4166665 -22.2499995 411 0 2670 --50.9166665 -50.7499995 -22.4166665 -22.2499995 481 0 2670 --50.7500005 -50.5833335 -22.4166665 -22.2499995 519 0 2670 --50.5833335 -50.4166665 -22.4166665 -22.2499995 530 0 2670 --50.4166665 -50.2499995 -22.4166665 -22.2499995 498 0 2670 --50.2500005 -50.0833335 -22.4166665 -22.2499995 458 0 2670 --50.0833335 -49.9166665 -22.4166665 -22.2499995 468 0 2670 --49.9166665 -49.7499995 -22.4166665 -22.2499995 612 0 2670 --49.7500005 -49.5833335 -22.4166665 -22.2499995 667 0 2670 --49.5833335 -49.4166665 -22.4166665 -22.2499995 554 0 2670 --49.4166665 -49.2499995 -22.4166665 -22.2499995 516 0 2670 --49.2500005 -49.0833335 -22.4166665 -22.2499995 517 0 2670 --49.0833335 -48.9166665 -22.4166665 -22.2499995 579 0 2670 --48.9166665 -48.7499995 -22.4166665 -22.2499995 558 0 2670 --48.7500005 -48.5833335 -22.4166665 -22.2499995 471 0 2670 --48.5833335 -48.4166665 -22.4166665 -22.2499995 559 0 2670 --48.4166665 -48.2499995 -22.4166665 -22.2499995 728 0 2670 --48.2500005 -48.0833335 -22.4166665 -22.2499995 567 0 2670 --48.0833335 -47.9166665 -22.4166665 -22.2499995 685 0 2670 --47.9166665 -47.7499995 -22.4166665 -22.2499995 721 0 2670 --47.7500005 -47.5833335 -22.4166665 -22.2499995 604 0 2670 --47.5833335 -47.4166665 -22.4166665 -22.2499995 622 0 2670 --47.4166665 -47.2499995 -22.4166665 -22.2499995 627 0 2670 --47.2500005 -47.0833335 -22.4166665 -22.2499995 602 0 2670 --47.0833335 -46.9166665 -22.4166665 -22.2499995 596 0 2670 --46.9166665 -46.7499995 -22.4166665 -22.2499995 635 0 2670 --46.7500005 -46.5833335 -22.4166665 -22.2499995 798 0 2670 --46.5833335 -46.4166665 -22.4166665 -22.2499995 1003 0 2670 --46.4166665 -46.2499995 -22.4166665 -22.2499995 941 0 2670 --46.2500005 -46.0833335 -22.4166665 -22.2499995 1030 0 2670 --46.0833335 -45.9166665 -22.4166665 -22.2499995 871 0 2670 --45.9166665 -45.7499995 -22.4166665 -22.2499995 854 0 2670 --45.7500005 -45.5833335 -22.4166665 -22.2499995 862 0 2670 --45.5833335 -45.4166665 -22.4166665 -22.2499995 881 0 2670 --45.4166665 -45.2499995 -22.4166665 -22.2499995 1180 0 2670 --45.2500005 -45.0833335 -22.4166665 -22.2499995 1574 0 2670 --45.0833335 -44.9166665 -22.4166665 -22.2499995 1063 0 2670 --44.9166665 -44.7499995 -22.4166665 -22.2499995 1078 0 2670 --44.7500005 -44.5833335 -22.4166665 -22.2499995 2252 0 2670 --44.5833335 -44.4166665 -22.4166665 -22.2499995 1095 0 2670 --44.4166665 -44.2499995 -22.4166665 -22.2499995 673 0 2670 --44.2500005 -44.0833335 -22.4166665 -22.2499995 652 0 2670 --44.0833335 -43.9166665 -22.4166665 -22.2499995 598 0 2670 --43.9166665 -43.7499995 -22.4166665 -22.2499995 686 0 2670 --43.7500005 -43.5833335 -22.4166665 -22.2499995 369 0 2670 --43.5833335 -43.4166665 -22.4166665 -22.2499995 582 0 2670 --43.4166665 -43.2499995 -22.4166665 -22.2499995 715 0 2670 --43.2500005 -43.0833335 -22.4166665 -22.2499995 680 0 2670 --43.0833335 -42.9166665 -22.4166665 -22.2499995 1039 0 2670 --42.9166665 -42.7499995 -22.4166665 -22.2499995 1046 0 2670 --42.7500005 -42.5833335 -22.4166665 -22.2499995 1101 0 2670 --42.5833335 -42.4166665 -22.4166665 -22.2499995 1135 0 2670 --42.4166665 -42.2499995 -22.4166665 -22.2499995 818 0 2670 --42.2500005 -42.0833335 -22.4166665 -22.2499995 642 0 2670 --42.0833335 -41.9166665 -22.4166665 -22.2499995 36 0 2670 --41.9166665 -41.7499995 -22.4166665 -22.2499995 26 0 2670 --41.7500005 -41.5833335 -22.4166665 -22.2499995 0 -4 -1670 --41.5833335 -41.4166665 -22.4166665 -22.2499995 0 -19 -1670 --41.4166665 -41.2499995 -22.4166665 -22.2499995 0 -23 -1670 --41.2500005 -41.0833335 -22.4166665 -22.2499995 0 -34 -1670 --41.0833335 -40.9166665 -22.4166665 -22.2499995 0 -48 -1670 --40.9166665 -40.7499995 -22.4166665 -22.2499995 0 -59 -1670 --40.7500005 -40.5833335 -22.4166665 -22.2499995 0 -64 -1670 --40.5833335 -40.4166665 -22.4166665 -22.2499995 0 -109 -1670 --40.4166665 -40.2499995 -22.4166665 -22.2499995 0 -126 -1670 --40.2500005 -40.0833335 -22.4166665 -22.2499995 0 -443 -1670 --40.0833335 -39.9166665 -22.4166665 -22.2499995 0 -877 -1670 --65.0833335 -64.9166665 -22.5833335 -22.4166665 2806 0 2670 --64.9166665 -64.7499995 -22.5833335 -22.4166665 1843 0 2670 --64.7500005 -64.5833335 -22.5833335 -22.4166665 1036 0 2670 --64.5833335 -64.4166665 -22.5833335 -22.4166665 946 0 2670 --64.4166665 -64.2499995 -22.5833335 -22.4166665 778 0 2670 --64.2500005 -64.0833335 -22.5833335 -22.4166665 489 0 2670 --64.0833335 -63.9166665 -22.5833335 -22.4166665 577 0 2670 --63.9166665 -63.7499995 -22.5833335 -22.4166665 659 0 2670 --63.7500005 -63.5833335 -22.5833335 -22.4166665 400 0 2670 --63.5833335 -63.4166665 -22.5833335 -22.4166665 359 0 2670 --63.4166665 -63.2499995 -22.5833335 -22.4166665 330 0 2670 --63.2500005 -63.0833335 -22.5833335 -22.4166665 304 0 2670 --63.0833335 -62.9166665 -22.5833335 -22.4166665 275 0 2670 --62.9166665 -62.7499995 -22.5833335 -22.4166665 257 0 2670 --62.7500005 -62.5833335 -22.5833335 -22.4166665 253 0 2670 --62.5833335 -62.4166665 -22.5833335 -22.4166665 247 0 2670 --62.4166665 -62.2499995 -22.5833335 -22.4166665 243 0 2670 --62.2500005 -62.0833335 -22.5833335 -22.4166665 234 0 2670 --62.0833335 -61.9166665 -22.5833335 -22.4166665 226 0 2670 --61.9166665 -61.7499995 -22.5833335 -22.4166665 220 0 2670 --61.7500005 -61.5833335 -22.5833335 -22.4166665 211 0 2670 --61.5833335 -61.4166665 -22.5833335 -22.4166665 204 0 2670 --61.4166665 -61.2499995 -22.5833335 -22.4166665 195 0 2670 --61.2500005 -61.0833335 -22.5833335 -22.4166665 188 0 2670 --61.0833335 -60.9166665 -22.5833335 -22.4166665 180 0 2670 --60.9166665 -60.7499995 -22.5833335 -22.4166665 170 0 2670 --60.7500005 -60.5833335 -22.5833335 -22.4166665 163 0 2670 --60.5833335 -60.4166665 -22.5833335 -22.4166665 155 0 2670 --60.4166665 -60.2499995 -22.5833335 -22.4166665 148 0 2670 --60.2500005 -60.0833335 -22.5833335 -22.4166665 141 0 2670 --60.0833335 -59.9166665 -22.5833335 -22.4166665 133 0 2670 --59.9166665 -59.7499995 -22.5833335 -22.4166665 125 0 2670 --59.7500005 -59.5833335 -22.5833335 -22.4166665 122 0 2670 --59.5833335 -59.4166665 -22.5833335 -22.4166665 116 0 2670 --59.4166665 -59.2499995 -22.5833335 -22.4166665 116 0 2670 --59.2500005 -59.0833335 -22.5833335 -22.4166665 109 0 2670 --59.0833335 -58.9166665 -22.5833335 -22.4166665 107 0 2670 --58.9166665 -58.7499995 -22.5833335 -22.4166665 103 0 2670 --58.7500005 -58.5833335 -22.5833335 -22.4166665 97 0 2670 --58.5833335 -58.4166665 -22.5833335 -22.4166665 94 0 2670 --58.4166665 -58.2499995 -22.5833335 -22.4166665 92 0 2670 --58.2500005 -58.0833335 -22.5833335 -22.4166665 87 0 2670 --58.0833335 -57.9166665 -22.5833335 -22.4166665 84 0 2670 --57.9166665 -57.7499995 -22.5833335 -22.4166665 79 0 2670 --57.7500005 -57.5833335 -22.5833335 -22.4166665 103 0 2670 --57.5833335 -57.4166665 -22.5833335 -22.4166665 183 0 2670 --57.4166665 -57.2499995 -22.5833335 -22.4166665 196 0 2670 --57.2500005 -57.0833335 -22.5833335 -22.4166665 234 0 2670 --57.0833335 -56.9166665 -22.5833335 -22.4166665 239 0 2670 --56.9166665 -56.7499995 -22.5833335 -22.4166665 191 0 2670 --56.7500005 -56.5833335 -22.5833335 -22.4166665 180 0 2670 --56.5833335 -56.4166665 -22.5833335 -22.4166665 207 0 2670 --56.4166665 -56.2499995 -22.5833335 -22.4166665 387 0 2670 --56.2500005 -56.0833335 -22.5833335 -22.4166665 314 0 2670 --56.0833335 -55.9166665 -22.5833335 -22.4166665 385 0 2670 --55.9166665 -55.7499995 -22.5833335 -22.4166665 422 0 2670 --55.7500005 -55.5833335 -22.5833335 -22.4166665 607 0 2670 --55.5833335 -55.4166665 -22.5833335 -22.4166665 557 0 2670 --55.4166665 -55.2499995 -22.5833335 -22.4166665 486 0 2670 --55.2500005 -55.0833335 -22.5833335 -22.4166665 451 0 2670 --55.0833335 -54.9166665 -22.5833335 -22.4166665 397 0 2670 --54.9166665 -54.7499995 -22.5833335 -22.4166665 395 0 2670 --54.7500005 -54.5833335 -22.5833335 -22.4166665 353 0 2670 --54.5833335 -54.4166665 -22.5833335 -22.4166665 412 0 2670 --54.4166665 -54.2499995 -22.5833335 -22.4166665 430 0 2670 --54.2500005 -54.0833335 -22.5833335 -22.4166665 382 0 2670 --54.0833335 -53.9166665 -22.5833335 -22.4166665 355 0 2670 --53.9166665 -53.7499995 -22.5833335 -22.4166665 344 0 2670 --53.7500005 -53.5833335 -22.5833335 -22.4166665 312 0 2670 --53.5833335 -53.4166665 -22.5833335 -22.4166665 248 0 2670 --53.4166665 -53.2499995 -22.5833335 -22.4166665 267 0 2670 --53.2500005 -53.0833335 -22.5833335 -22.4166665 250 0 2670 --53.0833335 -52.9166665 -22.5833335 -22.4166665 240 0 2670 --52.9166665 -52.7499995 -22.5833335 -22.4166665 325 0 2670 --52.7500005 -52.5833335 -22.5833335 -22.4166665 390 0 2670 --52.5833335 -52.4166665 -22.5833335 -22.4166665 396 0 2670 --52.4166665 -52.2499995 -22.5833335 -22.4166665 354 0 2670 --52.2500005 -52.0833335 -22.5833335 -22.4166665 285 0 2670 --52.0833335 -51.9166665 -22.5833335 -22.4166665 289 0 2670 --51.9166665 -51.7499995 -22.5833335 -22.4166665 382 0 2670 --51.7500005 -51.5833335 -22.5833335 -22.4166665 367 0 2670 --51.5833335 -51.4166665 -22.5833335 -22.4166665 394 0 2670 --51.4166665 -51.2499995 -22.5833335 -22.4166665 457 0 2670 --51.2500005 -51.0833335 -22.5833335 -22.4166665 425 0 2670 --51.0833335 -50.9166665 -22.5833335 -22.4166665 443 0 2670 --50.9166665 -50.7499995 -22.5833335 -22.4166665 465 0 2670 --50.7500005 -50.5833335 -22.5833335 -22.4166665 506 0 2670 --50.5833335 -50.4166665 -22.5833335 -22.4166665 450 0 2670 --50.4166665 -50.2499995 -22.5833335 -22.4166665 499 0 2670 --50.2500005 -50.0833335 -22.5833335 -22.4166665 535 0 2670 --50.0833335 -49.9166665 -22.5833335 -22.4166665 515 0 2670 --49.9166665 -49.7499995 -22.5833335 -22.4166665 516 0 2670 --49.7500005 -49.5833335 -22.5833335 -22.4166665 501 0 2670 --49.5833335 -49.4166665 -22.5833335 -22.4166665 528 0 2670 --49.4166665 -49.2499995 -22.5833335 -22.4166665 559 0 2670 --49.2500005 -49.0833335 -22.5833335 -22.4166665 595 0 2670 --49.0833335 -48.9166665 -22.5833335 -22.4166665 613 0 2670 --48.9166665 -48.7499995 -22.5833335 -22.4166665 562 0 2670 --48.7500005 -48.5833335 -22.5833335 -22.4166665 544 0 2670 --48.5833335 -48.4166665 -22.5833335 -22.4166665 508 0 2670 --48.4166665 -48.2499995 -22.5833335 -22.4166665 544 0 2670 --48.2500005 -48.0833335 -22.5833335 -22.4166665 614 0 2670 --48.0833335 -47.9166665 -22.5833335 -22.4166665 882 0 2670 --47.9166665 -47.7499995 -22.5833335 -22.4166665 514 0 2670 --47.7500005 -47.5833335 -22.5833335 -22.4166665 534 0 2670 --47.5833335 -47.4166665 -22.5833335 -22.4166665 691 0 2670 --47.4166665 -47.2499995 -22.5833335 -22.4166665 657 0 2670 --47.2500005 -47.0833335 -22.5833335 -22.4166665 668 0 2670 --47.0833335 -46.9166665 -22.5833335 -22.4166665 648 0 2670 --46.9166665 -46.7499995 -22.5833335 -22.4166665 681 0 2670 --46.7500005 -46.5833335 -22.5833335 -22.4166665 740 0 2670 --46.5833335 -46.4166665 -22.5833335 -22.4166665 798 0 2670 --46.4166665 -46.2499995 -22.5833335 -22.4166665 1327 0 2670 --46.2500005 -46.0833335 -22.5833335 -22.4166665 1407 0 2670 --46.0833335 -45.9166665 -22.5833335 -22.4166665 884 0 2670 --45.9166665 -45.7499995 -22.5833335 -22.4166665 926 0 2670 --45.7500005 -45.5833335 -22.5833335 -22.4166665 1097 0 2670 --45.5833335 -45.4166665 -22.5833335 -22.4166665 897 0 2670 --45.4166665 -45.2499995 -22.5833335 -22.4166665 1251 0 2670 --45.2500005 -45.0833335 -22.5833335 -22.4166665 1733 0 2670 --45.0833335 -44.9166665 -22.5833335 -22.4166665 963 0 2670 --44.9166665 -44.7499995 -22.5833335 -22.4166665 814 0 2670 --44.7500005 -44.5833335 -22.5833335 -22.4166665 487 0 2670 --44.5833335 -44.4166665 -22.5833335 -22.4166665 445 0 2670 --44.4166665 -44.2499995 -22.5833335 -22.4166665 629 0 2670 --44.2500005 -44.0833335 -22.5833335 -22.4166665 500 0 2670 --44.0833335 -43.9166665 -22.5833335 -22.4166665 386 0 2670 --43.9166665 -43.7499995 -22.5833335 -22.4166665 466 0 2670 --43.7500005 -43.5833335 -22.5833335 -22.4166665 519 0 2670 --43.5833335 -43.4166665 -22.5833335 -22.4166665 378 0 2670 --43.4166665 -43.2499995 -22.5833335 -22.4166665 1034 0 2670 --43.2500005 -43.0833335 -22.5833335 -22.4166665 907 0 2670 --43.0833335 -42.9166665 -22.5833335 -22.4166665 401 0 2670 --42.9166665 -42.7499995 -22.5833335 -22.4166665 33 0 2670 --42.7500005 -42.5833335 -22.5833335 -22.4166665 65 0 2670 --42.5833335 -42.4166665 -22.5833335 -22.4166665 147 0 2670 --42.4166665 -42.2499995 -22.5833335 -22.4166665 154 0 2670 --42.2500005 -42.0833335 -22.5833335 -22.4166665 26 0 2670 --42.0833335 -41.9166665 -22.5833335 -22.4166665 18 0 2670 --41.9166665 -41.7499995 -22.5833335 -22.4166665 0 -17 -1670 --41.7500005 -41.5833335 -22.5833335 -22.4166665 0 -32 -1670 --41.5833335 -41.4166665 -22.5833335 -22.4166665 0 -37 -1670 --41.4166665 -41.2499995 -22.5833335 -22.4166665 0 -43 -1670 --41.2500005 -41.0833335 -22.5833335 -22.4166665 0 -55 -1670 --41.0833335 -40.9166665 -22.5833335 -22.4166665 0 -50 -1670 --40.9166665 -40.7499995 -22.5833335 -22.4166665 0 -65 -1670 --40.7500005 -40.5833335 -22.5833335 -22.4166665 0 -96 -1670 --40.5833335 -40.4166665 -22.5833335 -22.4166665 0 -277 -1670 --40.4166665 -40.2499995 -22.5833335 -22.4166665 0 -712 -1670 --40.2500005 -40.0833335 -22.5833335 -22.4166665 0 -896 -1670 --40.0833335 -39.9166665 -22.5833335 -22.4166665 0 -1179 -1670 --65.0833335 -64.9166665 -22.7500005 -22.5833335 2700 0 2670 --64.9166665 -64.7499995 -22.7500005 -22.5833335 1502 0 2670 --64.7500005 -64.5833335 -22.7500005 -22.5833335 832 0 2670 --64.5833335 -64.4166665 -22.7500005 -22.5833335 717 0 2670 --64.4166665 -64.2499995 -22.7500005 -22.5833335 596 0 2670 --64.2500005 -64.0833335 -22.7500005 -22.5833335 554 0 2670 --64.0833335 -63.9166665 -22.7500005 -22.5833335 499 0 2670 --63.9166665 -63.7499995 -22.7500005 -22.5833335 455 0 2670 --63.7500005 -63.5833335 -22.7500005 -22.5833335 356 0 2670 --63.5833335 -63.4166665 -22.7500005 -22.5833335 309 0 2670 --63.4166665 -63.2499995 -22.7500005 -22.5833335 297 0 2670 --63.2500005 -63.0833335 -22.7500005 -22.5833335 277 0 2670 --63.0833335 -62.9166665 -22.7500005 -22.5833335 259 0 2670 --62.9166665 -62.7499995 -22.7500005 -22.5833335 245 0 2670 --62.7500005 -62.5833335 -22.7500005 -22.5833335 239 0 2670 --62.5833335 -62.4166665 -22.7500005 -22.5833335 238 0 2670 --62.4166665 -62.2499995 -22.7500005 -22.5833335 233 0 2670 --62.2500005 -62.0833335 -22.7500005 -22.5833335 229 0 2670 --62.0833335 -61.9166665 -22.7500005 -22.5833335 221 0 2670 --61.9166665 -61.7499995 -22.7500005 -22.5833335 214 0 2670 --61.7500005 -61.5833335 -22.7500005 -22.5833335 206 0 2670 --61.5833335 -61.4166665 -22.7500005 -22.5833335 201 0 2670 --61.4166665 -61.2499995 -22.7500005 -22.5833335 193 0 2670 --61.2500005 -61.0833335 -22.7500005 -22.5833335 185 0 2670 --61.0833335 -60.9166665 -22.7500005 -22.5833335 176 0 2670 --60.9166665 -60.7499995 -22.7500005 -22.5833335 168 0 2670 --60.7500005 -60.5833335 -22.7500005 -22.5833335 160 0 2670 --60.5833335 -60.4166665 -22.7500005 -22.5833335 156 0 2670 --60.4166665 -60.2499995 -22.7500005 -22.5833335 148 0 2670 --60.2500005 -60.0833335 -22.7500005 -22.5833335 139 0 2670 --60.0833335 -59.9166665 -22.7500005 -22.5833335 132 0 2670 --59.9166665 -59.7499995 -22.7500005 -22.5833335 127 0 2670 --59.7500005 -59.5833335 -22.7500005 -22.5833335 121 0 2670 --59.5833335 -59.4166665 -22.7500005 -22.5833335 117 0 2670 --59.4166665 -59.2499995 -22.7500005 -22.5833335 114 0 2670 --59.2500005 -59.0833335 -22.7500005 -22.5833335 110 0 2670 --59.0833335 -58.9166665 -22.7500005 -22.5833335 106 0 2670 --58.9166665 -58.7499995 -22.7500005 -22.5833335 102 0 2670 --58.7500005 -58.5833335 -22.7500005 -22.5833335 100 0 2670 --58.5833335 -58.4166665 -22.7500005 -22.5833335 96 0 2670 --58.4166665 -58.2499995 -22.7500005 -22.5833335 91 0 2670 --58.2500005 -58.0833335 -22.7500005 -22.5833335 89 0 2670 --58.0833335 -57.9166665 -22.7500005 -22.5833335 78 0 2670 --57.9166665 -57.7499995 -22.7500005 -22.5833335 72 0 2670 --57.7500005 -57.5833335 -22.7500005 -22.5833335 127 0 2670 --57.5833335 -57.4166665 -22.7500005 -22.5833335 180 0 2670 --57.4166665 -57.2499995 -22.7500005 -22.5833335 215 0 2670 --57.2500005 -57.0833335 -22.7500005 -22.5833335 238 0 2670 --57.0833335 -56.9166665 -22.7500005 -22.5833335 175 0 2670 --56.9166665 -56.7499995 -22.7500005 -22.5833335 148 0 2670 --56.7500005 -56.5833335 -22.7500005 -22.5833335 167 0 2670 --56.5833335 -56.4166665 -22.7500005 -22.5833335 217 0 2670 --56.4166665 -56.2499995 -22.7500005 -22.5833335 218 0 2670 --56.2500005 -56.0833335 -22.7500005 -22.5833335 235 0 2670 --56.0833335 -55.9166665 -22.7500005 -22.5833335 293 0 2670 --55.9166665 -55.7499995 -22.7500005 -22.5833335 549 0 2670 --55.7500005 -55.5833335 -22.7500005 -22.5833335 524 0 2670 --55.5833335 -55.4166665 -22.7500005 -22.5833335 572 0 2670 --55.4166665 -55.2499995 -22.7500005 -22.5833335 495 0 2670 --55.2500005 -55.0833335 -22.7500005 -22.5833335 522 0 2670 --55.0833335 -54.9166665 -22.7500005 -22.5833335 422 0 2670 --54.9166665 -54.7499995 -22.7500005 -22.5833335 422 0 2670 --54.7500005 -54.5833335 -22.7500005 -22.5833335 425 0 2670 --54.5833335 -54.4166665 -22.7500005 -22.5833335 434 0 2670 --54.4166665 -54.2499995 -22.7500005 -22.5833335 434 0 2670 --54.2500005 -54.0833335 -22.7500005 -22.5833335 393 0 2670 --54.0833335 -53.9166665 -22.7500005 -22.5833335 358 0 2670 --53.9166665 -53.7499995 -22.7500005 -22.5833335 347 0 2670 --53.7500005 -53.5833335 -22.7500005 -22.5833335 261 0 2670 --53.5833335 -53.4166665 -22.7500005 -22.5833335 248 0 2670 --53.4166665 -53.2499995 -22.7500005 -22.5833335 243 0 2670 --53.2500005 -53.0833335 -22.7500005 -22.5833335 238 0 2670 --53.0833335 -52.9166665 -22.7500005 -22.5833335 331 0 2670 --52.9166665 -52.7499995 -22.7500005 -22.5833335 375 0 2670 --52.7500005 -52.5833335 -22.7500005 -22.5833335 325 0 2670 --52.5833335 -52.4166665 -22.7500005 -22.5833335 360 0 2670 --52.4166665 -52.2499995 -22.7500005 -22.5833335 301 0 2670 --52.2500005 -52.0833335 -22.7500005 -22.5833335 277 0 2670 --52.0833335 -51.9166665 -22.7500005 -22.5833335 325 0 2670 --51.9166665 -51.7499995 -22.7500005 -22.5833335 334 0 2670 --51.7500005 -51.5833335 -22.7500005 -22.5833335 298 0 2670 --51.5833335 -51.4166665 -22.7500005 -22.5833335 324 0 2670 --51.4166665 -51.2499995 -22.7500005 -22.5833335 325 0 2670 --51.2500005 -51.0833335 -22.7500005 -22.5833335 334 0 2670 --51.0833335 -50.9166665 -22.7500005 -22.5833335 386 0 2670 --50.9166665 -50.7499995 -22.7500005 -22.5833335 372 0 2670 --50.7500005 -50.5833335 -22.7500005 -22.5833335 495 0 2670 --50.5833335 -50.4166665 -22.7500005 -22.5833335 506 0 2670 --50.4166665 -50.2499995 -22.7500005 -22.5833335 498 0 2670 --50.2500005 -50.0833335 -22.7500005 -22.5833335 528 0 2670 --50.0833335 -49.9166665 -22.7500005 -22.5833335 494 0 2670 --49.9166665 -49.7499995 -22.7500005 -22.5833335 555 0 2670 --49.7500005 -49.5833335 -22.7500005 -22.5833335 552 0 2670 --49.5833335 -49.4166665 -22.7500005 -22.5833335 566 0 2670 --49.4166665 -49.2499995 -22.7500005 -22.5833335 527 0 2670 --49.2500005 -49.0833335 -22.7500005 -22.5833335 648 0 2670 --49.0833335 -48.9166665 -22.7500005 -22.5833335 646 0 2670 --48.9166665 -48.7499995 -22.7500005 -22.5833335 624 0 2670 --48.7500005 -48.5833335 -22.7500005 -22.5833335 640 0 2670 --48.5833335 -48.4166665 -22.7500005 -22.5833335 569 0 2670 --48.4166665 -48.2499995 -22.7500005 -22.5833335 458 0 2670 --48.2500005 -48.0833335 -22.7500005 -22.5833335 542 0 2670 --48.0833335 -47.9166665 -22.7500005 -22.5833335 454 0 2670 --47.9166665 -47.7499995 -22.7500005 -22.5833335 472 0 2670 --47.7500005 -47.5833335 -22.7500005 -22.5833335 492 0 2670 --47.5833335 -47.4166665 -22.7500005 -22.5833335 539 0 2670 --47.4166665 -47.2499995 -22.7500005 -22.5833335 583 0 2670 --47.2500005 -47.0833335 -22.7500005 -22.5833335 580 0 2670 --47.0833335 -46.9166665 -22.7500005 -22.5833335 582 0 2670 --46.9166665 -46.7499995 -22.7500005 -22.5833335 688 0 2670 --46.7500005 -46.5833335 -22.7500005 -22.5833335 907 0 2670 --46.5833335 -46.4166665 -22.7500005 -22.5833335 1061 0 2670 --46.4166665 -46.2499995 -22.7500005 -22.5833335 1396 0 2670 --46.2500005 -46.0833335 -22.7500005 -22.5833335 1132 0 2670 --46.0833335 -45.9166665 -22.7500005 -22.5833335 1252 0 2670 --45.9166665 -45.7499995 -22.7500005 -22.5833335 1342 0 2670 --45.7500005 -45.5833335 -22.7500005 -22.5833335 1195 0 2670 --45.5833335 -45.4166665 -22.7500005 -22.5833335 1493 0 2670 --45.4166665 -45.2499995 -22.7500005 -22.5833335 1128 0 2670 --45.2500005 -45.0833335 -22.7500005 -22.5833335 592 0 2670 --45.0833335 -44.9166665 -22.7500005 -22.5833335 552 0 2670 --44.9166665 -44.7499995 -22.7500005 -22.5833335 668 0 2670 --44.7500005 -44.5833335 -22.7500005 -22.5833335 607 0 2670 --44.5833335 -44.4166665 -22.7500005 -22.5833335 856 0 2670 --44.4166665 -44.2499995 -22.7500005 -22.5833335 532 0 2670 --44.2500005 -44.0833335 -22.7500005 -22.5833335 547 0 2670 --44.0833335 -43.9166665 -22.7500005 -22.5833335 475 0 2670 --43.9166665 -43.7499995 -22.7500005 -22.5833335 316 0 2670 --43.7500005 -43.5833335 -22.7500005 -22.5833335 66 0 2670 --43.5833335 -43.4166665 -22.7500005 -22.5833335 71 0 2670 --43.4166665 -43.2499995 -22.7500005 -22.5833335 15 0 2670 --43.2500005 -43.0833335 -22.7500005 -22.5833335 32 0 2670 --43.0833335 -42.9166665 -22.7500005 -22.5833335 5 0 2670 --42.9166665 -42.7499995 -22.7500005 -22.5833335 17 0 2670 --42.7500005 -42.5833335 -22.7500005 -22.5833335 181 0 2670 --42.5833335 -42.4166665 -22.7500005 -22.5833335 60 0 2670 --42.4166665 -42.2499995 -22.7500005 -22.5833335 28 0 2670 --42.2500005 -42.0833335 -22.7500005 -22.5833335 23 0 2670 --42.0833335 -41.9166665 -22.7500005 -22.5833335 5 0 2670 --41.9166665 -41.7499995 -22.7500005 -22.5833335 0 -24 -1670 --41.7500005 -41.5833335 -22.7500005 -22.5833335 0 -47 -1670 --41.5833335 -41.4166665 -22.7500005 -22.5833335 0 -51 -1670 --41.4166665 -41.2499995 -22.7500005 -22.5833335 0 -54 -1670 --41.2500005 -41.0833335 -22.7500005 -22.5833335 0 -60 -1670 --41.0833335 -40.9166665 -22.7500005 -22.5833335 0 -64 -1670 --40.9166665 -40.7499995 -22.7500005 -22.5833335 0 -77 -1670 --40.7500005 -40.5833335 -22.7500005 -22.5833335 0 -131 -1670 --40.5833335 -40.4166665 -22.7500005 -22.5833335 0 -778 -1670 --40.4166665 -40.2499995 -22.7500005 -22.5833335 0 -945 -1670 --40.2500005 -40.0833335 -22.7500005 -22.5833335 0 -1210 -1670 --40.0833335 -39.9166665 -22.7500005 -22.5833335 0 -1910 -1670 --65.0833335 -64.9166665 -22.9166665 -22.7499995 1771 0 2670 --64.9166665 -64.7499995 -22.9166665 -22.7499995 1471 0 2670 --64.7500005 -64.5833335 -22.9166665 -22.7499995 928 0 2670 --64.5833335 -64.4166665 -22.9166665 -22.7499995 669 0 2670 --64.4166665 -64.2499995 -22.9166665 -22.7499995 363 0 2670 --64.2500005 -64.0833335 -22.9166665 -22.7499995 788 0 2670 --64.0833335 -63.9166665 -22.9166665 -22.7499995 426 0 2670 --63.9166665 -63.7499995 -22.9166665 -22.7499995 369 0 2670 --63.7500005 -63.5833335 -22.9166665 -22.7499995 303 0 2670 --63.5833335 -63.4166665 -22.9166665 -22.7499995 270 0 2670 --63.4166665 -63.2499995 -22.9166665 -22.7499995 262 0 2670 --63.2500005 -63.0833335 -22.9166665 -22.7499995 252 0 2670 --63.0833335 -62.9166665 -22.9166665 -22.7499995 237 0 2670 --62.9166665 -62.7499995 -22.9166665 -22.7499995 237 0 2670 --62.7500005 -62.5833335 -22.9166665 -22.7499995 232 0 2670 --62.5833335 -62.4166665 -22.9166665 -22.7499995 227 0 2670 --62.4166665 -62.2499995 -22.9166665 -22.7499995 229 0 2670 --62.2500005 -62.0833335 -22.9166665 -22.7499995 222 0 2670 --62.0833335 -61.9166665 -22.9166665 -22.7499995 218 0 2670 --61.9166665 -61.7499995 -22.9166665 -22.7499995 207 0 2670 --61.7500005 -61.5833335 -22.9166665 -22.7499995 201 0 2670 --61.5833335 -61.4166665 -22.9166665 -22.7499995 196 0 2670 --61.4166665 -61.2499995 -22.9166665 -22.7499995 186 0 2670 --61.2500005 -61.0833335 -22.9166665 -22.7499995 182 0 2670 --61.0833335 -60.9166665 -22.9166665 -22.7499995 175 0 2670 --60.9166665 -60.7499995 -22.9166665 -22.7499995 166 0 2670 --60.7500005 -60.5833335 -22.9166665 -22.7499995 160 0 2670 --60.5833335 -60.4166665 -22.9166665 -22.7499995 155 0 2670 --60.4166665 -60.2499995 -22.9166665 -22.7499995 147 0 2670 --60.2500005 -60.0833335 -22.9166665 -22.7499995 142 0 2670 --60.0833335 -59.9166665 -22.9166665 -22.7499995 132 0 2670 --59.9166665 -59.7499995 -22.9166665 -22.7499995 126 0 2670 --59.7500005 -59.5833335 -22.9166665 -22.7499995 122 0 2670 --59.5833335 -59.4166665 -22.9166665 -22.7499995 118 0 2670 --59.4166665 -59.2499995 -22.9166665 -22.7499995 112 0 2670 --59.2500005 -59.0833335 -22.9166665 -22.7499995 107 0 2670 --59.0833335 -58.9166665 -22.9166665 -22.7499995 104 0 2670 --58.9166665 -58.7499995 -22.9166665 -22.7499995 102 0 2670 --58.7500005 -58.5833335 -22.9166665 -22.7499995 102 0 2670 --58.5833335 -58.4166665 -22.9166665 -22.7499995 99 0 2670 --58.4166665 -58.2499995 -22.9166665 -22.7499995 90 0 2670 --58.2500005 -58.0833335 -22.9166665 -22.7499995 87 0 2670 --58.0833335 -57.9166665 -22.9166665 -22.7499995 82 0 2670 --57.9166665 -57.7499995 -22.9166665 -22.7499995 70 0 2670 --57.7500005 -57.5833335 -22.9166665 -22.7499995 91 0 2670 --57.5833335 -57.4166665 -22.9166665 -22.7499995 113 0 2670 --57.4166665 -57.2499995 -22.9166665 -22.7499995 124 0 2670 --57.2500005 -57.0833335 -22.9166665 -22.7499995 137 0 2670 --57.0833335 -56.9166665 -22.9166665 -22.7499995 129 0 2670 --56.9166665 -56.7499995 -22.9166665 -22.7499995 132 0 2670 --56.7500005 -56.5833335 -22.9166665 -22.7499995 135 0 2670 --56.5833335 -56.4166665 -22.9166665 -22.7499995 164 0 2670 --56.4166665 -56.2499995 -22.9166665 -22.7499995 234 0 2670 --56.2500005 -56.0833335 -22.9166665 -22.7499995 468 0 2670 --56.0833335 -55.9166665 -22.9166665 -22.7499995 313 0 2670 --55.9166665 -55.7499995 -22.9166665 -22.7499995 396 0 2670 --55.7500005 -55.5833335 -22.9166665 -22.7499995 596 0 2670 --55.5833335 -55.4166665 -22.9166665 -22.7499995 496 0 2670 --55.4166665 -55.2499995 -22.9166665 -22.7499995 470 0 2670 --55.2500005 -55.0833335 -22.9166665 -22.7499995 415 0 2670 --55.0833335 -54.9166665 -22.9166665 -22.7499995 402 0 2670 --54.9166665 -54.7499995 -22.9166665 -22.7499995 321 0 2670 --54.7500005 -54.5833335 -22.9166665 -22.7499995 369 0 2670 --54.5833335 -54.4166665 -22.9166665 -22.7499995 361 0 2670 --54.4166665 -54.2499995 -22.9166665 -22.7499995 363 0 2670 --54.2500005 -54.0833335 -22.9166665 -22.7499995 381 0 2670 --54.0833335 -53.9166665 -22.9166665 -22.7499995 308 0 2670 --53.9166665 -53.7499995 -22.9166665 -22.7499995 354 0 2670 --53.7500005 -53.5833335 -22.9166665 -22.7499995 241 0 2670 --53.5833335 -53.4166665 -22.9166665 -22.7499995 238 0 2670 --53.4166665 -53.2499995 -22.9166665 -22.7499995 288 0 2670 --53.2500005 -53.0833335 -22.9166665 -22.7499995 384 0 2670 --53.0833335 -52.9166665 -22.9166665 -22.7499995 346 0 2670 --52.9166665 -52.7499995 -22.9166665 -22.7499995 407 0 2670 --52.7500005 -52.5833335 -22.9166665 -22.7499995 471 0 2670 --52.5833335 -52.4166665 -22.9166665 -22.7499995 437 0 2670 --52.4166665 -52.2499995 -22.9166665 -22.7499995 394 0 2670 --52.2500005 -52.0833335 -22.9166665 -22.7499995 427 0 2670 --52.0833335 -51.9166665 -22.9166665 -22.7499995 394 0 2670 --51.9166665 -51.7499995 -22.9166665 -22.7499995 385 0 2670 --51.7500005 -51.5833335 -22.9166665 -22.7499995 454 0 2670 --51.5833335 -51.4166665 -22.9166665 -22.7499995 435 0 2670 --51.4166665 -51.2499995 -22.9166665 -22.7499995 330 0 2670 --51.2500005 -51.0833335 -22.9166665 -22.7499995 333 0 2670 --51.0833335 -50.9166665 -22.9166665 -22.7499995 333 0 2670 --50.9166665 -50.7499995 -22.9166665 -22.7499995 334 0 2670 --50.7500005 -50.5833335 -22.9166665 -22.7499995 411 0 2670 --50.5833335 -50.4166665 -22.9166665 -22.7499995 429 0 2670 --50.4166665 -50.2499995 -22.9166665 -22.7499995 444 0 2670 --50.2500005 -50.0833335 -22.9166665 -22.7499995 467 0 2670 --50.0833335 -49.9166665 -22.9166665 -22.7499995 428 0 2670 --49.9166665 -49.7499995 -22.9166665 -22.7499995 466 0 2670 --49.7500005 -49.5833335 -22.9166665 -22.7499995 587 0 2670 --49.5833335 -49.4166665 -22.9166665 -22.7499995 611 0 2670 --49.4166665 -49.2499995 -22.9166665 -22.7499995 643 0 2670 --49.2500005 -49.0833335 -22.9166665 -22.7499995 627 0 2670 --49.0833335 -48.9166665 -22.9166665 -22.7499995 680 0 2670 --48.9166665 -48.7499995 -22.9166665 -22.7499995 737 0 2670 --48.7500005 -48.5833335 -22.9166665 -22.7499995 718 0 2670 --48.5833335 -48.4166665 -22.9166665 -22.7499995 779 0 2670 --48.4166665 -48.2499995 -22.9166665 -22.7499995 588 0 2670 --48.2500005 -48.0833335 -22.9166665 -22.7499995 504 0 2670 --48.0833335 -47.9166665 -22.9166665 -22.7499995 486 0 2670 --47.9166665 -47.7499995 -22.9166665 -22.7499995 531 0 2670 --47.7500005 -47.5833335 -22.9166665 -22.7499995 588 0 2670 --47.5833335 -47.4166665 -22.9166665 -22.7499995 621 0 2670 --47.4166665 -47.2499995 -22.9166665 -22.7499995 598 0 2670 --47.2500005 -47.0833335 -22.9166665 -22.7499995 611 0 2670 --47.0833335 -46.9166665 -22.9166665 -22.7499995 684 0 2670 --46.9166665 -46.7499995 -22.9166665 -22.7499995 831 0 2670 --46.7500005 -46.5833335 -22.9166665 -22.7499995 852 0 2670 --46.5833335 -46.4166665 -22.9166665 -22.7499995 990 0 2670 --46.4166665 -46.2499995 -22.9166665 -22.7499995 937 0 2670 --46.2500005 -46.0833335 -22.9166665 -22.7499995 1207 0 2670 --46.0833335 -45.9166665 -22.9166665 -22.7499995 1501 0 2670 --45.9166665 -45.7499995 -22.9166665 -22.7499995 1538 0 2670 --45.7500005 -45.5833335 -22.9166665 -22.7499995 1160 0 2670 --45.5833335 -45.4166665 -22.9166665 -22.7499995 733 0 2670 --45.4166665 -45.2499995 -22.9166665 -22.7499995 553 0 2670 --45.2500005 -45.0833335 -22.9166665 -22.7499995 599 0 2670 --45.0833335 -44.9166665 -22.9166665 -22.7499995 1082 0 2670 --44.9166665 -44.7499995 -22.9166665 -22.7499995 1094 0 2670 --44.7500005 -44.5833335 -22.9166665 -22.7499995 1594 0 2670 --44.5833335 -44.4166665 -22.9166665 -22.7499995 1449 0 2670 --44.4166665 -44.2499995 -22.9166665 -22.7499995 1093 0 2670 --44.2500005 -44.0833335 -22.9166665 -22.7499995 720 0 2670 --44.0833335 -43.9166665 -22.9166665 -22.7499995 482 0 2670 --43.9166665 -43.7499995 -22.9166665 -22.7499995 23 0 2670 --43.7500005 -43.5833335 -22.9166665 -22.7499995 9 0 2670 --43.5833335 -43.4166665 -22.9166665 -22.7499995 180 0 2670 --43.4166665 -43.2499995 -22.9166665 -22.7499995 17 0 2670 --43.2500005 -43.0833335 -22.9166665 -22.7499995 0 0 2670 --43.0833335 -42.9166665 -22.9166665 -22.7499995 30 0 2670 --42.9166665 -42.7499995 -22.9166665 -22.7499995 63 0 2670 --42.7500005 -42.5833335 -22.9166665 -22.7499995 253 0 2670 --42.5833335 -42.4166665 -22.9166665 -22.7499995 194 0 2670 --42.4166665 -42.2499995 -22.9166665 -22.7499995 24 0 2670 --42.2500005 -42.0833335 -22.9166665 -22.7499995 53 0 2670 --42.0833335 -41.9166665 -22.9166665 -22.7499995 17 0 2670 --41.9166665 -41.7499995 -22.9166665 -22.7499995 0 -39 -1670 --41.7500005 -41.5833335 -22.9166665 -22.7499995 0 -54 -1670 --41.5833335 -41.4166665 -22.9166665 -22.7499995 0 -67 -1670 --41.4166665 -41.2499995 -22.9166665 -22.7499995 0 -67 -1670 --41.2500005 -41.0833335 -22.9166665 -22.7499995 0 -75 -1670 --41.0833335 -40.9166665 -22.9166665 -22.7499995 0 -100 -1670 --40.9166665 -40.7499995 -22.9166665 -22.7499995 0 -100 -1670 --40.7500005 -40.5833335 -22.9166665 -22.7499995 0 -736 -1670 --40.5833335 -40.4166665 -22.9166665 -22.7499995 0 -1232 -1670 --40.4166665 -40.2499995 -22.9166665 -22.7499995 0 -1394 -1670 --40.2500005 -40.0833335 -22.9166665 -22.7499995 0 -2080 -1670 --40.0833335 -39.9166665 -22.9166665 -22.7499995 0 -2607 -1670 --65.0833335 -64.9166665 -23.0833335 -22.9166665 4207 0 2670 --64.9166665 -64.7499995 -23.0833335 -22.9166665 1785 0 2670 --64.7500005 -64.5833335 -23.0833335 -22.9166665 1216 0 2670 --64.5833335 -64.4166665 -23.0833335 -22.9166665 703 0 2670 --64.4166665 -64.2499995 -23.0833335 -22.9166665 336 0 2670 --64.2500005 -64.0833335 -23.0833335 -22.9166665 519 0 2670 --64.0833335 -63.9166665 -23.0833335 -22.9166665 385 0 2670 --63.9166665 -63.7499995 -23.0833335 -22.9166665 322 0 2670 --63.7500005 -63.5833335 -23.0833335 -22.9166665 273 0 2670 --63.5833335 -63.4166665 -23.0833335 -22.9166665 253 0 2670 --63.4166665 -63.2499995 -23.0833335 -22.9166665 243 0 2670 --63.2500005 -63.0833335 -23.0833335 -22.9166665 237 0 2670 --63.0833335 -62.9166665 -23.0833335 -22.9166665 229 0 2670 --62.9166665 -62.7499995 -23.0833335 -22.9166665 228 0 2670 --62.7500005 -62.5833335 -23.0833335 -22.9166665 225 0 2670 --62.5833335 -62.4166665 -23.0833335 -22.9166665 221 0 2670 --62.4166665 -62.2499995 -23.0833335 -22.9166665 220 0 2670 --62.2500005 -62.0833335 -23.0833335 -22.9166665 214 0 2670 --62.0833335 -61.9166665 -23.0833335 -22.9166665 211 0 2670 --61.9166665 -61.7499995 -23.0833335 -22.9166665 207 0 2670 --61.7500005 -61.5833335 -23.0833335 -22.9166665 196 0 2670 --61.5833335 -61.4166665 -23.0833335 -22.9166665 193 0 2670 --61.4166665 -61.2499995 -23.0833335 -22.9166665 183 0 2670 --61.2500005 -61.0833335 -23.0833335 -22.9166665 181 0 2670 --61.0833335 -60.9166665 -23.0833335 -22.9166665 171 0 2670 --60.9166665 -60.7499995 -23.0833335 -22.9166665 164 0 2670 --60.7500005 -60.5833335 -23.0833335 -22.9166665 158 0 2670 --60.5833335 -60.4166665 -23.0833335 -22.9166665 153 0 2670 --60.4166665 -60.2499995 -23.0833335 -22.9166665 147 0 2670 --60.2500005 -60.0833335 -23.0833335 -22.9166665 139 0 2670 --60.0833335 -59.9166665 -23.0833335 -22.9166665 133 0 2670 --59.9166665 -59.7499995 -23.0833335 -22.9166665 127 0 2670 --59.7500005 -59.5833335 -23.0833335 -22.9166665 120 0 2670 --59.5833335 -59.4166665 -23.0833335 -22.9166665 117 0 2670 --59.4166665 -59.2499995 -23.0833335 -22.9166665 113 0 2670 --59.2500005 -59.0833335 -23.0833335 -22.9166665 108 0 2670 --59.0833335 -58.9166665 -23.0833335 -22.9166665 106 0 2670 --58.9166665 -58.7499995 -23.0833335 -22.9166665 103 0 2670 --58.7500005 -58.5833335 -23.0833335 -22.9166665 99 0 2670 --58.5833335 -58.4166665 -23.0833335 -22.9166665 96 0 2670 --58.4166665 -58.2499995 -23.0833335 -22.9166665 92 0 2670 --58.2500005 -58.0833335 -23.0833335 -22.9166665 91 0 2670 --58.0833335 -57.9166665 -23.0833335 -22.9166665 86 0 2670 --57.9166665 -57.7499995 -23.0833335 -22.9166665 77 0 2670 --57.7500005 -57.5833335 -23.0833335 -22.9166665 79 0 2670 --57.5833335 -57.4166665 -23.0833335 -22.9166665 101 0 2670 --57.4166665 -57.2499995 -23.0833335 -22.9166665 91 0 2670 --57.2500005 -57.0833335 -23.0833335 -22.9166665 141 0 2670 --57.0833335 -56.9166665 -23.0833335 -22.9166665 119 0 2670 --56.9166665 -56.7499995 -23.0833335 -22.9166665 129 0 2670 --56.7500005 -56.5833335 -23.0833335 -22.9166665 134 0 2670 --56.5833335 -56.4166665 -23.0833335 -22.9166665 237 0 2670 --56.4166665 -56.2499995 -23.0833335 -22.9166665 351 0 2670 --56.2500005 -56.0833335 -23.0833335 -22.9166665 278 0 2670 --56.0833335 -55.9166665 -23.0833335 -22.9166665 241 0 2670 --55.9166665 -55.7499995 -23.0833335 -22.9166665 339 0 2670 --55.7500005 -55.5833335 -23.0833335 -22.9166665 306 0 2670 --55.5833335 -55.4166665 -23.0833335 -22.9166665 482 0 2670 --55.4166665 -55.2499995 -23.0833335 -22.9166665 410 0 2670 --55.2500005 -55.0833335 -23.0833335 -22.9166665 402 0 2670 --55.0833335 -54.9166665 -23.0833335 -22.9166665 385 0 2670 --54.9166665 -54.7499995 -23.0833335 -22.9166665 429 0 2670 --54.7500005 -54.5833335 -23.0833335 -22.9166665 296 0 2670 --54.5833335 -54.4166665 -23.0833335 -22.9166665 285 0 2670 --54.4166665 -54.2499995 -23.0833335 -22.9166665 328 0 2670 --54.2500005 -54.0833335 -23.0833335 -22.9166665 339 0 2670 --54.0833335 -53.9166665 -23.0833335 -22.9166665 295 0 2670 --53.9166665 -53.7499995 -23.0833335 -22.9166665 309 0 2670 --53.7500005 -53.5833335 -23.0833335 -22.9166665 235 0 2670 --53.5833335 -53.4166665 -23.0833335 -22.9166665 332 0 2670 --53.4166665 -53.2499995 -23.0833335 -22.9166665 344 0 2670 --53.2500005 -53.0833335 -23.0833335 -22.9166665 419 0 2670 --53.0833335 -52.9166665 -23.0833335 -22.9166665 383 0 2670 --52.9166665 -52.7499995 -23.0833335 -22.9166665 429 0 2670 --52.7500005 -52.5833335 -23.0833335 -22.9166665 453 0 2670 --52.5833335 -52.4166665 -23.0833335 -22.9166665 466 0 2670 --52.4166665 -52.2499995 -23.0833335 -22.9166665 425 0 2670 --52.2500005 -52.0833335 -23.0833335 -22.9166665 462 0 2670 --52.0833335 -51.9166665 -23.0833335 -22.9166665 383 0 2670 --51.9166665 -51.7499995 -23.0833335 -22.9166665 422 0 2670 --51.7500005 -51.5833335 -23.0833335 -22.9166665 499 0 2670 --51.5833335 -51.4166665 -23.0833335 -22.9166665 586 0 2670 --51.4166665 -51.2499995 -23.0833335 -22.9166665 404 0 2670 --51.2500005 -51.0833335 -23.0833335 -22.9166665 573 0 2670 --51.0833335 -50.9166665 -23.0833335 -22.9166665 366 0 2670 --50.9166665 -50.7499995 -23.0833335 -22.9166665 428 0 2670 --50.7500005 -50.5833335 -23.0833335 -22.9166665 378 0 2670 --50.5833335 -50.4166665 -23.0833335 -22.9166665 390 0 2670 --50.4166665 -50.2499995 -23.0833335 -22.9166665 428 0 2670 --50.2500005 -50.0833335 -23.0833335 -22.9166665 438 0 2670 --50.0833335 -49.9166665 -23.0833335 -22.9166665 471 0 2670 --49.9166665 -49.7499995 -23.0833335 -22.9166665 500 0 2670 --49.7500005 -49.5833335 -23.0833335 -22.9166665 507 0 2670 --49.5833335 -49.4166665 -23.0833335 -22.9166665 670 0 2670 --49.4166665 -49.2499995 -23.0833335 -22.9166665 717 0 2670 --49.2500005 -49.0833335 -23.0833335 -22.9166665 691 0 2670 --49.0833335 -48.9166665 -23.0833335 -22.9166665 709 0 2670 --48.9166665 -48.7499995 -23.0833335 -22.9166665 723 0 2670 --48.7500005 -48.5833335 -23.0833335 -22.9166665 758 0 2670 --48.5833335 -48.4166665 -23.0833335 -22.9166665 859 0 2670 --48.4166665 -48.2499995 -23.0833335 -22.9166665 800 0 2670 --48.2500005 -48.0833335 -23.0833335 -22.9166665 571 0 2670 --48.0833335 -47.9166665 -23.0833335 -22.9166665 501 0 2670 --47.9166665 -47.7499995 -23.0833335 -22.9166665 528 0 2670 --47.7500005 -47.5833335 -23.0833335 -22.9166665 515 0 2670 --47.5833335 -47.4166665 -23.0833335 -22.9166665 519 0 2670 --47.4166665 -47.2499995 -23.0833335 -22.9166665 604 0 2670 --47.2500005 -47.0833335 -23.0833335 -22.9166665 622 0 2670 --47.0833335 -46.9166665 -23.0833335 -22.9166665 719 0 2670 --46.9166665 -46.7499995 -23.0833335 -22.9166665 772 0 2670 --46.7500005 -46.5833335 -23.0833335 -22.9166665 778 0 2670 --46.5833335 -46.4166665 -23.0833335 -22.9166665 888 0 2670 --46.4166665 -46.2499995 -23.0833335 -22.9166665 878 0 2670 --46.2500005 -46.0833335 -23.0833335 -22.9166665 1193 0 2670 --46.0833335 -45.9166665 -23.0833335 -22.9166665 727 0 2670 --45.9166665 -45.7499995 -23.0833335 -22.9166665 671 0 2670 --45.7500005 -45.5833335 -23.0833335 -22.9166665 550 0 2670 --45.5833335 -45.4166665 -23.0833335 -22.9166665 562 0 2670 --45.4166665 -45.2499995 -23.0833335 -22.9166665 827 0 2670 --45.2500005 -45.0833335 -23.0833335 -22.9166665 975 0 2670 --45.0833335 -44.9166665 -23.0833335 -22.9166665 937 0 2670 --44.9166665 -44.7499995 -23.0833335 -22.9166665 1173 0 2670 --44.7500005 -44.5833335 -23.0833335 -22.9166665 893 0 2670 --44.5833335 -44.4166665 -23.0833335 -22.9166665 352 0 2670 --44.4166665 -44.2499995 -23.0833335 -22.9166665 165 0 2670 --44.2500005 -44.0833335 -23.0833335 -22.9166665 496 0 2670 --44.0833335 -43.9166665 -23.0833335 -22.9166665 0 -1 -1670 --43.9166665 -43.7499995 -23.0833335 -22.9166665 0 -5 -1670 --43.7500005 -43.5833335 -23.0833335 -22.9166665 0 -1 -1670 --43.5833335 -43.4166665 -23.0833335 -22.9166665 5 0 2670 --43.4166665 -43.2499995 -23.0833335 -22.9166665 8 0 2670 --43.2500005 -43.0833335 -23.0833335 -22.9166665 0 -23 -1670 --43.0833335 -42.9166665 -23.0833335 -22.9166665 0 -21 -1670 --42.9166665 -42.7499995 -23.0833335 -22.9166665 0 -24 -1670 --42.7500005 -42.5833335 -23.0833335 -22.9166665 0 -40 -1670 --42.5833335 -42.4166665 -23.0833335 -22.9166665 0 -58 -1670 --42.4166665 -42.2499995 -23.0833335 -22.9166665 0 -61 -1670 --42.2500005 -42.0833335 -23.0833335 -22.9166665 0 -65 -1670 --42.0833335 -41.9166665 -23.0833335 -22.9166665 88 0 2670 --41.9166665 -41.7499995 -23.0833335 -22.9166665 0 -67 -1670 --41.7500005 -41.5833335 -23.0833335 -22.9166665 0 -89 -1670 --41.5833335 -41.4166665 -23.0833335 -22.9166665 0 -74 -1670 --41.4166665 -41.2499995 -23.0833335 -22.9166665 0 -78 -1670 --41.2500005 -41.0833335 -23.0833335 -22.9166665 0 -91 -1670 --41.0833335 -40.9166665 -23.0833335 -22.9166665 0 -85 -1670 --40.9166665 -40.7499995 -23.0833335 -22.9166665 0 -603 -1670 --40.7500005 -40.5833335 -23.0833335 -22.9166665 0 -1279 -1670 --40.5833335 -40.4166665 -23.0833335 -22.9166665 0 -1783 -1670 --40.4166665 -40.2499995 -23.0833335 -22.9166665 0 -2338 -1670 --40.2500005 -40.0833335 -23.0833335 -22.9166665 0 -2476 -1670 --40.0833335 -39.9166665 -23.0833335 -22.9166665 0 -2713 -1670 --65.0833335 -64.9166665 -23.2500005 -23.0833335 3467 0 2670 --64.9166665 -64.7499995 -23.2500005 -23.0833335 2763 0 2670 --64.7500005 -64.5833335 -23.2500005 -23.0833335 718 0 2670 --64.5833335 -64.4166665 -23.2500005 -23.0833335 613 0 2670 --64.4166665 -64.2499995 -23.2500005 -23.0833335 364 0 2670 --64.2500005 -64.0833335 -23.2500005 -23.0833335 412 0 2670 --64.0833335 -63.9166665 -23.2500005 -23.0833335 280 0 2670 --63.9166665 -63.7499995 -23.2500005 -23.0833335 276 0 2670 --63.7500005 -63.5833335 -23.2500005 -23.0833335 265 0 2670 --63.5833335 -63.4166665 -23.2500005 -23.0833335 254 0 2670 --63.4166665 -63.2499995 -23.2500005 -23.0833335 245 0 2670 --63.2500005 -63.0833335 -23.2500005 -23.0833335 241 0 2670 --63.0833335 -62.9166665 -23.2500005 -23.0833335 230 0 2670 --62.9166665 -62.7499995 -23.2500005 -23.0833335 223 0 2670 --62.7500005 -62.5833335 -23.2500005 -23.0833335 220 0 2670 --62.5833335 -62.4166665 -23.2500005 -23.0833335 216 0 2670 --62.4166665 -62.2499995 -23.2500005 -23.0833335 213 0 2670 --62.2500005 -62.0833335 -23.2500005 -23.0833335 209 0 2670 --62.0833335 -61.9166665 -23.2500005 -23.0833335 206 0 2670 --61.9166665 -61.7499995 -23.2500005 -23.0833335 199 0 2670 --61.7500005 -61.5833335 -23.2500005 -23.0833335 192 0 2670 --61.5833335 -61.4166665 -23.2500005 -23.0833335 187 0 2670 --61.4166665 -61.2499995 -23.2500005 -23.0833335 185 0 2670 --61.2500005 -61.0833335 -23.2500005 -23.0833335 177 0 2670 --61.0833335 -60.9166665 -23.2500005 -23.0833335 166 0 2670 --60.9166665 -60.7499995 -23.2500005 -23.0833335 161 0 2670 --60.7500005 -60.5833335 -23.2500005 -23.0833335 158 0 2670 --60.5833335 -60.4166665 -23.2500005 -23.0833335 150 0 2670 --60.4166665 -60.2499995 -23.2500005 -23.0833335 148 0 2670 --60.2500005 -60.0833335 -23.2500005 -23.0833335 141 0 2670 --60.0833335 -59.9166665 -23.2500005 -23.0833335 133 0 2670 --59.9166665 -59.7499995 -23.2500005 -23.0833335 128 0 2670 --59.7500005 -59.5833335 -23.2500005 -23.0833335 121 0 2670 --59.5833335 -59.4166665 -23.2500005 -23.0833335 117 0 2670 --59.4166665 -59.2499995 -23.2500005 -23.0833335 115 0 2670 --59.2500005 -59.0833335 -23.2500005 -23.0833335 111 0 2670 --59.0833335 -58.9166665 -23.2500005 -23.0833335 110 0 2670 --58.9166665 -58.7499995 -23.2500005 -23.0833335 104 0 2670 --58.7500005 -58.5833335 -23.2500005 -23.0833335 101 0 2670 --58.5833335 -58.4166665 -23.2500005 -23.0833335 96 0 2670 --58.4166665 -58.2499995 -23.2500005 -23.0833335 94 0 2670 --58.2500005 -58.0833335 -23.2500005 -23.0833335 90 0 2670 --58.0833335 -57.9166665 -23.2500005 -23.0833335 85 0 2670 --57.9166665 -57.7499995 -23.2500005 -23.0833335 81 0 2670 --57.7500005 -57.5833335 -23.2500005 -23.0833335 76 0 2670 --57.5833335 -57.4166665 -23.2500005 -23.0833335 121 0 2670 --57.4166665 -57.2499995 -23.2500005 -23.0833335 137 0 2670 --57.2500005 -57.0833335 -23.2500005 -23.0833335 101 0 2670 --57.0833335 -56.9166665 -23.2500005 -23.0833335 107 0 2670 --56.9166665 -56.7499995 -23.2500005 -23.0833335 157 0 2670 --56.7500005 -56.5833335 -23.2500005 -23.0833335 268 0 2670 --56.5833335 -56.4166665 -23.2500005 -23.0833335 305 0 2670 --56.4166665 -56.2499995 -23.2500005 -23.0833335 211 0 2670 --56.2500005 -56.0833335 -23.2500005 -23.0833335 229 0 2670 --56.0833335 -55.9166665 -23.2500005 -23.0833335 369 0 2670 --55.9166665 -55.7499995 -23.2500005 -23.0833335 230 0 2670 --55.7500005 -55.5833335 -23.2500005 -23.0833335 402 0 2670 --55.5833335 -55.4166665 -23.2500005 -23.0833335 466 0 2670 --55.4166665 -55.2499995 -23.2500005 -23.0833335 470 0 2670 --55.2500005 -55.0833335 -23.2500005 -23.0833335 451 0 2670 --55.0833335 -54.9166665 -23.2500005 -23.0833335 442 0 2670 --54.9166665 -54.7499995 -23.2500005 -23.0833335 377 0 2670 --54.7500005 -54.5833335 -23.2500005 -23.0833335 376 0 2670 --54.5833335 -54.4166665 -23.2500005 -23.0833335 344 0 2670 --54.4166665 -54.2499995 -23.2500005 -23.0833335 351 0 2670 --54.2500005 -54.0833335 -23.2500005 -23.0833335 252 0 2670 --54.0833335 -53.9166665 -23.2500005 -23.0833335 240 0 2670 --53.9166665 -53.7499995 -23.2500005 -23.0833335 272 0 2670 --53.7500005 -53.5833335 -23.2500005 -23.0833335 235 0 2670 --53.5833335 -53.4166665 -23.2500005 -23.0833335 240 0 2670 --53.4166665 -53.2499995 -23.2500005 -23.0833335 267 0 2670 --53.2500005 -53.0833335 -23.2500005 -23.0833335 323 0 2670 --53.0833335 -52.9166665 -23.2500005 -23.0833335 331 0 2670 --52.9166665 -52.7499995 -23.2500005 -23.0833335 377 0 2670 --52.7500005 -52.5833335 -23.2500005 -23.0833335 314 0 2670 --52.5833335 -52.4166665 -23.2500005 -23.0833335 399 0 2670 --52.4166665 -52.2499995 -23.2500005 -23.0833335 442 0 2670 --52.2500005 -52.0833335 -23.2500005 -23.0833335 492 0 2670 --52.0833335 -51.9166665 -23.2500005 -23.0833335 420 0 2670 --51.9166665 -51.7499995 -23.2500005 -23.0833335 565 0 2670 --51.7500005 -51.5833335 -23.2500005 -23.0833335 575 0 2670 --51.5833335 -51.4166665 -23.2500005 -23.0833335 580 0 2670 --51.4166665 -51.2499995 -23.2500005 -23.0833335 521 0 2670 --51.2500005 -51.0833335 -23.2500005 -23.0833335 568 0 2670 --51.0833335 -50.9166665 -23.2500005 -23.0833335 377 0 2670 --50.9166665 -50.7499995 -23.2500005 -23.0833335 427 0 2670 --50.7500005 -50.5833335 -23.2500005 -23.0833335 589 0 2670 --50.5833335 -50.4166665 -23.2500005 -23.0833335 428 0 2670 --50.4166665 -50.2499995 -23.2500005 -23.0833335 507 0 2670 --50.2500005 -50.0833335 -23.2500005 -23.0833335 442 0 2670 --50.0833335 -49.9166665 -23.2500005 -23.0833335 532 0 2670 --49.9166665 -49.7499995 -23.2500005 -23.0833335 518 0 2670 --49.7500005 -49.5833335 -23.2500005 -23.0833335 607 0 2670 --49.5833335 -49.4166665 -23.2500005 -23.0833335 581 0 2670 --49.4166665 -49.2499995 -23.2500005 -23.0833335 539 0 2670 --49.2500005 -49.0833335 -23.2500005 -23.0833335 624 0 2670 --49.0833335 -48.9166665 -23.2500005 -23.0833335 613 0 2670 --48.9166665 -48.7499995 -23.2500005 -23.0833335 744 0 2670 --48.7500005 -48.5833335 -23.2500005 -23.0833335 673 0 2670 --48.5833335 -48.4166665 -23.2500005 -23.0833335 676 0 2670 --48.4166665 -48.2499995 -23.2500005 -23.0833335 651 0 2670 --48.2500005 -48.0833335 -23.2500005 -23.0833335 546 0 2670 --48.0833335 -47.9166665 -23.2500005 -23.0833335 533 0 2670 --47.9166665 -47.7499995 -23.2500005 -23.0833335 532 0 2670 --47.7500005 -47.5833335 -23.2500005 -23.0833335 543 0 2670 --47.5833335 -47.4166665 -23.2500005 -23.0833335 520 0 2670 --47.4166665 -47.2499995 -23.2500005 -23.0833335 541 0 2670 --47.2500005 -47.0833335 -23.2500005 -23.0833335 684 0 2670 --47.0833335 -46.9166665 -23.2500005 -23.0833335 733 0 2670 --46.9166665 -46.7499995 -23.2500005 -23.0833335 779 0 2670 --46.7500005 -46.5833335 -23.2500005 -23.0833335 867 0 2670 --46.5833335 -46.4166665 -23.2500005 -23.0833335 1087 0 2670 --46.4166665 -46.2499995 -23.2500005 -23.0833335 889 0 2670 --46.2500005 -46.0833335 -23.2500005 -23.0833335 770 0 2670 --46.0833335 -45.9166665 -23.2500005 -23.0833335 642 0 2670 --45.9166665 -45.7499995 -23.2500005 -23.0833335 573 0 2670 --45.7500005 -45.5833335 -23.2500005 -23.0833335 628 0 2670 --45.5833335 -45.4166665 -23.2500005 -23.0833335 680 0 2670 --45.4166665 -45.2499995 -23.2500005 -23.0833335 866 0 2670 --45.2500005 -45.0833335 -23.2500005 -23.0833335 893 0 2670 --45.0833335 -44.9166665 -23.2500005 -23.0833335 1211 0 2670 --44.9166665 -44.7499995 -23.2500005 -23.0833335 1465 0 2670 --44.7500005 -44.5833335 -23.2500005 -23.0833335 0 0 2670 --44.5833335 -44.4166665 -23.2500005 -23.0833335 0 -24 -1670 --44.4166665 -44.2499995 -23.2500005 -23.0833335 217 0 2670 --44.2500005 -44.0833335 -23.2500005 -23.0833335 323 0 2670 --44.0833335 -43.9166665 -23.2500005 -23.0833335 0 -28 -1670 --43.9166665 -43.7499995 -23.2500005 -23.0833335 0 -36 -1670 --43.7500005 -43.5833335 -23.2500005 -23.0833335 0 -42 -1670 --43.5833335 -43.4166665 -23.2500005 -23.0833335 0 -46 -1670 --43.4166665 -43.2499995 -23.2500005 -23.0833335 0 -57 -1670 --43.2500005 -43.0833335 -23.2500005 -23.0833335 0 -63 -1670 --43.0833335 -42.9166665 -23.2500005 -23.0833335 0 -74 -1670 --42.9166665 -42.7499995 -23.2500005 -23.0833335 0 -78 -1670 --42.7500005 -42.5833335 -23.2500005 -23.0833335 0 -92 -1670 --42.5833335 -42.4166665 -23.2500005 -23.0833335 0 -103 -1670 --42.4166665 -42.2499995 -23.2500005 -23.0833335 0 -109 -1670 --42.2500005 -42.0833335 -23.2500005 -23.0833335 0 -115 -1670 --42.0833335 -41.9166665 -23.2500005 -23.0833335 0 -123 -1670 --41.9166665 -41.7499995 -23.2500005 -23.0833335 0 -111 -1670 --41.7500005 -41.5833335 -23.2500005 -23.0833335 0 -106 -1670 --41.5833335 -41.4166665 -23.2500005 -23.0833335 0 -92 -1670 --41.4166665 -41.2499995 -23.2500005 -23.0833335 0 -92 -1670 --41.2500005 -41.0833335 -23.2500005 -23.0833335 0 -110 -1670 --41.0833335 -40.9166665 -23.2500005 -23.0833335 0 -198 -1670 --40.9166665 -40.7499995 -23.2500005 -23.0833335 0 -1362 -1670 --40.7500005 -40.5833335 -23.2500005 -23.0833335 0 -1951 -1670 --40.5833335 -40.4166665 -23.2500005 -23.0833335 0 -2195 -1670 --40.4166665 -40.2499995 -23.2500005 -23.0833335 0 -2486 -1670 --40.2500005 -40.0833335 -23.2500005 -23.0833335 0 -2661 -1670 --40.0833335 -39.9166665 -23.2500005 -23.0833335 0 -2769 -1670 --65.0833335 -64.9166665 -23.4166665 -23.2499995 3771 0 2670 --64.9166665 -64.7499995 -23.4166665 -23.2499995 2319 0 2670 --64.7500005 -64.5833335 -23.4166665 -23.2499995 726 0 2670 --64.5833335 -64.4166665 -23.4166665 -23.2499995 472 0 2670 --64.4166665 -64.2499995 -23.4166665 -23.2499995 330 0 2670 --64.2500005 -64.0833335 -23.4166665 -23.2499995 300 0 2670 --64.0833335 -63.9166665 -23.4166665 -23.2499995 284 0 2670 --63.9166665 -63.7499995 -23.4166665 -23.2499995 275 0 2670 --63.7500005 -63.5833335 -23.4166665 -23.2499995 266 0 2670 --63.5833335 -63.4166665 -23.4166665 -23.2499995 254 0 2670 --63.4166665 -63.2499995 -23.4166665 -23.2499995 246 0 2670 --63.2500005 -63.0833335 -23.4166665 -23.2499995 236 0 2670 --63.0833335 -62.9166665 -23.4166665 -23.2499995 228 0 2670 --62.9166665 -62.7499995 -23.4166665 -23.2499995 222 0 2670 --62.7500005 -62.5833335 -23.4166665 -23.2499995 216 0 2670 --62.5833335 -62.4166665 -23.4166665 -23.2499995 211 0 2670 --62.4166665 -62.2499995 -23.4166665 -23.2499995 210 0 2670 --62.2500005 -62.0833335 -23.4166665 -23.2499995 205 0 2670 --62.0833335 -61.9166665 -23.4166665 -23.2499995 198 0 2670 --61.9166665 -61.7499995 -23.4166665 -23.2499995 197 0 2670 --61.7500005 -61.5833335 -23.4166665 -23.2499995 190 0 2670 --61.5833335 -61.4166665 -23.4166665 -23.2499995 187 0 2670 --61.4166665 -61.2499995 -23.4166665 -23.2499995 177 0 2670 --61.2500005 -61.0833335 -23.4166665 -23.2499995 170 0 2670 --61.0833335 -60.9166665 -23.4166665 -23.2499995 165 0 2670 --60.9166665 -60.7499995 -23.4166665 -23.2499995 160 0 2670 --60.7500005 -60.5833335 -23.4166665 -23.2499995 154 0 2670 --60.5833335 -60.4166665 -23.4166665 -23.2499995 150 0 2670 --60.4166665 -60.2499995 -23.4166665 -23.2499995 144 0 2670 --60.2500005 -60.0833335 -23.4166665 -23.2499995 139 0 2670 --60.0833335 -59.9166665 -23.4166665 -23.2499995 134 0 2670 --59.9166665 -59.7499995 -23.4166665 -23.2499995 129 0 2670 --59.7500005 -59.5833335 -23.4166665 -23.2499995 121 0 2670 --59.5833335 -59.4166665 -23.4166665 -23.2499995 121 0 2670 --59.4166665 -59.2499995 -23.4166665 -23.2499995 115 0 2670 --59.2500005 -59.0833335 -23.4166665 -23.2499995 110 0 2670 --59.0833335 -58.9166665 -23.4166665 -23.2499995 107 0 2670 --58.9166665 -58.7499995 -23.4166665 -23.2499995 104 0 2670 --58.7500005 -58.5833335 -23.4166665 -23.2499995 99 0 2670 --58.5833335 -58.4166665 -23.4166665 -23.2499995 99 0 2670 --58.4166665 -58.2499995 -23.4166665 -23.2499995 95 0 2670 --58.2500005 -58.0833335 -23.4166665 -23.2499995 92 0 2670 --58.0833335 -57.9166665 -23.4166665 -23.2499995 85 0 2670 --57.9166665 -57.7499995 -23.4166665 -23.2499995 80 0 2670 --57.7500005 -57.5833335 -23.4166665 -23.2499995 76 0 2670 --57.5833335 -57.4166665 -23.4166665 -23.2499995 71 0 2670 --57.4166665 -57.2499995 -23.4166665 -23.2499995 126 0 2670 --57.2500005 -57.0833335 -23.4166665 -23.2499995 173 0 2670 --57.0833335 -56.9166665 -23.4166665 -23.2499995 168 0 2670 --56.9166665 -56.7499995 -23.4166665 -23.2499995 208 0 2670 --56.7500005 -56.5833335 -23.4166665 -23.2499995 206 0 2670 --56.5833335 -56.4166665 -23.4166665 -23.2499995 242 0 2670 --56.4166665 -56.2499995 -23.4166665 -23.2499995 184 0 2670 --56.2500005 -56.0833335 -23.4166665 -23.2499995 200 0 2670 --56.0833335 -55.9166665 -23.4166665 -23.2499995 332 0 2670 --55.9166665 -55.7499995 -23.4166665 -23.2499995 280 0 2670 --55.7500005 -55.5833335 -23.4166665 -23.2499995 416 0 2670 --55.5833335 -55.4166665 -23.4166665 -23.2499995 492 0 2670 --55.4166665 -55.2499995 -23.4166665 -23.2499995 440 0 2670 --55.2500005 -55.0833335 -23.4166665 -23.2499995 360 0 2670 --55.0833335 -54.9166665 -23.4166665 -23.2499995 337 0 2670 --54.9166665 -54.7499995 -23.4166665 -23.2499995 357 0 2670 --54.7500005 -54.5833335 -23.4166665 -23.2499995 355 0 2670 --54.5833335 -54.4166665 -23.4166665 -23.2499995 382 0 2670 --54.4166665 -54.2499995 -23.4166665 -23.2499995 289 0 2670 --54.2500005 -54.0833335 -23.4166665 -23.2499995 315 0 2670 --54.0833335 -53.9166665 -23.4166665 -23.2499995 271 0 2670 --53.9166665 -53.7499995 -23.4166665 -23.2499995 230 0 2670 --53.7500005 -53.5833335 -23.4166665 -23.2499995 285 0 2670 --53.5833335 -53.4166665 -23.4166665 -23.2499995 327 0 2670 --53.4166665 -53.2499995 -23.4166665 -23.2499995 373 0 2670 --53.2500005 -53.0833335 -23.4166665 -23.2499995 360 0 2670 --53.0833335 -52.9166665 -23.4166665 -23.2499995 347 0 2670 --52.9166665 -52.7499995 -23.4166665 -23.2499995 367 0 2670 --52.7500005 -52.5833335 -23.4166665 -23.2499995 273 0 2670 --52.5833335 -52.4166665 -23.4166665 -23.2499995 340 0 2670 --52.4166665 -52.2499995 -23.4166665 -23.2499995 424 0 2670 --52.2500005 -52.0833335 -23.4166665 -23.2499995 513 0 2670 --52.0833335 -51.9166665 -23.4166665 -23.2499995 463 0 2670 --51.9166665 -51.7499995 -23.4166665 -23.2499995 432 0 2670 --51.7500005 -51.5833335 -23.4166665 -23.2499995 600 0 2670 --51.5833335 -51.4166665 -23.4166665 -23.2499995 743 0 2670 --51.4166665 -51.2499995 -23.4166665 -23.2499995 635 0 2670 --51.2500005 -51.0833335 -23.4166665 -23.2499995 547 0 2670 --51.0833335 -50.9166665 -23.4166665 -23.2499995 408 0 2670 --50.9166665 -50.7499995 -23.4166665 -23.2499995 526 0 2670 --50.7500005 -50.5833335 -23.4166665 -23.2499995 487 0 2670 --50.5833335 -50.4166665 -23.4166665 -23.2499995 515 0 2670 --50.4166665 -50.2499995 -23.4166665 -23.2499995 593 0 2670 --50.2500005 -50.0833335 -23.4166665 -23.2499995 491 0 2670 --50.0833335 -49.9166665 -23.4166665 -23.2499995 525 0 2670 --49.9166665 -49.7499995 -23.4166665 -23.2499995 574 0 2670 --49.7500005 -49.5833335 -23.4166665 -23.2499995 481 0 2670 --49.5833335 -49.4166665 -23.4166665 -23.2499995 822 0 2670 --49.4166665 -49.2499995 -23.4166665 -23.2499995 676 0 2670 --49.2500005 -49.0833335 -23.4166665 -23.2499995 580 0 2670 --49.0833335 -48.9166665 -23.4166665 -23.2499995 570 0 2670 --48.9166665 -48.7499995 -23.4166665 -23.2499995 640 0 2670 --48.7500005 -48.5833335 -23.4166665 -23.2499995 563 0 2670 --48.5833335 -48.4166665 -23.4166665 -23.2499995 624 0 2670 --48.4166665 -48.2499995 -23.4166665 -23.2499995 633 0 2670 --48.2500005 -48.0833335 -23.4166665 -23.2499995 698 0 2670 --48.0833335 -47.9166665 -23.4166665 -23.2499995 612 0 2670 --47.9166665 -47.7499995 -23.4166665 -23.2499995 609 0 2670 --47.7500005 -47.5833335 -23.4166665 -23.2499995 565 0 2670 --47.5833335 -47.4166665 -23.4166665 -23.2499995 567 0 2670 --47.4166665 -47.2499995 -23.4166665 -23.2499995 626 0 2670 --47.2500005 -47.0833335 -23.4166665 -23.2499995 675 0 2670 --47.0833335 -46.9166665 -23.4166665 -23.2499995 734 0 2670 --46.9166665 -46.7499995 -23.4166665 -23.2499995 763 0 2670 --46.7500005 -46.5833335 -23.4166665 -23.2499995 792 0 2670 --46.5833335 -46.4166665 -23.4166665 -23.2499995 849 0 2670 --46.4166665 -46.2499995 -23.4166665 -23.2499995 715 0 2670 --46.2500005 -46.0833335 -23.4166665 -23.2499995 707 0 2670 --46.0833335 -45.9166665 -23.4166665 -23.2499995 619 0 2670 --45.9166665 -45.7499995 -23.4166665 -23.2499995 644 0 2670 --45.7500005 -45.5833335 -23.4166665 -23.2499995 688 0 2670 --45.5833335 -45.4166665 -23.4166665 -23.2499995 793 0 2670 --45.4166665 -45.2499995 -23.4166665 -23.2499995 932 0 2670 --45.2500005 -45.0833335 -23.4166665 -23.2499995 1023 0 2670 --45.0833335 -44.9166665 -23.4166665 -23.2499995 300 0 2670 --44.9166665 -44.7499995 -23.4166665 -23.2499995 174 0 2670 --44.7500005 -44.5833335 -23.4166665 -23.2499995 65 0 2670 --44.5833335 -44.4166665 -23.4166665 -23.2499995 0 -23 -1670 --44.4166665 -44.2499995 -23.4166665 -23.2499995 0 -32 -1670 --44.2500005 -44.0833335 -23.4166665 -23.2499995 0 -43 -1670 --44.0833335 -43.9166665 -23.4166665 -23.2499995 0 -58 -1670 --43.9166665 -43.7499995 -23.4166665 -23.2499995 0 -60 -1670 --43.7500005 -43.5833335 -23.4166665 -23.2499995 0 -66 -1670 --43.5833335 -43.4166665 -23.4166665 -23.2499995 0 -78 -1670 --43.4166665 -43.2499995 -23.4166665 -23.2499995 0 -87 -1670 --43.2500005 -43.0833335 -23.4166665 -23.2499995 0 -108 -1670 --43.0833335 -42.9166665 -23.4166665 -23.2499995 0 -104 -1670 --42.9166665 -42.7499995 -23.4166665 -23.2499995 0 -106 -1670 --42.7500005 -42.5833335 -23.4166665 -23.2499995 0 -106 -1670 --42.5833335 -42.4166665 -23.4166665 -23.2499995 0 -117 -1670 --42.4166665 -42.2499995 -23.4166665 -23.2499995 0 -127 -1670 --42.2500005 -42.0833335 -23.4166665 -23.2499995 0 -131 -1670 --42.0833335 -41.9166665 -23.4166665 -23.2499995 0 -133 -1670 --41.9166665 -41.7499995 -23.4166665 -23.2499995 0 -133 -1670 --41.7500005 -41.5833335 -23.4166665 -23.2499995 0 -128 -1670 --41.5833335 -41.4166665 -23.4166665 -23.2499995 0 -113 -1670 --41.4166665 -41.2499995 -23.4166665 -23.2499995 0 -98 -1670 --41.2500005 -41.0833335 -23.4166665 -23.2499995 0 -125 -1670 --41.0833335 -40.9166665 -23.4166665 -23.2499995 0 -757 -1670 --40.9166665 -40.7499995 -23.4166665 -23.2499995 0 -1859 -1670 --40.7500005 -40.5833335 -23.4166665 -23.2499995 0 -2259 -1670 --40.5833335 -40.4166665 -23.4166665 -23.2499995 0 -2516 -1670 --40.4166665 -40.2499995 -23.4166665 -23.2499995 0 -2610 -1670 --40.2500005 -40.0833335 -23.4166665 -23.2499995 0 -2743 -1670 --40.0833335 -39.9166665 -23.4166665 -23.2499995 0 -2832 -1670 --65.0833335 -64.9166665 -23.5833335 -23.4166665 2130 0 2670 --64.9166665 -64.7499995 -23.5833335 -23.4166665 2474 0 2670 --64.7500005 -64.5833335 -23.5833335 -23.4166665 885 0 2670 --64.5833335 -64.4166665 -23.5833335 -23.4166665 541 0 2670 --64.4166665 -64.2499995 -23.5833335 -23.4166665 323 0 2670 --64.2500005 -64.0833335 -23.5833335 -23.4166665 311 0 2670 --64.0833335 -63.9166665 -23.5833335 -23.4166665 336 0 2670 --63.9166665 -63.7499995 -23.5833335 -23.4166665 349 0 2670 --63.7500005 -63.5833335 -23.5833335 -23.4166665 282 0 2670 --63.5833335 -63.4166665 -23.5833335 -23.4166665 252 0 2670 --63.4166665 -63.2499995 -23.5833335 -23.4166665 244 0 2670 --63.2500005 -63.0833335 -23.5833335 -23.4166665 235 0 2670 --63.0833335 -62.9166665 -23.5833335 -23.4166665 228 0 2670 --62.9166665 -62.7499995 -23.5833335 -23.4166665 220 0 2670 --62.7500005 -62.5833335 -23.5833335 -23.4166665 214 0 2670 --62.5833335 -62.4166665 -23.5833335 -23.4166665 210 0 2670 --62.4166665 -62.2499995 -23.5833335 -23.4166665 203 0 2670 --62.2500005 -62.0833335 -23.5833335 -23.4166665 197 0 2670 --62.0833335 -61.9166665 -23.5833335 -23.4166665 195 0 2670 --61.9166665 -61.7499995 -23.5833335 -23.4166665 194 0 2670 --61.7500005 -61.5833335 -23.5833335 -23.4166665 187 0 2670 --61.5833335 -61.4166665 -23.5833335 -23.4166665 177 0 2670 --61.4166665 -61.2499995 -23.5833335 -23.4166665 174 0 2670 --61.2500005 -61.0833335 -23.5833335 -23.4166665 171 0 2670 --61.0833335 -60.9166665 -23.5833335 -23.4166665 164 0 2670 --60.9166665 -60.7499995 -23.5833335 -23.4166665 156 0 2670 --60.7500005 -60.5833335 -23.5833335 -23.4166665 155 0 2670 --60.5833335 -60.4166665 -23.5833335 -23.4166665 143 0 2670 --60.4166665 -60.2499995 -23.5833335 -23.4166665 140 0 2670 --60.2500005 -60.0833335 -23.5833335 -23.4166665 137 0 2670 --60.0833335 -59.9166665 -23.5833335 -23.4166665 130 0 2670 --59.9166665 -59.7499995 -23.5833335 -23.4166665 128 0 2670 --59.7500005 -59.5833335 -23.5833335 -23.4166665 120 0 2670 --59.5833335 -59.4166665 -23.5833335 -23.4166665 117 0 2670 --59.4166665 -59.2499995 -23.5833335 -23.4166665 113 0 2670 --59.2500005 -59.0833335 -23.5833335 -23.4166665 110 0 2670 --59.0833335 -58.9166665 -23.5833335 -23.4166665 108 0 2670 --58.9166665 -58.7499995 -23.5833335 -23.4166665 101 0 2670 --58.7500005 -58.5833335 -23.5833335 -23.4166665 97 0 2670 --58.5833335 -58.4166665 -23.5833335 -23.4166665 94 0 2670 --58.4166665 -58.2499995 -23.5833335 -23.4166665 90 0 2670 --58.2500005 -58.0833335 -23.5833335 -23.4166665 88 0 2670 --58.0833335 -57.9166665 -23.5833335 -23.4166665 83 0 2670 --57.9166665 -57.7499995 -23.5833335 -23.4166665 78 0 2670 --57.7500005 -57.5833335 -23.5833335 -23.4166665 78 0 2670 --57.5833335 -57.4166665 -23.5833335 -23.4166665 69 0 2670 --57.4166665 -57.2499995 -23.5833335 -23.4166665 82 0 2670 --57.2500005 -57.0833335 -23.5833335 -23.4166665 94 0 2670 --57.0833335 -56.9166665 -23.5833335 -23.4166665 145 0 2670 --56.9166665 -56.7499995 -23.5833335 -23.4166665 224 0 2670 --56.7500005 -56.5833335 -23.5833335 -23.4166665 199 0 2670 --56.5833335 -56.4166665 -23.5833335 -23.4166665 192 0 2670 --56.4166665 -56.2499995 -23.5833335 -23.4166665 334 0 2670 --56.2500005 -56.0833335 -23.5833335 -23.4166665 373 0 2670 --56.0833335 -55.9166665 -23.5833335 -23.4166665 311 0 2670 --55.9166665 -55.7499995 -23.5833335 -23.4166665 269 0 2670 --55.7500005 -55.5833335 -23.5833335 -23.4166665 425 0 2670 --55.5833335 -55.4166665 -23.5833335 -23.4166665 390 0 2670 --55.4166665 -55.2499995 -23.5833335 -23.4166665 376 0 2670 --55.2500005 -55.0833335 -23.5833335 -23.4166665 377 0 2670 --55.0833335 -54.9166665 -23.5833335 -23.4166665 318 0 2670 --54.9166665 -54.7499995 -23.5833335 -23.4166665 297 0 2670 --54.7500005 -54.5833335 -23.5833335 -23.4166665 367 0 2670 --54.5833335 -54.4166665 -23.5833335 -23.4166665 392 0 2670 --54.4166665 -54.2499995 -23.5833335 -23.4166665 341 0 2670 --54.2500005 -54.0833335 -23.5833335 -23.4166665 317 0 2670 --54.0833335 -53.9166665 -23.5833335 -23.4166665 228 0 2670 --53.9166665 -53.7499995 -23.5833335 -23.4166665 315 0 2670 --53.7500005 -53.5833335 -23.5833335 -23.4166665 365 0 2670 --53.5833335 -53.4166665 -23.5833335 -23.4166665 398 0 2670 --53.4166665 -53.2499995 -23.5833335 -23.4166665 406 0 2670 --53.2500005 -53.0833335 -23.5833335 -23.4166665 366 0 2670 --53.0833335 -52.9166665 -23.5833335 -23.4166665 322 0 2670 --52.9166665 -52.7499995 -23.5833335 -23.4166665 441 0 2670 --52.7500005 -52.5833335 -23.5833335 -23.4166665 413 0 2670 --52.5833335 -52.4166665 -23.5833335 -23.4166665 319 0 2670 --52.4166665 -52.2499995 -23.5833335 -23.4166665 356 0 2670 --52.2500005 -52.0833335 -23.5833335 -23.4166665 345 0 2670 --52.0833335 -51.9166665 -23.5833335 -23.4166665 452 0 2670 --51.9166665 -51.7499995 -23.5833335 -23.4166665 519 0 2670 --51.7500005 -51.5833335 -23.5833335 -23.4166665 641 0 2670 --51.5833335 -51.4166665 -23.5833335 -23.4166665 626 0 2670 --51.4166665 -51.2499995 -23.5833335 -23.4166665 732 0 2670 --51.2500005 -51.0833335 -23.5833335 -23.4166665 530 0 2670 --51.0833335 -50.9166665 -23.5833335 -23.4166665 483 0 2670 --50.9166665 -50.7499995 -23.5833335 -23.4166665 571 0 2670 --50.7500005 -50.5833335 -23.5833335 -23.4166665 710 0 2670 --50.5833335 -50.4166665 -23.5833335 -23.4166665 759 0 2670 --50.4166665 -50.2499995 -23.5833335 -23.4166665 655 0 2670 --50.2500005 -50.0833335 -23.5833335 -23.4166665 493 0 2670 --50.0833335 -49.9166665 -23.5833335 -23.4166665 517 0 2670 --49.9166665 -49.7499995 -23.5833335 -23.4166665 648 0 2670 --49.7500005 -49.5833335 -23.5833335 -23.4166665 489 0 2670 --49.5833335 -49.4166665 -23.5833335 -23.4166665 493 0 2670 --49.4166665 -49.2499995 -23.5833335 -23.4166665 654 0 2670 --49.2500005 -49.0833335 -23.5833335 -23.4166665 589 0 2670 --49.0833335 -48.9166665 -23.5833335 -23.4166665 664 0 2670 --48.9166665 -48.7499995 -23.5833335 -23.4166665 648 0 2670 --48.7500005 -48.5833335 -23.5833335 -23.4166665 614 0 2670 --48.5833335 -48.4166665 -23.5833335 -23.4166665 608 0 2670 --48.4166665 -48.2499995 -23.5833335 -23.4166665 741 0 2670 --48.2500005 -48.0833335 -23.5833335 -23.4166665 715 0 2670 --48.0833335 -47.9166665 -23.5833335 -23.4166665 741 0 2670 --47.9166665 -47.7499995 -23.5833335 -23.4166665 555 0 2670 --47.7500005 -47.5833335 -23.5833335 -23.4166665 600 0 2670 --47.5833335 -47.4166665 -23.5833335 -23.4166665 605 0 2670 --47.4166665 -47.2499995 -23.5833335 -23.4166665 702 0 2670 --47.2500005 -47.0833335 -23.5833335 -23.4166665 791 0 2670 --47.0833335 -46.9166665 -23.5833335 -23.4166665 878 0 2670 --46.9166665 -46.7499995 -23.5833335 -23.4166665 760 0 2670 --46.7500005 -46.5833335 -23.5833335 -23.4166665 744 0 2670 --46.5833335 -46.4166665 -23.5833335 -23.4166665 768 0 2670 --46.4166665 -46.2499995 -23.5833335 -23.4166665 739 0 2670 --46.2500005 -46.0833335 -23.5833335 -23.4166665 753 0 2670 --46.0833335 -45.9166665 -23.5833335 -23.4166665 732 0 2670 --45.9166665 -45.7499995 -23.5833335 -23.4166665 889 0 2670 --45.7500005 -45.5833335 -23.5833335 -23.4166665 1058 0 2670 --45.5833335 -45.4166665 -23.5833335 -23.4166665 746 0 2670 --45.4166665 -45.2499995 -23.5833335 -23.4166665 818 0 2670 --45.2500005 -45.0833335 -23.5833335 -23.4166665 20 0 2670 --45.0833335 -44.9166665 -23.5833335 -23.4166665 0 -22 -1670 --44.9166665 -44.7499995 -23.5833335 -23.4166665 0 -28 -1670 --44.7500005 -44.5833335 -23.5833335 -23.4166665 0 -36 -1670 --44.5833335 -44.4166665 -23.5833335 -23.4166665 0 -49 -1670 --44.4166665 -44.2499995 -23.5833335 -23.4166665 0 -51 -1670 --44.2500005 -44.0833335 -23.5833335 -23.4166665 0 -26 -1670 --44.0833335 -43.9166665 -23.5833335 -23.4166665 0 -76 -1670 --43.9166665 -43.7499995 -23.5833335 -23.4166665 0 -92 -1670 --43.7500005 -43.5833335 -23.5833335 -23.4166665 0 -92 -1670 --43.5833335 -43.4166665 -23.5833335 -23.4166665 0 -117 -1670 --43.4166665 -43.2499995 -23.5833335 -23.4166665 0 -119 -1670 --43.2500005 -43.0833335 -23.5833335 -23.4166665 0 -119 -1670 --43.0833335 -42.9166665 -23.5833335 -23.4166665 0 -113 -1670 --42.9166665 -42.7499995 -23.5833335 -23.4166665 0 -124 -1670 --42.7500005 -42.5833335 -23.5833335 -23.4166665 0 -127 -1670 --42.5833335 -42.4166665 -23.5833335 -23.4166665 0 -129 -1670 --42.4166665 -42.2499995 -23.5833335 -23.4166665 0 -137 -1670 --42.2500005 -42.0833335 -23.5833335 -23.4166665 0 -163 -1670 --42.0833335 -41.9166665 -23.5833335 -23.4166665 0 -212 -1670 --41.9166665 -41.7499995 -23.5833335 -23.4166665 0 -142 -1670 --41.7500005 -41.5833335 -23.5833335 -23.4166665 0 -141 -1670 --41.5833335 -41.4166665 -23.5833335 -23.4166665 0 -135 -1670 --41.4166665 -41.2499995 -23.5833335 -23.4166665 0 -113 -1670 --41.2500005 -41.0833335 -23.5833335 -23.4166665 0 -486 -1670 --41.0833335 -40.9166665 -23.5833335 -23.4166665 0 -1556 -1670 --40.9166665 -40.7499995 -23.5833335 -23.4166665 0 -2064 -1670 --40.7500005 -40.5833335 -23.5833335 -23.4166665 0 -2472 -1670 --40.5833335 -40.4166665 -23.5833335 -23.4166665 0 -2691 -1670 --40.4166665 -40.2499995 -23.5833335 -23.4166665 0 -2784 -1670 --40.2500005 -40.0833335 -23.5833335 -23.4166665 0 -2833 -1670 --40.0833335 -39.9166665 -23.5833335 -23.4166665 0 -2901 -1670 --65.0833335 -64.9166665 -23.7500005 -23.5833335 1912 0 2670 --64.9166665 -64.7499995 -23.7500005 -23.5833335 1336 0 2670 --64.7500005 -64.5833335 -23.7500005 -23.5833335 902 0 2670 --64.5833335 -64.4166665 -23.7500005 -23.5833335 367 0 2670 --64.4166665 -64.2499995 -23.7500005 -23.5833335 352 0 2670 --64.2500005 -64.0833335 -23.7500005 -23.5833335 357 0 2670 --64.0833335 -63.9166665 -23.7500005 -23.5833335 438 0 2670 --63.9166665 -63.7499995 -23.7500005 -23.5833335 506 0 2670 --63.7500005 -63.5833335 -23.7500005 -23.5833335 294 0 2670 --63.5833335 -63.4166665 -23.7500005 -23.5833335 246 0 2670 --63.4166665 -63.2499995 -23.7500005 -23.5833335 241 0 2670 --63.2500005 -63.0833335 -23.7500005 -23.5833335 232 0 2670 --63.0833335 -62.9166665 -23.7500005 -23.5833335 224 0 2670 --62.9166665 -62.7499995 -23.7500005 -23.5833335 216 0 2670 --62.7500005 -62.5833335 -23.7500005 -23.5833335 213 0 2670 --62.5833335 -62.4166665 -23.7500005 -23.5833335 207 0 2670 --62.4166665 -62.2499995 -23.7500005 -23.5833335 204 0 2670 --62.2500005 -62.0833335 -23.7500005 -23.5833335 198 0 2670 --62.0833335 -61.9166665 -23.7500005 -23.5833335 192 0 2670 --61.9166665 -61.7499995 -23.7500005 -23.5833335 187 0 2670 --61.7500005 -61.5833335 -23.7500005 -23.5833335 181 0 2670 --61.5833335 -61.4166665 -23.7500005 -23.5833335 179 0 2670 --61.4166665 -61.2499995 -23.7500005 -23.5833335 170 0 2670 --61.2500005 -61.0833335 -23.7500005 -23.5833335 169 0 2670 --61.0833335 -60.9166665 -23.7500005 -23.5833335 164 0 2670 --60.9166665 -60.7499995 -23.7500005 -23.5833335 156 0 2670 --60.7500005 -60.5833335 -23.7500005 -23.5833335 152 0 2670 --60.5833335 -60.4166665 -23.7500005 -23.5833335 146 0 2670 --60.4166665 -60.2499995 -23.7500005 -23.5833335 138 0 2670 --60.2500005 -60.0833335 -23.7500005 -23.5833335 136 0 2670 --60.0833335 -59.9166665 -23.7500005 -23.5833335 131 0 2670 --59.9166665 -59.7499995 -23.7500005 -23.5833335 124 0 2670 --59.7500005 -59.5833335 -23.7500005 -23.5833335 118 0 2670 --59.5833335 -59.4166665 -23.7500005 -23.5833335 116 0 2670 --59.4166665 -59.2499995 -23.7500005 -23.5833335 114 0 2670 --59.2500005 -59.0833335 -23.7500005 -23.5833335 109 0 2670 --59.0833335 -58.9166665 -23.7500005 -23.5833335 105 0 2670 --58.9166665 -58.7499995 -23.7500005 -23.5833335 101 0 2670 --58.7500005 -58.5833335 -23.7500005 -23.5833335 98 0 2670 --58.5833335 -58.4166665 -23.7500005 -23.5833335 94 0 2670 --58.4166665 -58.2499995 -23.7500005 -23.5833335 94 0 2670 --58.2500005 -58.0833335 -23.7500005 -23.5833335 87 0 2670 --58.0833335 -57.9166665 -23.7500005 -23.5833335 88 0 2670 --57.9166665 -57.7499995 -23.7500005 -23.5833335 78 0 2670 --57.7500005 -57.5833335 -23.7500005 -23.5833335 78 0 2670 --57.5833335 -57.4166665 -23.7500005 -23.5833335 70 0 2670 --57.4166665 -57.2499995 -23.7500005 -23.5833335 78 0 2670 --57.2500005 -57.0833335 -23.7500005 -23.5833335 97 0 2670 --57.0833335 -56.9166665 -23.7500005 -23.5833335 161 0 2670 --56.9166665 -56.7499995 -23.7500005 -23.5833335 216 0 2670 --56.7500005 -56.5833335 -23.7500005 -23.5833335 137 0 2670 --56.5833335 -56.4166665 -23.7500005 -23.5833335 159 0 2670 --56.4166665 -56.2499995 -23.7500005 -23.5833335 251 0 2670 --56.2500005 -56.0833335 -23.7500005 -23.5833335 264 0 2670 --56.0833335 -55.9166665 -23.7500005 -23.5833335 187 0 2670 --55.9166665 -55.7499995 -23.7500005 -23.5833335 228 0 2670 --55.7500005 -55.5833335 -23.7500005 -23.5833335 239 0 2670 --55.5833335 -55.4166665 -23.7500005 -23.5833335 389 0 2670 --55.4166665 -55.2499995 -23.7500005 -23.5833335 365 0 2670 --55.2500005 -55.0833335 -23.7500005 -23.5833335 377 0 2670 --55.0833335 -54.9166665 -23.7500005 -23.5833335 376 0 2670 --54.9166665 -54.7499995 -23.7500005 -23.5833335 381 0 2670 --54.7500005 -54.5833335 -23.7500005 -23.5833335 251 0 2670 --54.5833335 -54.4166665 -23.7500005 -23.5833335 308 0 2670 --54.4166665 -54.2499995 -23.7500005 -23.5833335 373 0 2670 --54.2500005 -54.0833335 -23.7500005 -23.5833335 294 0 2670 --54.0833335 -53.9166665 -23.7500005 -23.5833335 228 0 2670 --53.9166665 -53.7499995 -23.7500005 -23.5833335 262 0 2670 --53.7500005 -53.5833335 -23.7500005 -23.5833335 312 0 2670 --53.5833335 -53.4166665 -23.7500005 -23.5833335 408 0 2670 --53.4166665 -53.2499995 -23.7500005 -23.5833335 450 0 2670 --53.2500005 -53.0833335 -23.7500005 -23.5833335 345 0 2670 --53.0833335 -52.9166665 -23.7500005 -23.5833335 432 0 2670 --52.9166665 -52.7499995 -23.7500005 -23.5833335 494 0 2670 --52.7500005 -52.5833335 -23.7500005 -23.5833335 469 0 2670 --52.5833335 -52.4166665 -23.7500005 -23.5833335 427 0 2670 --52.4166665 -52.2499995 -23.7500005 -23.5833335 364 0 2670 --52.2500005 -52.0833335 -23.7500005 -23.5833335 316 0 2670 --52.0833335 -51.9166665 -23.7500005 -23.5833335 384 0 2670 --51.9166665 -51.7499995 -23.7500005 -23.5833335 481 0 2670 --51.7500005 -51.5833335 -23.7500005 -23.5833335 588 0 2670 --51.5833335 -51.4166665 -23.7500005 -23.5833335 578 0 2670 --51.4166665 -51.2499995 -23.7500005 -23.5833335 727 0 2670 --51.2500005 -51.0833335 -23.7500005 -23.5833335 642 0 2670 --51.0833335 -50.9166665 -23.7500005 -23.5833335 660 0 2670 --50.9166665 -50.7499995 -23.7500005 -23.5833335 773 0 2670 --50.7500005 -50.5833335 -23.7500005 -23.5833335 857 0 2670 --50.5833335 -50.4166665 -23.7500005 -23.5833335 764 0 2670 --50.4166665 -50.2499995 -23.7500005 -23.5833335 567 0 2670 --50.2500005 -50.0833335 -23.7500005 -23.5833335 527 0 2670 --50.0833335 -49.9166665 -23.7500005 -23.5833335 566 0 2670 --49.9166665 -49.7499995 -23.7500005 -23.5833335 662 0 2670 --49.7500005 -49.5833335 -23.7500005 -23.5833335 576 0 2670 --49.5833335 -49.4166665 -23.7500005 -23.5833335 525 0 2670 --49.4166665 -49.2499995 -23.7500005 -23.5833335 602 0 2670 --49.2500005 -49.0833335 -23.7500005 -23.5833335 652 0 2670 --49.0833335 -48.9166665 -23.7500005 -23.5833335 648 0 2670 --48.9166665 -48.7499995 -23.7500005 -23.5833335 755 0 2670 --48.7500005 -48.5833335 -23.7500005 -23.5833335 632 0 2670 --48.5833335 -48.4166665 -23.7500005 -23.5833335 631 0 2670 --48.4166665 -48.2499995 -23.7500005 -23.5833335 712 0 2670 --48.2500005 -48.0833335 -23.7500005 -23.5833335 673 0 2670 --48.0833335 -47.9166665 -23.7500005 -23.5833335 644 0 2670 --47.9166665 -47.7499995 -23.7500005 -23.5833335 659 0 2670 --47.7500005 -47.5833335 -23.7500005 -23.5833335 608 0 2670 --47.5833335 -47.4166665 -23.7500005 -23.5833335 748 0 2670 --47.4166665 -47.2499995 -23.7500005 -23.5833335 920 0 2670 --47.2500005 -47.0833335 -23.7500005 -23.5833335 892 0 2670 --47.0833335 -46.9166665 -23.7500005 -23.5833335 927 0 2670 --46.9166665 -46.7499995 -23.7500005 -23.5833335 790 0 2670 --46.7500005 -46.5833335 -23.7500005 -23.5833335 780 0 2670 --46.5833335 -46.4166665 -23.7500005 -23.5833335 769 0 2670 --46.4166665 -46.2499995 -23.7500005 -23.5833335 800 0 2670 --46.2500005 -46.0833335 -23.7500005 -23.5833335 788 0 2670 --46.0833335 -45.9166665 -23.7500005 -23.5833335 802 0 2670 --45.9166665 -45.7499995 -23.7500005 -23.5833335 931 0 2670 --45.7500005 -45.5833335 -23.7500005 -23.5833335 802 0 2670 --45.5833335 -45.4166665 -23.7500005 -23.5833335 64 0 2670 --45.4166665 -45.2499995 -23.7500005 -23.5833335 0 -1 -1670 --45.2500005 -45.0833335 -23.7500005 -23.5833335 0 -21 -1670 --45.0833335 -44.9166665 -23.7500005 -23.5833335 0 -34 -1670 --44.9166665 -44.7499995 -23.7500005 -23.5833335 0 -46 -1670 --44.7500005 -44.5833335 -23.7500005 -23.5833335 0 -36 -1670 --44.5833335 -44.4166665 -23.7500005 -23.5833335 0 -60 -1670 --44.4166665 -44.2499995 -23.7500005 -23.5833335 0 -76 -1670 --44.2500005 -44.0833335 -23.7500005 -23.5833335 0 -85 -1670 --44.0833335 -43.9166665 -23.7500005 -23.5833335 0 -99 -1670 --43.9166665 -43.7499995 -23.7500005 -23.5833335 0 -106 -1670 --43.7500005 -43.5833335 -23.7500005 -23.5833335 0 -116 -1670 --43.5833335 -43.4166665 -23.7500005 -23.5833335 0 -115 -1670 --43.4166665 -43.2499995 -23.7500005 -23.5833335 0 -121 -1670 --43.2500005 -43.0833335 -23.7500005 -23.5833335 0 -117 -1670 --43.0833335 -42.9166665 -23.7500005 -23.5833335 0 -122 -1670 --42.9166665 -42.7499995 -23.7500005 -23.5833335 0 -124 -1670 --42.7500005 -42.5833335 -23.7500005 -23.5833335 0 -151 -1670 --42.5833335 -42.4166665 -23.7500005 -23.5833335 0 -202 -1670 --42.4166665 -42.2499995 -23.7500005 -23.5833335 0 -352 -1670 --42.2500005 -42.0833335 -23.7500005 -23.5833335 0 -414 -1670 --42.0833335 -41.9166665 -23.7500005 -23.5833335 0 -408 -1670 --41.9166665 -41.7499995 -23.7500005 -23.5833335 0 -241 -1670 --41.7500005 -41.5833335 -23.7500005 -23.5833335 0 -151 -1670 --41.5833335 -41.4166665 -23.7500005 -23.5833335 0 -294 -1670 --41.4166665 -41.2499995 -23.7500005 -23.5833335 0 -652 -1670 --41.2500005 -41.0833335 -23.7500005 -23.5833335 0 -1257 -1670 --41.0833335 -40.9166665 -23.7500005 -23.5833335 0 -1869 -1670 --40.9166665 -40.7499995 -23.7500005 -23.5833335 0 -2198 -1670 --40.7500005 -40.5833335 -23.7500005 -23.5833335 0 -2537 -1670 --40.5833335 -40.4166665 -23.7500005 -23.5833335 0 -2722 -1670 --40.4166665 -40.2499995 -23.7500005 -23.5833335 0 -2851 -1670 --40.2500005 -40.0833335 -23.7500005 -23.5833335 0 -3020 -1670 --40.0833335 -39.9166665 -23.7500005 -23.5833335 0 -2977 -1670 --65.0833335 -64.9166665 -23.9166665 -23.7499995 1195 0 2670 --64.9166665 -64.7499995 -23.9166665 -23.7499995 637 0 2670 --64.7500005 -64.5833335 -23.9166665 -23.7499995 377 0 2670 --64.5833335 -64.4166665 -23.9166665 -23.7499995 532 0 2670 --64.4166665 -64.2499995 -23.9166665 -23.7499995 523 0 2670 --64.2500005 -64.0833335 -23.9166665 -23.7499995 427 0 2670 --64.0833335 -63.9166665 -23.9166665 -23.7499995 481 0 2670 --63.9166665 -63.7499995 -23.9166665 -23.7499995 348 0 2670 --63.7500005 -63.5833335 -23.9166665 -23.7499995 266 0 2670 --63.5833335 -63.4166665 -23.9166665 -23.7499995 235 0 2670 --63.4166665 -63.2499995 -23.9166665 -23.7499995 233 0 2670 --63.2500005 -63.0833335 -23.9166665 -23.7499995 228 0 2670 --63.0833335 -62.9166665 -23.9166665 -23.7499995 221 0 2670 --62.9166665 -62.7499995 -23.9166665 -23.7499995 214 0 2670 --62.7500005 -62.5833335 -23.9166665 -23.7499995 209 0 2670 --62.5833335 -62.4166665 -23.9166665 -23.7499995 203 0 2670 --62.4166665 -62.2499995 -23.9166665 -23.7499995 202 0 2670 --62.2500005 -62.0833335 -23.9166665 -23.7499995 195 0 2670 --62.0833335 -61.9166665 -23.9166665 -23.7499995 189 0 2670 --61.9166665 -61.7499995 -23.9166665 -23.7499995 184 0 2670 --61.7500005 -61.5833335 -23.9166665 -23.7499995 181 0 2670 --61.5833335 -61.4166665 -23.9166665 -23.7499995 174 0 2670 --61.4166665 -61.2499995 -23.9166665 -23.7499995 169 0 2670 --61.2500005 -61.0833335 -23.9166665 -23.7499995 165 0 2670 --61.0833335 -60.9166665 -23.9166665 -23.7499995 158 0 2670 --60.9166665 -60.7499995 -23.9166665 -23.7499995 157 0 2670 --60.7500005 -60.5833335 -23.9166665 -23.7499995 155 0 2670 --60.5833335 -60.4166665 -23.9166665 -23.7499995 148 0 2670 --60.4166665 -60.2499995 -23.9166665 -23.7499995 140 0 2670 --60.2500005 -60.0833335 -23.9166665 -23.7499995 137 0 2670 --60.0833335 -59.9166665 -23.9166665 -23.7499995 130 0 2670 --59.9166665 -59.7499995 -23.9166665 -23.7499995 122 0 2670 --59.7500005 -59.5833335 -23.9166665 -23.7499995 118 0 2670 --59.5833335 -59.4166665 -23.9166665 -23.7499995 117 0 2670 --59.4166665 -59.2499995 -23.9166665 -23.7499995 114 0 2670 --59.2500005 -59.0833335 -23.9166665 -23.7499995 110 0 2670 --59.0833335 -58.9166665 -23.9166665 -23.7499995 103 0 2670 --58.9166665 -58.7499995 -23.9166665 -23.7499995 102 0 2670 --58.7500005 -58.5833335 -23.9166665 -23.7499995 101 0 2670 --58.5833335 -58.4166665 -23.9166665 -23.7499995 96 0 2670 --58.4166665 -58.2499995 -23.9166665 -23.7499995 91 0 2670 --58.2500005 -58.0833335 -23.9166665 -23.7499995 88 0 2670 --58.0833335 -57.9166665 -23.9166665 -23.7499995 85 0 2670 --57.9166665 -57.7499995 -23.9166665 -23.7499995 82 0 2670 --57.7500005 -57.5833335 -23.9166665 -23.7499995 79 0 2670 --57.5833335 -57.4166665 -23.9166665 -23.7499995 71 0 2670 --57.4166665 -57.2499995 -23.9166665 -23.7499995 68 0 2670 --57.2500005 -57.0833335 -23.9166665 -23.7499995 77 0 2670 --57.0833335 -56.9166665 -23.9166665 -23.7499995 123 0 2670 --56.9166665 -56.7499995 -23.9166665 -23.7499995 171 0 2670 --56.7500005 -56.5833335 -23.9166665 -23.7499995 176 0 2670 --56.5833335 -56.4166665 -23.9166665 -23.7499995 154 0 2670 --56.4166665 -56.2499995 -23.9166665 -23.7499995 176 0 2670 --56.2500005 -56.0833335 -23.9166665 -23.7499995 219 0 2670 --56.0833335 -55.9166665 -23.9166665 -23.7499995 153 0 2670 --55.9166665 -55.7499995 -23.9166665 -23.7499995 216 0 2670 --55.7500005 -55.5833335 -23.9166665 -23.7499995 232 0 2670 --55.5833335 -55.4166665 -23.9166665 -23.7499995 372 0 2670 --55.4166665 -55.2499995 -23.9166665 -23.7499995 387 0 2670 --55.2500005 -55.0833335 -23.9166665 -23.7499995 377 0 2670 --55.0833335 -54.9166665 -23.9166665 -23.7499995 342 0 2670 --54.9166665 -54.7499995 -23.9166665 -23.7499995 300 0 2670 --54.7500005 -54.5833335 -23.9166665 -23.7499995 358 0 2670 --54.5833335 -54.4166665 -23.9166665 -23.7499995 302 0 2670 --54.4166665 -54.2499995 -23.9166665 -23.7499995 237 0 2670 --54.2500005 -54.0833335 -23.9166665 -23.7499995 262 0 2670 --54.0833335 -53.9166665 -23.9166665 -23.7499995 226 0 2670 --53.9166665 -53.7499995 -23.9166665 -23.7499995 365 0 2670 --53.7500005 -53.5833335 -23.9166665 -23.7499995 335 0 2670 --53.5833335 -53.4166665 -23.9166665 -23.7499995 311 0 2670 --53.4166665 -53.2499995 -23.9166665 -23.7499995 449 0 2670 --53.2500005 -53.0833335 -23.9166665 -23.7499995 411 0 2670 --53.0833335 -52.9166665 -23.9166665 -23.7499995 387 0 2670 --52.9166665 -52.7499995 -23.9166665 -23.7499995 491 0 2670 --52.7500005 -52.5833335 -23.9166665 -23.7499995 548 0 2670 --52.5833335 -52.4166665 -23.9166665 -23.7499995 521 0 2670 --52.4166665 -52.2499995 -23.9166665 -23.7499995 425 0 2670 --52.2500005 -52.0833335 -23.9166665 -23.7499995 371 0 2670 --52.0833335 -51.9166665 -23.9166665 -23.7499995 337 0 2670 --51.9166665 -51.7499995 -23.9166665 -23.7499995 440 0 2670 --51.7500005 -51.5833335 -23.9166665 -23.7499995 487 0 2670 --51.5833335 -51.4166665 -23.9166665 -23.7499995 455 0 2670 --51.4166665 -51.2499995 -23.9166665 -23.7499995 779 0 2670 --51.2500005 -51.0833335 -23.9166665 -23.7499995 884 0 2670 --51.0833335 -50.9166665 -23.9166665 -23.7499995 746 0 2670 --50.9166665 -50.7499995 -23.9166665 -23.7499995 666 0 2670 --50.7500005 -50.5833335 -23.9166665 -23.7499995 921 0 2670 --50.5833335 -50.4166665 -23.9166665 -23.7499995 617 0 2670 --50.4166665 -50.2499995 -23.9166665 -23.7499995 607 0 2670 --50.2500005 -50.0833335 -23.9166665 -23.7499995 713 0 2670 --50.0833335 -49.9166665 -23.9166665 -23.7499995 647 0 2670 --49.9166665 -49.7499995 -23.9166665 -23.7499995 624 0 2670 --49.7500005 -49.5833335 -23.9166665 -23.7499995 595 0 2670 --49.5833335 -49.4166665 -23.9166665 -23.7499995 566 0 2670 --49.4166665 -49.2499995 -23.9166665 -23.7499995 589 0 2670 --49.2500005 -49.0833335 -23.9166665 -23.7499995 630 0 2670 --49.0833335 -48.9166665 -23.9166665 -23.7499995 622 0 2670 --48.9166665 -48.7499995 -23.9166665 -23.7499995 697 0 2670 --48.7500005 -48.5833335 -23.9166665 -23.7499995 678 0 2670 --48.5833335 -48.4166665 -23.9166665 -23.7499995 681 0 2670 --48.4166665 -48.2499995 -23.9166665 -23.7499995 632 0 2670 --48.2500005 -48.0833335 -23.9166665 -23.7499995 656 0 2670 --48.0833335 -47.9166665 -23.9166665 -23.7499995 713 0 2670 --47.9166665 -47.7499995 -23.9166665 -23.7499995 726 0 2670 --47.7500005 -47.5833335 -23.9166665 -23.7499995 740 0 2670 --47.5833335 -47.4166665 -23.9166665 -23.7499995 997 0 2670 --47.4166665 -47.2499995 -23.9166665 -23.7499995 1013 0 2670 --47.2500005 -47.0833335 -23.9166665 -23.7499995 899 0 2670 --47.0833335 -46.9166665 -23.9166665 -23.7499995 869 0 2670 --46.9166665 -46.7499995 -23.9166665 -23.7499995 769 0 2670 --46.7500005 -46.5833335 -23.9166665 -23.7499995 785 0 2670 --46.5833335 -46.4166665 -23.9166665 -23.7499995 751 0 2670 --46.4166665 -46.2499995 -23.9166665 -23.7499995 267 0 2670 --46.2500005 -46.0833335 -23.9166665 -23.7499995 14 0 2670 --46.0833335 -45.9166665 -23.9166665 -23.7499995 0 -2 -1670 --45.9166665 -45.7499995 -23.9166665 -23.7499995 0 -3 -1670 --45.7500005 -45.5833335 -23.9166665 -23.7499995 0 -9 -1670 --45.5833335 -45.4166665 -23.9166665 -23.7499995 129 0 2670 --45.4166665 -45.2499995 -23.9166665 -23.7499995 504 0 2670 --45.2500005 -45.0833335 -23.9166665 -23.7499995 0 -5 -1670 --45.0833335 -44.9166665 -23.9166665 -23.7499995 0 -45 -1670 --44.9166665 -44.7499995 -23.9166665 -23.7499995 0 -74 -1670 --44.7500005 -44.5833335 -23.9166665 -23.7499995 0 -93 -1670 --44.5833335 -44.4166665 -23.9166665 -23.7499995 0 -83 -1670 --44.4166665 -44.2499995 -23.9166665 -23.7499995 0 -96 -1670 --44.2500005 -44.0833335 -23.9166665 -23.7499995 0 -112 -1670 --44.0833335 -43.9166665 -23.9166665 -23.7499995 0 -114 -1670 --43.9166665 -43.7499995 -23.9166665 -23.7499995 0 -124 -1670 --43.7500005 -43.5833335 -23.9166665 -23.7499995 0 -129 -1670 --43.5833335 -43.4166665 -23.9166665 -23.7499995 0 -137 -1670 --43.4166665 -43.2499995 -23.9166665 -23.7499995 0 -132 -1670 --43.2500005 -43.0833335 -23.9166665 -23.7499995 0 -161 -1670 --43.0833335 -42.9166665 -23.9166665 -23.7499995 0 -185 -1670 --42.9166665 -42.7499995 -23.9166665 -23.7499995 0 -324 -1670 --42.7500005 -42.5833335 -23.9166665 -23.7499995 0 -510 -1670 --42.5833335 -42.4166665 -23.9166665 -23.7499995 0 -591 -1670 --42.4166665 -42.2499995 -23.9166665 -23.7499995 0 -688 -1670 --42.2500005 -42.0833335 -23.9166665 -23.7499995 0 -688 -1670 --42.0833335 -41.9166665 -23.9166665 -23.7499995 0 -732 -1670 --41.9166665 -41.7499995 -23.9166665 -23.7499995 0 -783 -1670 --41.7500005 -41.5833335 -23.9166665 -23.7499995 0 -897 -1670 --41.5833335 -41.4166665 -23.9166665 -23.7499995 0 -954 -1670 --41.4166665 -41.2499995 -23.9166665 -23.7499995 0 -1230 -1670 --41.2500005 -41.0833335 -23.9166665 -23.7499995 0 -1623 -1670 --41.0833335 -40.9166665 -23.9166665 -23.7499995 0 -2013 -1670 --40.9166665 -40.7499995 -23.9166665 -23.7499995 0 -2357 -1670 --40.7500005 -40.5833335 -23.9166665 -23.7499995 0 -2497 -1670 --40.5833335 -40.4166665 -23.9166665 -23.7499995 0 -2765 -1670 --40.4166665 -40.2499995 -23.9166665 -23.7499995 0 -2848 -1670 --40.2500005 -40.0833335 -23.9166665 -23.7499995 0 -2928 -1670 --40.0833335 -39.9166665 -23.9166665 -23.7499995 0 -2999 -1670 --65.0833335 -64.9166665 -24.0833335 -23.9166665 823 0 2670 --64.9166665 -64.7499995 -24.0833335 -23.9166665 578 0 2670 --64.7500005 -64.5833335 -24.0833335 -23.9166665 391 0 2670 --64.5833335 -64.4166665 -24.0833335 -23.9166665 978 0 2670 --64.4166665 -64.2499995 -24.0833335 -23.9166665 762 0 2670 --64.2500005 -64.0833335 -24.0833335 -23.9166665 572 0 2670 --64.0833335 -63.9166665 -24.0833335 -23.9166665 392 0 2670 --63.9166665 -63.7499995 -24.0833335 -23.9166665 317 0 2670 --63.7500005 -63.5833335 -24.0833335 -23.9166665 262 0 2670 --63.5833335 -63.4166665 -24.0833335 -23.9166665 230 0 2670 --63.4166665 -63.2499995 -24.0833335 -23.9166665 224 0 2670 --63.2500005 -63.0833335 -24.0833335 -23.9166665 221 0 2670 --63.0833335 -62.9166665 -24.0833335 -23.9166665 216 0 2670 --62.9166665 -62.7499995 -24.0833335 -23.9166665 212 0 2670 --62.7500005 -62.5833335 -24.0833335 -23.9166665 206 0 2670 --62.5833335 -62.4166665 -24.0833335 -23.9166665 200 0 2670 --62.4166665 -62.2499995 -24.0833335 -23.9166665 194 0 2670 --62.2500005 -62.0833335 -24.0833335 -23.9166665 192 0 2670 --62.0833335 -61.9166665 -24.0833335 -23.9166665 187 0 2670 --61.9166665 -61.7499995 -24.0833335 -23.9166665 183 0 2670 --61.7500005 -61.5833335 -24.0833335 -23.9166665 178 0 2670 --61.5833335 -61.4166665 -24.0833335 -23.9166665 172 0 2670 --61.4166665 -61.2499995 -24.0833335 -23.9166665 166 0 2670 --61.2500005 -61.0833335 -24.0833335 -23.9166665 162 0 2670 --61.0833335 -60.9166665 -24.0833335 -23.9166665 156 0 2670 --60.9166665 -60.7499995 -24.0833335 -23.9166665 153 0 2670 --60.7500005 -60.5833335 -24.0833335 -23.9166665 149 0 2670 --60.5833335 -60.4166665 -24.0833335 -23.9166665 145 0 2670 --60.4166665 -60.2499995 -24.0833335 -23.9166665 140 0 2670 --60.2500005 -60.0833335 -24.0833335 -23.9166665 134 0 2670 --60.0833335 -59.9166665 -24.0833335 -23.9166665 129 0 2670 --59.9166665 -59.7499995 -24.0833335 -23.9166665 125 0 2670 --59.7500005 -59.5833335 -24.0833335 -23.9166665 117 0 2670 --59.5833335 -59.4166665 -24.0833335 -23.9166665 113 0 2670 --59.4166665 -59.2499995 -24.0833335 -23.9166665 114 0 2670 --59.2500005 -59.0833335 -24.0833335 -23.9166665 110 0 2670 --59.0833335 -58.9166665 -24.0833335 -23.9166665 104 0 2670 --58.9166665 -58.7499995 -24.0833335 -23.9166665 101 0 2670 --58.7500005 -58.5833335 -24.0833335 -23.9166665 99 0 2670 --58.5833335 -58.4166665 -24.0833335 -23.9166665 95 0 2670 --58.4166665 -58.2499995 -24.0833335 -23.9166665 91 0 2670 --58.2500005 -58.0833335 -24.0833335 -23.9166665 91 0 2670 --58.0833335 -57.9166665 -24.0833335 -23.9166665 82 0 2670 --57.9166665 -57.7499995 -24.0833335 -23.9166665 81 0 2670 --57.7500005 -57.5833335 -24.0833335 -23.9166665 73 0 2670 --57.5833335 -57.4166665 -24.0833335 -23.9166665 70 0 2670 --57.4166665 -57.2499995 -24.0833335 -23.9166665 68 0 2670 --57.2500005 -57.0833335 -24.0833335 -23.9166665 70 0 2670 --57.0833335 -56.9166665 -24.0833335 -23.9166665 112 0 2670 --56.9166665 -56.7499995 -24.0833335 -23.9166665 97 0 2670 --56.7500005 -56.5833335 -24.0833335 -23.9166665 91 0 2670 --56.5833335 -56.4166665 -24.0833335 -23.9166665 170 0 2670 --56.4166665 -56.2499995 -24.0833335 -23.9166665 184 0 2670 --56.2500005 -56.0833335 -24.0833335 -23.9166665 241 0 2670 --56.0833335 -55.9166665 -24.0833335 -23.9166665 191 0 2670 --55.9166665 -55.7499995 -24.0833335 -23.9166665 172 0 2670 --55.7500005 -55.5833335 -24.0833335 -23.9166665 211 0 2670 --55.5833335 -55.4166665 -24.0833335 -23.9166665 227 0 2670 --55.4166665 -55.2499995 -24.0833335 -23.9166665 439 0 2670 --55.2500005 -55.0833335 -24.0833335 -23.9166665 403 0 2670 --55.0833335 -54.9166665 -24.0833335 -23.9166665 364 0 2670 --54.9166665 -54.7499995 -24.0833335 -23.9166665 326 0 2670 --54.7500005 -54.5833335 -24.0833335 -23.9166665 313 0 2670 --54.5833335 -54.4166665 -24.0833335 -23.9166665 279 0 2670 --54.4166665 -54.2499995 -24.0833335 -23.9166665 301 0 2670 --54.2500005 -54.0833335 -24.0833335 -23.9166665 220 0 2670 --54.0833335 -53.9166665 -24.0833335 -23.9166665 228 0 2670 --53.9166665 -53.7499995 -24.0833335 -23.9166665 275 0 2670 --53.7500005 -53.5833335 -24.0833335 -23.9166665 349 0 2670 --53.5833335 -53.4166665 -24.0833335 -23.9166665 361 0 2670 --53.4166665 -53.2499995 -24.0833335 -23.9166665 369 0 2670 --53.2500005 -53.0833335 -24.0833335 -23.9166665 408 0 2670 --53.0833335 -52.9166665 -24.0833335 -23.9166665 424 0 2670 --52.9166665 -52.7499995 -24.0833335 -23.9166665 402 0 2670 --52.7500005 -52.5833335 -24.0833335 -23.9166665 535 0 2670 --52.5833335 -52.4166665 -24.0833335 -23.9166665 587 0 2670 --52.4166665 -52.2499995 -24.0833335 -23.9166665 540 0 2670 --52.2500005 -52.0833335 -24.0833335 -23.9166665 427 0 2670 --52.0833335 -51.9166665 -24.0833335 -23.9166665 358 0 2670 --51.9166665 -51.7499995 -24.0833335 -23.9166665 459 0 2670 --51.7500005 -51.5833335 -24.0833335 -23.9166665 374 0 2670 --51.5833335 -51.4166665 -24.0833335 -23.9166665 595 0 2670 --51.4166665 -51.2499995 -24.0833335 -23.9166665 798 0 2670 --51.2500005 -51.0833335 -24.0833335 -23.9166665 865 0 2670 --51.0833335 -50.9166665 -24.0833335 -23.9166665 747 0 2670 --50.9166665 -50.7499995 -24.0833335 -23.9166665 686 0 2670 --50.7500005 -50.5833335 -24.0833335 -23.9166665 590 0 2670 --50.5833335 -50.4166665 -24.0833335 -23.9166665 768 0 2670 --50.4166665 -50.2499995 -24.0833335 -23.9166665 692 0 2670 --50.2500005 -50.0833335 -24.0833335 -23.9166665 728 0 2670 --50.0833335 -49.9166665 -24.0833335 -23.9166665 610 0 2670 --49.9166665 -49.7499995 -24.0833335 -23.9166665 834 0 2670 --49.7500005 -49.5833335 -24.0833335 -23.9166665 655 0 2670 --49.5833335 -49.4166665 -24.0833335 -23.9166665 564 0 2670 --49.4166665 -49.2499995 -24.0833335 -23.9166665 624 0 2670 --49.2500005 -49.0833335 -24.0833335 -23.9166665 635 0 2670 --49.0833335 -48.9166665 -24.0833335 -23.9166665 703 0 2670 --48.9166665 -48.7499995 -24.0833335 -23.9166665 683 0 2670 --48.7500005 -48.5833335 -24.0833335 -23.9166665 682 0 2670 --48.5833335 -48.4166665 -24.0833335 -23.9166665 722 0 2670 --48.4166665 -48.2499995 -24.0833335 -23.9166665 707 0 2670 --48.2500005 -48.0833335 -24.0833335 -23.9166665 637 0 2670 --48.0833335 -47.9166665 -24.0833335 -23.9166665 721 0 2670 --47.9166665 -47.7499995 -24.0833335 -23.9166665 758 0 2670 --47.7500005 -47.5833335 -24.0833335 -23.9166665 752 0 2670 --47.5833335 -47.4166665 -24.0833335 -23.9166665 791 0 2670 --47.4166665 -47.2499995 -24.0833335 -23.9166665 637 0 2670 --47.2500005 -47.0833335 -24.0833335 -23.9166665 691 0 2670 --47.0833335 -46.9166665 -24.0833335 -23.9166665 750 0 2670 --46.9166665 -46.7499995 -24.0833335 -23.9166665 662 0 2670 --46.7500005 -46.5833335 -24.0833335 -23.9166665 219 0 2670 --46.5833335 -46.4166665 -24.0833335 -23.9166665 9 0 2670 --46.4166665 -46.2499995 -24.0833335 -23.9166665 0 -1 -1670 --46.2500005 -46.0833335 -24.0833335 -23.9166665 0 -5 -1670 --46.0833335 -45.9166665 -24.0833335 -23.9166665 0 -22 -1670 --45.9166665 -45.7499995 -24.0833335 -23.9166665 0 -25 -1670 --45.7500005 -45.5833335 -24.0833335 -23.9166665 0 -29 -1670 --45.5833335 -45.4166665 -24.0833335 -23.9166665 0 -27 -1670 --45.4166665 -45.2499995 -24.0833335 -23.9166665 0 -33 -1670 --45.2500005 -45.0833335 -24.0833335 -23.9166665 0 -74 -1670 --45.0833335 -44.9166665 -24.0833335 -23.9166665 0 -77 -1670 --44.9166665 -44.7499995 -24.0833335 -23.9166665 0 -80 -1670 --44.7500005 -44.5833335 -24.0833335 -23.9166665 0 -95 -1670 --44.5833335 -44.4166665 -24.0833335 -23.9166665 0 -131 -1670 --44.4166665 -44.2499995 -24.0833335 -23.9166665 0 -135 -1670 --44.2500005 -44.0833335 -24.0833335 -23.9166665 0 -134 -1670 --44.0833335 -43.9166665 -24.0833335 -23.9166665 0 -127 -1670 --43.9166665 -43.7499995 -24.0833335 -23.9166665 0 -136 -1670 --43.7500005 -43.5833335 -24.0833335 -23.9166665 0 -158 -1670 --43.5833335 -43.4166665 -24.0833335 -23.9166665 0 -151 -1670 --43.4166665 -43.2499995 -24.0833335 -23.9166665 0 -160 -1670 --43.2500005 -43.0833335 -24.0833335 -23.9166665 0 -309 -1670 --43.0833335 -42.9166665 -24.0833335 -23.9166665 0 -504 -1670 --42.9166665 -42.7499995 -24.0833335 -23.9166665 0 -606 -1670 --42.7500005 -42.5833335 -24.0833335 -23.9166665 0 -711 -1670 --42.5833335 -42.4166665 -24.0833335 -23.9166665 0 -839 -1670 --42.4166665 -42.2499995 -24.0833335 -23.9166665 0 -946 -1670 --42.2500005 -42.0833335 -24.0833335 -23.9166665 0 -1085 -1670 --42.0833335 -41.9166665 -24.0833335 -23.9166665 0 -1164 -1670 --41.9166665 -41.7499995 -24.0833335 -23.9166665 0 -1306 -1670 --41.7500005 -41.5833335 -24.0833335 -23.9166665 0 -1453 -1670 --41.5833335 -41.4166665 -24.0833335 -23.9166665 0 -1447 -1670 --41.4166665 -41.2499995 -24.0833335 -23.9166665 0 -1776 -1670 --41.2500005 -41.0833335 -24.0833335 -23.9166665 0 -2155 -1670 --41.0833335 -40.9166665 -24.0833335 -23.9166665 0 -2373 -1670 --40.9166665 -40.7499995 -24.0833335 -23.9166665 0 -2460 -1670 --40.7500005 -40.5833335 -24.0833335 -23.9166665 0 -2721 -1670 --40.5833335 -40.4166665 -24.0833335 -23.9166665 0 -2856 -1670 --40.4166665 -40.2499995 -24.0833335 -23.9166665 0 -2938 -1670 --40.2500005 -40.0833335 -24.0833335 -23.9166665 0 -2961 -1670 --40.0833335 -39.9166665 -24.0833335 -23.9166665 0 -2997 -1670 --65.0833335 -64.9166665 -24.2500005 -24.0833335 1170 0 2670 --64.9166665 -64.7499995 -24.2500005 -24.0833335 487 0 2670 --64.7500005 -64.5833335 -24.2500005 -24.0833335 449 0 2670 --64.5833335 -64.4166665 -24.2500005 -24.0833335 2346 0 2670 --64.4166665 -64.2499995 -24.2500005 -24.0833335 1639 0 2670 --64.2500005 -64.0833335 -24.2500005 -24.0833335 883 0 2670 --64.0833335 -63.9166665 -24.2500005 -24.0833335 373 0 2670 --63.9166665 -63.7499995 -24.2500005 -24.0833335 289 0 2670 --63.7500005 -63.5833335 -24.2500005 -24.0833335 261 0 2670 --63.5833335 -63.4166665 -24.2500005 -24.0833335 244 0 2670 --63.4166665 -63.2499995 -24.2500005 -24.0833335 227 0 2670 --63.2500005 -63.0833335 -24.2500005 -24.0833335 219 0 2670 --63.0833335 -62.9166665 -24.2500005 -24.0833335 213 0 2670 --62.9166665 -62.7499995 -24.2500005 -24.0833335 208 0 2670 --62.7500005 -62.5833335 -24.2500005 -24.0833335 204 0 2670 --62.5833335 -62.4166665 -24.2500005 -24.0833335 198 0 2670 --62.4166665 -62.2499995 -24.2500005 -24.0833335 191 0 2670 --62.2500005 -62.0833335 -24.2500005 -24.0833335 187 0 2670 --62.0833335 -61.9166665 -24.2500005 -24.0833335 182 0 2670 --61.9166665 -61.7499995 -24.2500005 -24.0833335 179 0 2670 --61.7500005 -61.5833335 -24.2500005 -24.0833335 174 0 2670 --61.5833335 -61.4166665 -24.2500005 -24.0833335 169 0 2670 --61.4166665 -61.2499995 -24.2500005 -24.0833335 164 0 2670 --61.2500005 -61.0833335 -24.2500005 -24.0833335 161 0 2670 --61.0833335 -60.9166665 -24.2500005 -24.0833335 155 0 2670 --60.9166665 -60.7499995 -24.2500005 -24.0833335 150 0 2670 --60.7500005 -60.5833335 -24.2500005 -24.0833335 144 0 2670 --60.5833335 -60.4166665 -24.2500005 -24.0833335 145 0 2670 --60.4166665 -60.2499995 -24.2500005 -24.0833335 141 0 2670 --60.2500005 -60.0833335 -24.2500005 -24.0833335 136 0 2670 --60.0833335 -59.9166665 -24.2500005 -24.0833335 132 0 2670 --59.9166665 -59.7499995 -24.2500005 -24.0833335 123 0 2670 --59.7500005 -59.5833335 -24.2500005 -24.0833335 121 0 2670 --59.5833335 -59.4166665 -24.2500005 -24.0833335 114 0 2670 --59.4166665 -59.2499995 -24.2500005 -24.0833335 111 0 2670 --59.2500005 -59.0833335 -24.2500005 -24.0833335 108 0 2670 --59.0833335 -58.9166665 -24.2500005 -24.0833335 105 0 2670 --58.9166665 -58.7499995 -24.2500005 -24.0833335 102 0 2670 --58.7500005 -58.5833335 -24.2500005 -24.0833335 99 0 2670 --58.5833335 -58.4166665 -24.2500005 -24.0833335 95 0 2670 --58.4166665 -58.2499995 -24.2500005 -24.0833335 90 0 2670 --58.2500005 -58.0833335 -24.2500005 -24.0833335 87 0 2670 --58.0833335 -57.9166665 -24.2500005 -24.0833335 82 0 2670 --57.9166665 -57.7499995 -24.2500005 -24.0833335 77 0 2670 --57.7500005 -57.5833335 -24.2500005 -24.0833335 74 0 2670 --57.5833335 -57.4166665 -24.2500005 -24.0833335 73 0 2670 --57.4166665 -57.2499995 -24.2500005 -24.0833335 69 0 2670 --57.2500005 -57.0833335 -24.2500005 -24.0833335 75 0 2670 --57.0833335 -56.9166665 -24.2500005 -24.0833335 76 0 2670 --56.9166665 -56.7499995 -24.2500005 -24.0833335 89 0 2670 --56.7500005 -56.5833335 -24.2500005 -24.0833335 195 0 2670 --56.5833335 -56.4166665 -24.2500005 -24.0833335 171 0 2670 --56.4166665 -56.2499995 -24.2500005 -24.0833335 150 0 2670 --56.2500005 -56.0833335 -24.2500005 -24.0833335 139 0 2670 --56.0833335 -55.9166665 -24.2500005 -24.0833335 223 0 2670 --55.9166665 -55.7499995 -24.2500005 -24.0833335 176 0 2670 --55.7500005 -55.5833335 -24.2500005 -24.0833335 175 0 2670 --55.5833335 -55.4166665 -24.2500005 -24.0833335 173 0 2670 --55.4166665 -55.2499995 -24.2500005 -24.0833335 193 0 2670 --55.2500005 -55.0833335 -24.2500005 -24.0833335 295 0 2670 --55.0833335 -54.9166665 -24.2500005 -24.0833335 347 0 2670 --54.9166665 -54.7499995 -24.2500005 -24.0833335 356 0 2670 --54.7500005 -54.5833335 -24.2500005 -24.0833335 347 0 2670 --54.5833335 -54.4166665 -24.2500005 -24.0833335 291 0 2670 --54.4166665 -54.2499995 -24.2500005 -24.0833335 235 0 2670 --54.2500005 -54.0833335 -24.2500005 -24.0833335 321 0 2670 --54.0833335 -53.9166665 -24.2500005 -24.0833335 263 0 2670 --53.9166665 -53.7499995 -24.2500005 -24.0833335 249 0 2670 --53.7500005 -53.5833335 -24.2500005 -24.0833335 274 0 2670 --53.5833335 -53.4166665 -24.2500005 -24.0833335 350 0 2670 --53.4166665 -53.2499995 -24.2500005 -24.0833335 350 0 2670 --53.2500005 -53.0833335 -24.2500005 -24.0833335 425 0 2670 --53.0833335 -52.9166665 -24.2500005 -24.0833335 444 0 2670 --52.9166665 -52.7499995 -24.2500005 -24.0833335 541 0 2670 --52.7500005 -52.5833335 -24.2500005 -24.0833335 541 0 2670 --52.5833335 -52.4166665 -24.2500005 -24.0833335 653 0 2670 --52.4166665 -52.2499995 -24.2500005 -24.0833335 599 0 2670 --52.2500005 -52.0833335 -24.2500005 -24.0833335 532 0 2670 --52.0833335 -51.9166665 -24.2500005 -24.0833335 432 0 2670 --51.9166665 -51.7499995 -24.2500005 -24.0833335 535 0 2670 --51.7500005 -51.5833335 -24.2500005 -24.0833335 617 0 2670 --51.5833335 -51.4166665 -24.2500005 -24.0833335 526 0 2670 --51.4166665 -51.2499995 -24.2500005 -24.0833335 430 0 2670 --51.2500005 -51.0833335 -24.2500005 -24.0833335 661 0 2670 --51.0833335 -50.9166665 -24.2500005 -24.0833335 819 0 2670 --50.9166665 -50.7499995 -24.2500005 -24.0833335 744 0 2670 --50.7500005 -50.5833335 -24.2500005 -24.0833335 691 0 2670 --50.5833335 -50.4166665 -24.2500005 -24.0833335 845 0 2670 --50.4166665 -50.2499995 -24.2500005 -24.0833335 912 0 2670 --50.2500005 -50.0833335 -24.2500005 -24.0833335 806 0 2670 --50.0833335 -49.9166665 -24.2500005 -24.0833335 765 0 2670 --49.9166665 -49.7499995 -24.2500005 -24.0833335 860 0 2670 --49.7500005 -49.5833335 -24.2500005 -24.0833335 813 0 2670 --49.5833335 -49.4166665 -24.2500005 -24.0833335 742 0 2670 --49.4166665 -49.2499995 -24.2500005 -24.0833335 822 0 2670 --49.2500005 -49.0833335 -24.2500005 -24.0833335 881 0 2670 --49.0833335 -48.9166665 -24.2500005 -24.0833335 889 0 2670 --48.9166665 -48.7499995 -24.2500005 -24.0833335 951 0 2670 --48.7500005 -48.5833335 -24.2500005 -24.0833335 865 0 2670 --48.5833335 -48.4166665 -24.2500005 -24.0833335 789 0 2670 --48.4166665 -48.2499995 -24.2500005 -24.0833335 814 0 2670 --48.2500005 -48.0833335 -24.2500005 -24.0833335 840 0 2670 --48.0833335 -47.9166665 -24.2500005 -24.0833335 744 0 2670 --47.9166665 -47.7499995 -24.2500005 -24.0833335 242 0 2670 --47.7500005 -47.5833335 -24.2500005 -24.0833335 128 0 2670 --47.5833335 -47.4166665 -24.2500005 -24.0833335 309 0 2670 --47.4166665 -47.2499995 -24.2500005 -24.0833335 77 0 2670 --47.2500005 -47.0833335 -24.2500005 -24.0833335 331 0 2670 --47.0833335 -46.9166665 -24.2500005 -24.0833335 81 0 2670 --46.9166665 -46.7499995 -24.2500005 -24.0833335 12 0 2670 --46.7500005 -46.5833335 -24.2500005 -24.0833335 0 -4 -1670 --46.5833335 -46.4166665 -24.2500005 -24.0833335 0 -19 -1670 --46.4166665 -46.2499995 -24.2500005 -24.0833335 0 -24 -1670 --46.2500005 -46.0833335 -24.2500005 -24.0833335 0 -26 -1670 --46.0833335 -45.9166665 -24.2500005 -24.0833335 0 -30 -1670 --45.9166665 -45.7499995 -24.2500005 -24.0833335 0 -26 -1670 --45.7500005 -45.5833335 -24.2500005 -24.0833335 0 -30 -1670 --45.5833335 -45.4166665 -24.2500005 -24.0833335 0 -54 -1670 --45.4166665 -45.2499995 -24.2500005 -24.0833335 0 -81 -1670 --45.2500005 -45.0833335 -24.2500005 -24.0833335 0 -70 -1670 --45.0833335 -44.9166665 -24.2500005 -24.0833335 0 -65 -1670 --44.9166665 -44.7499995 -24.2500005 -24.0833335 0 -92 -1670 --44.7500005 -44.5833335 -24.2500005 -24.0833335 0 -125 -1670 --44.5833335 -44.4166665 -24.2500005 -24.0833335 0 -125 -1670 --44.4166665 -44.2499995 -24.2500005 -24.0833335 0 -150 -1670 --44.2500005 -44.0833335 -24.2500005 -24.0833335 0 -147 -1670 --44.0833335 -43.9166665 -24.2500005 -24.0833335 0 -169 -1670 --43.9166665 -43.7499995 -24.2500005 -24.0833335 0 -187 -1670 --43.7500005 -43.5833335 -24.2500005 -24.0833335 0 -181 -1670 --43.5833335 -43.4166665 -24.2500005 -24.0833335 0 -271 -1670 --43.4166665 -43.2499995 -24.2500005 -24.0833335 0 -511 -1670 --43.2500005 -43.0833335 -24.2500005 -24.0833335 0 -639 -1670 --43.0833335 -42.9166665 -24.2500005 -24.0833335 0 -825 -1670 --42.9166665 -42.7499995 -24.2500005 -24.0833335 0 -997 -1670 --42.7500005 -42.5833335 -24.2500005 -24.0833335 0 -1131 -1670 --42.5833335 -42.4166665 -24.2500005 -24.0833335 0 -1241 -1670 --42.4166665 -42.2499995 -24.2500005 -24.0833335 0 -1378 -1670 --42.2500005 -42.0833335 -24.2500005 -24.0833335 0 -1484 -1670 --42.0833335 -41.9166665 -24.2500005 -24.0833335 0 -1499 -1670 --41.9166665 -41.7499995 -24.2500005 -24.0833335 0 -1668 -1670 --41.7500005 -41.5833335 -24.2500005 -24.0833335 0 -1761 -1670 --41.5833335 -41.4166665 -24.2500005 -24.0833335 0 -1861 -1670 --41.4166665 -41.2499995 -24.2500005 -24.0833335 0 -2099 -1670 --41.2500005 -41.0833335 -24.2500005 -24.0833335 0 -2253 -1670 --41.0833335 -40.9166665 -24.2500005 -24.0833335 0 -2486 -1670 --40.9166665 -40.7499995 -24.2500005 -24.0833335 0 -2754 -1670 --40.7500005 -40.5833335 -24.2500005 -24.0833335 0 -2834 -1670 --40.5833335 -40.4166665 -24.2500005 -24.0833335 0 -2888 -1670 --40.4166665 -40.2499995 -24.2500005 -24.0833335 0 -2907 -1670 --40.2500005 -40.0833335 -24.2500005 -24.0833335 0 -3016 -1670 --40.0833335 -39.9166665 -24.2500005 -24.0833335 0 -3053 -1670 --65.0833335 -64.9166665 -24.4166665 -24.2499995 861 0 2670 --64.9166665 -64.7499995 -24.4166665 -24.2499995 556 0 2670 --64.7500005 -64.5833335 -24.4166665 -24.2499995 579 0 2670 --64.5833335 -64.4166665 -24.4166665 -24.2499995 1292 0 2670 --64.4166665 -64.2499995 -24.4166665 -24.2499995 1278 0 2670 --64.2500005 -64.0833335 -24.4166665 -24.2499995 514 0 2670 --64.0833335 -63.9166665 -24.4166665 -24.2499995 359 0 2670 --63.9166665 -63.7499995 -24.4166665 -24.2499995 313 0 2670 --63.7500005 -63.5833335 -24.4166665 -24.2499995 275 0 2670 --63.5833335 -63.4166665 -24.4166665 -24.2499995 249 0 2670 --63.4166665 -63.2499995 -24.4166665 -24.2499995 235 0 2670 --63.2500005 -63.0833335 -24.4166665 -24.2499995 226 0 2670 --63.0833335 -62.9166665 -24.4166665 -24.2499995 219 0 2670 --62.9166665 -62.7499995 -24.4166665 -24.2499995 209 0 2670 --62.7500005 -62.5833335 -24.4166665 -24.2499995 201 0 2670 --62.5833335 -62.4166665 -24.4166665 -24.2499995 193 0 2670 --62.4166665 -62.2499995 -24.4166665 -24.2499995 189 0 2670 --62.2500005 -62.0833335 -24.4166665 -24.2499995 184 0 2670 --62.0833335 -61.9166665 -24.4166665 -24.2499995 180 0 2670 --61.9166665 -61.7499995 -24.4166665 -24.2499995 177 0 2670 --61.7500005 -61.5833335 -24.4166665 -24.2499995 170 0 2670 --61.5833335 -61.4166665 -24.4166665 -24.2499995 164 0 2670 --61.4166665 -61.2499995 -24.4166665 -24.2499995 154 0 2670 --61.2500005 -61.0833335 -24.4166665 -24.2499995 155 0 2670 --61.0833335 -60.9166665 -24.4166665 -24.2499995 153 0 2670 --60.9166665 -60.7499995 -24.4166665 -24.2499995 146 0 2670 --60.7500005 -60.5833335 -24.4166665 -24.2499995 143 0 2670 --60.5833335 -60.4166665 -24.4166665 -24.2499995 140 0 2670 --60.4166665 -60.2499995 -24.4166665 -24.2499995 135 0 2670 --60.2500005 -60.0833335 -24.4166665 -24.2499995 130 0 2670 --60.0833335 -59.9166665 -24.4166665 -24.2499995 128 0 2670 --59.9166665 -59.7499995 -24.4166665 -24.2499995 125 0 2670 --59.7500005 -59.5833335 -24.4166665 -24.2499995 118 0 2670 --59.5833335 -59.4166665 -24.4166665 -24.2499995 113 0 2670 --59.4166665 -59.2499995 -24.4166665 -24.2499995 109 0 2670 --59.2500005 -59.0833335 -24.4166665 -24.2499995 107 0 2670 --59.0833335 -58.9166665 -24.4166665 -24.2499995 103 0 2670 --58.9166665 -58.7499995 -24.4166665 -24.2499995 99 0 2670 --58.7500005 -58.5833335 -24.4166665 -24.2499995 97 0 2670 --58.5833335 -58.4166665 -24.4166665 -24.2499995 92 0 2670 --58.4166665 -58.2499995 -24.4166665 -24.2499995 88 0 2670 --58.2500005 -58.0833335 -24.4166665 -24.2499995 86 0 2670 --58.0833335 -57.9166665 -24.4166665 -24.2499995 83 0 2670 --57.9166665 -57.7499995 -24.4166665 -24.2499995 78 0 2670 --57.7500005 -57.5833335 -24.4166665 -24.2499995 73 0 2670 --57.5833335 -57.4166665 -24.4166665 -24.2499995 72 0 2670 --57.4166665 -57.2499995 -24.4166665 -24.2499995 69 0 2670 --57.2500005 -57.0833335 -24.4166665 -24.2499995 65 0 2670 --57.0833335 -56.9166665 -24.4166665 -24.2499995 68 0 2670 --56.9166665 -56.7499995 -24.4166665 -24.2499995 121 0 2670 --56.7500005 -56.5833335 -24.4166665 -24.2499995 190 0 2670 --56.5833335 -56.4166665 -24.4166665 -24.2499995 231 0 2670 --56.4166665 -56.2499995 -24.4166665 -24.2499995 199 0 2670 --56.2500005 -56.0833335 -24.4166665 -24.2499995 213 0 2670 --56.0833335 -55.9166665 -24.4166665 -24.2499995 267 0 2670 --55.9166665 -55.7499995 -24.4166665 -24.2499995 221 0 2670 --55.7500005 -55.5833335 -24.4166665 -24.2499995 237 0 2670 --55.5833335 -55.4166665 -24.4166665 -24.2499995 199 0 2670 --55.4166665 -55.2499995 -24.4166665 -24.2499995 233 0 2670 --55.2500005 -55.0833335 -24.4166665 -24.2499995 252 0 2670 --55.0833335 -54.9166665 -24.4166665 -24.2499995 364 0 2670 --54.9166665 -54.7499995 -24.4166665 -24.2499995 328 0 2670 --54.7500005 -54.5833335 -24.4166665 -24.2499995 307 0 2670 --54.5833335 -54.4166665 -24.4166665 -24.2499995 292 0 2670 --54.4166665 -54.2499995 -24.4166665 -24.2499995 313 0 2670 --54.2500005 -54.0833335 -24.4166665 -24.2499995 363 0 2670 --54.0833335 -53.9166665 -24.4166665 -24.2499995 318 0 2670 --53.9166665 -53.7499995 -24.4166665 -24.2499995 351 0 2670 --53.7500005 -53.5833335 -24.4166665 -24.2499995 355 0 2670 --53.5833335 -53.4166665 -24.4166665 -24.2499995 394 0 2670 --53.4166665 -53.2499995 -24.4166665 -24.2499995 334 0 2670 --53.2500005 -53.0833335 -24.4166665 -24.2499995 406 0 2670 --53.0833335 -52.9166665 -24.4166665 -24.2499995 421 0 2670 --52.9166665 -52.7499995 -24.4166665 -24.2499995 551 0 2670 --52.7500005 -52.5833335 -24.4166665 -24.2499995 632 0 2670 --52.5833335 -52.4166665 -24.4166665 -24.2499995 764 0 2670 --52.4166665 -52.2499995 -24.4166665 -24.2499995 687 0 2670 --52.2500005 -52.0833335 -24.4166665 -24.2499995 534 0 2670 --52.0833335 -51.9166665 -24.4166665 -24.2499995 448 0 2670 --51.9166665 -51.7499995 -24.4166665 -24.2499995 575 0 2670 --51.7500005 -51.5833335 -24.4166665 -24.2499995 774 0 2670 --51.5833335 -51.4166665 -24.4166665 -24.2499995 439 0 2670 --51.4166665 -51.2499995 -24.4166665 -24.2499995 704 0 2670 --51.2500005 -51.0833335 -24.4166665 -24.2499995 606 0 2670 --51.0833335 -50.9166665 -24.4166665 -24.2499995 544 0 2670 --50.9166665 -50.7499995 -24.4166665 -24.2499995 823 0 2670 --50.7500005 -50.5833335 -24.4166665 -24.2499995 762 0 2670 --50.5833335 -50.4166665 -24.4166665 -24.2499995 793 0 2670 --50.4166665 -50.2499995 -24.4166665 -24.2499995 978 0 2670 --50.2500005 -50.0833335 -24.4166665 -24.2499995 970 0 2670 --50.0833335 -49.9166665 -24.4166665 -24.2499995 1054 0 2670 --49.9166665 -49.7499995 -24.4166665 -24.2499995 1146 0 2670 --49.7500005 -49.5833335 -24.4166665 -24.2499995 1212 0 2670 --49.5833335 -49.4166665 -24.4166665 -24.2499995 925 0 2670 --49.4166665 -49.2499995 -24.4166665 -24.2499995 902 0 2670 --49.2500005 -49.0833335 -24.4166665 -24.2499995 1002 0 2670 --49.0833335 -48.9166665 -24.4166665 -24.2499995 962 0 2670 --48.9166665 -48.7499995 -24.4166665 -24.2499995 978 0 2670 --48.7500005 -48.5833335 -24.4166665 -24.2499995 934 0 2670 --48.5833335 -48.4166665 -24.4166665 -24.2499995 689 0 2670 --48.4166665 -48.2499995 -24.4166665 -24.2499995 864 0 2670 --48.2500005 -48.0833335 -24.4166665 -24.2499995 161 0 2670 --48.0833335 -47.9166665 -24.4166665 -24.2499995 48 0 2670 --47.9166665 -47.7499995 -24.4166665 -24.2499995 21 0 2670 --47.7500005 -47.5833335 -24.4166665 -24.2499995 27 0 2670 --47.5833335 -47.4166665 -24.4166665 -24.2499995 129 0 2670 --47.4166665 -47.2499995 -24.4166665 -24.2499995 467 0 2670 --47.2500005 -47.0833335 -24.4166665 -24.2499995 198 0 2670 --47.0833335 -46.9166665 -24.4166665 -24.2499995 5 0 2670 --46.9166665 -46.7499995 -24.4166665 -24.2499995 0 -1 -1670 --46.7500005 -46.5833335 -24.4166665 -24.2499995 0 -24 -1670 --46.5833335 -46.4166665 -24.4166665 -24.2499995 0 -22 -1670 --46.4166665 -46.2499995 -24.4166665 -24.2499995 0 -26 -1670 --46.2500005 -46.0833335 -24.4166665 -24.2499995 0 -1 -1670 --46.0833335 -45.9166665 -24.4166665 -24.2499995 0 -46 -1670 --45.9166665 -45.7499995 -24.4166665 -24.2499995 0 -49 -1670 --45.7500005 -45.5833335 -24.4166665 -24.2499995 0 -48 -1670 --45.5833335 -45.4166665 -24.4166665 -24.2499995 0 -46 -1670 --45.4166665 -45.2499995 -24.4166665 -24.2499995 0 -63 -1670 --45.2500005 -45.0833335 -24.4166665 -24.2499995 0 -75 -1670 --45.0833335 -44.9166665 -24.4166665 -24.2499995 0 -79 -1670 --44.9166665 -44.7499995 -24.4166665 -24.2499995 0 -124 -1670 --44.7500005 -44.5833335 -24.4166665 -24.2499995 0 -108 -1670 --44.5833335 -44.4166665 -24.4166665 -24.2499995 0 -158 -1670 --44.4166665 -44.2499995 -24.4166665 -24.2499995 0 -156 -1670 --44.2500005 -44.0833335 -24.4166665 -24.2499995 0 -317 -1670 --44.0833335 -43.9166665 -24.4166665 -24.2499995 0 -436 -1670 --43.9166665 -43.7499995 -24.4166665 -24.2499995 0 -540 -1670 --43.7500005 -43.5833335 -24.4166665 -24.2499995 0 -688 -1670 --43.5833335 -43.4166665 -24.4166665 -24.2499995 0 -821 -1670 --43.4166665 -43.2499995 -24.4166665 -24.2499995 0 -908 -1670 --43.2500005 -43.0833335 -24.4166665 -24.2499995 0 -1065 -1670 --43.0833335 -42.9166665 -24.4166665 -24.2499995 0 -1186 -1670 --42.9166665 -42.7499995 -24.4166665 -24.2499995 0 -1338 -1670 --42.7500005 -42.5833335 -24.4166665 -24.2499995 0 -1475 -1670 --42.5833335 -42.4166665 -24.4166665 -24.2499995 0 -1577 -1670 --42.4166665 -42.2499995 -24.4166665 -24.2499995 0 -1572 -1670 --42.2500005 -42.0833335 -24.4166665 -24.2499995 0 -1548 -1670 --42.0833335 -41.9166665 -24.4166665 -24.2499995 0 -1708 -1670 --41.9166665 -41.7499995 -24.4166665 -24.2499995 0 -1969 -1670 --41.7500005 -41.5833335 -24.4166665 -24.2499995 0 -2045 -1670 --41.5833335 -41.4166665 -24.4166665 -24.2499995 0 -2103 -1670 --41.4166665 -41.2499995 -24.4166665 -24.2499995 0 -2220 -1670 --41.2500005 -41.0833335 -24.4166665 -24.2499995 0 -2410 -1670 --41.0833335 -40.9166665 -24.4166665 -24.2499995 0 -2629 -1670 --40.9166665 -40.7499995 -24.4166665 -24.2499995 0 -2789 -1670 --40.7500005 -40.5833335 -24.4166665 -24.2499995 0 -2847 -1670 --40.5833335 -40.4166665 -24.4166665 -24.2499995 0 -2966 -1670 --40.4166665 -40.2499995 -24.4166665 -24.2499995 0 -3013 -1670 --40.2500005 -40.0833335 -24.4166665 -24.2499995 0 -3029 -1670 --40.0833335 -39.9166665 -24.4166665 -24.2499995 0 -3031 -1670 --65.0833335 -64.9166665 -24.5833335 -24.4166665 712 0 2670 --64.9166665 -64.7499995 -24.5833335 -24.4166665 558 0 2670 --64.7500005 -64.5833335 -24.5833335 -24.4166665 757 0 2670 --64.5833335 -64.4166665 -24.5833335 -24.4166665 1887 0 2670 --64.4166665 -64.2499995 -24.5833335 -24.4166665 810 0 2670 --64.2500005 -64.0833335 -24.5833335 -24.4166665 445 0 2670 --64.0833335 -63.9166665 -24.5833335 -24.4166665 366 0 2670 --63.9166665 -63.7499995 -24.5833335 -24.4166665 325 0 2670 --63.7500005 -63.5833335 -24.5833335 -24.4166665 290 0 2670 --63.5833335 -63.4166665 -24.5833335 -24.4166665 262 0 2670 --63.4166665 -63.2499995 -24.5833335 -24.4166665 245 0 2670 --63.2500005 -63.0833335 -24.5833335 -24.4166665 238 0 2670 --63.0833335 -62.9166665 -24.5833335 -24.4166665 227 0 2670 --62.9166665 -62.7499995 -24.5833335 -24.4166665 214 0 2670 --62.7500005 -62.5833335 -24.5833335 -24.4166665 206 0 2670 --62.5833335 -62.4166665 -24.5833335 -24.4166665 196 0 2670 --62.4166665 -62.2499995 -24.5833335 -24.4166665 189 0 2670 --62.2500005 -62.0833335 -24.5833335 -24.4166665 184 0 2670 --62.0833335 -61.9166665 -24.5833335 -24.4166665 177 0 2670 --61.9166665 -61.7499995 -24.5833335 -24.4166665 169 0 2670 --61.7500005 -61.5833335 -24.5833335 -24.4166665 167 0 2670 --61.5833335 -61.4166665 -24.5833335 -24.4166665 163 0 2670 --61.4166665 -61.2499995 -24.5833335 -24.4166665 158 0 2670 --61.2500005 -61.0833335 -24.5833335 -24.4166665 153 0 2670 --61.0833335 -60.9166665 -24.5833335 -24.4166665 149 0 2670 --60.9166665 -60.7499995 -24.5833335 -24.4166665 146 0 2670 --60.7500005 -60.5833335 -24.5833335 -24.4166665 140 0 2670 --60.5833335 -60.4166665 -24.5833335 -24.4166665 135 0 2670 --60.4166665 -60.2499995 -24.5833335 -24.4166665 132 0 2670 --60.2500005 -60.0833335 -24.5833335 -24.4166665 127 0 2670 --60.0833335 -59.9166665 -24.5833335 -24.4166665 123 0 2670 --59.9166665 -59.7499995 -24.5833335 -24.4166665 120 0 2670 --59.7500005 -59.5833335 -24.5833335 -24.4166665 115 0 2670 --59.5833335 -59.4166665 -24.5833335 -24.4166665 108 0 2670 --59.4166665 -59.2499995 -24.5833335 -24.4166665 109 0 2670 --59.2500005 -59.0833335 -24.5833335 -24.4166665 104 0 2670 --59.0833335 -58.9166665 -24.5833335 -24.4166665 100 0 2670 --58.9166665 -58.7499995 -24.5833335 -24.4166665 98 0 2670 --58.7500005 -58.5833335 -24.5833335 -24.4166665 93 0 2670 --58.5833335 -58.4166665 -24.5833335 -24.4166665 92 0 2670 --58.4166665 -58.2499995 -24.5833335 -24.4166665 87 0 2670 --58.2500005 -58.0833335 -24.5833335 -24.4166665 86 0 2670 --58.0833335 -57.9166665 -24.5833335 -24.4166665 78 0 2670 --57.9166665 -57.7499995 -24.5833335 -24.4166665 76 0 2670 --57.7500005 -57.5833335 -24.5833335 -24.4166665 75 0 2670 --57.5833335 -57.4166665 -24.5833335 -24.4166665 71 0 2670 --57.4166665 -57.2499995 -24.5833335 -24.4166665 68 0 2670 --57.2500005 -57.0833335 -24.5833335 -24.4166665 62 0 2670 --57.0833335 -56.9166665 -24.5833335 -24.4166665 73 0 2670 --56.9166665 -56.7499995 -24.5833335 -24.4166665 99 0 2670 --56.7500005 -56.5833335 -24.5833335 -24.4166665 126 0 2670 --56.5833335 -56.4166665 -24.5833335 -24.4166665 248 0 2670 --56.4166665 -56.2499995 -24.5833335 -24.4166665 232 0 2670 --56.2500005 -56.0833335 -24.5833335 -24.4166665 307 0 2670 --56.0833335 -55.9166665 -24.5833335 -24.4166665 152 0 2670 --55.9166665 -55.7499995 -24.5833335 -24.4166665 217 0 2670 --55.7500005 -55.5833335 -24.5833335 -24.4166665 220 0 2670 --55.5833335 -55.4166665 -24.5833335 -24.4166665 246 0 2670 --55.4166665 -55.2499995 -24.5833335 -24.4166665 293 0 2670 --55.2500005 -55.0833335 -24.5833335 -24.4166665 344 0 2670 --55.0833335 -54.9166665 -24.5833335 -24.4166665 356 0 2670 --54.9166665 -54.7499995 -24.5833335 -24.4166665 387 0 2670 --54.7500005 -54.5833335 -24.5833335 -24.4166665 291 0 2670 --54.5833335 -54.4166665 -24.5833335 -24.4166665 271 0 2670 --54.4166665 -54.2499995 -24.5833335 -24.4166665 217 0 2670 --54.2500005 -54.0833335 -24.5833335 -24.4166665 308 0 2670 --54.0833335 -53.9166665 -24.5833335 -24.4166665 394 0 2670 --53.9166665 -53.7499995 -24.5833335 -24.4166665 435 0 2670 --53.7500005 -53.5833335 -24.5833335 -24.4166665 436 0 2670 --53.5833335 -53.4166665 -24.5833335 -24.4166665 469 0 2670 --53.4166665 -53.2499995 -24.5833335 -24.4166665 440 0 2670 --53.2500005 -53.0833335 -24.5833335 -24.4166665 321 0 2670 --53.0833335 -52.9166665 -24.5833335 -24.4166665 432 0 2670 --52.9166665 -52.7499995 -24.5833335 -24.4166665 415 0 2670 --52.7500005 -52.5833335 -24.5833335 -24.4166665 488 0 2670 --52.5833335 -52.4166665 -24.5833335 -24.4166665 616 0 2670 --52.4166665 -52.2499995 -24.5833335 -24.4166665 813 0 2670 --52.2500005 -52.0833335 -24.5833335 -24.4166665 688 0 2670 --52.0833335 -51.9166665 -24.5833335 -24.4166665 567 0 2670 --51.9166665 -51.7499995 -24.5833335 -24.4166665 604 0 2670 --51.7500005 -51.5833335 -24.5833335 -24.4166665 882 0 2670 --51.5833335 -51.4166665 -24.5833335 -24.4166665 600 0 2670 --51.4166665 -51.2499995 -24.5833335 -24.4166665 701 0 2670 --51.2500005 -51.0833335 -24.5833335 -24.4166665 827 0 2670 --51.0833335 -50.9166665 -24.5833335 -24.4166665 630 0 2670 --50.9166665 -50.7499995 -24.5833335 -24.4166665 912 0 2670 --50.7500005 -50.5833335 -24.5833335 -24.4166665 776 0 2670 --50.5833335 -50.4166665 -24.5833335 -24.4166665 741 0 2670 --50.4166665 -50.2499995 -24.5833335 -24.4166665 772 0 2670 --50.2500005 -50.0833335 -24.5833335 -24.4166665 1128 0 2670 --50.0833335 -49.9166665 -24.5833335 -24.4166665 1083 0 2670 --49.9166665 -49.7499995 -24.5833335 -24.4166665 1041 0 2670 --49.7500005 -49.5833335 -24.5833335 -24.4166665 971 0 2670 --49.5833335 -49.4166665 -24.5833335 -24.4166665 1003 0 2670 --49.4166665 -49.2499995 -24.5833335 -24.4166665 839 0 2670 --49.2500005 -49.0833335 -24.5833335 -24.4166665 729 0 2670 --49.0833335 -48.9166665 -24.5833335 -24.4166665 850 0 2670 --48.9166665 -48.7499995 -24.5833335 -24.4166665 977 0 2670 --48.7500005 -48.5833335 -24.5833335 -24.4166665 667 0 2670 --48.5833335 -48.4166665 -24.5833335 -24.4166665 278 0 2670 --48.4166665 -48.2499995 -24.5833335 -24.4166665 316 0 2670 --48.2500005 -48.0833335 -24.5833335 -24.4166665 104 0 2670 --48.0833335 -47.9166665 -24.5833335 -24.4166665 96 0 2670 --47.9166665 -47.7499995 -24.5833335 -24.4166665 15 0 2670 --47.7500005 -47.5833335 -24.5833335 -24.4166665 12 0 2670 --47.5833335 -47.4166665 -24.5833335 -24.4166665 12 0 2670 --47.4166665 -47.2499995 -24.5833335 -24.4166665 13 0 2670 --47.2500005 -47.0833335 -24.5833335 -24.4166665 13 0 2670 --47.0833335 -46.9166665 -24.5833335 -24.4166665 0 -12 -1670 --46.9166665 -46.7499995 -24.5833335 -24.4166665 0 -24 -1670 --46.7500005 -46.5833335 -24.5833335 -24.4166665 0 -9 -1670 --46.5833335 -46.4166665 -24.5833335 -24.4166665 0 -31 -1670 --46.4166665 -46.2499995 -24.5833335 -24.4166665 0 -36 -1670 --46.2500005 -46.0833335 -24.5833335 -24.4166665 0 -44 -1670 --46.0833335 -45.9166665 -24.5833335 -24.4166665 0 -56 -1670 --45.9166665 -45.7499995 -24.5833335 -24.4166665 0 -58 -1670 --45.7500005 -45.5833335 -24.5833335 -24.4166665 0 -58 -1670 --45.5833335 -45.4166665 -24.5833335 -24.4166665 0 -58 -1670 --45.4166665 -45.2499995 -24.5833335 -24.4166665 0 -63 -1670 --45.2500005 -45.0833335 -24.5833335 -24.4166665 0 -43 -1670 --45.0833335 -44.9166665 -24.5833335 -24.4166665 0 -137 -1670 --44.9166665 -44.7499995 -24.5833335 -24.4166665 0 -133 -1670 --44.7500005 -44.5833335 -24.5833335 -24.4166665 0 -157 -1670 --44.5833335 -44.4166665 -24.5833335 -24.4166665 0 -196 -1670 --44.4166665 -44.2499995 -24.5833335 -24.4166665 0 -437 -1670 --44.2500005 -44.0833335 -24.5833335 -24.4166665 0 -537 -1670 --44.0833335 -43.9166665 -24.5833335 -24.4166665 0 -670 -1670 --43.9166665 -43.7499995 -24.5833335 -24.4166665 0 -841 -1670 --43.7500005 -43.5833335 -24.5833335 -24.4166665 0 -906 -1670 --43.5833335 -43.4166665 -24.5833335 -24.4166665 0 -1177 -1670 --43.4166665 -43.2499995 -24.5833335 -24.4166665 0 -1394 -1670 --43.2500005 -43.0833335 -24.5833335 -24.4166665 0 -1445 -1670 --43.0833335 -42.9166665 -24.5833335 -24.4166665 0 -1477 -1670 --42.9166665 -42.7499995 -24.5833335 -24.4166665 0 -1607 -1670 --42.7500005 -42.5833335 -24.5833335 -24.4166665 0 -1640 -1670 --42.5833335 -42.4166665 -24.5833335 -24.4166665 0 -1720 -1670 --42.4166665 -42.2499995 -24.5833335 -24.4166665 0 -1803 -1670 --42.2500005 -42.0833335 -24.5833335 -24.4166665 0 -1850 -1670 --42.0833335 -41.9166665 -24.5833335 -24.4166665 0 -2009 -1670 --41.9166665 -41.7499995 -24.5833335 -24.4166665 0 -2143 -1670 --41.7500005 -41.5833335 -24.5833335 -24.4166665 0 -2277 -1670 --41.5833335 -41.4166665 -24.5833335 -24.4166665 0 -2370 -1670 --41.4166665 -41.2499995 -24.5833335 -24.4166665 0 -2388 -1670 --41.2500005 -41.0833335 -24.5833335 -24.4166665 0 -2639 -1670 --41.0833335 -40.9166665 -24.5833335 -24.4166665 0 -2722 -1670 --40.9166665 -40.7499995 -24.5833335 -24.4166665 0 -2794 -1670 --40.7500005 -40.5833335 -24.5833335 -24.4166665 0 -2848 -1670 --40.5833335 -40.4166665 -24.5833335 -24.4166665 0 -2940 -1670 --40.4166665 -40.2499995 -24.5833335 -24.4166665 0 -3036 -1670 --40.2500005 -40.0833335 -24.5833335 -24.4166665 0 -3061 -1670 --40.0833335 -39.9166665 -24.5833335 -24.4166665 0 -3041 -1670 --65.0833335 -64.9166665 -24.7500005 -24.5833335 678 0 2670 --64.9166665 -64.7499995 -24.7500005 -24.5833335 910 0 2670 --64.7500005 -64.5833335 -24.7500005 -24.5833335 1227 0 2670 --64.5833335 -64.4166665 -24.7500005 -24.5833335 1296 0 2670 --64.4166665 -64.2499995 -24.7500005 -24.5833335 594 0 2670 --64.2500005 -64.0833335 -24.7500005 -24.5833335 451 0 2670 --64.0833335 -63.9166665 -24.7500005 -24.5833335 386 0 2670 --63.9166665 -63.7499995 -24.7500005 -24.5833335 332 0 2670 --63.7500005 -63.5833335 -24.7500005 -24.5833335 293 0 2670 --63.5833335 -63.4166665 -24.7500005 -24.5833335 266 0 2670 --63.4166665 -63.2499995 -24.7500005 -24.5833335 258 0 2670 --63.2500005 -63.0833335 -24.7500005 -24.5833335 245 0 2670 --63.0833335 -62.9166665 -24.7500005 -24.5833335 232 0 2670 --62.9166665 -62.7499995 -24.7500005 -24.5833335 222 0 2670 --62.7500005 -62.5833335 -24.7500005 -24.5833335 212 0 2670 --62.5833335 -62.4166665 -24.7500005 -24.5833335 202 0 2670 --62.4166665 -62.2499995 -24.7500005 -24.5833335 193 0 2670 --62.2500005 -62.0833335 -24.7500005 -24.5833335 184 0 2670 --62.0833335 -61.9166665 -24.7500005 -24.5833335 173 0 2670 --61.9166665 -61.7499995 -24.7500005 -24.5833335 168 0 2670 --61.7500005 -61.5833335 -24.7500005 -24.5833335 161 0 2670 --61.5833335 -61.4166665 -24.7500005 -24.5833335 156 0 2670 --61.4166665 -61.2499995 -24.7500005 -24.5833335 154 0 2670 --61.2500005 -61.0833335 -24.7500005 -24.5833335 150 0 2670 --61.0833335 -60.9166665 -24.7500005 -24.5833335 149 0 2670 --60.9166665 -60.7499995 -24.7500005 -24.5833335 143 0 2670 --60.7500005 -60.5833335 -24.7500005 -24.5833335 137 0 2670 --60.5833335 -60.4166665 -24.7500005 -24.5833335 134 0 2670 --60.4166665 -60.2499995 -24.7500005 -24.5833335 127 0 2670 --60.2500005 -60.0833335 -24.7500005 -24.5833335 124 0 2670 --60.0833335 -59.9166665 -24.7500005 -24.5833335 121 0 2670 --59.9166665 -59.7499995 -24.7500005 -24.5833335 122 0 2670 --59.7500005 -59.5833335 -24.7500005 -24.5833335 115 0 2670 --59.5833335 -59.4166665 -24.7500005 -24.5833335 111 0 2670 --59.4166665 -59.2499995 -24.7500005 -24.5833335 104 0 2670 --59.2500005 -59.0833335 -24.7500005 -24.5833335 103 0 2670 --59.0833335 -58.9166665 -24.7500005 -24.5833335 100 0 2670 --58.9166665 -58.7499995 -24.7500005 -24.5833335 95 0 2670 --58.7500005 -58.5833335 -24.7500005 -24.5833335 90 0 2670 --58.5833335 -58.4166665 -24.7500005 -24.5833335 87 0 2670 --58.4166665 -58.2499995 -24.7500005 -24.5833335 85 0 2670 --58.2500005 -58.0833335 -24.7500005 -24.5833335 84 0 2670 --58.0833335 -57.9166665 -24.7500005 -24.5833335 78 0 2670 --57.9166665 -57.7499995 -24.7500005 -24.5833335 75 0 2670 --57.7500005 -57.5833335 -24.7500005 -24.5833335 72 0 2670 --57.5833335 -57.4166665 -24.7500005 -24.5833335 69 0 2670 --57.4166665 -57.2499995 -24.7500005 -24.5833335 67 0 2670 --57.2500005 -57.0833335 -24.7500005 -24.5833335 61 0 2670 --57.0833335 -56.9166665 -24.7500005 -24.5833335 66 0 2670 --56.9166665 -56.7499995 -24.7500005 -24.5833335 81 0 2670 --56.7500005 -56.5833335 -24.7500005 -24.5833335 101 0 2670 --56.5833335 -56.4166665 -24.7500005 -24.5833335 138 0 2670 --56.4166665 -56.2499995 -24.7500005 -24.5833335 249 0 2670 --56.2500005 -56.0833335 -24.7500005 -24.5833335 217 0 2670 --56.0833335 -55.9166665 -24.7500005 -24.5833335 244 0 2670 --55.9166665 -55.7499995 -24.7500005 -24.5833335 207 0 2670 --55.7500005 -55.5833335 -24.7500005 -24.5833335 290 0 2670 --55.5833335 -55.4166665 -24.7500005 -24.5833335 263 0 2670 --55.4166665 -55.2499995 -24.7500005 -24.5833335 262 0 2670 --55.2500005 -55.0833335 -24.7500005 -24.5833335 349 0 2670 --55.0833335 -54.9166665 -24.7500005 -24.5833335 351 0 2670 --54.9166665 -54.7499995 -24.7500005 -24.5833335 265 0 2670 --54.7500005 -54.5833335 -24.7500005 -24.5833335 252 0 2670 --54.5833335 -54.4166665 -24.7500005 -24.5833335 276 0 2670 --54.4166665 -54.2499995 -24.7500005 -24.5833335 217 0 2670 --54.2500005 -54.0833335 -24.7500005 -24.5833335 271 0 2670 --54.0833335 -53.9166665 -24.7500005 -24.5833335 321 0 2670 --53.9166665 -53.7499995 -24.7500005 -24.5833335 513 0 2670 --53.7500005 -53.5833335 -24.7500005 -24.5833335 506 0 2670 --53.5833335 -53.4166665 -24.7500005 -24.5833335 565 0 2670 --53.4166665 -53.2499995 -24.7500005 -24.5833335 573 0 2670 --53.2500005 -53.0833335 -24.7500005 -24.5833335 457 0 2670 --53.0833335 -52.9166665 -24.7500005 -24.5833335 379 0 2670 --52.9166665 -52.7499995 -24.7500005 -24.5833335 489 0 2670 --52.7500005 -52.5833335 -24.7500005 -24.5833335 438 0 2670 --52.5833335 -52.4166665 -24.7500005 -24.5833335 647 0 2670 --52.4166665 -52.2499995 -24.7500005 -24.5833335 655 0 2670 --52.2500005 -52.0833335 -24.7500005 -24.5833335 830 0 2670 --52.0833335 -51.9166665 -24.7500005 -24.5833335 827 0 2670 --51.9166665 -51.7499995 -24.7500005 -24.5833335 845 0 2670 --51.7500005 -51.5833335 -24.7500005 -24.5833335 814 0 2670 --51.5833335 -51.4166665 -24.7500005 -24.5833335 611 0 2670 --51.4166665 -51.2499995 -24.7500005 -24.5833335 931 0 2670 --51.2500005 -51.0833335 -24.7500005 -24.5833335 776 0 2670 --51.0833335 -50.9166665 -24.7500005 -24.5833335 786 0 2670 --50.9166665 -50.7499995 -24.7500005 -24.5833335 915 0 2670 --50.7500005 -50.5833335 -24.7500005 -24.5833335 893 0 2670 --50.5833335 -50.4166665 -24.7500005 -24.5833335 812 0 2670 --50.4166665 -50.2499995 -24.7500005 -24.5833335 916 0 2670 --50.2500005 -50.0833335 -24.7500005 -24.5833335 1100 0 2670 --50.0833335 -49.9166665 -24.7500005 -24.5833335 1021 0 2670 --49.9166665 -49.7499995 -24.7500005 -24.5833335 1014 0 2670 --49.7500005 -49.5833335 -24.7500005 -24.5833335 1048 0 2670 --49.5833335 -49.4166665 -24.7500005 -24.5833335 901 0 2670 --49.4166665 -49.2499995 -24.7500005 -24.5833335 640 0 2670 --49.2500005 -49.0833335 -24.7500005 -24.5833335 316 0 2670 --49.0833335 -48.9166665 -24.7500005 -24.5833335 409 0 2670 --48.9166665 -48.7499995 -24.7500005 -24.5833335 164 0 2670 --48.7500005 -48.5833335 -24.7500005 -24.5833335 286 0 2670 --48.5833335 -48.4166665 -24.7500005 -24.5833335 704 0 2670 --48.4166665 -48.2499995 -24.7500005 -24.5833335 153 0 2670 --48.2500005 -48.0833335 -24.7500005 -24.5833335 149 0 2670 --48.0833335 -47.9166665 -24.7500005 -24.5833335 49 0 2670 --47.9166665 -47.7499995 -24.7500005 -24.5833335 21 0 2670 --47.7500005 -47.5833335 -24.7500005 -24.5833335 12 0 2670 --47.5833335 -47.4166665 -24.7500005 -24.5833335 124 0 2670 --47.4166665 -47.2499995 -24.7500005 -24.5833335 0 -3 -1670 --47.2500005 -47.0833335 -24.7500005 -24.5833335 0 -15 -1670 --47.0833335 -46.9166665 -24.7500005 -24.5833335 0 -25 -1670 --46.9166665 -46.7499995 -24.7500005 -24.5833335 0 -30 -1670 --46.7500005 -46.5833335 -24.7500005 -24.5833335 0 -35 -1670 --46.5833335 -46.4166665 -24.7500005 -24.5833335 0 -43 -1670 --46.4166665 -46.2499995 -24.7500005 -24.5833335 0 -49 -1670 --46.2500005 -46.0833335 -24.7500005 -24.5833335 0 -63 -1670 --46.0833335 -45.9166665 -24.7500005 -24.5833335 0 -55 -1670 --45.9166665 -45.7499995 -24.7500005 -24.5833335 0 -60 -1670 --45.7500005 -45.5833335 -24.7500005 -24.5833335 0 -60 -1670 --45.5833335 -45.4166665 -24.7500005 -24.5833335 0 -140 -1670 --45.4166665 -45.2499995 -24.7500005 -24.5833335 0 -69 -1670 --45.2500005 -45.0833335 -24.7500005 -24.5833335 0 -84 -1670 --45.0833335 -44.9166665 -24.7500005 -24.5833335 0 -121 -1670 --44.9166665 -44.7499995 -24.7500005 -24.5833335 0 -132 -1670 --44.7500005 -44.5833335 -24.7500005 -24.5833335 0 -140 -1670 --44.5833335 -44.4166665 -24.7500005 -24.5833335 0 -369 -1670 --44.4166665 -44.2499995 -24.7500005 -24.5833335 0 -548 -1670 --44.2500005 -44.0833335 -24.7500005 -24.5833335 0 -664 -1670 --44.0833335 -43.9166665 -24.7500005 -24.5833335 0 -1031 -1670 --43.9166665 -43.7499995 -24.7500005 -24.5833335 0 -1239 -1670 --43.7500005 -43.5833335 -24.7500005 -24.5833335 0 -1464 -1670 --43.5833335 -43.4166665 -24.7500005 -24.5833335 0 -1573 -1670 --43.4166665 -43.2499995 -24.7500005 -24.5833335 0 -1609 -1670 --43.2500005 -43.0833335 -24.7500005 -24.5833335 0 -1717 -1670 --43.0833335 -42.9166665 -24.7500005 -24.5833335 0 -1836 -1670 --42.9166665 -42.7499995 -24.7500005 -24.5833335 0 -1942 -1670 --42.7500005 -42.5833335 -24.7500005 -24.5833335 0 -2102 -1670 --42.5833335 -42.4166665 -24.7500005 -24.5833335 0 -2030 -1670 --42.4166665 -42.2499995 -24.7500005 -24.5833335 0 -2091 -1670 --42.2500005 -42.0833335 -24.7500005 -24.5833335 0 -2119 -1670 --42.0833335 -41.9166665 -24.7500005 -24.5833335 0 -2232 -1670 --41.9166665 -41.7499995 -24.7500005 -24.5833335 0 -2263 -1670 --41.7500005 -41.5833335 -24.7500005 -24.5833335 0 -2241 -1670 --41.5833335 -41.4166665 -24.7500005 -24.5833335 0 -2505 -1670 --41.4166665 -41.2499995 -24.7500005 -24.5833335 0 -2569 -1670 --41.2500005 -41.0833335 -24.7500005 -24.5833335 0 -2652 -1670 --41.0833335 -40.9166665 -24.7500005 -24.5833335 0 -2697 -1670 --40.9166665 -40.7499995 -24.7500005 -24.5833335 0 -2772 -1670 --40.7500005 -40.5833335 -24.7500005 -24.5833335 0 -2846 -1670 --40.5833335 -40.4166665 -24.7500005 -24.5833335 0 -2958 -1670 --40.4166665 -40.2499995 -24.7500005 -24.5833335 0 -2978 -1670 --40.2500005 -40.0833335 -24.7500005 -24.5833335 0 -3071 -1670 --40.0833335 -39.9166665 -24.7500005 -24.5833335 0 -3156 -1670 --65.0833335 -64.9166665 -24.9166665 -24.7499995 804 0 2670 --64.9166665 -64.7499995 -24.9166665 -24.7499995 1283 0 2670 --64.7500005 -64.5833335 -24.9166665 -24.7499995 1553 0 2670 --64.5833335 -64.4166665 -24.9166665 -24.7499995 841 0 2670 --64.4166665 -64.2499995 -24.9166665 -24.7499995 590 0 2670 --64.2500005 -64.0833335 -24.9166665 -24.7499995 444 0 2670 --64.0833335 -63.9166665 -24.9166665 -24.7499995 382 0 2670 --63.9166665 -63.7499995 -24.9166665 -24.7499995 341 0 2670 --63.7500005 -63.5833335 -24.9166665 -24.7499995 299 0 2670 --63.5833335 -63.4166665 -24.9166665 -24.7499995 281 0 2670 --63.4166665 -63.2499995 -24.9166665 -24.7499995 266 0 2670 --63.2500005 -63.0833335 -24.9166665 -24.7499995 252 0 2670 --63.0833335 -62.9166665 -24.9166665 -24.7499995 241 0 2670 --62.9166665 -62.7499995 -24.9166665 -24.7499995 227 0 2670 --62.7500005 -62.5833335 -24.9166665 -24.7499995 217 0 2670 --62.5833335 -62.4166665 -24.9166665 -24.7499995 205 0 2670 --62.4166665 -62.2499995 -24.9166665 -24.7499995 193 0 2670 --62.2500005 -62.0833335 -24.9166665 -24.7499995 183 0 2670 --62.0833335 -61.9166665 -24.9166665 -24.7499995 175 0 2670 --61.9166665 -61.7499995 -24.9166665 -24.7499995 167 0 2670 --61.7500005 -61.5833335 -24.9166665 -24.7499995 161 0 2670 --61.5833335 -61.4166665 -24.9166665 -24.7499995 159 0 2670 --61.4166665 -61.2499995 -24.9166665 -24.7499995 151 0 2670 --61.2500005 -61.0833335 -24.9166665 -24.7499995 146 0 2670 --61.0833335 -60.9166665 -24.9166665 -24.7499995 144 0 2670 --60.9166665 -60.7499995 -24.9166665 -24.7499995 140 0 2670 --60.7500005 -60.5833335 -24.9166665 -24.7499995 133 0 2670 --60.5833335 -60.4166665 -24.9166665 -24.7499995 132 0 2670 --60.4166665 -60.2499995 -24.9166665 -24.7499995 124 0 2670 --60.2500005 -60.0833335 -24.9166665 -24.7499995 122 0 2670 --60.0833335 -59.9166665 -24.9166665 -24.7499995 118 0 2670 --59.9166665 -59.7499995 -24.9166665 -24.7499995 114 0 2670 --59.7500005 -59.5833335 -24.9166665 -24.7499995 115 0 2670 --59.5833335 -59.4166665 -24.9166665 -24.7499995 107 0 2670 --59.4166665 -59.2499995 -24.9166665 -24.7499995 105 0 2670 --59.2500005 -59.0833335 -24.9166665 -24.7499995 98 0 2670 --59.0833335 -58.9166665 -24.9166665 -24.7499995 96 0 2670 --58.9166665 -58.7499995 -24.9166665 -24.7499995 92 0 2670 --58.7500005 -58.5833335 -24.9166665 -24.7499995 90 0 2670 --58.5833335 -58.4166665 -24.9166665 -24.7499995 86 0 2670 --58.4166665 -58.2499995 -24.9166665 -24.7499995 81 0 2670 --58.2500005 -58.0833335 -24.9166665 -24.7499995 78 0 2670 --58.0833335 -57.9166665 -24.9166665 -24.7499995 78 0 2670 --57.9166665 -57.7499995 -24.9166665 -24.7499995 76 0 2670 --57.7500005 -57.5833335 -24.9166665 -24.7499995 72 0 2670 --57.5833335 -57.4166665 -24.9166665 -24.7499995 69 0 2670 --57.4166665 -57.2499995 -24.9166665 -24.7499995 65 0 2670 --57.2500005 -57.0833335 -24.9166665 -24.7499995 67 0 2670 --57.0833335 -56.9166665 -24.9166665 -24.7499995 66 0 2670 --56.9166665 -56.7499995 -24.9166665 -24.7499995 71 0 2670 --56.7500005 -56.5833335 -24.9166665 -24.7499995 82 0 2670 --56.5833335 -56.4166665 -24.9166665 -24.7499995 112 0 2670 --56.4166665 -56.2499995 -24.9166665 -24.7499995 201 0 2670 --56.2500005 -56.0833335 -24.9166665 -24.7499995 309 0 2670 --56.0833335 -55.9166665 -24.9166665 -24.7499995 348 0 2670 --55.9166665 -55.7499995 -24.9166665 -24.7499995 253 0 2670 --55.7500005 -55.5833335 -24.9166665 -24.7499995 292 0 2670 --55.5833335 -55.4166665 -24.9166665 -24.7499995 252 0 2670 --55.4166665 -55.2499995 -24.9166665 -24.7499995 222 0 2670 --55.2500005 -55.0833335 -24.9166665 -24.7499995 295 0 2670 --55.0833335 -54.9166665 -24.9166665 -24.7499995 334 0 2670 --54.9166665 -54.7499995 -24.9166665 -24.7499995 292 0 2670 --54.7500005 -54.5833335 -24.9166665 -24.7499995 234 0 2670 --54.5833335 -54.4166665 -24.9166665 -24.7499995 256 0 2670 --54.4166665 -54.2499995 -24.9166665 -24.7499995 228 0 2670 --54.2500005 -54.0833335 -24.9166665 -24.7499995 350 0 2670 --54.0833335 -53.9166665 -24.9166665 -24.7499995 408 0 2670 --53.9166665 -53.7499995 -24.9166665 -24.7499995 517 0 2670 --53.7500005 -53.5833335 -24.9166665 -24.7499995 564 0 2670 --53.5833335 -53.4166665 -24.9166665 -24.7499995 613 0 2670 --53.4166665 -53.2499995 -24.9166665 -24.7499995 659 0 2670 --53.2500005 -53.0833335 -24.9166665 -24.7499995 624 0 2670 --53.0833335 -52.9166665 -24.9166665 -24.7499995 575 0 2670 --52.9166665 -52.7499995 -24.9166665 -24.7499995 454 0 2670 --52.7500005 -52.5833335 -24.9166665 -24.7499995 491 0 2670 --52.5833335 -52.4166665 -24.9166665 -24.7499995 548 0 2670 --52.4166665 -52.2499995 -24.9166665 -24.7499995 667 0 2670 --52.2500005 -52.0833335 -24.9166665 -24.7499995 806 0 2670 --52.0833335 -51.9166665 -24.9166665 -24.7499995 892 0 2670 --51.9166665 -51.7499995 -24.9166665 -24.7499995 1083 0 2670 --51.7500005 -51.5833335 -24.9166665 -24.7499995 938 0 2670 --51.5833335 -51.4166665 -24.9166665 -24.7499995 927 0 2670 --51.4166665 -51.2499995 -24.9166665 -24.7499995 677 0 2670 --51.2500005 -51.0833335 -24.9166665 -24.7499995 548 0 2670 --51.0833335 -50.9166665 -24.9166665 -24.7499995 882 0 2670 --50.9166665 -50.7499995 -24.9166665 -24.7499995 1002 0 2670 --50.7500005 -50.5833335 -24.9166665 -24.7499995 947 0 2670 --50.5833335 -50.4166665 -24.9166665 -24.7499995 944 0 2670 --50.4166665 -50.2499995 -24.9166665 -24.7499995 802 0 2670 --50.2500005 -50.0833335 -24.9166665 -24.7499995 1126 0 2670 --50.0833335 -49.9166665 -24.9166665 -24.7499995 1021 0 2670 --49.9166665 -49.7499995 -24.9166665 -24.7499995 1041 0 2670 --49.7500005 -49.5833335 -24.9166665 -24.7499995 850 0 2670 --49.5833335 -49.4166665 -24.9166665 -24.7499995 694 0 2670 --49.4166665 -49.2499995 -24.9166665 -24.7499995 411 0 2670 --49.2500005 -49.0833335 -24.9166665 -24.7499995 744 0 2670 --49.0833335 -48.9166665 -24.9166665 -24.7499995 543 0 2670 --48.9166665 -48.7499995 -24.9166665 -24.7499995 569 0 2670 --48.7500005 -48.5833335 -24.9166665 -24.7499995 910 0 2670 --48.5833335 -48.4166665 -24.9166665 -24.7499995 341 0 2670 --48.4166665 -48.2499995 -24.9166665 -24.7499995 760 0 2670 --48.2500005 -48.0833335 -24.9166665 -24.7499995 377 0 2670 --48.0833335 -47.9166665 -24.9166665 -24.7499995 177 0 2670 --47.9166665 -47.7499995 -24.9166665 -24.7499995 218 0 2670 --47.7500005 -47.5833335 -24.9166665 -24.7499995 0 0 2670 --47.5833335 -47.4166665 -24.9166665 -24.7499995 0 -10 -1670 --47.4166665 -47.2499995 -24.9166665 -24.7499995 0 -21 -1670 --47.2500005 -47.0833335 -24.9166665 -24.7499995 0 -27 -1670 --47.0833335 -46.9166665 -24.9166665 -24.7499995 0 -33 -1670 --46.9166665 -46.7499995 -24.9166665 -24.7499995 0 -39 -1670 --46.7500005 -46.5833335 -24.9166665 -24.7499995 0 -45 -1670 --46.5833335 -46.4166665 -24.9166665 -24.7499995 0 -50 -1670 --46.4166665 -46.2499995 -24.9166665 -24.7499995 0 -78 -1670 --46.2500005 -46.0833335 -24.9166665 -24.7499995 0 -64 -1670 --46.0833335 -45.9166665 -24.9166665 -24.7499995 0 -66 -1670 --45.9166665 -45.7499995 -24.9166665 -24.7499995 0 -62 -1670 --45.7500005 -45.5833335 -24.9166665 -24.7499995 0 -123 -1670 --45.5833335 -45.4166665 -24.9166665 -24.7499995 0 -76 -1670 --45.4166665 -45.2499995 -24.9166665 -24.7499995 0 -100 -1670 --45.2500005 -45.0833335 -24.9166665 -24.7499995 0 -105 -1670 --45.0833335 -44.9166665 -24.9166665 -24.7499995 0 -128 -1670 --44.9166665 -44.7499995 -24.9166665 -24.7499995 0 -146 -1670 --44.7500005 -44.5833335 -24.9166665 -24.7499995 0 -284 -1670 --44.5833335 -44.4166665 -24.9166665 -24.7499995 0 -617 -1670 --44.4166665 -44.2499995 -24.9166665 -24.7499995 0 -861 -1670 --44.2500005 -44.0833335 -24.9166665 -24.7499995 0 -1090 -1670 --44.0833335 -43.9166665 -24.9166665 -24.7499995 0 -1372 -1670 --43.9166665 -43.7499995 -24.9166665 -24.7499995 0 -1779 -1670 --43.7500005 -43.5833335 -24.9166665 -24.7499995 0 -1638 -1670 --43.5833335 -43.4166665 -24.9166665 -24.7499995 0 -1751 -1670 --43.4166665 -43.2499995 -24.9166665 -24.7499995 0 -1863 -1670 --43.2500005 -43.0833335 -24.9166665 -24.7499995 0 -1923 -1670 --43.0833335 -42.9166665 -24.9166665 -24.7499995 0 -2033 -1670 --42.9166665 -42.7499995 -24.9166665 -24.7499995 0 -2016 -1670 --42.7500005 -42.5833335 -24.9166665 -24.7499995 0 -2013 -1670 --42.5833335 -42.4166665 -24.9166665 -24.7499995 0 -2098 -1670 --42.4166665 -42.2499995 -24.9166665 -24.7499995 0 -2256 -1670 --42.2500005 -42.0833335 -24.9166665 -24.7499995 0 -2267 -1670 --42.0833335 -41.9166665 -24.9166665 -24.7499995 0 -2320 -1670 --41.9166665 -41.7499995 -24.9166665 -24.7499995 0 -2364 -1670 --41.7500005 -41.5833335 -24.9166665 -24.7499995 0 -2391 -1670 --41.5833335 -41.4166665 -24.9166665 -24.7499995 0 -2513 -1670 --41.4166665 -41.2499995 -24.9166665 -24.7499995 0 -2620 -1670 --41.2500005 -41.0833335 -24.9166665 -24.7499995 0 -2588 -1670 --41.0833335 -40.9166665 -24.9166665 -24.7499995 0 -2649 -1670 --40.9166665 -40.7499995 -24.9166665 -24.7499995 0 -2878 -1670 --40.7500005 -40.5833335 -24.9166665 -24.7499995 0 -2869 -1670 --40.5833335 -40.4166665 -24.9166665 -24.7499995 0 -2939 -1670 --40.4166665 -40.2499995 -24.9166665 -24.7499995 0 -3004 -1670 --40.2500005 -40.0833335 -24.9166665 -24.7499995 0 -3138 -1670 --40.0833335 -39.9166665 -24.9166665 -24.7499995 0 -3111 -1670 --65.0833335 -64.9166665 -25.0833335 -24.9166665 965 0 2670 --64.9166665 -64.7499995 -25.0833335 -24.9166665 1297 0 2670 --64.7500005 -64.5833335 -25.0833335 -24.9166665 987 0 2670 --64.5833335 -64.4166665 -25.0833335 -24.9166665 648 0 2670 --64.4166665 -64.2499995 -25.0833335 -24.9166665 499 0 2670 --64.2500005 -64.0833335 -25.0833335 -24.9166665 416 0 2670 --64.0833335 -63.9166665 -25.0833335 -24.9166665 364 0 2670 --63.9166665 -63.7499995 -25.0833335 -24.9166665 330 0 2670 --63.7500005 -63.5833335 -25.0833335 -24.9166665 309 0 2670 --63.5833335 -63.4166665 -25.0833335 -24.9166665 291 0 2670 --63.4166665 -63.2499995 -25.0833335 -24.9166665 273 0 2670 --63.2500005 -63.0833335 -25.0833335 -24.9166665 260 0 2670 --63.0833335 -62.9166665 -25.0833335 -24.9166665 245 0 2670 --62.9166665 -62.7499995 -25.0833335 -24.9166665 233 0 2670 --62.7500005 -62.5833335 -25.0833335 -24.9166665 219 0 2670 --62.5833335 -62.4166665 -25.0833335 -24.9166665 207 0 2670 --62.4166665 -62.2499995 -25.0833335 -24.9166665 197 0 2670 --62.2500005 -62.0833335 -25.0833335 -24.9166665 187 0 2670 --62.0833335 -61.9166665 -25.0833335 -24.9166665 178 0 2670 --61.9166665 -61.7499995 -25.0833335 -24.9166665 168 0 2670 --61.7500005 -61.5833335 -25.0833335 -24.9166665 160 0 2670 --61.5833335 -61.4166665 -25.0833335 -24.9166665 152 0 2670 --61.4166665 -61.2499995 -25.0833335 -24.9166665 149 0 2670 --61.2500005 -61.0833335 -25.0833335 -24.9166665 146 0 2670 --61.0833335 -60.9166665 -25.0833335 -24.9166665 142 0 2670 --60.9166665 -60.7499995 -25.0833335 -24.9166665 132 0 2670 --60.7500005 -60.5833335 -25.0833335 -24.9166665 138 0 2670 --60.5833335 -60.4166665 -25.0833335 -24.9166665 132 0 2670 --60.4166665 -60.2499995 -25.0833335 -24.9166665 127 0 2670 --60.2500005 -60.0833335 -25.0833335 -24.9166665 120 0 2670 --60.0833335 -59.9166665 -25.0833335 -24.9166665 113 0 2670 --59.9166665 -59.7499995 -25.0833335 -24.9166665 112 0 2670 --59.7500005 -59.5833335 -25.0833335 -24.9166665 109 0 2670 --59.5833335 -59.4166665 -25.0833335 -24.9166665 102 0 2670 --59.4166665 -59.2499995 -25.0833335 -24.9166665 100 0 2670 --59.2500005 -59.0833335 -25.0833335 -24.9166665 98 0 2670 --59.0833335 -58.9166665 -25.0833335 -24.9166665 93 0 2670 --58.9166665 -58.7499995 -25.0833335 -24.9166665 90 0 2670 --58.7500005 -58.5833335 -25.0833335 -24.9166665 87 0 2670 --58.5833335 -58.4166665 -25.0833335 -24.9166665 84 0 2670 --58.4166665 -58.2499995 -25.0833335 -24.9166665 82 0 2670 --58.2500005 -58.0833335 -25.0833335 -24.9166665 80 0 2670 --58.0833335 -57.9166665 -25.0833335 -24.9166665 81 0 2670 --57.9166665 -57.7499995 -25.0833335 -24.9166665 71 0 2670 --57.7500005 -57.5833335 -25.0833335 -24.9166665 69 0 2670 --57.5833335 -57.4166665 -25.0833335 -24.9166665 65 0 2670 --57.4166665 -57.2499995 -25.0833335 -24.9166665 60 0 2670 --57.2500005 -57.0833335 -25.0833335 -24.9166665 106 0 2670 --57.0833335 -56.9166665 -25.0833335 -24.9166665 64 0 2670 --56.9166665 -56.7499995 -25.0833335 -24.9166665 69 0 2670 --56.7500005 -56.5833335 -25.0833335 -24.9166665 99 0 2670 --56.5833335 -56.4166665 -25.0833335 -24.9166665 99 0 2670 --56.4166665 -56.2499995 -25.0833335 -24.9166665 135 0 2670 --56.2500005 -56.0833335 -25.0833335 -24.9166665 234 0 2670 --56.0833335 -55.9166665 -25.0833335 -24.9166665 374 0 2670 --55.9166665 -55.7499995 -25.0833335 -24.9166665 296 0 2670 --55.7500005 -55.5833335 -25.0833335 -24.9166665 271 0 2670 --55.5833335 -55.4166665 -25.0833335 -24.9166665 242 0 2670 --55.4166665 -55.2499995 -25.0833335 -24.9166665 233 0 2670 --55.2500005 -55.0833335 -25.0833335 -24.9166665 262 0 2670 --55.0833335 -54.9166665 -25.0833335 -24.9166665 255 0 2670 --54.9166665 -54.7499995 -25.0833335 -24.9166665 317 0 2670 --54.7500005 -54.5833335 -25.0833335 -24.9166665 286 0 2670 --54.5833335 -54.4166665 -25.0833335 -24.9166665 240 0 2670 --54.4166665 -54.2499995 -25.0833335 -24.9166665 261 0 2670 --54.2500005 -54.0833335 -25.0833335 -24.9166665 394 0 2670 --54.0833335 -53.9166665 -25.0833335 -24.9166665 444 0 2670 --53.9166665 -53.7499995 -25.0833335 -24.9166665 560 0 2670 --53.7500005 -53.5833335 -25.0833335 -24.9166665 684 0 2670 --53.5833335 -53.4166665 -25.0833335 -24.9166665 732 0 2670 --53.4166665 -53.2499995 -25.0833335 -24.9166665 756 0 2670 --53.2500005 -53.0833335 -25.0833335 -24.9166665 727 0 2670 --53.0833335 -52.9166665 -25.0833335 -24.9166665 705 0 2670 --52.9166665 -52.7499995 -25.0833335 -24.9166665 570 0 2670 --52.7500005 -52.5833335 -25.0833335 -24.9166665 592 0 2670 --52.5833335 -52.4166665 -25.0833335 -24.9166665 524 0 2670 --52.4166665 -52.2499995 -25.0833335 -24.9166665 643 0 2670 --52.2500005 -52.0833335 -25.0833335 -24.9166665 712 0 2670 --52.0833335 -51.9166665 -25.0833335 -24.9166665 771 0 2670 --51.9166665 -51.7499995 -25.0833335 -24.9166665 899 0 2670 --51.7500005 -51.5833335 -25.0833335 -24.9166665 1056 0 2670 --51.5833335 -51.4166665 -25.0833335 -24.9166665 957 0 2670 --51.4166665 -51.2499995 -25.0833335 -24.9166665 1016 0 2670 --51.2500005 -51.0833335 -25.0833335 -24.9166665 570 0 2670 --51.0833335 -50.9166665 -25.0833335 -24.9166665 551 0 2670 --50.9166665 -50.7499995 -25.0833335 -24.9166665 854 0 2670 --50.7500005 -50.5833335 -25.0833335 -24.9166665 808 0 2670 --50.5833335 -50.4166665 -25.0833335 -24.9166665 799 0 2670 --50.4166665 -50.2499995 -25.0833335 -24.9166665 856 0 2670 --50.2500005 -50.0833335 -25.0833335 -24.9166665 868 0 2670 --50.0833335 -49.9166665 -25.0833335 -24.9166665 936 0 2670 --49.9166665 -49.7499995 -25.0833335 -24.9166665 910 0 2670 --49.7500005 -49.5833335 -25.0833335 -24.9166665 567 0 2670 --49.5833335 -49.4166665 -25.0833335 -24.9166665 513 0 2670 --49.4166665 -49.2499995 -25.0833335 -24.9166665 582 0 2670 --49.2500005 -49.0833335 -25.0833335 -24.9166665 764 0 2670 --49.0833335 -48.9166665 -25.0833335 -24.9166665 963 0 2670 --48.9166665 -48.7499995 -25.0833335 -24.9166665 891 0 2670 --48.7500005 -48.5833335 -25.0833335 -24.9166665 657 0 2670 --48.5833335 -48.4166665 -25.0833335 -24.9166665 875 0 2670 --48.4166665 -48.2499995 -25.0833335 -24.9166665 686 0 2670 --48.2500005 -48.0833335 -25.0833335 -24.9166665 306 0 2670 --48.0833335 -47.9166665 -25.0833335 -24.9166665 8 0 2670 --47.9166665 -47.7499995 -25.0833335 -24.9166665 0 -1 -1670 --47.7500005 -47.5833335 -25.0833335 -24.9166665 0 -11 -1670 --47.5833335 -47.4166665 -25.0833335 -24.9166665 0 -21 -1670 --47.4166665 -47.2499995 -25.0833335 -24.9166665 0 -29 -1670 --47.2500005 -47.0833335 -25.0833335 -24.9166665 0 -36 -1670 --47.0833335 -46.9166665 -25.0833335 -24.9166665 0 -42 -1670 --46.9166665 -46.7499995 -25.0833335 -24.9166665 0 -47 -1670 --46.7500005 -46.5833335 -25.0833335 -24.9166665 0 -53 -1670 --46.5833335 -46.4166665 -25.0833335 -24.9166665 0 -66 -1670 --46.4166665 -46.2499995 -25.0833335 -24.9166665 0 -67 -1670 --46.2500005 -46.0833335 -25.0833335 -24.9166665 0 -74 -1670 --46.0833335 -45.9166665 -25.0833335 -24.9166665 0 -60 -1670 --45.9166665 -45.7499995 -25.0833335 -24.9166665 0 -104 -1670 --45.7500005 -45.5833335 -25.0833335 -24.9166665 0 -103 -1670 --45.5833335 -45.4166665 -25.0833335 -24.9166665 0 -89 -1670 --45.4166665 -45.2499995 -25.0833335 -24.9166665 0 -85 -1670 --45.2500005 -45.0833335 -25.0833335 -24.9166665 0 -118 -1670 --45.0833335 -44.9166665 -25.0833335 -24.9166665 0 -146 -1670 --44.9166665 -44.7499995 -25.0833335 -24.9166665 0 -187 -1670 --44.7500005 -44.5833335 -25.0833335 -24.9166665 0 -671 -1670 --44.5833335 -44.4166665 -25.0833335 -24.9166665 0 -1135 -1670 --44.4166665 -44.2499995 -25.0833335 -24.9166665 0 -1412 -1670 --44.2500005 -44.0833335 -25.0833335 -24.9166665 0 -1616 -1670 --44.0833335 -43.9166665 -25.0833335 -24.9166665 0 -1770 -1670 --43.9166665 -43.7499995 -25.0833335 -24.9166665 0 -1818 -1670 --43.7500005 -43.5833335 -25.0833335 -24.9166665 0 -1957 -1670 --43.5833335 -43.4166665 -25.0833335 -24.9166665 0 -1978 -1670 --43.4166665 -43.2499995 -25.0833335 -24.9166665 0 -2017 -1670 --43.2500005 -43.0833335 -25.0833335 -24.9166665 0 -2096 -1670 --43.0833335 -42.9166665 -25.0833335 -24.9166665 0 -2058 -1670 --42.9166665 -42.7499995 -25.0833335 -24.9166665 0 -2160 -1670 --42.7500005 -42.5833335 -25.0833335 -24.9166665 0 -2259 -1670 --42.5833335 -42.4166665 -25.0833335 -24.9166665 0 -2238 -1670 --42.4166665 -42.2499995 -25.0833335 -24.9166665 0 -2266 -1670 --42.2500005 -42.0833335 -25.0833335 -24.9166665 0 -2246 -1670 --42.0833335 -41.9166665 -25.0833335 -24.9166665 0 -2209 -1670 --41.9166665 -41.7499995 -25.0833335 -24.9166665 0 -2295 -1670 --41.7500005 -41.5833335 -25.0833335 -24.9166665 0 -2547 -1670 --41.5833335 -41.4166665 -25.0833335 -24.9166665 0 -2623 -1670 --41.4166665 -41.2499995 -25.0833335 -24.9166665 0 -2597 -1670 --41.2500005 -41.0833335 -25.0833335 -24.9166665 0 -2613 -1670 --41.0833335 -40.9166665 -25.0833335 -24.9166665 0 -2755 -1670 --40.9166665 -40.7499995 -25.0833335 -24.9166665 0 -2822 -1670 --40.7500005 -40.5833335 -25.0833335 -24.9166665 0 -2994 -1670 --40.5833335 -40.4166665 -25.0833335 -24.9166665 0 -2974 -1670 --40.4166665 -40.2499995 -25.0833335 -24.9166665 0 -3068 -1670 --40.2500005 -40.0833335 -25.0833335 -24.9166665 0 -3034 -1670 --40.0833335 -39.9166665 -25.0833335 -24.9166665 0 -3226 -1670 --65.0833335 -64.9166665 -25.2500005 -25.0833335 817 0 2670 --64.9166665 -64.7499995 -25.2500005 -25.0833335 889 0 2670 --64.7500005 -64.5833335 -25.2500005 -25.0833335 715 0 2670 --64.5833335 -64.4166665 -25.2500005 -25.0833335 590 0 2670 --64.4166665 -64.2499995 -25.2500005 -25.0833335 421 0 2670 --64.2500005 -64.0833335 -25.2500005 -25.0833335 386 0 2670 --64.0833335 -63.9166665 -25.2500005 -25.0833335 357 0 2670 --63.9166665 -63.7499995 -25.2500005 -25.0833335 330 0 2670 --63.7500005 -63.5833335 -25.2500005 -25.0833335 312 0 2670 --63.5833335 -63.4166665 -25.2500005 -25.0833335 291 0 2670 --63.4166665 -63.2499995 -25.2500005 -25.0833335 275 0 2670 --63.2500005 -63.0833335 -25.2500005 -25.0833335 261 0 2670 --63.0833335 -62.9166665 -25.2500005 -25.0833335 245 0 2670 --62.9166665 -62.7499995 -25.2500005 -25.0833335 231 0 2670 --62.7500005 -62.5833335 -25.2500005 -25.0833335 220 0 2670 --62.5833335 -62.4166665 -25.2500005 -25.0833335 209 0 2670 --62.4166665 -62.2499995 -25.2500005 -25.0833335 196 0 2670 --62.2500005 -62.0833335 -25.2500005 -25.0833335 187 0 2670 --62.0833335 -61.9166665 -25.2500005 -25.0833335 177 0 2670 --61.9166665 -61.7499995 -25.2500005 -25.0833335 168 0 2670 --61.7500005 -61.5833335 -25.2500005 -25.0833335 160 0 2670 --61.5833335 -61.4166665 -25.2500005 -25.0833335 151 0 2670 --61.4166665 -61.2499995 -25.2500005 -25.0833335 145 0 2670 --61.2500005 -61.0833335 -25.2500005 -25.0833335 139 0 2670 --61.0833335 -60.9166665 -25.2500005 -25.0833335 139 0 2670 --60.9166665 -60.7499995 -25.2500005 -25.0833335 135 0 2670 --60.7500005 -60.5833335 -25.2500005 -25.0833335 129 0 2670 --60.5833335 -60.4166665 -25.2500005 -25.0833335 126 0 2670 --60.4166665 -60.2499995 -25.2500005 -25.0833335 123 0 2670 --60.2500005 -60.0833335 -25.2500005 -25.0833335 120 0 2670 --60.0833335 -59.9166665 -25.2500005 -25.0833335 117 0 2670 --59.9166665 -59.7499995 -25.2500005 -25.0833335 108 0 2670 --59.7500005 -59.5833335 -25.2500005 -25.0833335 105 0 2670 --59.5833335 -59.4166665 -25.2500005 -25.0833335 102 0 2670 --59.4166665 -59.2499995 -25.2500005 -25.0833335 97 0 2670 --59.2500005 -59.0833335 -25.2500005 -25.0833335 97 0 2670 --59.0833335 -58.9166665 -25.2500005 -25.0833335 92 0 2670 --58.9166665 -58.7499995 -25.2500005 -25.0833335 90 0 2670 --58.7500005 -58.5833335 -25.2500005 -25.0833335 83 0 2670 --58.5833335 -58.4166665 -25.2500005 -25.0833335 83 0 2670 --58.4166665 -58.2499995 -25.2500005 -25.0833335 81 0 2670 --58.2500005 -58.0833335 -25.2500005 -25.0833335 75 0 2670 --58.0833335 -57.9166665 -25.2500005 -25.0833335 70 0 2670 --57.9166665 -57.7499995 -25.2500005 -25.0833335 69 0 2670 --57.7500005 -57.5833335 -25.2500005 -25.0833335 67 0 2670 --57.5833335 -57.4166665 -25.2500005 -25.0833335 65 0 2670 --57.4166665 -57.2499995 -25.2500005 -25.0833335 190 0 2670 --57.2500005 -57.0833335 -25.2500005 -25.0833335 77 0 2670 --57.0833335 -56.9166665 -25.2500005 -25.0833335 91 0 2670 --56.9166665 -56.7499995 -25.2500005 -25.0833335 72 0 2670 --56.7500005 -56.5833335 -25.2500005 -25.0833335 78 0 2670 --56.5833335 -56.4166665 -25.2500005 -25.0833335 90 0 2670 --56.4166665 -56.2499995 -25.2500005 -25.0833335 149 0 2670 --56.2500005 -56.0833335 -25.2500005 -25.0833335 198 0 2670 --56.0833335 -55.9166665 -25.2500005 -25.0833335 283 0 2670 --55.9166665 -55.7499995 -25.2500005 -25.0833335 277 0 2670 --55.7500005 -55.5833335 -25.2500005 -25.0833335 259 0 2670 --55.5833335 -55.4166665 -25.2500005 -25.0833335 283 0 2670 --55.4166665 -55.2499995 -25.2500005 -25.0833335 226 0 2670 --55.2500005 -55.0833335 -25.2500005 -25.0833335 253 0 2670 --55.0833335 -54.9166665 -25.2500005 -25.0833335 230 0 2670 --54.9166665 -54.7499995 -25.2500005 -25.0833335 272 0 2670 --54.7500005 -54.5833335 -25.2500005 -25.0833335 285 0 2670 --54.5833335 -54.4166665 -25.2500005 -25.0833335 239 0 2670 --54.4166665 -54.2499995 -25.2500005 -25.0833335 270 0 2670 --54.2500005 -54.0833335 -25.2500005 -25.0833335 288 0 2670 --54.0833335 -53.9166665 -25.2500005 -25.0833335 567 0 2670 --53.9166665 -53.7499995 -25.2500005 -25.0833335 556 0 2670 --53.7500005 -53.5833335 -25.2500005 -25.0833335 564 0 2670 --53.5833335 -53.4166665 -25.2500005 -25.0833335 637 0 2670 --53.4166665 -53.2499995 -25.2500005 -25.0833335 613 0 2670 --53.2500005 -53.0833335 -25.2500005 -25.0833335 781 0 2670 --53.0833335 -52.9166665 -25.2500005 -25.0833335 685 0 2670 --52.9166665 -52.7499995 -25.2500005 -25.0833335 813 0 2670 --52.7500005 -52.5833335 -25.2500005 -25.0833335 806 0 2670 --52.5833335 -52.4166665 -25.2500005 -25.0833335 638 0 2670 --52.4166665 -52.2499995 -25.2500005 -25.0833335 743 0 2670 --52.2500005 -52.0833335 -25.2500005 -25.0833335 810 0 2670 --52.0833335 -51.9166665 -25.2500005 -25.0833335 986 0 2670 --51.9166665 -51.7499995 -25.2500005 -25.0833335 1027 0 2670 --51.7500005 -51.5833335 -25.2500005 -25.0833335 1125 0 2670 --51.5833335 -51.4166665 -25.2500005 -25.0833335 1135 0 2670 --51.4166665 -51.2499995 -25.2500005 -25.0833335 1156 0 2670 --51.2500005 -51.0833335 -25.2500005 -25.0833335 821 0 2670 --51.0833335 -50.9166665 -25.2500005 -25.0833335 773 0 2670 --50.9166665 -50.7499995 -25.2500005 -25.0833335 794 0 2670 --50.7500005 -50.5833335 -25.2500005 -25.0833335 840 0 2670 --50.5833335 -50.4166665 -25.2500005 -25.0833335 866 0 2670 --50.4166665 -50.2499995 -25.2500005 -25.0833335 861 0 2670 --50.2500005 -50.0833335 -25.2500005 -25.0833335 801 0 2670 --50.0833335 -49.9166665 -25.2500005 -25.0833335 1024 0 2670 --49.9166665 -49.7499995 -25.2500005 -25.0833335 787 0 2670 --49.7500005 -49.5833335 -25.2500005 -25.0833335 842 0 2670 --49.5833335 -49.4166665 -25.2500005 -25.0833335 728 0 2670 --49.4166665 -49.2499995 -25.2500005 -25.0833335 956 0 2670 --49.2500005 -49.0833335 -25.2500005 -25.0833335 1053 0 2670 --49.0833335 -48.9166665 -25.2500005 -25.0833335 938 0 2670 --48.9166665 -48.7499995 -25.2500005 -25.0833335 1008 0 2670 --48.7500005 -48.5833335 -25.2500005 -25.0833335 639 0 2670 --48.5833335 -48.4166665 -25.2500005 -25.0833335 288 0 2670 --48.4166665 -48.2499995 -25.2500005 -25.0833335 413 0 2670 --48.2500005 -48.0833335 -25.2500005 -25.0833335 691 0 2670 --48.0833335 -47.9166665 -25.2500005 -25.0833335 119 0 2670 --47.9166665 -47.7499995 -25.2500005 -25.0833335 0 -7 -1670 --47.7500005 -47.5833335 -25.2500005 -25.0833335 0 -20 -1670 --47.5833335 -47.4166665 -25.2500005 -25.0833335 0 -28 -1670 --47.4166665 -47.2499995 -25.2500005 -25.0833335 0 -35 -1670 --47.2500005 -47.0833335 -25.2500005 -25.0833335 0 -43 -1670 --47.0833335 -46.9166665 -25.2500005 -25.0833335 0 -52 -1670 --46.9166665 -46.7499995 -25.2500005 -25.0833335 0 -55 -1670 --46.7500005 -46.5833335 -25.2500005 -25.0833335 0 -61 -1670 --46.5833335 -46.4166665 -25.2500005 -25.0833335 0 -73 -1670 --46.4166665 -46.2499995 -25.2500005 -25.0833335 0 -76 -1670 --46.2500005 -46.0833335 -25.2500005 -25.0833335 0 -86 -1670 --46.0833335 -45.9166665 -25.2500005 -25.0833335 0 -100 -1670 --45.9166665 -45.7499995 -25.2500005 -25.0833335 0 -108 -1670 --45.7500005 -45.5833335 -25.2500005 -25.0833335 0 -126 -1670 --45.5833335 -45.4166665 -25.2500005 -25.0833335 0 -96 -1670 --45.4166665 -45.2499995 -25.2500005 -25.0833335 0 -109 -1670 --45.2500005 -45.0833335 -25.2500005 -25.0833335 0 -145 -1670 --45.0833335 -44.9166665 -25.2500005 -25.0833335 0 -147 -1670 --44.9166665 -44.7499995 -25.2500005 -25.0833335 0 -320 -1670 --44.7500005 -44.5833335 -25.2500005 -25.0833335 0 -1226 -1670 --44.5833335 -44.4166665 -25.2500005 -25.0833335 0 -1624 -1670 --44.4166665 -44.2499995 -25.2500005 -25.0833335 0 -1779 -1670 --44.2500005 -44.0833335 -25.2500005 -25.0833335 0 -1895 -1670 --44.0833335 -43.9166665 -25.2500005 -25.0833335 0 -1950 -1670 --43.9166665 -43.7499995 -25.2500005 -25.0833335 0 -2234 -1670 --43.7500005 -43.5833335 -25.2500005 -25.0833335 0 -2217 -1670 --43.5833335 -43.4166665 -25.2500005 -25.0833335 0 -2143 -1670 --43.4166665 -43.2499995 -25.2500005 -25.0833335 0 -2121 -1670 --43.2500005 -43.0833335 -25.2500005 -25.0833335 0 -2210 -1670 --43.0833335 -42.9166665 -25.2500005 -25.0833335 0 -2206 -1670 --42.9166665 -42.7499995 -25.2500005 -25.0833335 0 -2183 -1670 --42.7500005 -42.5833335 -25.2500005 -25.0833335 0 -2200 -1670 --42.5833335 -42.4166665 -25.2500005 -25.0833335 0 -2136 -1670 --42.4166665 -42.2499995 -25.2500005 -25.0833335 0 -2203 -1670 --42.2500005 -42.0833335 -25.2500005 -25.0833335 0 -2149 -1670 --42.0833335 -41.9166665 -25.2500005 -25.0833335 0 -2253 -1670 --41.9166665 -41.7499995 -25.2500005 -25.0833335 0 -2534 -1670 --41.7500005 -41.5833335 -25.2500005 -25.0833335 0 -2575 -1670 --41.5833335 -41.4166665 -25.2500005 -25.0833335 0 -2595 -1670 --41.4166665 -41.2499995 -25.2500005 -25.0833335 0 -2674 -1670 --41.2500005 -41.0833335 -25.2500005 -25.0833335 0 -2966 -1670 --41.0833335 -40.9166665 -25.2500005 -25.0833335 0 -2725 -1670 --40.9166665 -40.7499995 -25.2500005 -25.0833335 0 -2612 -1670 --40.7500005 -40.5833335 -25.2500005 -25.0833335 0 -2856 -1670 --40.5833335 -40.4166665 -25.2500005 -25.0833335 0 -3080 -1670 --40.4166665 -40.2499995 -25.2500005 -25.0833335 0 -2957 -1670 --40.2500005 -40.0833335 -25.2500005 -25.0833335 0 -3002 -1670 --40.0833335 -39.9166665 -25.2500005 -25.0833335 0 -3045 -1670 --65.0833335 -64.9166665 -25.4166665 -25.2499995 963 0 2670 --64.9166665 -64.7499995 -25.4166665 -25.2499995 614 0 2670 --64.7500005 -64.5833335 -25.4166665 -25.2499995 546 0 2670 --64.5833335 -64.4166665 -25.4166665 -25.2499995 522 0 2670 --64.4166665 -64.2499995 -25.4166665 -25.2499995 525 0 2670 --64.2500005 -64.0833335 -25.4166665 -25.2499995 385 0 2670 --64.0833335 -63.9166665 -25.4166665 -25.2499995 337 0 2670 --63.9166665 -63.7499995 -25.4166665 -25.2499995 319 0 2670 --63.7500005 -63.5833335 -25.4166665 -25.2499995 307 0 2670 --63.5833335 -63.4166665 -25.4166665 -25.2499995 291 0 2670 --63.4166665 -63.2499995 -25.4166665 -25.2499995 275 0 2670 --63.2500005 -63.0833335 -25.4166665 -25.2499995 259 0 2670 --63.0833335 -62.9166665 -25.4166665 -25.2499995 244 0 2670 --62.9166665 -62.7499995 -25.4166665 -25.2499995 234 0 2670 --62.7500005 -62.5833335 -25.4166665 -25.2499995 220 0 2670 --62.5833335 -62.4166665 -25.4166665 -25.2499995 210 0 2670 --62.4166665 -62.2499995 -25.4166665 -25.2499995 199 0 2670 --62.2500005 -62.0833335 -25.4166665 -25.2499995 188 0 2670 --62.0833335 -61.9166665 -25.4166665 -25.2499995 179 0 2670 --61.9166665 -61.7499995 -25.4166665 -25.2499995 169 0 2670 --61.7500005 -61.5833335 -25.4166665 -25.2499995 160 0 2670 --61.5833335 -61.4166665 -25.4166665 -25.2499995 152 0 2670 --61.4166665 -61.2499995 -25.4166665 -25.2499995 145 0 2670 --61.2500005 -61.0833335 -25.4166665 -25.2499995 139 0 2670 --61.0833335 -60.9166665 -25.4166665 -25.2499995 135 0 2670 --60.9166665 -60.7499995 -25.4166665 -25.2499995 131 0 2670 --60.7500005 -60.5833335 -25.4166665 -25.2499995 127 0 2670 --60.5833335 -60.4166665 -25.4166665 -25.2499995 122 0 2670 --60.4166665 -60.2499995 -25.4166665 -25.2499995 120 0 2670 --60.2500005 -60.0833335 -25.4166665 -25.2499995 116 0 2670 --60.0833335 -59.9166665 -25.4166665 -25.2499995 116 0 2670 --59.9166665 -59.7499995 -25.4166665 -25.2499995 107 0 2670 --59.7500005 -59.5833335 -25.4166665 -25.2499995 102 0 2670 --59.5833335 -59.4166665 -25.4166665 -25.2499995 100 0 2670 --59.4166665 -59.2499995 -25.4166665 -25.2499995 96 0 2670 --59.2500005 -59.0833335 -25.4166665 -25.2499995 97 0 2670 --59.0833335 -58.9166665 -25.4166665 -25.2499995 90 0 2670 --58.9166665 -58.7499995 -25.4166665 -25.2499995 87 0 2670 --58.7500005 -58.5833335 -25.4166665 -25.2499995 86 0 2670 --58.5833335 -58.4166665 -25.4166665 -25.2499995 82 0 2670 --58.4166665 -58.2499995 -25.4166665 -25.2499995 77 0 2670 --58.2500005 -58.0833335 -25.4166665 -25.2499995 74 0 2670 --58.0833335 -57.9166665 -25.4166665 -25.2499995 70 0 2670 --57.9166665 -57.7499995 -25.4166665 -25.2499995 67 0 2670 --57.7500005 -57.5833335 -25.4166665 -25.2499995 53 0 2670 --57.5833335 -57.4166665 -25.4166665 -25.2499995 114 0 2670 --57.4166665 -57.2499995 -25.4166665 -25.2499995 62 0 2670 --57.2500005 -57.0833335 -25.4166665 -25.2499995 214 0 2670 --57.0833335 -56.9166665 -25.4166665 -25.2499995 110 0 2670 --56.9166665 -56.7499995 -25.4166665 -25.2499995 160 0 2670 --56.7500005 -56.5833335 -25.4166665 -25.2499995 82 0 2670 --56.5833335 -56.4166665 -25.4166665 -25.2499995 111 0 2670 --56.4166665 -56.2499995 -25.4166665 -25.2499995 149 0 2670 --56.2500005 -56.0833335 -25.4166665 -25.2499995 150 0 2670 --56.0833335 -55.9166665 -25.4166665 -25.2499995 298 0 2670 --55.9166665 -55.7499995 -25.4166665 -25.2499995 326 0 2670 --55.7500005 -55.5833335 -25.4166665 -25.2499995 269 0 2670 --55.5833335 -55.4166665 -25.4166665 -25.2499995 239 0 2670 --55.4166665 -55.2499995 -25.4166665 -25.2499995 220 0 2670 --55.2500005 -55.0833335 -25.4166665 -25.2499995 220 0 2670 --55.0833335 -54.9166665 -25.4166665 -25.2499995 250 0 2670 --54.9166665 -54.7499995 -25.4166665 -25.2499995 223 0 2670 --54.7500005 -54.5833335 -25.4166665 -25.2499995 239 0 2670 --54.5833335 -54.4166665 -25.4166665 -25.2499995 217 0 2670 --54.4166665 -54.2499995 -25.4166665 -25.2499995 279 0 2670 --54.2500005 -54.0833335 -25.4166665 -25.2499995 387 0 2670 --54.0833335 -53.9166665 -25.4166665 -25.2499995 355 0 2670 --53.9166665 -53.7499995 -25.4166665 -25.2499995 378 0 2670 --53.7500005 -53.5833335 -25.4166665 -25.2499995 393 0 2670 --53.5833335 -53.4166665 -25.4166665 -25.2499995 427 0 2670 --53.4166665 -53.2499995 -25.4166665 -25.2499995 548 0 2670 --53.2500005 -53.0833335 -25.4166665 -25.2499995 589 0 2670 --53.0833335 -52.9166665 -25.4166665 -25.2499995 452 0 2670 --52.9166665 -52.7499995 -25.4166665 -25.2499995 710 0 2670 --52.7500005 -52.5833335 -25.4166665 -25.2499995 693 0 2670 --52.5833335 -52.4166665 -25.4166665 -25.2499995 751 0 2670 --52.4166665 -52.2499995 -25.4166665 -25.2499995 819 0 2670 --52.2500005 -52.0833335 -25.4166665 -25.2499995 817 0 2670 --52.0833335 -51.9166665 -25.4166665 -25.2499995 754 0 2670 --51.9166665 -51.7499995 -25.4166665 -25.2499995 970 0 2670 --51.7500005 -51.5833335 -25.4166665 -25.2499995 1005 0 2670 --51.5833335 -51.4166665 -25.4166665 -25.2499995 1042 0 2670 --51.4166665 -51.2499995 -25.4166665 -25.2499995 1102 0 2670 --51.2500005 -51.0833335 -25.4166665 -25.2499995 958 0 2670 --51.0833335 -50.9166665 -25.4166665 -25.2499995 793 0 2670 --50.9166665 -50.7499995 -25.4166665 -25.2499995 887 0 2670 --50.7500005 -50.5833335 -25.4166665 -25.2499995 850 0 2670 --50.5833335 -50.4166665 -25.4166665 -25.2499995 886 0 2670 --50.4166665 -50.2499995 -25.4166665 -25.2499995 830 0 2670 --50.2500005 -50.0833335 -25.4166665 -25.2499995 924 0 2670 --50.0833335 -49.9166665 -25.4166665 -25.2499995 830 0 2670 --49.9166665 -49.7499995 -25.4166665 -25.2499995 996 0 2670 --49.7500005 -49.5833335 -25.4166665 -25.2499995 775 0 2670 --49.5833335 -49.4166665 -25.4166665 -25.2499995 936 0 2670 --49.4166665 -49.2499995 -25.4166665 -25.2499995 980 0 2670 --49.2500005 -49.0833335 -25.4166665 -25.2499995 927 0 2670 --49.0833335 -48.9166665 -25.4166665 -25.2499995 899 0 2670 --48.9166665 -48.7499995 -25.4166665 -25.2499995 557 0 2670 --48.7500005 -48.5833335 -25.4166665 -25.2499995 59 0 2670 --48.5833335 -48.4166665 -25.4166665 -25.2499995 5 0 2670 --48.4166665 -48.2499995 -25.4166665 -25.2499995 0 0 2670 --48.2500005 -48.0833335 -25.4166665 -25.2499995 19 0 2670 --48.0833335 -47.9166665 -25.4166665 -25.2499995 0 -5 -1670 --47.9166665 -47.7499995 -25.4166665 -25.2499995 0 -21 -1670 --47.7500005 -47.5833335 -25.4166665 -25.2499995 0 -26 -1670 --47.5833335 -47.4166665 -25.4166665 -25.2499995 0 -34 -1670 --47.4166665 -47.2499995 -25.4166665 -25.2499995 0 -42 -1670 --47.2500005 -47.0833335 -25.4166665 -25.2499995 0 -49 -1670 --47.0833335 -46.9166665 -25.4166665 -25.2499995 0 -59 -1670 --46.9166665 -46.7499995 -25.4166665 -25.2499995 0 -64 -1670 --46.7500005 -46.5833335 -25.4166665 -25.2499995 0 -70 -1670 --46.5833335 -46.4166665 -25.4166665 -25.2499995 0 -77 -1670 --46.4166665 -46.2499995 -25.4166665 -25.2499995 0 -89 -1670 --46.2500005 -46.0833335 -25.4166665 -25.2499995 0 -106 -1670 --46.0833335 -45.9166665 -25.4166665 -25.2499995 0 -117 -1670 --45.9166665 -45.7499995 -25.4166665 -25.2499995 0 -124 -1670 --45.7500005 -45.5833335 -25.4166665 -25.2499995 0 -128 -1670 --45.5833335 -45.4166665 -25.4166665 -25.2499995 0 -162 -1670 --45.4166665 -45.2499995 -25.4166665 -25.2499995 0 -94 -1670 --45.2500005 -45.0833335 -25.4166665 -25.2499995 0 -136 -1670 --45.0833335 -44.9166665 -25.4166665 -25.2499995 0 -162 -1670 --44.9166665 -44.7499995 -25.4166665 -25.2499995 0 -1002 -1670 --44.7500005 -44.5833335 -25.4166665 -25.2499995 0 -1556 -1670 --44.5833335 -44.4166665 -25.4166665 -25.2499995 0 -1768 -1670 --44.4166665 -44.2499995 -25.4166665 -25.2499995 0 -1804 -1670 --44.2500005 -44.0833335 -25.4166665 -25.2499995 0 -1980 -1670 --44.0833335 -43.9166665 -25.4166665 -25.2499995 0 -2044 -1670 --43.9166665 -43.7499995 -25.4166665 -25.2499995 0 -2144 -1670 --43.7500005 -43.5833335 -25.4166665 -25.2499995 0 -2132 -1670 --43.5833335 -43.4166665 -25.4166665 -25.2499995 0 -2120 -1670 --43.4166665 -43.2499995 -25.4166665 -25.2499995 0 -2184 -1670 --43.2500005 -43.0833335 -25.4166665 -25.2499995 0 -2210 -1670 --43.0833335 -42.9166665 -25.4166665 -25.2499995 0 -2220 -1670 --42.9166665 -42.7499995 -25.4166665 -25.2499995 0 -2170 -1670 --42.7500005 -42.5833335 -25.4166665 -25.2499995 0 -2095 -1670 --42.5833335 -42.4166665 -25.4166665 -25.2499995 0 -2234 -1670 --42.4166665 -42.2499995 -25.4166665 -25.2499995 0 -2213 -1670 --42.2500005 -42.0833335 -25.4166665 -25.2499995 0 -2254 -1670 --42.0833335 -41.9166665 -25.4166665 -25.2499995 0 -2438 -1670 --41.9166665 -41.7499995 -25.4166665 -25.2499995 0 -2466 -1670 --41.7500005 -41.5833335 -25.4166665 -25.2499995 0 -2590 -1670 --41.5833335 -41.4166665 -25.4166665 -25.2499995 0 -2658 -1670 --41.4166665 -41.2499995 -25.4166665 -25.2499995 0 -2538 -1670 --41.2500005 -41.0833335 -25.4166665 -25.2499995 0 -2722 -1670 --41.0833335 -40.9166665 -25.4166665 -25.2499995 0 -2640 -1670 --40.9166665 -40.7499995 -25.4166665 -25.2499995 0 -2786 -1670 --40.7500005 -40.5833335 -25.4166665 -25.2499995 0 -2902 -1670 --40.5833335 -40.4166665 -25.4166665 -25.2499995 0 -3196 -1670 --40.4166665 -40.2499995 -25.4166665 -25.2499995 0 -3223 -1670 --40.2500005 -40.0833335 -25.4166665 -25.2499995 0 -3137 -1670 --40.0833335 -39.9166665 -25.4166665 -25.2499995 0 -3150 -1670 --65.0833335 -64.9166665 -25.5833335 -25.4166665 983 0 2670 --64.9166665 -64.7499995 -25.5833335 -25.4166665 685 0 2670 --64.7500005 -64.5833335 -25.5833335 -25.4166665 568 0 2670 --64.5833335 -64.4166665 -25.5833335 -25.4166665 667 0 2670 --64.4166665 -64.2499995 -25.5833335 -25.4166665 553 0 2670 --64.2500005 -64.0833335 -25.5833335 -25.4166665 390 0 2670 --64.0833335 -63.9166665 -25.5833335 -25.4166665 318 0 2670 --63.9166665 -63.7499995 -25.5833335 -25.4166665 308 0 2670 --63.7500005 -63.5833335 -25.5833335 -25.4166665 291 0 2670 --63.5833335 -63.4166665 -25.5833335 -25.4166665 282 0 2670 --63.4166665 -63.2499995 -25.5833335 -25.4166665 270 0 2670 --63.2500005 -63.0833335 -25.5833335 -25.4166665 254 0 2670 --63.0833335 -62.9166665 -25.5833335 -25.4166665 243 0 2670 --62.9166665 -62.7499995 -25.5833335 -25.4166665 230 0 2670 --62.7500005 -62.5833335 -25.5833335 -25.4166665 220 0 2670 --62.5833335 -62.4166665 -25.5833335 -25.4166665 208 0 2670 --62.4166665 -62.2499995 -25.5833335 -25.4166665 198 0 2670 --62.2500005 -62.0833335 -25.5833335 -25.4166665 188 0 2670 --62.0833335 -61.9166665 -25.5833335 -25.4166665 178 0 2670 --61.9166665 -61.7499995 -25.5833335 -25.4166665 167 0 2670 --61.7500005 -61.5833335 -25.5833335 -25.4166665 160 0 2670 --61.5833335 -61.4166665 -25.5833335 -25.4166665 152 0 2670 --61.4166665 -61.2499995 -25.5833335 -25.4166665 146 0 2670 --61.2500005 -61.0833335 -25.5833335 -25.4166665 138 0 2670 --61.0833335 -60.9166665 -25.5833335 -25.4166665 131 0 2670 --60.9166665 -60.7499995 -25.5833335 -25.4166665 128 0 2670 --60.7500005 -60.5833335 -25.5833335 -25.4166665 124 0 2670 --60.5833335 -60.4166665 -25.5833335 -25.4166665 119 0 2670 --60.4166665 -60.2499995 -25.5833335 -25.4166665 114 0 2670 --60.2500005 -60.0833335 -25.5833335 -25.4166665 113 0 2670 --60.0833335 -59.9166665 -25.5833335 -25.4166665 109 0 2670 --59.9166665 -59.7499995 -25.5833335 -25.4166665 103 0 2670 --59.7500005 -59.5833335 -25.5833335 -25.4166665 103 0 2670 --59.5833335 -59.4166665 -25.5833335 -25.4166665 100 0 2670 --59.4166665 -59.2499995 -25.5833335 -25.4166665 95 0 2670 --59.2500005 -59.0833335 -25.5833335 -25.4166665 93 0 2670 --59.0833335 -58.9166665 -25.5833335 -25.4166665 91 0 2670 --58.9166665 -58.7499995 -25.5833335 -25.4166665 85 0 2670 --58.7500005 -58.5833335 -25.5833335 -25.4166665 80 0 2670 --58.5833335 -58.4166665 -25.5833335 -25.4166665 79 0 2670 --58.4166665 -58.2499995 -25.5833335 -25.4166665 72 0 2670 --58.2500005 -58.0833335 -25.5833335 -25.4166665 70 0 2670 --58.0833335 -57.9166665 -25.5833335 -25.4166665 68 0 2670 --57.9166665 -57.7499995 -25.5833335 -25.4166665 65 0 2670 --57.7500005 -57.5833335 -25.5833335 -25.4166665 64 0 2670 --57.5833335 -57.4166665 -25.5833335 -25.4166665 107 0 2670 --57.4166665 -57.2499995 -25.5833335 -25.4166665 130 0 2670 --57.2500005 -57.0833335 -25.5833335 -25.4166665 132 0 2670 --57.0833335 -56.9166665 -25.5833335 -25.4166665 252 0 2670 --56.9166665 -56.7499995 -25.5833335 -25.4166665 147 0 2670 --56.7500005 -56.5833335 -25.5833335 -25.4166665 114 0 2670 --56.5833335 -56.4166665 -25.5833335 -25.4166665 126 0 2670 --56.4166665 -56.2499995 -25.5833335 -25.4166665 204 0 2670 --56.2500005 -56.0833335 -25.5833335 -25.4166665 245 0 2670 --56.0833335 -55.9166665 -25.5833335 -25.4166665 295 0 2670 --55.9166665 -55.7499995 -25.5833335 -25.4166665 233 0 2670 --55.7500005 -55.5833335 -25.5833335 -25.4166665 218 0 2670 --55.5833335 -55.4166665 -25.5833335 -25.4166665 224 0 2670 --55.4166665 -55.2499995 -25.5833335 -25.4166665 256 0 2670 --55.2500005 -55.0833335 -25.5833335 -25.4166665 216 0 2670 --55.0833335 -54.9166665 -25.5833335 -25.4166665 230 0 2670 --54.9166665 -54.7499995 -25.5833335 -25.4166665 245 0 2670 --54.7500005 -54.5833335 -25.5833335 -25.4166665 215 0 2670 --54.5833335 -54.4166665 -25.5833335 -25.4166665 261 0 2670 --54.4166665 -54.2499995 -25.5833335 -25.4166665 284 0 2670 --54.2500005 -54.0833335 -25.5833335 -25.4166665 249 0 2670 --54.0833335 -53.9166665 -25.5833335 -25.4166665 285 0 2670 --53.9166665 -53.7499995 -25.5833335 -25.4166665 309 0 2670 --53.7500005 -53.5833335 -25.5833335 -25.4166665 273 0 2670 --53.5833335 -53.4166665 -25.5833335 -25.4166665 358 0 2670 --53.4166665 -53.2499995 -25.5833335 -25.4166665 378 0 2670 --53.2500005 -53.0833335 -25.5833335 -25.4166665 392 0 2670 --53.0833335 -52.9166665 -25.5833335 -25.4166665 463 0 2670 --52.9166665 -52.7499995 -25.5833335 -25.4166665 586 0 2670 --52.7500005 -52.5833335 -25.5833335 -25.4166665 607 0 2670 --52.5833335 -52.4166665 -25.5833335 -25.4166665 643 0 2670 --52.4166665 -52.2499995 -25.5833335 -25.4166665 773 0 2670 --52.2500005 -52.0833335 -25.5833335 -25.4166665 707 0 2670 --52.0833335 -51.9166665 -25.5833335 -25.4166665 805 0 2670 --51.9166665 -51.7499995 -25.5833335 -25.4166665 938 0 2670 --51.7500005 -51.5833335 -25.5833335 -25.4166665 961 0 2670 --51.5833335 -51.4166665 -25.5833335 -25.4166665 1073 0 2670 --51.4166665 -51.2499995 -25.5833335 -25.4166665 1138 0 2670 --51.2500005 -51.0833335 -25.5833335 -25.4166665 1191 0 2670 --51.0833335 -50.9166665 -25.5833335 -25.4166665 895 0 2670 --50.9166665 -50.7499995 -25.5833335 -25.4166665 823 0 2670 --50.7500005 -50.5833335 -25.5833335 -25.4166665 859 0 2670 --50.5833335 -50.4166665 -25.5833335 -25.4166665 823 0 2670 --50.4166665 -50.2499995 -25.5833335 -25.4166665 906 0 2670 --50.2500005 -50.0833335 -25.5833335 -25.4166665 840 0 2670 --50.0833335 -49.9166665 -25.5833335 -25.4166665 910 0 2670 --49.9166665 -49.7499995 -25.5833335 -25.4166665 928 0 2670 --49.7500005 -49.5833335 -25.5833335 -25.4166665 1085 0 2670 --49.5833335 -49.4166665 -25.5833335 -25.4166665 898 0 2670 --49.4166665 -49.2499995 -25.5833335 -25.4166665 892 0 2670 --49.2500005 -49.0833335 -25.5833335 -25.4166665 882 0 2670 --49.0833335 -48.9166665 -25.5833335 -25.4166665 953 0 2670 --48.9166665 -48.7499995 -25.5833335 -25.4166665 18 0 2670 --48.7500005 -48.5833335 -25.5833335 -25.4166665 4 0 2670 --48.5833335 -48.4166665 -25.5833335 -25.4166665 0 0 2670 --48.4166665 -48.2499995 -25.5833335 -25.4166665 11 0 2670 --48.2500005 -48.0833335 -25.5833335 -25.4166665 0 -6 -1670 --48.0833335 -47.9166665 -25.5833335 -25.4166665 0 -20 -1670 --47.9166665 -47.7499995 -25.5833335 -25.4166665 0 -26 -1670 --47.7500005 -47.5833335 -25.5833335 -25.4166665 0 -34 -1670 --47.5833335 -47.4166665 -25.5833335 -25.4166665 0 -42 -1670 --47.4166665 -47.2499995 -25.5833335 -25.4166665 0 -49 -1670 --47.2500005 -47.0833335 -25.5833335 -25.4166665 0 -58 -1670 --47.0833335 -46.9166665 -25.5833335 -25.4166665 0 -72 -1670 --46.9166665 -46.7499995 -25.5833335 -25.4166665 0 -77 -1670 --46.7500005 -46.5833335 -25.5833335 -25.4166665 0 -92 -1670 --46.5833335 -46.4166665 -25.5833335 -25.4166665 0 -104 -1670 --46.4166665 -46.2499995 -25.5833335 -25.4166665 0 -122 -1670 --46.2500005 -46.0833335 -25.5833335 -25.4166665 0 -151 -1670 --46.0833335 -45.9166665 -25.5833335 -25.4166665 0 -143 -1670 --45.9166665 -45.7499995 -25.5833335 -25.4166665 0 -147 -1670 --45.7500005 -45.5833335 -25.5833335 -25.4166665 0 -172 -1670 --45.5833335 -45.4166665 -25.5833335 -25.4166665 0 -144 -1670 --45.4166665 -45.2499995 -25.5833335 -25.4166665 0 -158 -1670 --45.2500005 -45.0833335 -25.5833335 -25.4166665 0 -145 -1670 --45.0833335 -44.9166665 -25.5833335 -25.4166665 0 -666 -1670 --44.9166665 -44.7499995 -25.5833335 -25.4166665 0 -1396 -1670 --44.7500005 -44.5833335 -25.5833335 -25.4166665 0 -1757 -1670 --44.5833335 -44.4166665 -25.5833335 -25.4166665 0 -1855 -1670 --44.4166665 -44.2499995 -25.5833335 -25.4166665 0 -2033 -1670 --44.2500005 -44.0833335 -25.5833335 -25.4166665 0 -2108 -1670 --44.0833335 -43.9166665 -25.5833335 -25.4166665 0 -2046 -1670 --43.9166665 -43.7499995 -25.5833335 -25.4166665 0 -2145 -1670 --43.7500005 -43.5833335 -25.5833335 -25.4166665 0 -2139 -1670 --43.5833335 -43.4166665 -25.5833335 -25.4166665 0 -2140 -1670 --43.4166665 -43.2499995 -25.5833335 -25.4166665 0 -2152 -1670 --43.2500005 -43.0833335 -25.5833335 -25.4166665 0 -2176 -1670 --43.0833335 -42.9166665 -25.5833335 -25.4166665 0 -2125 -1670 --42.9166665 -42.7499995 -25.5833335 -25.4166665 0 -2126 -1670 --42.7500005 -42.5833335 -25.5833335 -25.4166665 0 -2182 -1670 --42.5833335 -42.4166665 -25.5833335 -25.4166665 0 -2121 -1670 --42.4166665 -42.2499995 -25.5833335 -25.4166665 0 -2316 -1670 --42.2500005 -42.0833335 -25.5833335 -25.4166665 0 -2427 -1670 --42.0833335 -41.9166665 -25.5833335 -25.4166665 0 -2360 -1670 --41.9166665 -41.7499995 -25.5833335 -25.4166665 0 -2575 -1670 --41.7500005 -41.5833335 -25.5833335 -25.4166665 0 -2591 -1670 --41.5833335 -41.4166665 -25.5833335 -25.4166665 0 -2560 -1670 --41.4166665 -41.2499995 -25.5833335 -25.4166665 0 -2592 -1670 --41.2500005 -41.0833335 -25.5833335 -25.4166665 0 -2554 -1670 --41.0833335 -40.9166665 -25.5833335 -25.4166665 0 -2940 -1670 --40.9166665 -40.7499995 -25.5833335 -25.4166665 0 -2884 -1670 --40.7500005 -40.5833335 -25.5833335 -25.4166665 0 -2949 -1670 --40.5833335 -40.4166665 -25.5833335 -25.4166665 0 -3052 -1670 --40.4166665 -40.2499995 -25.5833335 -25.4166665 0 -3219 -1670 --40.2500005 -40.0833335 -25.5833335 -25.4166665 0 -3158 -1670 --40.0833335 -39.9166665 -25.5833335 -25.4166665 0 -3254 -1670 --65.0833335 -64.9166665 -25.7500005 -25.5833335 896 0 2670 --64.9166665 -64.7499995 -25.7500005 -25.5833335 683 0 2670 --64.7500005 -64.5833335 -25.7500005 -25.5833335 610 0 2670 --64.5833335 -64.4166665 -25.7500005 -25.5833335 770 0 2670 --64.4166665 -64.2499995 -25.7500005 -25.5833335 533 0 2670 --64.2500005 -64.0833335 -25.7500005 -25.5833335 372 0 2670 --64.0833335 -63.9166665 -25.7500005 -25.5833335 302 0 2670 --63.9166665 -63.7499995 -25.7500005 -25.5833335 292 0 2670 --63.7500005 -63.5833335 -25.7500005 -25.5833335 283 0 2670 --63.5833335 -63.4166665 -25.7500005 -25.5833335 270 0 2670 --63.4166665 -63.2499995 -25.7500005 -25.5833335 262 0 2670 --63.2500005 -63.0833335 -25.7500005 -25.5833335 249 0 2670 --63.0833335 -62.9166665 -25.7500005 -25.5833335 238 0 2670 --62.9166665 -62.7499995 -25.7500005 -25.5833335 228 0 2670 --62.7500005 -62.5833335 -25.7500005 -25.5833335 217 0 2670 --62.5833335 -62.4166665 -25.7500005 -25.5833335 207 0 2670 --62.4166665 -62.2499995 -25.7500005 -25.5833335 197 0 2670 --62.2500005 -62.0833335 -25.7500005 -25.5833335 188 0 2670 --62.0833335 -61.9166665 -25.7500005 -25.5833335 178 0 2670 --61.9166665 -61.7499995 -25.7500005 -25.5833335 170 0 2670 --61.7500005 -61.5833335 -25.7500005 -25.5833335 160 0 2670 --61.5833335 -61.4166665 -25.7500005 -25.5833335 154 0 2670 --61.4166665 -61.2499995 -25.7500005 -25.5833335 145 0 2670 --61.2500005 -61.0833335 -25.7500005 -25.5833335 137 0 2670 --61.0833335 -60.9166665 -25.7500005 -25.5833335 130 0 2670 --60.9166665 -60.7499995 -25.7500005 -25.5833335 125 0 2670 --60.7500005 -60.5833335 -25.7500005 -25.5833335 119 0 2670 --60.5833335 -60.4166665 -25.7500005 -25.5833335 116 0 2670 --60.4166665 -60.2499995 -25.7500005 -25.5833335 114 0 2670 --60.2500005 -60.0833335 -25.7500005 -25.5833335 110 0 2670 --60.0833335 -59.9166665 -25.7500005 -25.5833335 106 0 2670 --59.9166665 -59.7499995 -25.7500005 -25.5833335 103 0 2670 --59.7500005 -59.5833335 -25.7500005 -25.5833335 98 0 2670 --59.5833335 -59.4166665 -25.7500005 -25.5833335 101 0 2670 --59.4166665 -59.2499995 -25.7500005 -25.5833335 90 0 2670 --59.2500005 -59.0833335 -25.7500005 -25.5833335 92 0 2670 --59.0833335 -58.9166665 -25.7500005 -25.5833335 84 0 2670 --58.9166665 -58.7499995 -25.7500005 -25.5833335 86 0 2670 --58.7500005 -58.5833335 -25.7500005 -25.5833335 77 0 2670 --58.5833335 -58.4166665 -25.7500005 -25.5833335 78 0 2670 --58.4166665 -58.2499995 -25.7500005 -25.5833335 73 0 2670 --58.2500005 -58.0833335 -25.7500005 -25.5833335 69 0 2670 --58.0833335 -57.9166665 -25.7500005 -25.5833335 65 0 2670 --57.9166665 -57.7499995 -25.7500005 -25.5833335 63 0 2670 --57.7500005 -57.5833335 -25.7500005 -25.5833335 64 0 2670 --57.5833335 -57.4166665 -25.7500005 -25.5833335 73 0 2670 --57.4166665 -57.2499995 -25.7500005 -25.5833335 72 0 2670 --57.2500005 -57.0833335 -25.7500005 -25.5833335 92 0 2670 --57.0833335 -56.9166665 -25.7500005 -25.5833335 147 0 2670 --56.9166665 -56.7499995 -25.7500005 -25.5833335 141 0 2670 --56.7500005 -56.5833335 -25.7500005 -25.5833335 110 0 2670 --56.5833335 -56.4166665 -25.7500005 -25.5833335 121 0 2670 --56.4166665 -56.2499995 -25.7500005 -25.5833335 159 0 2670 --56.2500005 -56.0833335 -25.7500005 -25.5833335 169 0 2670 --56.0833335 -55.9166665 -25.7500005 -25.5833335 204 0 2670 --55.9166665 -55.7499995 -25.7500005 -25.5833335 292 0 2670 --55.7500005 -55.5833335 -25.7500005 -25.5833335 230 0 2670 --55.5833335 -55.4166665 -25.7500005 -25.5833335 267 0 2670 --55.4166665 -55.2499995 -25.7500005 -25.5833335 245 0 2670 --55.2500005 -55.0833335 -25.7500005 -25.5833335 237 0 2670 --55.0833335 -54.9166665 -25.7500005 -25.5833335 252 0 2670 --54.9166665 -54.7499995 -25.7500005 -25.5833335 245 0 2670 --54.7500005 -54.5833335 -25.7500005 -25.5833335 167 0 2670 --54.5833335 -54.4166665 -25.7500005 -25.5833335 243 0 2670 --54.4166665 -54.2499995 -25.7500005 -25.5833335 241 0 2670 --54.2500005 -54.0833335 -25.7500005 -25.5833335 248 0 2670 --54.0833335 -53.9166665 -25.7500005 -25.5833335 303 0 2670 --53.9166665 -53.7499995 -25.7500005 -25.5833335 295 0 2670 --53.7500005 -53.5833335 -25.7500005 -25.5833335 379 0 2670 --53.5833335 -53.4166665 -25.7500005 -25.5833335 385 0 2670 --53.4166665 -53.2499995 -25.7500005 -25.5833335 428 0 2670 --53.2500005 -53.0833335 -25.7500005 -25.5833335 475 0 2670 --53.0833335 -52.9166665 -25.7500005 -25.5833335 416 0 2670 --52.9166665 -52.7499995 -25.7500005 -25.5833335 574 0 2670 --52.7500005 -52.5833335 -25.7500005 -25.5833335 473 0 2670 --52.5833335 -52.4166665 -25.7500005 -25.5833335 510 0 2670 --52.4166665 -52.2499995 -25.7500005 -25.5833335 566 0 2670 --52.2500005 -52.0833335 -25.7500005 -25.5833335 754 0 2670 --52.0833335 -51.9166665 -25.7500005 -25.5833335 840 0 2670 --51.9166665 -51.7499995 -25.7500005 -25.5833335 909 0 2670 --51.7500005 -51.5833335 -25.7500005 -25.5833335 1028 0 2670 --51.5833335 -51.4166665 -25.7500005 -25.5833335 1125 0 2670 --51.4166665 -51.2499995 -25.7500005 -25.5833335 1257 0 2670 --51.2500005 -51.0833335 -25.7500005 -25.5833335 1034 0 2670 --51.0833335 -50.9166665 -25.7500005 -25.5833335 1174 0 2670 --50.9166665 -50.7499995 -25.7500005 -25.5833335 893 0 2670 --50.7500005 -50.5833335 -25.7500005 -25.5833335 812 0 2670 --50.5833335 -50.4166665 -25.7500005 -25.5833335 913 0 2670 --50.4166665 -50.2499995 -25.7500005 -25.5833335 837 0 2670 --50.2500005 -50.0833335 -25.7500005 -25.5833335 814 0 2670 --50.0833335 -49.9166665 -25.7500005 -25.5833335 875 0 2670 --49.9166665 -49.7499995 -25.7500005 -25.5833335 882 0 2670 --49.7500005 -49.5833335 -25.7500005 -25.5833335 907 0 2670 --49.5833335 -49.4166665 -25.7500005 -25.5833335 918 0 2670 --49.4166665 -49.2499995 -25.7500005 -25.5833335 903 0 2670 --49.2500005 -49.0833335 -25.7500005 -25.5833335 899 0 2670 --49.0833335 -48.9166665 -25.7500005 -25.5833335 915 0 2670 --48.9166665 -48.7499995 -25.7500005 -25.5833335 297 0 2670 --48.7500005 -48.5833335 -25.7500005 -25.5833335 396 0 2670 --48.5833335 -48.4166665 -25.7500005 -25.5833335 15 0 2670 --48.4166665 -48.2499995 -25.7500005 -25.5833335 0 -3 -1670 --48.2500005 -48.0833335 -25.7500005 -25.5833335 0 -19 -1670 --48.0833335 -47.9166665 -25.7500005 -25.5833335 0 -25 -1670 --47.9166665 -47.7499995 -25.7500005 -25.5833335 0 -33 -1670 --47.7500005 -47.5833335 -25.7500005 -25.5833335 0 -41 -1670 --47.5833335 -47.4166665 -25.7500005 -25.5833335 0 -48 -1670 --47.4166665 -47.2499995 -25.7500005 -25.5833335 0 -57 -1670 --47.2500005 -47.0833335 -25.7500005 -25.5833335 0 -64 -1670 --47.0833335 -46.9166665 -25.7500005 -25.5833335 0 -79 -1670 --46.9166665 -46.7499995 -25.7500005 -25.5833335 0 -95 -1670 --46.7500005 -46.5833335 -25.7500005 -25.5833335 0 -111 -1670 --46.5833335 -46.4166665 -25.7500005 -25.5833335 0 -126 -1670 --46.4166665 -46.2499995 -25.7500005 -25.5833335 0 -131 -1670 --46.2500005 -46.0833335 -25.7500005 -25.5833335 0 -156 -1670 --46.0833335 -45.9166665 -25.7500005 -25.5833335 0 -149 -1670 --45.9166665 -45.7499995 -25.7500005 -25.5833335 0 -166 -1670 --45.7500005 -45.5833335 -25.7500005 -25.5833335 0 -159 -1670 --45.5833335 -45.4166665 -25.7500005 -25.5833335 0 -141 -1670 --45.4166665 -45.2499995 -25.7500005 -25.5833335 0 -162 -1670 --45.2500005 -45.0833335 -25.7500005 -25.5833335 0 -393 -1670 --45.0833335 -44.9166665 -25.7500005 -25.5833335 0 -1226 -1670 --44.9166665 -44.7499995 -25.7500005 -25.5833335 0 -1652 -1670 --44.7500005 -44.5833335 -25.7500005 -25.5833335 0 -1944 -1670 --44.5833335 -44.4166665 -25.7500005 -25.5833335 0 -1980 -1670 --44.4166665 -44.2499995 -25.7500005 -25.5833335 0 -2038 -1670 --44.2500005 -44.0833335 -25.7500005 -25.5833335 0 -2049 -1670 --44.0833335 -43.9166665 -25.7500005 -25.5833335 0 -2112 -1670 --43.9166665 -43.7499995 -25.7500005 -25.5833335 0 -2135 -1670 --43.7500005 -43.5833335 -25.7500005 -25.5833335 0 -2119 -1670 --43.5833335 -43.4166665 -25.7500005 -25.5833335 0 -2120 -1670 --43.4166665 -43.2499995 -25.7500005 -25.5833335 0 -2126 -1670 --43.2500005 -43.0833335 -25.7500005 -25.5833335 0 -2157 -1670 --43.0833335 -42.9166665 -25.7500005 -25.5833335 0 -2162 -1670 --42.9166665 -42.7499995 -25.7500005 -25.5833335 0 -2159 -1670 --42.7500005 -42.5833335 -25.7500005 -25.5833335 0 -2231 -1670 --42.5833335 -42.4166665 -25.7500005 -25.5833335 0 -2249 -1670 --42.4166665 -42.2499995 -25.7500005 -25.5833335 0 -2344 -1670 --42.2500005 -42.0833335 -25.7500005 -25.5833335 0 -2330 -1670 --42.0833335 -41.9166665 -25.7500005 -25.5833335 0 -2527 -1670 --41.9166665 -41.7499995 -25.7500005 -25.5833335 0 -2495 -1670 --41.7500005 -41.5833335 -25.7500005 -25.5833335 0 -2485 -1670 --41.5833335 -41.4166665 -25.7500005 -25.5833335 0 -2585 -1670 --41.4166665 -41.2499995 -25.7500005 -25.5833335 0 -2557 -1670 --41.2500005 -41.0833335 -25.7500005 -25.5833335 0 -2598 -1670 --41.0833335 -40.9166665 -25.7500005 -25.5833335 0 -2927 -1670 --40.9166665 -40.7499995 -25.7500005 -25.5833335 0 -2888 -1670 --40.7500005 -40.5833335 -25.7500005 -25.5833335 0 -3002 -1670 --40.5833335 -40.4166665 -25.7500005 -25.5833335 0 -3099 -1670 --40.4166665 -40.2499995 -25.7500005 -25.5833335 0 -3126 -1670 --40.2500005 -40.0833335 -25.7500005 -25.5833335 0 -3087 -1670 --40.0833335 -39.9166665 -25.7500005 -25.5833335 0 -3293 -1670 --65.0833335 -64.9166665 -25.9166665 -25.7499995 825 0 2670 --64.9166665 -64.7499995 -25.9166665 -25.7499995 697 0 2670 --64.7500005 -64.5833335 -25.9166665 -25.7499995 579 0 2670 --64.5833335 -64.4166665 -25.9166665 -25.7499995 539 0 2670 --64.4166665 -64.2499995 -25.9166665 -25.7499995 455 0 2670 --64.2500005 -64.0833335 -25.9166665 -25.7499995 347 0 2670 --64.0833335 -63.9166665 -25.9166665 -25.7499995 298 0 2670 --63.9166665 -63.7499995 -25.9166665 -25.7499995 275 0 2670 --63.7500005 -63.5833335 -25.9166665 -25.7499995 267 0 2670 --63.5833335 -63.4166665 -25.9166665 -25.7499995 260 0 2670 --63.4166665 -63.2499995 -25.9166665 -25.7499995 252 0 2670 --63.2500005 -63.0833335 -25.9166665 -25.7499995 243 0 2670 --63.0833335 -62.9166665 -25.9166665 -25.7499995 235 0 2670 --62.9166665 -62.7499995 -25.9166665 -25.7499995 223 0 2670 --62.7500005 -62.5833335 -25.9166665 -25.7499995 215 0 2670 --62.5833335 -62.4166665 -25.9166665 -25.7499995 205 0 2670 --62.4166665 -62.2499995 -25.9166665 -25.7499995 195 0 2670 --62.2500005 -62.0833335 -25.9166665 -25.7499995 185 0 2670 --62.0833335 -61.9166665 -25.9166665 -25.7499995 176 0 2670 --61.9166665 -61.7499995 -25.9166665 -25.7499995 168 0 2670 --61.7500005 -61.5833335 -25.9166665 -25.7499995 160 0 2670 --61.5833335 -61.4166665 -25.9166665 -25.7499995 153 0 2670 --61.4166665 -61.2499995 -25.9166665 -25.7499995 145 0 2670 --61.2500005 -61.0833335 -25.9166665 -25.7499995 138 0 2670 --61.0833335 -60.9166665 -25.9166665 -25.7499995 130 0 2670 --60.9166665 -60.7499995 -25.9166665 -25.7499995 120 0 2670 --60.7500005 -60.5833335 -25.9166665 -25.7499995 117 0 2670 --60.5833335 -60.4166665 -25.9166665 -25.7499995 114 0 2670 --60.4166665 -60.2499995 -25.9166665 -25.7499995 107 0 2670 --60.2500005 -60.0833335 -25.9166665 -25.7499995 108 0 2670 --60.0833335 -59.9166665 -25.9166665 -25.7499995 106 0 2670 --59.9166665 -59.7499995 -25.9166665 -25.7499995 104 0 2670 --59.7500005 -59.5833335 -25.9166665 -25.7499995 98 0 2670 --59.5833335 -59.4166665 -25.9166665 -25.7499995 91 0 2670 --59.4166665 -59.2499995 -25.9166665 -25.7499995 89 0 2670 --59.2500005 -59.0833335 -25.9166665 -25.7499995 86 0 2670 --59.0833335 -58.9166665 -25.9166665 -25.7499995 80 0 2670 --58.9166665 -58.7499995 -25.9166665 -25.7499995 81 0 2670 --58.7500005 -58.5833335 -25.9166665 -25.7499995 75 0 2670 --58.5833335 -58.4166665 -25.9166665 -25.7499995 72 0 2670 --58.4166665 -58.2499995 -25.9166665 -25.7499995 70 0 2670 --58.2500005 -58.0833335 -25.9166665 -25.7499995 69 0 2670 --58.0833335 -57.9166665 -25.9166665 -25.7499995 65 0 2670 --57.9166665 -57.7499995 -25.9166665 -25.7499995 53 0 2670 --57.7500005 -57.5833335 -25.9166665 -25.7499995 64 0 2670 --57.5833335 -57.4166665 -25.9166665 -25.7499995 62 0 2670 --57.4166665 -57.2499995 -25.9166665 -25.7499995 82 0 2670 --57.2500005 -57.0833335 -25.9166665 -25.7499995 116 0 2670 --57.0833335 -56.9166665 -25.9166665 -25.7499995 122 0 2670 --56.9166665 -56.7499995 -25.9166665 -25.7499995 173 0 2670 --56.7500005 -56.5833335 -25.9166665 -25.7499995 120 0 2670 --56.5833335 -56.4166665 -25.9166665 -25.7499995 123 0 2670 --56.4166665 -56.2499995 -25.9166665 -25.7499995 164 0 2670 --56.2500005 -56.0833335 -25.9166665 -25.7499995 257 0 2670 --56.0833335 -55.9166665 -25.9166665 -25.7499995 243 0 2670 --55.9166665 -55.7499995 -25.9166665 -25.7499995 260 0 2670 --55.7500005 -55.5833335 -25.9166665 -25.7499995 263 0 2670 --55.5833335 -55.4166665 -25.9166665 -25.7499995 253 0 2670 --55.4166665 -55.2499995 -25.9166665 -25.7499995 300 0 2670 --55.2500005 -55.0833335 -25.9166665 -25.7499995 290 0 2670 --55.0833335 -54.9166665 -25.9166665 -25.7499995 290 0 2670 --54.9166665 -54.7499995 -25.9166665 -25.7499995 263 0 2670 --54.7500005 -54.5833335 -25.9166665 -25.7499995 241 0 2670 --54.5833335 -54.4166665 -25.9166665 -25.7499995 222 0 2670 --54.4166665 -54.2499995 -25.9166665 -25.7499995 293 0 2670 --54.2500005 -54.0833335 -25.9166665 -25.7499995 305 0 2670 --54.0833335 -53.9166665 -25.9166665 -25.7499995 382 0 2670 --53.9166665 -53.7499995 -25.9166665 -25.7499995 337 0 2670 --53.7500005 -53.5833335 -25.9166665 -25.7499995 426 0 2670 --53.5833335 -53.4166665 -25.9166665 -25.7499995 485 0 2670 --53.4166665 -53.2499995 -25.9166665 -25.7499995 564 0 2670 --53.2500005 -53.0833335 -25.9166665 -25.7499995 527 0 2670 --53.0833335 -52.9166665 -25.9166665 -25.7499995 473 0 2670 --52.9166665 -52.7499995 -25.9166665 -25.7499995 532 0 2670 --52.7500005 -52.5833335 -25.9166665 -25.7499995 686 0 2670 --52.5833335 -52.4166665 -25.9166665 -25.7499995 677 0 2670 --52.4166665 -52.2499995 -25.9166665 -25.7499995 738 0 2670 --52.2500005 -52.0833335 -25.9166665 -25.7499995 618 0 2670 --52.0833335 -51.9166665 -25.9166665 -25.7499995 947 0 2670 --51.9166665 -51.7499995 -25.9166665 -25.7499995 1086 0 2670 --51.7500005 -51.5833335 -25.9166665 -25.7499995 1026 0 2670 --51.5833335 -51.4166665 -25.9166665 -25.7499995 1130 0 2670 --51.4166665 -51.2499995 -25.9166665 -25.7499995 895 0 2670 --51.2500005 -51.0833335 -25.9166665 -25.7499995 1082 0 2670 --51.0833335 -50.9166665 -25.9166665 -25.7499995 1164 0 2670 --50.9166665 -50.7499995 -25.9166665 -25.7499995 877 0 2670 --50.7500005 -50.5833335 -25.9166665 -25.7499995 848 0 2670 --50.5833335 -50.4166665 -25.9166665 -25.7499995 789 0 2670 --50.4166665 -50.2499995 -25.9166665 -25.7499995 783 0 2670 --50.2500005 -50.0833335 -25.9166665 -25.7499995 850 0 2670 --50.0833335 -49.9166665 -25.9166665 -25.7499995 844 0 2670 --49.9166665 -49.7499995 -25.9166665 -25.7499995 920 0 2670 --49.7500005 -49.5833335 -25.9166665 -25.7499995 827 0 2670 --49.5833335 -49.4166665 -25.9166665 -25.7499995 885 0 2670 --49.4166665 -49.2499995 -25.9166665 -25.7499995 921 0 2670 --49.2500005 -49.0833335 -25.9166665 -25.7499995 901 0 2670 --49.0833335 -48.9166665 -25.9166665 -25.7499995 782 0 2670 --48.9166665 -48.7499995 -25.9166665 -25.7499995 719 0 2670 --48.7500005 -48.5833335 -25.9166665 -25.7499995 4 0 2670 --48.5833335 -48.4166665 -25.9166665 -25.7499995 0 -1 -1670 --48.4166665 -48.2499995 -25.9166665 -25.7499995 0 -12 -1670 --48.2500005 -48.0833335 -25.9166665 -25.7499995 0 -22 -1670 --48.0833335 -47.9166665 -25.9166665 -25.7499995 0 -31 -1670 --47.9166665 -47.7499995 -25.9166665 -25.7499995 0 -40 -1670 --47.7500005 -47.5833335 -25.9166665 -25.7499995 0 -52 -1670 --47.5833335 -47.4166665 -25.9166665 -25.7499995 0 -60 -1670 --47.4166665 -47.2499995 -25.9166665 -25.7499995 0 -71 -1670 --47.2500005 -47.0833335 -25.9166665 -25.7499995 0 -77 -1670 --47.0833335 -46.9166665 -25.9166665 -25.7499995 0 -91 -1670 --46.9166665 -46.7499995 -25.9166665 -25.7499995 0 -111 -1670 --46.7500005 -46.5833335 -25.9166665 -25.7499995 0 -124 -1670 --46.5833335 -46.4166665 -25.9166665 -25.7499995 0 -143 -1670 --46.4166665 -46.2499995 -25.9166665 -25.7499995 0 -150 -1670 --46.2500005 -46.0833335 -25.9166665 -25.7499995 0 -153 -1670 --46.0833335 -45.9166665 -25.9166665 -25.7499995 0 -178 -1670 --45.9166665 -45.7499995 -25.9166665 -25.7499995 0 -275 -1670 --45.7500005 -45.5833335 -25.9166665 -25.7499995 0 -222 -1670 --45.5833335 -45.4166665 -25.9166665 -25.7499995 0 -585 -1670 --45.4166665 -45.2499995 -25.9166665 -25.7499995 0 -552 -1670 --45.2500005 -45.0833335 -25.9166665 -25.7499995 0 -979 -1670 --45.0833335 -44.9166665 -25.9166665 -25.7499995 0 -1504 -1670 --44.9166665 -44.7499995 -25.9166665 -25.7499995 0 -1784 -1670 --44.7500005 -44.5833335 -25.9166665 -25.7499995 0 -2023 -1670 --44.5833335 -44.4166665 -25.9166665 -25.7499995 0 -2117 -1670 --44.4166665 -44.2499995 -25.9166665 -25.7499995 0 -2088 -1670 --44.2500005 -44.0833335 -25.9166665 -25.7499995 0 -2106 -1670 --44.0833335 -43.9166665 -25.9166665 -25.7499995 0 -2133 -1670 --43.9166665 -43.7499995 -25.9166665 -25.7499995 0 -2186 -1670 --43.7500005 -43.5833335 -25.9166665 -25.7499995 0 -2154 -1670 --43.5833335 -43.4166665 -25.9166665 -25.7499995 0 -2167 -1670 --43.4166665 -43.2499995 -25.9166665 -25.7499995 0 -2167 -1670 --43.2500005 -43.0833335 -25.9166665 -25.7499995 0 -2193 -1670 --43.0833335 -42.9166665 -25.9166665 -25.7499995 0 -2206 -1670 --42.9166665 -42.7499995 -25.9166665 -25.7499995 0 -2234 -1670 --42.7500005 -42.5833335 -25.9166665 -25.7499995 0 -2338 -1670 --42.5833335 -42.4166665 -25.9166665 -25.7499995 0 -2313 -1670 --42.4166665 -42.2499995 -25.9166665 -25.7499995 0 -2336 -1670 --42.2500005 -42.0833335 -25.9166665 -25.7499995 0 -2392 -1670 --42.0833335 -41.9166665 -25.9166665 -25.7499995 0 -2467 -1670 --41.9166665 -41.7499995 -25.9166665 -25.7499995 0 -2509 -1670 --41.7500005 -41.5833335 -25.9166665 -25.7499995 0 -2520 -1670 --41.5833335 -41.4166665 -25.9166665 -25.7499995 0 -2777 -1670 --41.4166665 -41.2499995 -25.9166665 -25.7499995 0 -2892 -1670 --41.2500005 -41.0833335 -25.9166665 -25.7499995 0 -2816 -1670 --41.0833335 -40.9166665 -25.9166665 -25.7499995 0 -2864 -1670 --40.9166665 -40.7499995 -25.9166665 -25.7499995 0 -2983 -1670 --40.7500005 -40.5833335 -25.9166665 -25.7499995 0 -2970 -1670 --40.5833335 -40.4166665 -25.9166665 -25.7499995 0 -2963 -1670 --40.4166665 -40.2499995 -25.9166665 -25.7499995 0 -3257 -1670 --40.2500005 -40.0833335 -25.9166665 -25.7499995 0 -3314 -1670 --40.0833335 -39.9166665 -25.9166665 -25.7499995 0 -3600 -1670 --65.0833335 -64.9166665 -26.0833335 -25.9166665 1139 0 2670 --64.9166665 -64.7499995 -26.0833335 -25.9166665 1376 0 2670 --64.7500005 -64.5833335 -26.0833335 -25.9166665 629 0 2670 --64.5833335 -64.4166665 -26.0833335 -25.9166665 482 0 2670 --64.4166665 -64.2499995 -26.0833335 -25.9166665 415 0 2670 --64.2500005 -64.0833335 -26.0833335 -25.9166665 343 0 2670 --64.0833335 -63.9166665 -26.0833335 -25.9166665 301 0 2670 --63.9166665 -63.7499995 -26.0833335 -25.9166665 264 0 2670 --63.7500005 -63.5833335 -26.0833335 -25.9166665 254 0 2670 --63.5833335 -63.4166665 -26.0833335 -25.9166665 248 0 2670 --63.4166665 -63.2499995 -26.0833335 -25.9166665 243 0 2670 --63.2500005 -63.0833335 -26.0833335 -25.9166665 236 0 2670 --63.0833335 -62.9166665 -26.0833335 -25.9166665 227 0 2670 --62.9166665 -62.7499995 -26.0833335 -25.9166665 218 0 2670 --62.7500005 -62.5833335 -26.0833335 -25.9166665 207 0 2670 --62.5833335 -62.4166665 -26.0833335 -25.9166665 198 0 2670 --62.4166665 -62.2499995 -26.0833335 -25.9166665 190 0 2670 --62.2500005 -62.0833335 -26.0833335 -25.9166665 180 0 2670 --62.0833335 -61.9166665 -26.0833335 -25.9166665 174 0 2670 --61.9166665 -61.7499995 -26.0833335 -25.9166665 164 0 2670 --61.7500005 -61.5833335 -26.0833335 -25.9166665 158 0 2670 --61.5833335 -61.4166665 -26.0833335 -25.9166665 150 0 2670 --61.4166665 -61.2499995 -26.0833335 -25.9166665 143 0 2670 --61.2500005 -61.0833335 -26.0833335 -25.9166665 134 0 2670 --61.0833335 -60.9166665 -26.0833335 -25.9166665 128 0 2670 --60.9166665 -60.7499995 -26.0833335 -25.9166665 122 0 2670 --60.7500005 -60.5833335 -26.0833335 -25.9166665 115 0 2670 --60.5833335 -60.4166665 -26.0833335 -25.9166665 109 0 2670 --60.4166665 -60.2499995 -26.0833335 -25.9166665 107 0 2670 --60.2500005 -60.0833335 -26.0833335 -25.9166665 100 0 2670 --60.0833335 -59.9166665 -26.0833335 -25.9166665 97 0 2670 --59.9166665 -59.7499995 -26.0833335 -25.9166665 93 0 2670 --59.7500005 -59.5833335 -26.0833335 -25.9166665 93 0 2670 --59.5833335 -59.4166665 -26.0833335 -25.9166665 89 0 2670 --59.4166665 -59.2499995 -26.0833335 -25.9166665 89 0 2670 --59.2500005 -59.0833335 -26.0833335 -25.9166665 82 0 2670 --59.0833335 -58.9166665 -26.0833335 -25.9166665 79 0 2670 --58.9166665 -58.7499995 -26.0833335 -25.9166665 74 0 2670 --58.7500005 -58.5833335 -26.0833335 -25.9166665 75 0 2670 --58.5833335 -58.4166665 -26.0833335 -25.9166665 73 0 2670 --58.4166665 -58.2499995 -26.0833335 -25.9166665 68 0 2670 --58.2500005 -58.0833335 -26.0833335 -25.9166665 65 0 2670 --58.0833335 -57.9166665 -26.0833335 -25.9166665 60 0 2670 --57.9166665 -57.7499995 -26.0833335 -25.9166665 57 0 2670 --57.7500005 -57.5833335 -26.0833335 -25.9166665 60 0 2670 --57.5833335 -57.4166665 -26.0833335 -25.9166665 62 0 2670 --57.4166665 -57.2499995 -26.0833335 -25.9166665 89 0 2670 --57.2500005 -57.0833335 -26.0833335 -25.9166665 139 0 2670 --57.0833335 -56.9166665 -26.0833335 -25.9166665 120 0 2670 --56.9166665 -56.7499995 -26.0833335 -25.9166665 362 0 2670 --56.7500005 -56.5833335 -26.0833335 -25.9166665 248 0 2670 --56.5833335 -56.4166665 -26.0833335 -25.9166665 115 0 2670 --56.4166665 -56.2499995 -26.0833335 -25.9166665 127 0 2670 --56.2500005 -56.0833335 -26.0833335 -25.9166665 179 0 2670 --56.0833335 -55.9166665 -26.0833335 -25.9166665 208 0 2670 --55.9166665 -55.7499995 -26.0833335 -25.9166665 241 0 2670 --55.7500005 -55.5833335 -26.0833335 -25.9166665 356 0 2670 --55.5833335 -55.4166665 -26.0833335 -25.9166665 347 0 2670 --55.4166665 -55.2499995 -26.0833335 -25.9166665 266 0 2670 --55.2500005 -55.0833335 -26.0833335 -25.9166665 229 0 2670 --55.0833335 -54.9166665 -26.0833335 -25.9166665 190 0 2670 --54.9166665 -54.7499995 -26.0833335 -25.9166665 184 0 2670 --54.7500005 -54.5833335 -26.0833335 -25.9166665 183 0 2670 --54.5833335 -54.4166665 -26.0833335 -25.9166665 230 0 2670 --54.4166665 -54.2499995 -26.0833335 -25.9166665 291 0 2670 --54.2500005 -54.0833335 -26.0833335 -25.9166665 322 0 2670 --54.0833335 -53.9166665 -26.0833335 -25.9166665 339 0 2670 --53.9166665 -53.7499995 -26.0833335 -25.9166665 478 0 2670 --53.7500005 -53.5833335 -26.0833335 -25.9166665 536 0 2670 --53.5833335 -53.4166665 -26.0833335 -25.9166665 506 0 2670 --53.4166665 -53.2499995 -26.0833335 -25.9166665 680 0 2670 --53.2500005 -53.0833335 -26.0833335 -25.9166665 687 0 2670 --53.0833335 -52.9166665 -26.0833335 -25.9166665 525 0 2670 --52.9166665 -52.7499995 -26.0833335 -25.9166665 606 0 2670 --52.7500005 -52.5833335 -26.0833335 -25.9166665 554 0 2670 --52.5833335 -52.4166665 -26.0833335 -25.9166665 705 0 2670 --52.4166665 -52.2499995 -26.0833335 -25.9166665 977 0 2670 --52.2500005 -52.0833335 -26.0833335 -25.9166665 777 0 2670 --52.0833335 -51.9166665 -26.0833335 -25.9166665 794 0 2670 --51.9166665 -51.7499995 -26.0833335 -25.9166665 775 0 2670 --51.7500005 -51.5833335 -26.0833335 -25.9166665 761 0 2670 --51.5833335 -51.4166665 -26.0833335 -25.9166665 908 0 2670 --51.4166665 -51.2499995 -26.0833335 -25.9166665 887 0 2670 --51.2500005 -51.0833335 -26.0833335 -25.9166665 975 0 2670 --51.0833335 -50.9166665 -26.0833335 -25.9166665 1025 0 2670 --50.9166665 -50.7499995 -26.0833335 -25.9166665 811 0 2670 --50.7500005 -50.5833335 -26.0833335 -25.9166665 785 0 2670 --50.5833335 -50.4166665 -26.0833335 -25.9166665 776 0 2670 --50.4166665 -50.2499995 -26.0833335 -25.9166665 812 0 2670 --50.2500005 -50.0833335 -26.0833335 -25.9166665 808 0 2670 --50.0833335 -49.9166665 -26.0833335 -25.9166665 789 0 2670 --49.9166665 -49.7499995 -26.0833335 -25.9166665 867 0 2670 --49.7500005 -49.5833335 -26.0833335 -25.9166665 814 0 2670 --49.5833335 -49.4166665 -26.0833335 -25.9166665 910 0 2670 --49.4166665 -49.2499995 -26.0833335 -25.9166665 895 0 2670 --49.2500005 -49.0833335 -26.0833335 -25.9166665 831 0 2670 --49.0833335 -48.9166665 -26.0833335 -25.9166665 1147 0 2670 --48.9166665 -48.7499995 -26.0833335 -25.9166665 20 0 2670 --48.7500005 -48.5833335 -26.0833335 -25.9166665 19 0 2670 --48.5833335 -48.4166665 -26.0833335 -25.9166665 0 -8 -1670 --48.4166665 -48.2499995 -26.0833335 -25.9166665 0 -23 -1670 --48.2500005 -48.0833335 -26.0833335 -25.9166665 0 -29 -1670 --48.0833335 -47.9166665 -26.0833335 -25.9166665 0 -39 -1670 --47.9166665 -47.7499995 -26.0833335 -25.9166665 0 -46 -1670 --47.7500005 -47.5833335 -26.0833335 -25.9166665 0 -57 -1670 --47.5833335 -47.4166665 -26.0833335 -25.9166665 0 -69 -1670 --47.4166665 -47.2499995 -26.0833335 -25.9166665 0 -80 -1670 --47.2500005 -47.0833335 -26.0833335 -25.9166665 0 -99 -1670 --47.0833335 -46.9166665 -26.0833335 -25.9166665 0 -110 -1670 --46.9166665 -46.7499995 -26.0833335 -25.9166665 0 -123 -1670 --46.7500005 -46.5833335 -26.0833335 -25.9166665 0 -140 -1670 --46.5833335 -46.4166665 -26.0833335 -25.9166665 0 -224 -1670 --46.4166665 -46.2499995 -26.0833335 -25.9166665 0 -168 -1670 --46.2500005 -46.0833335 -26.0833335 -25.9166665 0 -243 -1670 --46.0833335 -45.9166665 -26.0833335 -25.9166665 0 -301 -1670 --45.9166665 -45.7499995 -26.0833335 -25.9166665 0 -419 -1670 --45.7500005 -45.5833335 -26.0833335 -25.9166665 0 -454 -1670 --45.5833335 -45.4166665 -26.0833335 -25.9166665 0 -813 -1670 --45.4166665 -45.2499995 -26.0833335 -25.9166665 0 -1368 -1670 --45.2500005 -45.0833335 -26.0833335 -25.9166665 0 -1527 -1670 --45.0833335 -44.9166665 -26.0833335 -25.9166665 0 -1805 -1670 --44.9166665 -44.7499995 -26.0833335 -25.9166665 0 -2034 -1670 --44.7500005 -44.5833335 -26.0833335 -25.9166665 0 -2124 -1670 --44.5833335 -44.4166665 -26.0833335 -25.9166665 0 -2147 -1670 --44.4166665 -44.2499995 -26.0833335 -25.9166665 0 -2112 -1670 --44.2500005 -44.0833335 -26.0833335 -25.9166665 0 -2172 -1670 --44.0833335 -43.9166665 -26.0833335 -25.9166665 0 -2219 -1670 --43.9166665 -43.7499995 -26.0833335 -25.9166665 0 -2222 -1670 --43.7500005 -43.5833335 -26.0833335 -25.9166665 0 -2206 -1670 --43.5833335 -43.4166665 -26.0833335 -25.9166665 0 -2180 -1670 --43.4166665 -43.2499995 -26.0833335 -25.9166665 0 -2184 -1670 --43.2500005 -43.0833335 -26.0833335 -25.9166665 0 -2234 -1670 --43.0833335 -42.9166665 -26.0833335 -25.9166665 0 -2291 -1670 --42.9166665 -42.7499995 -26.0833335 -25.9166665 0 -2274 -1670 --42.7500005 -42.5833335 -26.0833335 -25.9166665 0 -2313 -1670 --42.5833335 -42.4166665 -26.0833335 -25.9166665 0 -2445 -1670 --42.4166665 -42.2499995 -26.0833335 -25.9166665 0 -2350 -1670 --42.2500005 -42.0833335 -26.0833335 -25.9166665 0 -2518 -1670 --42.0833335 -41.9166665 -26.0833335 -25.9166665 0 -2492 -1670 --41.9166665 -41.7499995 -26.0833335 -25.9166665 0 -2602 -1670 --41.7500005 -41.5833335 -26.0833335 -25.9166665 0 -2600 -1670 --41.5833335 -41.4166665 -26.0833335 -25.9166665 0 -2602 -1670 --41.4166665 -41.2499995 -26.0833335 -25.9166665 0 -2874 -1670 --41.2500005 -41.0833335 -26.0833335 -25.9166665 0 -2723 -1670 --41.0833335 -40.9166665 -26.0833335 -25.9166665 0 -2913 -1670 --40.9166665 -40.7499995 -26.0833335 -25.9166665 0 -2986 -1670 --40.7500005 -40.5833335 -26.0833335 -25.9166665 0 -3083 -1670 --40.5833335 -40.4166665 -26.0833335 -25.9166665 0 -3073 -1670 --40.4166665 -40.2499995 -26.0833335 -25.9166665 0 -3425 -1670 --40.2500005 -40.0833335 -26.0833335 -25.9166665 0 -3819 -1670 --40.0833335 -39.9166665 -26.0833335 -25.9166665 0 -4129 -1670 --65.0833335 -64.9166665 -26.2500005 -26.0833335 1144 0 2670 --64.9166665 -64.7499995 -26.2500005 -26.0833335 1099 0 2670 --64.7500005 -64.5833335 -26.2500005 -26.0833335 564 0 2670 --64.5833335 -64.4166665 -26.2500005 -26.0833335 438 0 2670 --64.4166665 -64.2499995 -26.2500005 -26.0833335 344 0 2670 --64.2500005 -64.0833335 -26.2500005 -26.0833335 309 0 2670 --64.0833335 -63.9166665 -26.2500005 -26.0833335 278 0 2670 --63.9166665 -63.7499995 -26.2500005 -26.0833335 249 0 2670 --63.7500005 -63.5833335 -26.2500005 -26.0833335 242 0 2670 --63.5833335 -63.4166665 -26.2500005 -26.0833335 235 0 2670 --63.4166665 -63.2499995 -26.2500005 -26.0833335 231 0 2670 --63.2500005 -63.0833335 -26.2500005 -26.0833335 225 0 2670 --63.0833335 -62.9166665 -26.2500005 -26.0833335 218 0 2670 --62.9166665 -62.7499995 -26.2500005 -26.0833335 210 0 2670 --62.7500005 -62.5833335 -26.2500005 -26.0833335 205 0 2670 --62.5833335 -62.4166665 -26.2500005 -26.0833335 192 0 2670 --62.4166665 -62.2499995 -26.2500005 -26.0833335 185 0 2670 --62.2500005 -62.0833335 -26.2500005 -26.0833335 177 0 2670 --62.0833335 -61.9166665 -26.2500005 -26.0833335 169 0 2670 --61.9166665 -61.7499995 -26.2500005 -26.0833335 162 0 2670 --61.7500005 -61.5833335 -26.2500005 -26.0833335 154 0 2670 --61.5833335 -61.4166665 -26.2500005 -26.0833335 147 0 2670 --61.4166665 -61.2499995 -26.2500005 -26.0833335 137 0 2670 --61.2500005 -61.0833335 -26.2500005 -26.0833335 133 0 2670 --61.0833335 -60.9166665 -26.2500005 -26.0833335 126 0 2670 --60.9166665 -60.7499995 -26.2500005 -26.0833335 119 0 2670 --60.7500005 -60.5833335 -26.2500005 -26.0833335 111 0 2670 --60.5833335 -60.4166665 -26.2500005 -26.0833335 104 0 2670 --60.4166665 -60.2499995 -26.2500005 -26.0833335 100 0 2670 --60.2500005 -60.0833335 -26.2500005 -26.0833335 99 0 2670 --60.0833335 -59.9166665 -26.2500005 -26.0833335 96 0 2670 --59.9166665 -59.7499995 -26.2500005 -26.0833335 90 0 2670 --59.7500005 -59.5833335 -26.2500005 -26.0833335 90 0 2670 --59.5833335 -59.4166665 -26.2500005 -26.0833335 87 0 2670 --59.4166665 -59.2499995 -26.2500005 -26.0833335 84 0 2670 --59.2500005 -59.0833335 -26.2500005 -26.0833335 85 0 2670 --59.0833335 -58.9166665 -26.2500005 -26.0833335 78 0 2670 --58.9166665 -58.7499995 -26.2500005 -26.0833335 76 0 2670 --58.7500005 -58.5833335 -26.2500005 -26.0833335 72 0 2670 --58.5833335 -58.4166665 -26.2500005 -26.0833335 69 0 2670 --58.4166665 -58.2499995 -26.2500005 -26.0833335 65 0 2670 --58.2500005 -58.0833335 -26.2500005 -26.0833335 60 0 2670 --58.0833335 -57.9166665 -26.2500005 -26.0833335 59 0 2670 --57.9166665 -57.7499995 -26.2500005 -26.0833335 61 0 2670 --57.7500005 -57.5833335 -26.2500005 -26.0833335 61 0 2670 --57.5833335 -57.4166665 -26.2500005 -26.0833335 59 0 2670 --57.4166665 -57.2499995 -26.2500005 -26.0833335 71 0 2670 --57.2500005 -57.0833335 -26.2500005 -26.0833335 144 0 2670 --57.0833335 -56.9166665 -26.2500005 -26.0833335 103 0 2670 --56.9166665 -56.7499995 -26.2500005 -26.0833335 103 0 2670 --56.7500005 -56.5833335 -26.2500005 -26.0833335 94 0 2670 --56.5833335 -56.4166665 -26.2500005 -26.0833335 105 0 2670 --56.4166665 -56.2499995 -26.2500005 -26.0833335 127 0 2670 --56.2500005 -56.0833335 -26.2500005 -26.0833335 136 0 2670 --56.0833335 -55.9166665 -26.2500005 -26.0833335 142 0 2670 --55.9166665 -55.7499995 -26.2500005 -26.0833335 166 0 2670 --55.7500005 -55.5833335 -26.2500005 -26.0833335 184 0 2670 --55.5833335 -55.4166665 -26.2500005 -26.0833335 186 0 2670 --55.4166665 -55.2499995 -26.2500005 -26.0833335 318 0 2670 --55.2500005 -55.0833335 -26.2500005 -26.0833335 319 0 2670 --55.0833335 -54.9166665 -26.2500005 -26.0833335 315 0 2670 --54.9166665 -54.7499995 -26.2500005 -26.0833335 268 0 2670 --54.7500005 -54.5833335 -26.2500005 -26.0833335 134 0 2670 --54.5833335 -54.4166665 -26.2500005 -26.0833335 203 0 2670 --54.4166665 -54.2499995 -26.2500005 -26.0833335 265 0 2670 --54.2500005 -54.0833335 -26.2500005 -26.0833335 403 0 2670 --54.0833335 -53.9166665 -26.2500005 -26.0833335 517 0 2670 --53.9166665 -53.7499995 -26.2500005 -26.0833335 509 0 2670 --53.7500005 -53.5833335 -26.2500005 -26.0833335 702 0 2670 --53.5833335 -53.4166665 -26.2500005 -26.0833335 596 0 2670 --53.4166665 -53.2499995 -26.2500005 -26.0833335 717 0 2670 --53.2500005 -53.0833335 -26.2500005 -26.0833335 688 0 2670 --53.0833335 -52.9166665 -26.2500005 -26.0833335 649 0 2670 --52.9166665 -52.7499995 -26.2500005 -26.0833335 649 0 2670 --52.7500005 -52.5833335 -26.2500005 -26.0833335 789 0 2670 --52.5833335 -52.4166665 -26.2500005 -26.0833335 624 0 2670 --52.4166665 -52.2499995 -26.2500005 -26.0833335 932 0 2670 --52.2500005 -52.0833335 -26.2500005 -26.0833335 1006 0 2670 --52.0833335 -51.9166665 -26.2500005 -26.0833335 1093 0 2670 --51.9166665 -51.7499995 -26.2500005 -26.0833335 850 0 2670 --51.7500005 -51.5833335 -26.2500005 -26.0833335 1110 0 2670 --51.5833335 -51.4166665 -26.2500005 -26.0833335 923 0 2670 --51.4166665 -51.2499995 -26.2500005 -26.0833335 881 0 2670 --51.2500005 -51.0833335 -26.2500005 -26.0833335 811 0 2670 --51.0833335 -50.9166665 -26.2500005 -26.0833335 839 0 2670 --50.9166665 -50.7499995 -26.2500005 -26.0833335 790 0 2670 --50.7500005 -50.5833335 -26.2500005 -26.0833335 768 0 2670 --50.5833335 -50.4166665 -26.2500005 -26.0833335 802 0 2670 --50.4166665 -50.2499995 -26.2500005 -26.0833335 773 0 2670 --50.2500005 -50.0833335 -26.2500005 -26.0833335 793 0 2670 --50.0833335 -49.9166665 -26.2500005 -26.0833335 862 0 2670 --49.9166665 -49.7499995 -26.2500005 -26.0833335 825 0 2670 --49.7500005 -49.5833335 -26.2500005 -26.0833335 825 0 2670 --49.5833335 -49.4166665 -26.2500005 -26.0833335 842 0 2670 --49.4166665 -49.2499995 -26.2500005 -26.0833335 846 0 2670 --49.2500005 -49.0833335 -26.2500005 -26.0833335 895 0 2670 --49.0833335 -48.9166665 -26.2500005 -26.0833335 280 0 2670 --48.9166665 -48.7499995 -26.2500005 -26.0833335 6 0 2670 --48.7500005 -48.5833335 -26.2500005 -26.0833335 92 0 2670 --48.5833335 -48.4166665 -26.2500005 -26.0833335 0 -1 -1670 --48.4166665 -48.2499995 -26.2500005 -26.0833335 0 -22 -1670 --48.2500005 -48.0833335 -26.2500005 -26.0833335 0 -35 -1670 --48.0833335 -47.9166665 -26.2500005 -26.0833335 0 -48 -1670 --47.9166665 -47.7499995 -26.2500005 -26.0833335 0 -57 -1670 --47.7500005 -47.5833335 -26.2500005 -26.0833335 0 -74 -1670 --47.5833335 -47.4166665 -26.2500005 -26.0833335 0 -71 -1670 --47.4166665 -47.2499995 -26.2500005 -26.0833335 0 -92 -1670 --47.2500005 -47.0833335 -26.2500005 -26.0833335 0 -109 -1670 --47.0833335 -46.9166665 -26.2500005 -26.0833335 0 -121 -1670 --46.9166665 -46.7499995 -26.2500005 -26.0833335 0 -146 -1670 --46.7500005 -46.5833335 -26.2500005 -26.0833335 0 -126 -1670 --46.5833335 -46.4166665 -26.2500005 -26.0833335 0 -172 -1670 --46.4166665 -46.2499995 -26.2500005 -26.0833335 0 -246 -1670 --46.2500005 -46.0833335 -26.2500005 -26.0833335 0 -388 -1670 --46.0833335 -45.9166665 -26.2500005 -26.0833335 0 -455 -1670 --45.9166665 -45.7499995 -26.2500005 -26.0833335 0 -506 -1670 --45.7500005 -45.5833335 -26.2500005 -26.0833335 0 -659 -1670 --45.5833335 -45.4166665 -26.2500005 -26.0833335 0 -1022 -1670 --45.4166665 -45.2499995 -26.2500005 -26.0833335 0 -1712 -1670 --45.2500005 -45.0833335 -26.2500005 -26.0833335 0 -1941 -1670 --45.0833335 -44.9166665 -26.2500005 -26.0833335 0 -2031 -1670 --44.9166665 -44.7499995 -26.2500005 -26.0833335 0 -2158 -1670 --44.7500005 -44.5833335 -26.2500005 -26.0833335 0 -2220 -1670 --44.5833335 -44.4166665 -26.2500005 -26.0833335 0 -2254 -1670 --44.4166665 -44.2499995 -26.2500005 -26.0833335 0 -2302 -1670 --44.2500005 -44.0833335 -26.2500005 -26.0833335 0 -2336 -1670 --44.0833335 -43.9166665 -26.2500005 -26.0833335 0 -2300 -1670 --43.9166665 -43.7499995 -26.2500005 -26.0833335 0 -2269 -1670 --43.7500005 -43.5833335 -26.2500005 -26.0833335 0 -2247 -1670 --43.5833335 -43.4166665 -26.2500005 -26.0833335 0 -2243 -1670 --43.4166665 -43.2499995 -26.2500005 -26.0833335 0 -2254 -1670 --43.2500005 -43.0833335 -26.2500005 -26.0833335 0 -2281 -1670 --43.0833335 -42.9166665 -26.2500005 -26.0833335 0 -2339 -1670 --42.9166665 -42.7499995 -26.2500005 -26.0833335 0 -2394 -1670 --42.7500005 -42.5833335 -26.2500005 -26.0833335 0 -2471 -1670 --42.5833335 -42.4166665 -26.2500005 -26.0833335 0 -2536 -1670 --42.4166665 -42.2499995 -26.2500005 -26.0833335 0 -2487 -1670 --42.2500005 -42.0833335 -26.2500005 -26.0833335 0 -2596 -1670 --42.0833335 -41.9166665 -26.2500005 -26.0833335 0 -2599 -1670 --41.9166665 -41.7499995 -26.2500005 -26.0833335 0 -2522 -1670 --41.7500005 -41.5833335 -26.2500005 -26.0833335 0 -2519 -1670 --41.5833335 -41.4166665 -26.2500005 -26.0833335 0 -2648 -1670 --41.4166665 -41.2499995 -26.2500005 -26.0833335 0 -2649 -1670 --41.2500005 -41.0833335 -26.2500005 -26.0833335 0 -2657 -1670 --41.0833335 -40.9166665 -26.2500005 -26.0833335 0 -2757 -1670 --40.9166665 -40.7499995 -26.2500005 -26.0833335 0 -2957 -1670 --40.7500005 -40.5833335 -26.2500005 -26.0833335 0 -2942 -1670 --40.5833335 -40.4166665 -26.2500005 -26.0833335 0 -3189 -1670 --40.4166665 -40.2499995 -26.2500005 -26.0833335 0 -3450 -1670 --40.2500005 -40.0833335 -26.2500005 -26.0833335 0 -3290 -1670 --40.0833335 -39.9166665 -26.2500005 -26.0833335 0 -1716 -1670 --65.0833335 -64.9166665 -26.4166665 -26.2499995 1494 0 2670 --64.9166665 -64.7499995 -26.4166665 -26.2499995 1113 0 2670 --64.7500005 -64.5833335 -26.4166665 -26.2499995 533 0 2670 --64.5833335 -64.4166665 -26.4166665 -26.2499995 410 0 2670 --64.4166665 -64.2499995 -26.4166665 -26.2499995 326 0 2670 --64.2500005 -64.0833335 -26.4166665 -26.2499995 282 0 2670 --64.0833335 -63.9166665 -26.4166665 -26.2499995 261 0 2670 --63.9166665 -63.7499995 -26.4166665 -26.2499995 236 0 2670 --63.7500005 -63.5833335 -26.4166665 -26.2499995 225 0 2670 --63.5833335 -63.4166665 -26.4166665 -26.2499995 222 0 2670 --63.4166665 -63.2499995 -26.4166665 -26.2499995 219 0 2670 --63.2500005 -63.0833335 -26.4166665 -26.2499995 215 0 2670 --63.0833335 -62.9166665 -26.4166665 -26.2499995 209 0 2670 --62.9166665 -62.7499995 -26.4166665 -26.2499995 203 0 2670 --62.7500005 -62.5833335 -26.4166665 -26.2499995 196 0 2670 --62.5833335 -62.4166665 -26.4166665 -26.2499995 190 0 2670 --62.4166665 -62.2499995 -26.4166665 -26.2499995 178 0 2670 --62.2500005 -62.0833335 -26.4166665 -26.2499995 172 0 2670 --62.0833335 -61.9166665 -26.4166665 -26.2499995 164 0 2670 --61.9166665 -61.7499995 -26.4166665 -26.2499995 156 0 2670 --61.7500005 -61.5833335 -26.4166665 -26.2499995 148 0 2670 --61.5833335 -61.4166665 -26.4166665 -26.2499995 142 0 2670 --61.4166665 -61.2499995 -26.4166665 -26.2499995 136 0 2670 --61.2500005 -61.0833335 -26.4166665 -26.2499995 129 0 2670 --61.0833335 -60.9166665 -26.4166665 -26.2499995 122 0 2670 --60.9166665 -60.7499995 -26.4166665 -26.2499995 116 0 2670 --60.7500005 -60.5833335 -26.4166665 -26.2499995 109 0 2670 --60.5833335 -60.4166665 -26.4166665 -26.2499995 104 0 2670 --60.4166665 -60.2499995 -26.4166665 -26.2499995 97 0 2670 --60.2500005 -60.0833335 -26.4166665 -26.2499995 93 0 2670 --60.0833335 -59.9166665 -26.4166665 -26.2499995 94 0 2670 --59.9166665 -59.7499995 -26.4166665 -26.2499995 95 0 2670 --59.7500005 -59.5833335 -26.4166665 -26.2499995 86 0 2670 --59.5833335 -59.4166665 -26.4166665 -26.2499995 83 0 2670 --59.4166665 -59.2499995 -26.4166665 -26.2499995 81 0 2670 --59.2500005 -59.0833335 -26.4166665 -26.2499995 77 0 2670 --59.0833335 -58.9166665 -26.4166665 -26.2499995 75 0 2670 --58.9166665 -58.7499995 -26.4166665 -26.2499995 70 0 2670 --58.7500005 -58.5833335 -26.4166665 -26.2499995 68 0 2670 --58.5833335 -58.4166665 -26.4166665 -26.2499995 66 0 2670 --58.4166665 -58.2499995 -26.4166665 -26.2499995 64 0 2670 --58.2500005 -58.0833335 -26.4166665 -26.2499995 57 0 2670 --58.0833335 -57.9166665 -26.4166665 -26.2499995 60 0 2670 --57.9166665 -57.7499995 -26.4166665 -26.2499995 59 0 2670 --57.7500005 -57.5833335 -26.4166665 -26.2499995 60 0 2670 --57.5833335 -57.4166665 -26.4166665 -26.2499995 62 0 2670 --57.4166665 -57.2499995 -26.4166665 -26.2499995 101 0 2670 --57.2500005 -57.0833335 -26.4166665 -26.2499995 164 0 2670 --57.0833335 -56.9166665 -26.4166665 -26.2499995 83 0 2670 --56.9166665 -56.7499995 -26.4166665 -26.2499995 89 0 2670 --56.7500005 -56.5833335 -26.4166665 -26.2499995 88 0 2670 --56.5833335 -56.4166665 -26.4166665 -26.2499995 115 0 2670 --56.4166665 -56.2499995 -26.4166665 -26.2499995 119 0 2670 --56.2500005 -56.0833335 -26.4166665 -26.2499995 129 0 2670 --56.0833335 -55.9166665 -26.4166665 -26.2499995 144 0 2670 --55.9166665 -55.7499995 -26.4166665 -26.2499995 146 0 2670 --55.7500005 -55.5833335 -26.4166665 -26.2499995 251 0 2670 --55.5833335 -55.4166665 -26.4166665 -26.2499995 443 0 2670 --55.4166665 -55.2499995 -26.4166665 -26.2499995 299 0 2670 --55.2500005 -55.0833335 -26.4166665 -26.2499995 314 0 2670 --55.0833335 -54.9166665 -26.4166665 -26.2499995 341 0 2670 --54.9166665 -54.7499995 -26.4166665 -26.2499995 289 0 2670 --54.7500005 -54.5833335 -26.4166665 -26.2499995 129 0 2670 --54.5833335 -54.4166665 -26.4166665 -26.2499995 233 0 2670 --54.4166665 -54.2499995 -26.4166665 -26.2499995 255 0 2670 --54.2500005 -54.0833335 -26.4166665 -26.2499995 551 0 2670 --54.0833335 -53.9166665 -26.4166665 -26.2499995 508 0 2670 --53.9166665 -53.7499995 -26.4166665 -26.2499995 615 0 2670 --53.7500005 -53.5833335 -26.4166665 -26.2499995 675 0 2670 --53.5833335 -53.4166665 -26.4166665 -26.2499995 767 0 2670 --53.4166665 -53.2499995 -26.4166665 -26.2499995 740 0 2670 --53.2500005 -53.0833335 -26.4166665 -26.2499995 872 0 2670 --53.0833335 -52.9166665 -26.4166665 -26.2499995 813 0 2670 --52.9166665 -52.7499995 -26.4166665 -26.2499995 826 0 2670 --52.7500005 -52.5833335 -26.4166665 -26.2499995 825 0 2670 --52.5833335 -52.4166665 -26.4166665 -26.2499995 875 0 2670 --52.4166665 -52.2499995 -26.4166665 -26.2499995 867 0 2670 --52.2500005 -52.0833335 -26.4166665 -26.2499995 931 0 2670 --52.0833335 -51.9166665 -26.4166665 -26.2499995 1080 0 2670 --51.9166665 -51.7499995 -26.4166665 -26.2499995 1226 0 2670 --51.7500005 -51.5833335 -26.4166665 -26.2499995 1132 0 2670 --51.5833335 -51.4166665 -26.4166665 -26.2499995 1102 0 2670 --51.4166665 -51.2499995 -26.4166665 -26.2499995 1038 0 2670 --51.2500005 -51.0833335 -26.4166665 -26.2499995 1018 0 2670 --51.0833335 -50.9166665 -26.4166665 -26.2499995 877 0 2670 --50.9166665 -50.7499995 -26.4166665 -26.2499995 786 0 2670 --50.7500005 -50.5833335 -26.4166665 -26.2499995 825 0 2670 --50.5833335 -50.4166665 -26.4166665 -26.2499995 804 0 2670 --50.4166665 -50.2499995 -26.4166665 -26.2499995 785 0 2670 --50.2500005 -50.0833335 -26.4166665 -26.2499995 829 0 2670 --50.0833335 -49.9166665 -26.4166665 -26.2499995 859 0 2670 --49.9166665 -49.7499995 -26.4166665 -26.2499995 920 0 2670 --49.7500005 -49.5833335 -26.4166665 -26.2499995 866 0 2670 --49.5833335 -49.4166665 -26.4166665 -26.2499995 905 0 2670 --49.4166665 -49.2499995 -26.4166665 -26.2499995 617 0 2670 --49.2500005 -49.0833335 -26.4166665 -26.2499995 1022 0 2670 --49.0833335 -48.9166665 -26.4166665 -26.2499995 225 0 2670 --48.9166665 -48.7499995 -26.4166665 -26.2499995 16 0 2670 --48.7500005 -48.5833335 -26.4166665 -26.2499995 20 0 2670 --48.5833335 -48.4166665 -26.4166665 -26.2499995 0 -9 -1670 --48.4166665 -48.2499995 -26.4166665 -26.2499995 0 -28 -1670 --48.2500005 -48.0833335 -26.4166665 -26.2499995 0 -41 -1670 --48.0833335 -47.9166665 -26.4166665 -26.2499995 0 -53 -1670 --47.9166665 -47.7499995 -26.4166665 -26.2499995 0 -60 -1670 --47.7500005 -47.5833335 -26.4166665 -26.2499995 0 -71 -1670 --47.5833335 -47.4166665 -26.4166665 -26.2499995 0 -87 -1670 --47.4166665 -47.2499995 -26.4166665 -26.2499995 0 -98 -1670 --47.2500005 -47.0833335 -26.4166665 -26.2499995 0 -119 -1670 --47.0833335 -46.9166665 -26.4166665 -26.2499995 0 -153 -1670 --46.9166665 -46.7499995 -26.4166665 -26.2499995 0 -139 -1670 --46.7500005 -46.5833335 -26.4166665 -26.2499995 0 -157 -1670 --46.5833335 -46.4166665 -26.4166665 -26.2499995 0 -266 -1670 --46.4166665 -46.2499995 -26.4166665 -26.2499995 0 -327 -1670 --46.2500005 -46.0833335 -26.4166665 -26.2499995 0 -460 -1670 --46.0833335 -45.9166665 -26.4166665 -26.2499995 0 -532 -1670 --45.9166665 -45.7499995 -26.4166665 -26.2499995 0 -620 -1670 --45.7500005 -45.5833335 -26.4166665 -26.2499995 0 -888 -1670 --45.5833335 -45.4166665 -26.4166665 -26.2499995 0 -1460 -1670 --45.4166665 -45.2499995 -26.4166665 -26.2499995 0 -2022 -1670 --45.2500005 -45.0833335 -26.4166665 -26.2499995 0 -2006 -1670 --45.0833335 -44.9166665 -26.4166665 -26.2499995 0 -2206 -1670 --44.9166665 -44.7499995 -26.4166665 -26.2499995 0 -2273 -1670 --44.7500005 -44.5833335 -26.4166665 -26.2499995 0 -2343 -1670 --44.5833335 -44.4166665 -26.4166665 -26.2499995 0 -2353 -1670 --44.4166665 -44.2499995 -26.4166665 -26.2499995 0 -2362 -1670 --44.2500005 -44.0833335 -26.4166665 -26.2499995 0 -2400 -1670 --44.0833335 -43.9166665 -26.4166665 -26.2499995 0 -2396 -1670 --43.9166665 -43.7499995 -26.4166665 -26.2499995 0 -2358 -1670 --43.7500005 -43.5833335 -26.4166665 -26.2499995 0 -2309 -1670 --43.5833335 -43.4166665 -26.4166665 -26.2499995 0 -2290 -1670 --43.4166665 -43.2499995 -26.4166665 -26.2499995 0 -2284 -1670 --43.2500005 -43.0833335 -26.4166665 -26.2499995 0 -2348 -1670 --43.0833335 -42.9166665 -26.4166665 -26.2499995 0 -2367 -1670 --42.9166665 -42.7499995 -26.4166665 -26.2499995 0 -2454 -1670 --42.7500005 -42.5833335 -26.4166665 -26.2499995 0 -2451 -1670 --42.5833335 -42.4166665 -26.4166665 -26.2499995 0 -2437 -1670 --42.4166665 -42.2499995 -26.4166665 -26.2499995 0 -2475 -1670 --42.2500005 -42.0833335 -26.4166665 -26.2499995 0 -2470 -1670 --42.0833335 -41.9166665 -26.4166665 -26.2499995 0 -2459 -1670 --41.9166665 -41.7499995 -26.4166665 -26.2499995 0 -2540 -1670 --41.7500005 -41.5833335 -26.4166665 -26.2499995 0 -2480 -1670 --41.5833335 -41.4166665 -26.4166665 -26.2499995 0 -2596 -1670 --41.4166665 -41.2499995 -26.4166665 -26.2499995 0 -2554 -1670 --41.2500005 -41.0833335 -26.4166665 -26.2499995 0 -2640 -1670 --41.0833335 -40.9166665 -26.4166665 -26.2499995 0 -2787 -1670 --40.9166665 -40.7499995 -26.4166665 -26.2499995 0 -2847 -1670 --40.7500005 -40.5833335 -26.4166665 -26.2499995 0 -2977 -1670 --40.5833335 -40.4166665 -26.4166665 -26.2499995 0 -3282 -1670 --40.4166665 -40.2499995 -26.4166665 -26.2499995 0 -3517 -1670 --40.2500005 -40.0833335 -26.4166665 -26.2499995 0 -3576 -1670 --40.0833335 -39.9166665 -26.4166665 -26.2499995 0 -2110 -1670 --65.0833335 -64.9166665 -26.5833335 -26.4166665 969 0 2670 --64.9166665 -64.7499995 -26.5833335 -26.4166665 665 0 2670 --64.7500005 -64.5833335 -26.5833335 -26.4166665 452 0 2670 --64.5833335 -64.4166665 -26.5833335 -26.4166665 365 0 2670 --64.4166665 -64.2499995 -26.5833335 -26.4166665 296 0 2670 --64.2500005 -64.0833335 -26.5833335 -26.4166665 257 0 2670 --64.0833335 -63.9166665 -26.5833335 -26.4166665 245 0 2670 --63.9166665 -63.7499995 -26.5833335 -26.4166665 225 0 2670 --63.7500005 -63.5833335 -26.5833335 -26.4166665 213 0 2670 --63.5833335 -63.4166665 -26.5833335 -26.4166665 211 0 2670 --63.4166665 -63.2499995 -26.5833335 -26.4166665 209 0 2670 --63.2500005 -63.0833335 -26.5833335 -26.4166665 204 0 2670 --63.0833335 -62.9166665 -26.5833335 -26.4166665 199 0 2670 --62.9166665 -62.7499995 -26.5833335 -26.4166665 196 0 2670 --62.7500005 -62.5833335 -26.5833335 -26.4166665 192 0 2670 --62.5833335 -62.4166665 -26.5833335 -26.4166665 185 0 2670 --62.4166665 -62.2499995 -26.5833335 -26.4166665 175 0 2670 --62.2500005 -62.0833335 -26.5833335 -26.4166665 170 0 2670 --62.0833335 -61.9166665 -26.5833335 -26.4166665 162 0 2670 --61.9166665 -61.7499995 -26.5833335 -26.4166665 190 0 2670 --61.7500005 -61.5833335 -26.5833335 -26.4166665 160 0 2670 --61.5833335 -61.4166665 -26.5833335 -26.4166665 137 0 2670 --61.4166665 -61.2499995 -26.5833335 -26.4166665 131 0 2670 --61.2500005 -61.0833335 -26.5833335 -26.4166665 124 0 2670 --61.0833335 -60.9166665 -26.5833335 -26.4166665 121 0 2670 --60.9166665 -60.7499995 -26.5833335 -26.4166665 110 0 2670 --60.7500005 -60.5833335 -26.5833335 -26.4166665 106 0 2670 --60.5833335 -60.4166665 -26.5833335 -26.4166665 103 0 2670 --60.4166665 -60.2499995 -26.5833335 -26.4166665 97 0 2670 --60.2500005 -60.0833335 -26.5833335 -26.4166665 92 0 2670 --60.0833335 -59.9166665 -26.5833335 -26.4166665 90 0 2670 --59.9166665 -59.7499995 -26.5833335 -26.4166665 87 0 2670 --59.7500005 -59.5833335 -26.5833335 -26.4166665 83 0 2670 --59.5833335 -59.4166665 -26.5833335 -26.4166665 79 0 2670 --59.4166665 -59.2499995 -26.5833335 -26.4166665 79 0 2670 --59.2500005 -59.0833335 -26.5833335 -26.4166665 75 0 2670 --59.0833335 -58.9166665 -26.5833335 -26.4166665 71 0 2670 --58.9166665 -58.7499995 -26.5833335 -26.4166665 69 0 2670 --58.7500005 -58.5833335 -26.5833335 -26.4166665 67 0 2670 --58.5833335 -58.4166665 -26.5833335 -26.4166665 63 0 2670 --58.4166665 -58.2499995 -26.5833335 -26.4166665 59 0 2670 --58.2500005 -58.0833335 -26.5833335 -26.4166665 61 0 2670 --58.0833335 -57.9166665 -26.5833335 -26.4166665 55 0 2670 --57.9166665 -57.7499995 -26.5833335 -26.4166665 60 0 2670 --57.7500005 -57.5833335 -26.5833335 -26.4166665 61 0 2670 --57.5833335 -57.4166665 -26.5833335 -26.4166665 62 0 2670 --57.4166665 -57.2499995 -26.5833335 -26.4166665 65 0 2670 --57.2500005 -57.0833335 -26.5833335 -26.4166665 69 0 2670 --57.0833335 -56.9166665 -26.5833335 -26.4166665 95 0 2670 --56.9166665 -56.7499995 -26.5833335 -26.4166665 79 0 2670 --56.7500005 -56.5833335 -26.5833335 -26.4166665 84 0 2670 --56.5833335 -56.4166665 -26.5833335 -26.4166665 89 0 2670 --56.4166665 -56.2499995 -26.5833335 -26.4166665 86 0 2670 --56.2500005 -56.0833335 -26.5833335 -26.4166665 153 0 2670 --56.0833335 -55.9166665 -26.5833335 -26.4166665 112 0 2670 --55.9166665 -55.7499995 -26.5833335 -26.4166665 135 0 2670 --55.7500005 -55.5833335 -26.5833335 -26.4166665 288 0 2670 --55.5833335 -55.4166665 -26.5833335 -26.4166665 378 0 2670 --55.4166665 -55.2499995 -26.5833335 -26.4166665 284 0 2670 --55.2500005 -55.0833335 -26.5833335 -26.4166665 276 0 2670 --55.0833335 -54.9166665 -26.5833335 -26.4166665 285 0 2670 --54.9166665 -54.7499995 -26.5833335 -26.4166665 221 0 2670 --54.7500005 -54.5833335 -26.5833335 -26.4166665 182 0 2670 --54.5833335 -54.4166665 -26.5833335 -26.4166665 191 0 2670 --54.4166665 -54.2499995 -26.5833335 -26.4166665 251 0 2670 --54.2500005 -54.0833335 -26.5833335 -26.4166665 522 0 2670 --54.0833335 -53.9166665 -26.5833335 -26.4166665 557 0 2670 --53.9166665 -53.7499995 -26.5833335 -26.4166665 549 0 2670 --53.7500005 -53.5833335 -26.5833335 -26.4166665 495 0 2670 --53.5833335 -53.4166665 -26.5833335 -26.4166665 695 0 2670 --53.4166665 -53.2499995 -26.5833335 -26.4166665 612 0 2670 --53.2500005 -53.0833335 -26.5833335 -26.4166665 712 0 2670 --53.0833335 -52.9166665 -26.5833335 -26.4166665 627 0 2670 --52.9166665 -52.7499995 -26.5833335 -26.4166665 774 0 2670 --52.7500005 -52.5833335 -26.5833335 -26.4166665 737 0 2670 --52.5833335 -52.4166665 -26.5833335 -26.4166665 787 0 2670 --52.4166665 -52.2499995 -26.5833335 -26.4166665 855 0 2670 --52.2500005 -52.0833335 -26.5833335 -26.4166665 921 0 2670 --52.0833335 -51.9166665 -26.5833335 -26.4166665 1104 0 2670 --51.9166665 -51.7499995 -26.5833335 -26.4166665 1177 0 2670 --51.7500005 -51.5833335 -26.5833335 -26.4166665 1213 0 2670 --51.5833335 -51.4166665 -26.5833335 -26.4166665 1111 0 2670 --51.4166665 -51.2499995 -26.5833335 -26.4166665 1054 0 2670 --51.2500005 -51.0833335 -26.5833335 -26.4166665 1064 0 2670 --51.0833335 -50.9166665 -26.5833335 -26.4166665 1082 0 2670 --50.9166665 -50.7499995 -26.5833335 -26.4166665 930 0 2670 --50.7500005 -50.5833335 -26.5833335 -26.4166665 897 0 2670 --50.5833335 -50.4166665 -26.5833335 -26.4166665 996 0 2670 --50.4166665 -50.2499995 -26.5833335 -26.4166665 831 0 2670 --50.2500005 -50.0833335 -26.5833335 -26.4166665 556 0 2670 --50.0833335 -49.9166665 -26.5833335 -26.4166665 584 0 2670 --49.9166665 -49.7499995 -26.5833335 -26.4166665 922 0 2670 --49.7500005 -49.5833335 -26.5833335 -26.4166665 971 0 2670 --49.5833335 -49.4166665 -26.5833335 -26.4166665 928 0 2670 --49.4166665 -49.2499995 -26.5833335 -26.4166665 598 0 2670 --49.2500005 -49.0833335 -26.5833335 -26.4166665 112 0 2670 --49.0833335 -48.9166665 -26.5833335 -26.4166665 96 0 2670 --48.9166665 -48.7499995 -26.5833335 -26.4166665 14 0 2670 --48.7500005 -48.5833335 -26.5833335 -26.4166665 15 0 2670 --48.5833335 -48.4166665 -26.5833335 -26.4166665 0 -21 -1670 --48.4166665 -48.2499995 -26.5833335 -26.4166665 0 -35 -1670 --48.2500005 -48.0833335 -26.5833335 -26.4166665 0 -45 -1670 --48.0833335 -47.9166665 -26.5833335 -26.4166665 0 -51 -1670 --47.9166665 -47.7499995 -26.5833335 -26.4166665 0 -57 -1670 --47.7500005 -47.5833335 -26.5833335 -26.4166665 0 -73 -1670 --47.5833335 -47.4166665 -26.5833335 -26.4166665 0 -90 -1670 --47.4166665 -47.2499995 -26.5833335 -26.4166665 0 -109 -1670 --47.2500005 -47.0833335 -26.5833335 -26.4166665 0 -120 -1670 --47.0833335 -46.9166665 -26.5833335 -26.4166665 0 -145 -1670 --46.9166665 -46.7499995 -26.5833335 -26.4166665 0 -152 -1670 --46.7500005 -46.5833335 -26.5833335 -26.4166665 0 -215 -1670 --46.5833335 -46.4166665 -26.5833335 -26.4166665 0 -349 -1670 --46.4166665 -46.2499995 -26.5833335 -26.4166665 0 -411 -1670 --46.2500005 -46.0833335 -26.5833335 -26.4166665 0 -522 -1670 --46.0833335 -45.9166665 -26.5833335 -26.4166665 0 -610 -1670 --45.9166665 -45.7499995 -26.5833335 -26.4166665 0 -859 -1670 --45.7500005 -45.5833335 -26.5833335 -26.4166665 0 -1375 -1670 --45.5833335 -45.4166665 -26.5833335 -26.4166665 0 -1845 -1670 --45.4166665 -45.2499995 -26.5833335 -26.4166665 0 -2102 -1670 --45.2500005 -45.0833335 -26.5833335 -26.4166665 0 -2148 -1670 --45.0833335 -44.9166665 -26.5833335 -26.4166665 0 -2381 -1670 --44.9166665 -44.7499995 -26.5833335 -26.4166665 0 -2382 -1670 --44.7500005 -44.5833335 -26.5833335 -26.4166665 0 -2241 -1670 --44.5833335 -44.4166665 -26.5833335 -26.4166665 0 -2477 -1670 --44.4166665 -44.2499995 -26.5833335 -26.4166665 0 -2527 -1670 --44.2500005 -44.0833335 -26.5833335 -26.4166665 0 -2521 -1670 --44.0833335 -43.9166665 -26.5833335 -26.4166665 0 -2547 -1670 --43.9166665 -43.7499995 -26.5833335 -26.4166665 0 -2466 -1670 --43.7500005 -43.5833335 -26.5833335 -26.4166665 0 -2377 -1670 --43.5833335 -43.4166665 -26.5833335 -26.4166665 0 -2422 -1670 --43.4166665 -43.2499995 -26.5833335 -26.4166665 0 -2338 -1670 --43.2500005 -43.0833335 -26.5833335 -26.4166665 0 -2366 -1670 --43.0833335 -42.9166665 -26.5833335 -26.4166665 0 -2402 -1670 --42.9166665 -42.7499995 -26.5833335 -26.4166665 0 -2391 -1670 --42.7500005 -42.5833335 -26.5833335 -26.4166665 0 -2392 -1670 --42.5833335 -42.4166665 -26.5833335 -26.4166665 0 -2415 -1670 --42.4166665 -42.2499995 -26.5833335 -26.4166665 0 -2387 -1670 --42.2500005 -42.0833335 -26.5833335 -26.4166665 0 -2367 -1670 --42.0833335 -41.9166665 -26.5833335 -26.4166665 0 -2475 -1670 --41.9166665 -41.7499995 -26.5833335 -26.4166665 0 -2497 -1670 --41.7500005 -41.5833335 -26.5833335 -26.4166665 0 -2406 -1670 --41.5833335 -41.4166665 -26.5833335 -26.4166665 0 -2457 -1670 --41.4166665 -41.2499995 -26.5833335 -26.4166665 0 -2561 -1670 --41.2500005 -41.0833335 -26.5833335 -26.4166665 0 -2622 -1670 --41.0833335 -40.9166665 -26.5833335 -26.4166665 0 -2571 -1670 --40.9166665 -40.7499995 -26.5833335 -26.4166665 0 -2682 -1670 --40.7500005 -40.5833335 -26.5833335 -26.4166665 0 -2834 -1670 --40.5833335 -40.4166665 -26.5833335 -26.4166665 0 -3297 -1670 --40.4166665 -40.2499995 -26.5833335 -26.4166665 0 -3572 -1670 --40.2500005 -40.0833335 -26.5833335 -26.4166665 0 -3651 -1670 --40.0833335 -39.9166665 -26.5833335 -26.4166665 0 -3651 -1670 --65.0833335 -64.9166665 -26.7500005 -26.5833335 808 0 2670 --64.9166665 -64.7499995 -26.7500005 -26.5833335 461 0 2670 --64.7500005 -64.5833335 -26.7500005 -26.5833335 389 0 2670 --64.5833335 -64.4166665 -26.7500005 -26.5833335 318 0 2670 --64.4166665 -64.2499995 -26.7500005 -26.5833335 258 0 2670 --64.2500005 -64.0833335 -26.7500005 -26.5833335 231 0 2670 --64.0833335 -63.9166665 -26.7500005 -26.5833335 224 0 2670 --63.9166665 -63.7499995 -26.7500005 -26.5833335 214 0 2670 --63.7500005 -63.5833335 -26.7500005 -26.5833335 204 0 2670 --63.5833335 -63.4166665 -26.7500005 -26.5833335 201 0 2670 --63.4166665 -63.2499995 -26.7500005 -26.5833335 197 0 2670 --63.2500005 -63.0833335 -26.7500005 -26.5833335 194 0 2670 --63.0833335 -62.9166665 -26.7500005 -26.5833335 193 0 2670 --62.9166665 -62.7499995 -26.7500005 -26.5833335 187 0 2670 --62.7500005 -62.5833335 -26.7500005 -26.5833335 187 0 2670 --62.5833335 -62.4166665 -26.7500005 -26.5833335 181 0 2670 --62.4166665 -62.2499995 -26.7500005 -26.5833335 173 0 2670 --62.2500005 -62.0833335 -26.7500005 -26.5833335 166 0 2670 --62.0833335 -61.9166665 -26.7500005 -26.5833335 160 0 2670 --61.9166665 -61.7499995 -26.7500005 -26.5833335 196 0 2670 --61.7500005 -61.5833335 -26.7500005 -26.5833335 153 0 2670 --61.5833335 -61.4166665 -26.7500005 -26.5833335 139 0 2670 --61.4166665 -61.2499995 -26.7500005 -26.5833335 126 0 2670 --61.2500005 -61.0833335 -26.7500005 -26.5833335 118 0 2670 --61.0833335 -60.9166665 -26.7500005 -26.5833335 114 0 2670 --60.9166665 -60.7499995 -26.7500005 -26.5833335 108 0 2670 --60.7500005 -60.5833335 -26.7500005 -26.5833335 102 0 2670 --60.5833335 -60.4166665 -26.7500005 -26.5833335 100 0 2670 --60.4166665 -60.2499995 -26.7500005 -26.5833335 94 0 2670 --60.2500005 -60.0833335 -26.7500005 -26.5833335 89 0 2670 --60.0833335 -59.9166665 -26.7500005 -26.5833335 85 0 2670 --59.9166665 -59.7499995 -26.7500005 -26.5833335 85 0 2670 --59.7500005 -59.5833335 -26.7500005 -26.5833335 82 0 2670 --59.5833335 -59.4166665 -26.7500005 -26.5833335 80 0 2670 --59.4166665 -59.2499995 -26.7500005 -26.5833335 78 0 2670 --59.2500005 -59.0833335 -26.7500005 -26.5833335 75 0 2670 --59.0833335 -58.9166665 -26.7500005 -26.5833335 68 0 2670 --58.9166665 -58.7499995 -26.7500005 -26.5833335 69 0 2670 --58.7500005 -58.5833335 -26.7500005 -26.5833335 63 0 2670 --58.5833335 -58.4166665 -26.7500005 -26.5833335 58 0 2670 --58.4166665 -58.2499995 -26.7500005 -26.5833335 58 0 2670 --58.2500005 -58.0833335 -26.7500005 -26.5833335 59 0 2670 --58.0833335 -57.9166665 -26.7500005 -26.5833335 59 0 2670 --57.9166665 -57.7499995 -26.7500005 -26.5833335 63 0 2670 --57.7500005 -57.5833335 -26.7500005 -26.5833335 65 0 2670 --57.5833335 -57.4166665 -26.7500005 -26.5833335 67 0 2670 --57.4166665 -57.2499995 -26.7500005 -26.5833335 70 0 2670 --57.2500005 -57.0833335 -26.7500005 -26.5833335 115 0 2670 --57.0833335 -56.9166665 -26.7500005 -26.5833335 102 0 2670 --56.9166665 -56.7499995 -26.7500005 -26.5833335 77 0 2670 --56.7500005 -56.5833335 -26.7500005 -26.5833335 77 0 2670 --56.5833335 -56.4166665 -26.7500005 -26.5833335 84 0 2670 --56.4166665 -56.2499995 -26.7500005 -26.5833335 89 0 2670 --56.2500005 -56.0833335 -26.7500005 -26.5833335 101 0 2670 --56.0833335 -55.9166665 -26.7500005 -26.5833335 117 0 2670 --55.9166665 -55.7499995 -26.7500005 -26.5833335 206 0 2670 --55.7500005 -55.5833335 -26.7500005 -26.5833335 302 0 2670 --55.5833335 -55.4166665 -26.7500005 -26.5833335 297 0 2670 --55.4166665 -55.2499995 -26.7500005 -26.5833335 179 0 2670 --55.2500005 -55.0833335 -26.7500005 -26.5833335 261 0 2670 --55.0833335 -54.9166665 -26.7500005 -26.5833335 147 0 2670 --54.9166665 -54.7499995 -26.7500005 -26.5833335 148 0 2670 --54.7500005 -54.5833335 -26.7500005 -26.5833335 213 0 2670 --54.5833335 -54.4166665 -26.7500005 -26.5833335 521 0 2670 --54.4166665 -54.2499995 -26.7500005 -26.5833335 351 0 2670 --54.2500005 -54.0833335 -26.7500005 -26.5833335 541 0 2670 --54.0833335 -53.9166665 -26.7500005 -26.5833335 540 0 2670 --53.9166665 -53.7499995 -26.7500005 -26.5833335 546 0 2670 --53.7500005 -53.5833335 -26.7500005 -26.5833335 457 0 2670 --53.5833335 -53.4166665 -26.7500005 -26.5833335 592 0 2670 --53.4166665 -53.2499995 -26.7500005 -26.5833335 467 0 2670 --53.2500005 -53.0833335 -26.7500005 -26.5833335 584 0 2670 --53.0833335 -52.9166665 -26.7500005 -26.5833335 576 0 2670 --52.9166665 -52.7499995 -26.7500005 -26.5833335 618 0 2670 --52.7500005 -52.5833335 -26.7500005 -26.5833335 628 0 2670 --52.5833335 -52.4166665 -26.7500005 -26.5833335 639 0 2670 --52.4166665 -52.2499995 -26.7500005 -26.5833335 841 0 2670 --52.2500005 -52.0833335 -26.7500005 -26.5833335 992 0 2670 --52.0833335 -51.9166665 -26.7500005 -26.5833335 936 0 2670 --51.9166665 -51.7499995 -26.7500005 -26.5833335 1125 0 2670 --51.7500005 -51.5833335 -26.7500005 -26.5833335 1201 0 2670 --51.5833335 -51.4166665 -26.7500005 -26.5833335 1223 0 2670 --51.4166665 -51.2499995 -26.7500005 -26.5833335 1150 0 2670 --51.2500005 -51.0833335 -26.7500005 -26.5833335 1228 0 2670 --51.0833335 -50.9166665 -26.7500005 -26.5833335 1154 0 2670 --50.9166665 -50.7499995 -26.7500005 -26.5833335 1120 0 2670 --50.7500005 -50.5833335 -26.7500005 -26.5833335 1003 0 2670 --50.5833335 -50.4166665 -26.7500005 -26.5833335 1070 0 2670 --50.4166665 -50.2499995 -26.7500005 -26.5833335 830 0 2670 --50.2500005 -50.0833335 -26.7500005 -26.5833335 610 0 2670 --50.0833335 -49.9166665 -26.7500005 -26.5833335 721 0 2670 --49.9166665 -49.7499995 -26.7500005 -26.5833335 508 0 2670 --49.7500005 -49.5833335 -26.7500005 -26.5833335 994 0 2670 --49.5833335 -49.4166665 -26.7500005 -26.5833335 834 0 2670 --49.4166665 -49.2499995 -26.7500005 -26.5833335 393 0 2670 --49.2500005 -49.0833335 -26.7500005 -26.5833335 215 0 2670 --49.0833335 -48.9166665 -26.7500005 -26.5833335 190 0 2670 --48.9166665 -48.7499995 -26.7500005 -26.5833335 166 0 2670 --48.7500005 -48.5833335 -26.7500005 -26.5833335 0 -1 -1670 --48.5833335 -48.4166665 -26.7500005 -26.5833335 0 -22 -1670 --48.4166665 -48.2499995 -26.7500005 -26.5833335 0 -40 -1670 --48.2500005 -48.0833335 -26.7500005 -26.5833335 0 -47 -1670 --48.0833335 -47.9166665 -26.7500005 -26.5833335 0 -45 -1670 --47.9166665 -47.7499995 -26.7500005 -26.5833335 0 -63 -1670 --47.7500005 -47.5833335 -26.7500005 -26.5833335 0 -89 -1670 --47.5833335 -47.4166665 -26.7500005 -26.5833335 0 -104 -1670 --47.4166665 -47.2499995 -26.7500005 -26.5833335 0 -115 -1670 --47.2500005 -47.0833335 -26.7500005 -26.5833335 0 -117 -1670 --47.0833335 -46.9166665 -26.7500005 -26.5833335 0 -147 -1670 --46.9166665 -46.7499995 -26.7500005 -26.5833335 0 -164 -1670 --46.7500005 -46.5833335 -26.7500005 -26.5833335 0 -225 -1670 --46.5833335 -46.4166665 -26.7500005 -26.5833335 0 -366 -1670 --46.4166665 -46.2499995 -26.7500005 -26.5833335 0 -481 -1670 --46.2500005 -46.0833335 -26.7500005 -26.5833335 0 -570 -1670 --46.0833335 -45.9166665 -26.7500005 -26.5833335 0 -727 -1670 --45.9166665 -45.7499995 -26.7500005 -26.5833335 0 -1204 -1670 --45.7500005 -45.5833335 -26.7500005 -26.5833335 0 -1671 -1670 --45.5833335 -45.4166665 -26.7500005 -26.5833335 0 -2087 -1670 --45.4166665 -45.2499995 -26.7500005 -26.5833335 0 -2188 -1670 --45.2500005 -45.0833335 -26.7500005 -26.5833335 0 -2263 -1670 --45.0833335 -44.9166665 -26.7500005 -26.5833335 0 -2438 -1670 --44.9166665 -44.7499995 -26.7500005 -26.5833335 0 -2557 -1670 --44.7500005 -44.5833335 -26.7500005 -26.5833335 0 -2579 -1670 --44.5833335 -44.4166665 -26.7500005 -26.5833335 0 -2530 -1670 --44.4166665 -44.2499995 -26.7500005 -26.5833335 0 -2596 -1670 --44.2500005 -44.0833335 -26.7500005 -26.5833335 0 -2587 -1670 --44.0833335 -43.9166665 -26.7500005 -26.5833335 0 -2604 -1670 --43.9166665 -43.7499995 -26.7500005 -26.5833335 0 -2547 -1670 --43.7500005 -43.5833335 -26.7500005 -26.5833335 0 -2477 -1670 --43.5833335 -43.4166665 -26.7500005 -26.5833335 0 -2442 -1670 --43.4166665 -43.2499995 -26.7500005 -26.5833335 0 -2448 -1670 --43.2500005 -43.0833335 -26.7500005 -26.5833335 0 -2408 -1670 --43.0833335 -42.9166665 -26.7500005 -26.5833335 0 -2373 -1670 --42.9166665 -42.7499995 -26.7500005 -26.5833335 0 -2373 -1670 --42.7500005 -42.5833335 -26.7500005 -26.5833335 0 -2402 -1670 --42.5833335 -42.4166665 -26.7500005 -26.5833335 0 -2349 -1670 --42.4166665 -42.2499995 -26.7500005 -26.5833335 0 -2373 -1670 --42.2500005 -42.0833335 -26.7500005 -26.5833335 0 -2380 -1670 --42.0833335 -41.9166665 -26.7500005 -26.5833335 0 -2381 -1670 --41.9166665 -41.7499995 -26.7500005 -26.5833335 0 -2399 -1670 --41.7500005 -41.5833335 -26.7500005 -26.5833335 0 -2579 -1670 --41.5833335 -41.4166665 -26.7500005 -26.5833335 0 -2438 -1670 --41.4166665 -41.2499995 -26.7500005 -26.5833335 0 -2576 -1670 --41.2500005 -41.0833335 -26.7500005 -26.5833335 0 -2557 -1670 --41.0833335 -40.9166665 -26.7500005 -26.5833335 0 -2577 -1670 --40.9166665 -40.7499995 -26.7500005 -26.5833335 0 -2839 -1670 --40.7500005 -40.5833335 -26.7500005 -26.5833335 0 -3093 -1670 --40.5833335 -40.4166665 -26.7500005 -26.5833335 0 -3352 -1670 --40.4166665 -40.2499995 -26.7500005 -26.5833335 0 -3646 -1670 --40.2500005 -40.0833335 -26.7500005 -26.5833335 0 -3268 -1670 --40.0833335 -39.9166665 -26.7500005 -26.5833335 0 -2654 -1670 --65.0833335 -64.9166665 -26.9166665 -26.7499995 447 0 2670 --64.9166665 -64.7499995 -26.9166665 -26.7499995 380 0 2670 --64.7500005 -64.5833335 -26.9166665 -26.7499995 324 0 2670 --64.5833335 -64.4166665 -26.9166665 -26.7499995 274 0 2670 --64.4166665 -64.2499995 -26.9166665 -26.7499995 231 0 2670 --64.2500005 -64.0833335 -26.9166665 -26.7499995 206 0 2670 --64.0833335 -63.9166665 -26.9166665 -26.7499995 205 0 2670 --63.9166665 -63.7499995 -26.9166665 -26.7499995 193 0 2670 --63.7500005 -63.5833335 -26.9166665 -26.7499995 192 0 2670 --63.5833335 -63.4166665 -26.9166665 -26.7499995 191 0 2670 --63.4166665 -63.2499995 -26.9166665 -26.7499995 189 0 2670 --63.2500005 -63.0833335 -26.9166665 -26.7499995 186 0 2670 --63.0833335 -62.9166665 -26.9166665 -26.7499995 183 0 2670 --62.9166665 -62.7499995 -26.9166665 -26.7499995 180 0 2670 --62.7500005 -62.5833335 -26.9166665 -26.7499995 174 0 2670 --62.5833335 -62.4166665 -26.9166665 -26.7499995 174 0 2670 --62.4166665 -62.2499995 -26.9166665 -26.7499995 168 0 2670 --62.2500005 -62.0833335 -26.9166665 -26.7499995 164 0 2670 --62.0833335 -61.9166665 -26.9166665 -26.7499995 156 0 2670 --61.9166665 -61.7499995 -26.9166665 -26.7499995 173 0 2670 --61.7500005 -61.5833335 -26.9166665 -26.7499995 145 0 2670 --61.5833335 -61.4166665 -26.9166665 -26.7499995 115 0 2670 --61.4166665 -61.2499995 -26.9166665 -26.7499995 117 0 2670 --61.2500005 -61.0833335 -26.9166665 -26.7499995 113 0 2670 --61.0833335 -60.9166665 -26.9166665 -26.7499995 109 0 2670 --60.9166665 -60.7499995 -26.9166665 -26.7499995 104 0 2670 --60.7500005 -60.5833335 -26.9166665 -26.7499995 101 0 2670 --60.5833335 -60.4166665 -26.9166665 -26.7499995 96 0 2670 --60.4166665 -60.2499995 -26.9166665 -26.7499995 90 0 2670 --60.2500005 -60.0833335 -26.9166665 -26.7499995 85 0 2670 --60.0833335 -59.9166665 -26.9166665 -26.7499995 81 0 2670 --59.9166665 -59.7499995 -26.9166665 -26.7499995 79 0 2670 --59.7500005 -59.5833335 -26.9166665 -26.7499995 75 0 2670 --59.5833335 -59.4166665 -26.9166665 -26.7499995 76 0 2670 --59.4166665 -59.2499995 -26.9166665 -26.7499995 74 0 2670 --59.2500005 -59.0833335 -26.9166665 -26.7499995 72 0 2670 --59.0833335 -58.9166665 -26.9166665 -26.7499995 64 0 2670 --58.9166665 -58.7499995 -26.9166665 -26.7499995 62 0 2670 --58.7500005 -58.5833335 -26.9166665 -26.7499995 58 0 2670 --58.5833335 -58.4166665 -26.9166665 -26.7499995 58 0 2670 --58.4166665 -58.2499995 -26.9166665 -26.7499995 51 0 2670 --58.2500005 -58.0833335 -26.9166665 -26.7499995 59 0 2670 --58.0833335 -57.9166665 -26.9166665 -26.7499995 61 0 2670 --57.9166665 -57.7499995 -26.9166665 -26.7499995 64 0 2670 --57.7500005 -57.5833335 -26.9166665 -26.7499995 66 0 2670 --57.5833335 -57.4166665 -26.9166665 -26.7499995 69 0 2670 --57.4166665 -57.2499995 -26.9166665 -26.7499995 74 0 2670 --57.2500005 -57.0833335 -26.9166665 -26.7499995 109 0 2670 --57.0833335 -56.9166665 -26.9166665 -26.7499995 165 0 2670 --56.9166665 -56.7499995 -26.9166665 -26.7499995 143 0 2670 --56.7500005 -56.5833335 -26.9166665 -26.7499995 86 0 2670 --56.5833335 -56.4166665 -26.9166665 -26.7499995 88 0 2670 --56.4166665 -56.2499995 -26.9166665 -26.7499995 91 0 2670 --56.2500005 -56.0833335 -26.9166665 -26.7499995 145 0 2670 --56.0833335 -55.9166665 -26.9166665 -26.7499995 175 0 2670 --55.9166665 -55.7499995 -26.9166665 -26.7499995 255 0 2670 --55.7500005 -55.5833335 -26.9166665 -26.7499995 243 0 2670 --55.5833335 -55.4166665 -26.9166665 -26.7499995 201 0 2670 --55.4166665 -55.2499995 -26.9166665 -26.7499995 257 0 2670 --55.2500005 -55.0833335 -26.9166665 -26.7499995 178 0 2670 --55.0833335 -54.9166665 -26.9166665 -26.7499995 221 0 2670 --54.9166665 -54.7499995 -26.9166665 -26.7499995 245 0 2670 --54.7500005 -54.5833335 -26.9166665 -26.7499995 215 0 2670 --54.5833335 -54.4166665 -26.9166665 -26.7499995 364 0 2670 --54.4166665 -54.2499995 -26.9166665 -26.7499995 489 0 2670 --54.2500005 -54.0833335 -26.9166665 -26.7499995 491 0 2670 --54.0833335 -53.9166665 -26.9166665 -26.7499995 388 0 2670 --53.9166665 -53.7499995 -26.9166665 -26.7499995 435 0 2670 --53.7500005 -53.5833335 -26.9166665 -26.7499995 354 0 2670 --53.5833335 -53.4166665 -26.9166665 -26.7499995 561 0 2670 --53.4166665 -53.2499995 -26.9166665 -26.7499995 411 0 2670 --53.2500005 -53.0833335 -26.9166665 -26.7499995 578 0 2670 --53.0833335 -52.9166665 -26.9166665 -26.7499995 497 0 2670 --52.9166665 -52.7499995 -26.9166665 -26.7499995 430 0 2670 --52.7500005 -52.5833335 -26.9166665 -26.7499995 513 0 2670 --52.5833335 -52.4166665 -26.9166665 -26.7499995 646 0 2670 --52.4166665 -52.2499995 -26.9166665 -26.7499995 841 0 2670 --52.2500005 -52.0833335 -26.9166665 -26.7499995 818 0 2670 --52.0833335 -51.9166665 -26.9166665 -26.7499995 1050 0 2670 --51.9166665 -51.7499995 -26.9166665 -26.7499995 1041 0 2670 --51.7500005 -51.5833335 -26.9166665 -26.7499995 1143 0 2670 --51.5833335 -51.4166665 -26.9166665 -26.7499995 1270 0 2670 --51.4166665 -51.2499995 -26.9166665 -26.7499995 1067 0 2670 --51.2500005 -51.0833335 -26.9166665 -26.7499995 1042 0 2670 --51.0833335 -50.9166665 -26.9166665 -26.7499995 918 0 2670 --50.9166665 -50.7499995 -26.9166665 -26.7499995 1137 0 2670 --50.7500005 -50.5833335 -26.9166665 -26.7499995 1181 0 2670 --50.5833335 -50.4166665 -26.9166665 -26.7499995 1266 0 2670 --50.4166665 -50.2499995 -26.9166665 -26.7499995 1249 0 2670 --50.2500005 -50.0833335 -26.9166665 -26.7499995 721 0 2670 --50.0833335 -49.9166665 -26.9166665 -26.7499995 663 0 2670 --49.9166665 -49.7499995 -26.9166665 -26.7499995 679 0 2670 --49.7500005 -49.5833335 -26.9166665 -26.7499995 671 0 2670 --49.5833335 -49.4166665 -26.9166665 -26.7499995 614 0 2670 --49.4166665 -49.2499995 -26.9166665 -26.7499995 119 0 2670 --49.2500005 -49.0833335 -26.9166665 -26.7499995 59 0 2670 --49.0833335 -48.9166665 -26.9166665 -26.7499995 218 0 2670 --48.9166665 -48.7499995 -26.9166665 -26.7499995 66 0 2670 --48.7500005 -48.5833335 -26.9166665 -26.7499995 93 0 2670 --48.5833335 -48.4166665 -26.9166665 -26.7499995 0 -22 -1670 --48.4166665 -48.2499995 -26.9166665 -26.7499995 0 -44 -1670 --48.2500005 -48.0833335 -26.9166665 -26.7499995 0 -47 -1670 --48.0833335 -47.9166665 -26.9166665 -26.7499995 0 -55 -1670 --47.9166665 -47.7499995 -26.9166665 -26.7499995 0 -60 -1670 --47.7500005 -47.5833335 -26.9166665 -26.7499995 0 -94 -1670 --47.5833335 -47.4166665 -26.9166665 -26.7499995 0 -110 -1670 --47.4166665 -47.2499995 -26.9166665 -26.7499995 0 -115 -1670 --47.2500005 -47.0833335 -26.9166665 -26.7499995 0 -147 -1670 --47.0833335 -46.9166665 -26.9166665 -26.7499995 0 -182 -1670 --46.9166665 -46.7499995 -26.9166665 -26.7499995 0 -191 -1670 --46.7500005 -46.5833335 -26.9166665 -26.7499995 0 -225 -1670 --46.5833335 -46.4166665 -26.9166665 -26.7499995 0 -341 -1670 --46.4166665 -46.2499995 -26.9166665 -26.7499995 0 -482 -1670 --46.2500005 -46.0833335 -26.9166665 -26.7499995 0 -720 -1670 --46.0833335 -45.9166665 -26.9166665 -26.7499995 0 -1064 -1670 --45.9166665 -45.7499995 -26.9166665 -26.7499995 0 -1456 -1670 --45.7500005 -45.5833335 -26.9166665 -26.7499995 0 -2009 -1670 --45.5833335 -45.4166665 -26.9166665 -26.7499995 0 -2113 -1670 --45.4166665 -45.2499995 -26.9166665 -26.7499995 0 -2209 -1670 --45.2500005 -45.0833335 -26.9166665 -26.7499995 0 -2400 -1670 --45.0833335 -44.9166665 -26.9166665 -26.7499995 0 -2262 -1670 --44.9166665 -44.7499995 -26.9166665 -26.7499995 0 -2142 -1670 --44.7500005 -44.5833335 -26.9166665 -26.7499995 0 -2663 -1670 --44.5833335 -44.4166665 -26.9166665 -26.7499995 0 -2627 -1670 --44.4166665 -44.2499995 -26.9166665 -26.7499995 0 -2628 -1670 --44.2500005 -44.0833335 -26.9166665 -26.7499995 0 -2587 -1670 --44.0833335 -43.9166665 -26.9166665 -26.7499995 0 -2599 -1670 --43.9166665 -43.7499995 -26.9166665 -26.7499995 0 -2596 -1670 --43.7500005 -43.5833335 -26.9166665 -26.7499995 0 -2519 -1670 --43.5833335 -43.4166665 -26.9166665 -26.7499995 0 -2470 -1670 --43.4166665 -43.2499995 -26.9166665 -26.7499995 0 -2466 -1670 --43.2500005 -43.0833335 -26.9166665 -26.7499995 0 -2483 -1670 --43.0833335 -42.9166665 -26.9166665 -26.7499995 0 -2356 -1670 --42.9166665 -42.7499995 -26.9166665 -26.7499995 0 -2296 -1670 --42.7500005 -42.5833335 -26.9166665 -26.7499995 0 -2336 -1670 --42.5833335 -42.4166665 -26.9166665 -26.7499995 0 -2379 -1670 --42.4166665 -42.2499995 -26.9166665 -26.7499995 0 -2470 -1670 --42.2500005 -42.0833335 -26.9166665 -26.7499995 0 -2488 -1670 --42.0833335 -41.9166665 -26.9166665 -26.7499995 0 -2451 -1670 --41.9166665 -41.7499995 -26.9166665 -26.7499995 0 -2466 -1670 --41.7500005 -41.5833335 -26.9166665 -26.7499995 0 -2540 -1670 --41.5833335 -41.4166665 -26.9166665 -26.7499995 0 -2621 -1670 --41.4166665 -41.2499995 -26.9166665 -26.7499995 0 -2648 -1670 --41.2500005 -41.0833335 -26.9166665 -26.7499995 0 -2833 -1670 --41.0833335 -40.9166665 -26.9166665 -26.7499995 0 -2908 -1670 --40.9166665 -40.7499995 -26.9166665 -26.7499995 0 -3067 -1670 --40.7500005 -40.5833335 -26.9166665 -26.7499995 0 -3283 -1670 --40.5833335 -40.4166665 -26.9166665 -26.7499995 0 -3459 -1670 --40.4166665 -40.2499995 -26.9166665 -26.7499995 0 -3641 -1670 --40.2500005 -40.0833335 -26.9166665 -26.7499995 0 -3870 -1670 --40.0833335 -39.9166665 -26.9166665 -26.7499995 0 -3454 -1670 --65.0833335 -64.9166665 -27.0833335 -26.9166665 375 0 2670 --64.9166665 -64.7499995 -27.0833335 -26.9166665 433 0 2670 --64.7500005 -64.5833335 -27.0833335 -26.9166665 320 0 2670 --64.5833335 -64.4166665 -27.0833335 -26.9166665 255 0 2670 --64.4166665 -64.2499995 -27.0833335 -26.9166665 244 0 2670 --64.2500005 -64.0833335 -27.0833335 -26.9166665 191 0 2670 --64.0833335 -63.9166665 -27.0833335 -26.9166665 186 0 2670 --63.9166665 -63.7499995 -27.0833335 -26.9166665 180 0 2670 --63.7500005 -63.5833335 -27.0833335 -26.9166665 179 0 2670 --63.5833335 -63.4166665 -27.0833335 -26.9166665 180 0 2670 --63.4166665 -63.2499995 -27.0833335 -26.9166665 177 0 2670 --63.2500005 -63.0833335 -27.0833335 -26.9166665 177 0 2670 --63.0833335 -62.9166665 -27.0833335 -26.9166665 173 0 2670 --62.9166665 -62.7499995 -27.0833335 -26.9166665 170 0 2670 --62.7500005 -62.5833335 -27.0833335 -26.9166665 167 0 2670 --62.5833335 -62.4166665 -27.0833335 -26.9166665 163 0 2670 --62.4166665 -62.2499995 -27.0833335 -26.9166665 164 0 2670 --62.2500005 -62.0833335 -27.0833335 -26.9166665 165 0 2670 --62.0833335 -61.9166665 -27.0833335 -26.9166665 154 0 2670 --61.9166665 -61.7499995 -27.0833335 -26.9166665 194 0 2670 --61.7500005 -61.5833335 -27.0833335 -26.9166665 140 0 2670 --61.5833335 -61.4166665 -27.0833335 -26.9166665 107 0 2670 --61.4166665 -61.2499995 -27.0833335 -26.9166665 110 0 2670 --61.2500005 -61.0833335 -27.0833335 -26.9166665 106 0 2670 --61.0833335 -60.9166665 -27.0833335 -26.9166665 104 0 2670 --60.9166665 -60.7499995 -27.0833335 -26.9166665 100 0 2670 --60.7500005 -60.5833335 -27.0833335 -26.9166665 97 0 2670 --60.5833335 -60.4166665 -27.0833335 -26.9166665 91 0 2670 --60.4166665 -60.2499995 -27.0833335 -26.9166665 87 0 2670 --60.2500005 -60.0833335 -27.0833335 -26.9166665 82 0 2670 --60.0833335 -59.9166665 -27.0833335 -26.9166665 81 0 2670 --59.9166665 -59.7499995 -27.0833335 -26.9166665 75 0 2670 --59.7500005 -59.5833335 -27.0833335 -26.9166665 72 0 2670 --59.5833335 -59.4166665 -27.0833335 -26.9166665 72 0 2670 --59.4166665 -59.2499995 -27.0833335 -26.9166665 69 0 2670 --59.2500005 -59.0833335 -27.0833335 -26.9166665 66 0 2670 --59.0833335 -58.9166665 -27.0833335 -26.9166665 69 0 2670 --58.9166665 -58.7499995 -27.0833335 -26.9166665 61 0 2670 --58.7500005 -58.5833335 -27.0833335 -26.9166665 58 0 2670 --58.5833335 -58.4166665 -27.0833335 -26.9166665 54 0 2670 --58.4166665 -58.2499995 -27.0833335 -26.9166665 59 0 2670 --58.2500005 -58.0833335 -27.0833335 -26.9166665 60 0 2670 --58.0833335 -57.9166665 -27.0833335 -26.9166665 62 0 2670 --57.9166665 -57.7499995 -27.0833335 -26.9166665 66 0 2670 --57.7500005 -57.5833335 -27.0833335 -26.9166665 68 0 2670 --57.5833335 -57.4166665 -27.0833335 -26.9166665 70 0 2670 --57.4166665 -57.2499995 -27.0833335 -26.9166665 71 0 2670 --57.2500005 -57.0833335 -27.0833335 -26.9166665 71 0 2670 --57.0833335 -56.9166665 -27.0833335 -26.9166665 101 0 2670 --56.9166665 -56.7499995 -27.0833335 -26.9166665 155 0 2670 --56.7500005 -56.5833335 -27.0833335 -26.9166665 114 0 2670 --56.5833335 -56.4166665 -27.0833335 -26.9166665 86 0 2670 --56.4166665 -56.2499995 -27.0833335 -26.9166665 88 0 2670 --56.2500005 -56.0833335 -27.0833335 -26.9166665 181 0 2670 --56.0833335 -55.9166665 -27.0833335 -26.9166665 130 0 2670 --55.9166665 -55.7499995 -27.0833335 -26.9166665 256 0 2670 --55.7500005 -55.5833335 -27.0833335 -26.9166665 170 0 2670 --55.5833335 -55.4166665 -27.0833335 -26.9166665 204 0 2670 --55.4166665 -55.2499995 -27.0833335 -26.9166665 196 0 2670 --55.2500005 -55.0833335 -27.0833335 -26.9166665 174 0 2670 --55.0833335 -54.9166665 -27.0833335 -26.9166665 208 0 2670 --54.9166665 -54.7499995 -27.0833335 -26.9166665 488 0 2670 --54.7500005 -54.5833335 -27.0833335 -26.9166665 476 0 2670 --54.5833335 -54.4166665 -27.0833335 -26.9166665 527 0 2670 --54.4166665 -54.2499995 -27.0833335 -26.9166665 340 0 2670 --54.2500005 -54.0833335 -27.0833335 -26.9166665 487 0 2670 --54.0833335 -53.9166665 -27.0833335 -26.9166665 281 0 2670 --53.9166665 -53.7499995 -27.0833335 -26.9166665 253 0 2670 --53.7500005 -53.5833335 -27.0833335 -26.9166665 356 0 2670 --53.5833335 -53.4166665 -27.0833335 -26.9166665 470 0 2670 --53.4166665 -53.2499995 -27.0833335 -26.9166665 298 0 2670 --53.2500005 -53.0833335 -27.0833335 -26.9166665 438 0 2670 --53.0833335 -52.9166665 -27.0833335 -26.9166665 362 0 2670 --52.9166665 -52.7499995 -27.0833335 -26.9166665 498 0 2670 --52.7500005 -52.5833335 -27.0833335 -26.9166665 702 0 2670 --52.5833335 -52.4166665 -27.0833335 -26.9166665 762 0 2670 --52.4166665 -52.2499995 -27.0833335 -26.9166665 726 0 2670 --52.2500005 -52.0833335 -27.0833335 -26.9166665 885 0 2670 --52.0833335 -51.9166665 -27.0833335 -26.9166665 950 0 2670 --51.9166665 -51.7499995 -27.0833335 -26.9166665 943 0 2670 --51.7500005 -51.5833335 -27.0833335 -26.9166665 949 0 2670 --51.5833335 -51.4166665 -27.0833335 -26.9166665 857 0 2670 --51.4166665 -51.2499995 -27.0833335 -26.9166665 756 0 2670 --51.2500005 -51.0833335 -27.0833335 -26.9166665 749 0 2670 --51.0833335 -50.9166665 -27.0833335 -26.9166665 959 0 2670 --50.9166665 -50.7499995 -27.0833335 -26.9166665 964 0 2670 --50.7500005 -50.5833335 -27.0833335 -26.9166665 935 0 2670 --50.5833335 -50.4166665 -27.0833335 -26.9166665 1059 0 2670 --50.4166665 -50.2499995 -27.0833335 -26.9166665 1137 0 2670 --50.2500005 -50.0833335 -27.0833335 -26.9166665 563 0 2670 --50.0833335 -49.9166665 -27.0833335 -26.9166665 625 0 2670 --49.9166665 -49.7499995 -27.0833335 -26.9166665 577 0 2670 --49.7500005 -49.5833335 -27.0833335 -26.9166665 360 0 2670 --49.5833335 -49.4166665 -27.0833335 -26.9166665 353 0 2670 --49.4166665 -49.2499995 -27.0833335 -26.9166665 226 0 2670 --49.2500005 -49.0833335 -27.0833335 -26.9166665 483 0 2670 --49.0833335 -48.9166665 -27.0833335 -26.9166665 342 0 2670 --48.9166665 -48.7499995 -27.0833335 -26.9166665 17 0 2670 --48.7500005 -48.5833335 -27.0833335 -26.9166665 35 0 2670 --48.5833335 -48.4166665 -27.0833335 -26.9166665 0 -24 -1670 --48.4166665 -48.2499995 -27.0833335 -26.9166665 0 -42 -1670 --48.2500005 -48.0833335 -27.0833335 -26.9166665 0 -54 -1670 --48.0833335 -47.9166665 -27.0833335 -26.9166665 0 -67 -1670 --47.9166665 -47.7499995 -27.0833335 -26.9166665 0 -98 -1670 --47.7500005 -47.5833335 -27.0833335 -26.9166665 0 -105 -1670 --47.5833335 -47.4166665 -27.0833335 -26.9166665 0 -152 -1670 --47.4166665 -47.2499995 -27.0833335 -26.9166665 0 -115 -1670 --47.2500005 -47.0833335 -27.0833335 -26.9166665 0 -146 -1670 --47.0833335 -46.9166665 -27.0833335 -26.9166665 0 -186 -1670 --46.9166665 -46.7499995 -27.0833335 -26.9166665 0 -207 -1670 --46.7500005 -46.5833335 -27.0833335 -26.9166665 0 -301 -1670 --46.5833335 -46.4166665 -27.0833335 -26.9166665 0 -402 -1670 --46.4166665 -46.2499995 -27.0833335 -26.9166665 0 -627 -1670 --46.2500005 -46.0833335 -27.0833335 -26.9166665 0 -1187 -1670 --46.0833335 -45.9166665 -27.0833335 -26.9166665 0 -1426 -1670 --45.9166665 -45.7499995 -27.0833335 -26.9166665 0 -1789 -1670 --45.7500005 -45.5833335 -27.0833335 -26.9166665 0 -2077 -1670 --45.5833335 -45.4166665 -27.0833335 -26.9166665 0 -2228 -1670 --45.4166665 -45.2499995 -27.0833335 -26.9166665 0 -2290 -1670 --45.2500005 -45.0833335 -27.0833335 -26.9166665 0 -2434 -1670 --45.0833335 -44.9166665 -27.0833335 -26.9166665 0 -2454 -1670 --44.9166665 -44.7499995 -27.0833335 -26.9166665 0 -2457 -1670 --44.7500005 -44.5833335 -27.0833335 -26.9166665 0 -2667 -1670 --44.5833335 -44.4166665 -27.0833335 -26.9166665 0 -2753 -1670 --44.4166665 -44.2499995 -27.0833335 -26.9166665 0 -2687 -1670 --44.2500005 -44.0833335 -27.0833335 -26.9166665 0 -2696 -1670 --44.0833335 -43.9166665 -27.0833335 -26.9166665 0 -2647 -1670 --43.9166665 -43.7499995 -27.0833335 -26.9166665 0 -2676 -1670 --43.7500005 -43.5833335 -27.0833335 -26.9166665 0 -2624 -1670 --43.5833335 -43.4166665 -27.0833335 -26.9166665 0 -2566 -1670 --43.4166665 -43.2499995 -27.0833335 -26.9166665 0 -2533 -1670 --43.2500005 -43.0833335 -27.0833335 -26.9166665 0 -2443 -1670 --43.0833335 -42.9166665 -27.0833335 -26.9166665 0 -2489 -1670 --42.9166665 -42.7499995 -27.0833335 -26.9166665 0 -2442 -1670 --42.7500005 -42.5833335 -27.0833335 -26.9166665 0 -2394 -1670 --42.5833335 -42.4166665 -27.0833335 -26.9166665 0 -2459 -1670 --42.4166665 -42.2499995 -27.0833335 -26.9166665 0 -2430 -1670 --42.2500005 -42.0833335 -27.0833335 -26.9166665 0 -2521 -1670 --42.0833335 -41.9166665 -27.0833335 -26.9166665 0 -2674 -1670 --41.9166665 -41.7499995 -27.0833335 -26.9166665 0 -2673 -1670 --41.7500005 -41.5833335 -27.0833335 -26.9166665 0 -2766 -1670 --41.5833335 -41.4166665 -27.0833335 -26.9166665 0 -2858 -1670 --41.4166665 -41.2499995 -27.0833335 -26.9166665 0 -2897 -1670 --41.2500005 -41.0833335 -27.0833335 -26.9166665 0 -3061 -1670 --41.0833335 -40.9166665 -27.0833335 -26.9166665 0 -3096 -1670 --40.9166665 -40.7499995 -27.0833335 -26.9166665 0 -3347 -1670 --40.7500005 -40.5833335 -27.0833335 -26.9166665 0 -3240 -1670 --40.5833335 -40.4166665 -27.0833335 -26.9166665 0 -3443 -1670 --40.4166665 -40.2499995 -27.0833335 -26.9166665 0 -3673 -1670 --40.2500005 -40.0833335 -27.0833335 -26.9166665 0 -3747 -1670 --40.0833335 -39.9166665 -27.0833335 -26.9166665 0 -3934 -1670 --65.0833335 -64.9166665 -27.2500005 -27.0833335 334 0 2670 --64.9166665 -64.7499995 -27.2500005 -27.0833335 406 0 2670 --64.7500005 -64.5833335 -27.2500005 -27.0833335 293 0 2670 --64.5833335 -64.4166665 -27.2500005 -27.0833335 263 0 2670 --64.4166665 -64.2499995 -27.2500005 -27.0833335 245 0 2670 --64.2500005 -64.0833335 -27.2500005 -27.0833335 183 0 2670 --64.0833335 -63.9166665 -27.2500005 -27.0833335 168 0 2670 --63.9166665 -63.7499995 -27.2500005 -27.0833335 170 0 2670 --63.7500005 -63.5833335 -27.2500005 -27.0833335 170 0 2670 --63.5833335 -63.4166665 -27.2500005 -27.0833335 170 0 2670 --63.4166665 -63.2499995 -27.2500005 -27.0833335 169 0 2670 --63.2500005 -63.0833335 -27.2500005 -27.0833335 168 0 2670 --63.0833335 -62.9166665 -27.2500005 -27.0833335 164 0 2670 --62.9166665 -62.7499995 -27.2500005 -27.0833335 161 0 2670 --62.7500005 -62.5833335 -27.2500005 -27.0833335 162 0 2670 --62.5833335 -62.4166665 -27.2500005 -27.0833335 160 0 2670 --62.4166665 -62.2499995 -27.2500005 -27.0833335 156 0 2670 --62.2500005 -62.0833335 -27.2500005 -27.0833335 167 0 2670 --62.0833335 -61.9166665 -27.2500005 -27.0833335 155 0 2670 --61.9166665 -61.7499995 -27.2500005 -27.0833335 188 0 2670 --61.7500005 -61.5833335 -27.2500005 -27.0833335 143 0 2670 --61.5833335 -61.4166665 -27.2500005 -27.0833335 100 0 2670 --61.4166665 -61.2499995 -27.2500005 -27.0833335 104 0 2670 --61.2500005 -61.0833335 -27.2500005 -27.0833335 101 0 2670 --61.0833335 -60.9166665 -27.2500005 -27.0833335 98 0 2670 --60.9166665 -60.7499995 -27.2500005 -27.0833335 92 0 2670 --60.7500005 -60.5833335 -27.2500005 -27.0833335 91 0 2670 --60.5833335 -60.4166665 -27.2500005 -27.0833335 86 0 2670 --60.4166665 -60.2499995 -27.2500005 -27.0833335 82 0 2670 --60.2500005 -60.0833335 -27.2500005 -27.0833335 80 0 2670 --60.0833335 -59.9166665 -27.2500005 -27.0833335 75 0 2670 --59.9166665 -59.7499995 -27.2500005 -27.0833335 72 0 2670 --59.7500005 -59.5833335 -27.2500005 -27.0833335 73 0 2670 --59.5833335 -59.4166665 -27.2500005 -27.0833335 67 0 2670 --59.4166665 -59.2499995 -27.2500005 -27.0833335 64 0 2670 --59.2500005 -59.0833335 -27.2500005 -27.0833335 59 0 2670 --59.0833335 -58.9166665 -27.2500005 -27.0833335 61 0 2670 --58.9166665 -58.7499995 -27.2500005 -27.0833335 60 0 2670 --58.7500005 -58.5833335 -27.2500005 -27.0833335 52 0 2670 --58.5833335 -58.4166665 -27.2500005 -27.0833335 54 0 2670 --58.4166665 -58.2499995 -27.2500005 -27.0833335 59 0 2670 --58.2500005 -58.0833335 -27.2500005 -27.0833335 60 0 2670 --58.0833335 -57.9166665 -27.2500005 -27.0833335 61 0 2670 --57.9166665 -57.7499995 -27.2500005 -27.0833335 64 0 2670 --57.7500005 -57.5833335 -27.2500005 -27.0833335 65 0 2670 --57.5833335 -57.4166665 -27.2500005 -27.0833335 68 0 2670 --57.4166665 -57.2499995 -27.2500005 -27.0833335 69 0 2670 --57.2500005 -57.0833335 -27.2500005 -27.0833335 71 0 2670 --57.0833335 -56.9166665 -27.2500005 -27.0833335 77 0 2670 --56.9166665 -56.7499995 -27.2500005 -27.0833335 80 0 2670 --56.7500005 -56.5833335 -27.2500005 -27.0833335 82 0 2670 --56.5833335 -56.4166665 -27.2500005 -27.0833335 119 0 2670 --56.4166665 -56.2499995 -27.2500005 -27.0833335 96 0 2670 --56.2500005 -56.0833335 -27.2500005 -27.0833335 87 0 2670 --56.0833335 -55.9166665 -27.2500005 -27.0833335 156 0 2670 --55.9166665 -55.7499995 -27.2500005 -27.0833335 196 0 2670 --55.7500005 -55.5833335 -27.2500005 -27.0833335 130 0 2670 --55.5833335 -55.4166665 -27.2500005 -27.0833335 142 0 2670 --55.4166665 -55.2499995 -27.2500005 -27.0833335 151 0 2670 --55.2500005 -55.0833335 -27.2500005 -27.0833335 341 0 2670 --55.0833335 -54.9166665 -27.2500005 -27.0833335 375 0 2670 --54.9166665 -54.7499995 -27.2500005 -27.0833335 331 0 2670 --54.7500005 -54.5833335 -27.2500005 -27.0833335 464 0 2670 --54.5833335 -54.4166665 -27.2500005 -27.0833335 365 0 2670 --54.4166665 -54.2499995 -27.2500005 -27.0833335 369 0 2670 --54.2500005 -54.0833335 -27.2500005 -27.0833335 319 0 2670 --54.0833335 -53.9166665 -27.2500005 -27.0833335 273 0 2670 --53.9166665 -53.7499995 -27.2500005 -27.0833335 190 0 2670 --53.7500005 -53.5833335 -27.2500005 -27.0833335 202 0 2670 --53.5833335 -53.4166665 -27.2500005 -27.0833335 208 0 2670 --53.4166665 -53.2499995 -27.2500005 -27.0833335 289 0 2670 --53.2500005 -53.0833335 -27.2500005 -27.0833335 240 0 2670 --53.0833335 -52.9166665 -27.2500005 -27.0833335 361 0 2670 --52.9166665 -52.7499995 -27.2500005 -27.0833335 395 0 2670 --52.7500005 -52.5833335 -27.2500005 -27.0833335 644 0 2670 --52.5833335 -52.4166665 -27.2500005 -27.0833335 436 0 2670 --52.4166665 -52.2499995 -27.2500005 -27.0833335 608 0 2670 --52.2500005 -52.0833335 -27.2500005 -27.0833335 505 0 2670 --52.0833335 -51.9166665 -27.2500005 -27.0833335 706 0 2670 --51.9166665 -51.7499995 -27.2500005 -27.0833335 746 0 2670 --51.7500005 -51.5833335 -27.2500005 -27.0833335 807 0 2670 --51.5833335 -51.4166665 -27.2500005 -27.0833335 582 0 2670 --51.4166665 -51.2499995 -27.2500005 -27.0833335 844 0 2670 --51.2500005 -51.0833335 -27.2500005 -27.0833335 828 0 2670 --51.0833335 -50.9166665 -27.2500005 -27.0833335 1018 0 2670 --50.9166665 -50.7499995 -27.2500005 -27.0833335 916 0 2670 --50.7500005 -50.5833335 -27.2500005 -27.0833335 884 0 2670 --50.5833335 -50.4166665 -27.2500005 -27.0833335 998 0 2670 --50.4166665 -50.2499995 -27.2500005 -27.0833335 1117 0 2670 --50.2500005 -50.0833335 -27.2500005 -27.0833335 727 0 2670 --50.0833335 -49.9166665 -27.2500005 -27.0833335 539 0 2670 --49.9166665 -49.7499995 -27.2500005 -27.0833335 370 0 2670 --49.7500005 -49.5833335 -27.2500005 -27.0833335 657 0 2670 --49.5833335 -49.4166665 -27.2500005 -27.0833335 476 0 2670 --49.4166665 -49.2499995 -27.2500005 -27.0833335 417 0 2670 --49.2500005 -49.0833335 -27.2500005 -27.0833335 620 0 2670 --49.0833335 -48.9166665 -27.2500005 -27.0833335 136 0 2670 --48.9166665 -48.7499995 -27.2500005 -27.0833335 153 0 2670 --48.7500005 -48.5833335 -27.2500005 -27.0833335 258 0 2670 --48.5833335 -48.4166665 -27.2500005 -27.0833335 45 0 2670 --48.4166665 -48.2499995 -27.2500005 -27.0833335 0 -24 -1670 --48.2500005 -48.0833335 -27.2500005 -27.0833335 0 -63 -1670 --48.0833335 -47.9166665 -27.2500005 -27.0833335 0 -70 -1670 --47.9166665 -47.7499995 -27.2500005 -27.0833335 0 -75 -1670 --47.7500005 -47.5833335 -27.2500005 -27.0833335 0 -117 -1670 --47.5833335 -47.4166665 -27.2500005 -27.0833335 0 -132 -1670 --47.4166665 -47.2499995 -27.2500005 -27.0833335 0 -150 -1670 --47.2500005 -47.0833335 -27.2500005 -27.0833335 0 -181 -1670 --47.0833335 -46.9166665 -27.2500005 -27.0833335 0 -340 -1670 --46.9166665 -46.7499995 -27.2500005 -27.0833335 0 -470 -1670 --46.7500005 -46.5833335 -27.2500005 -27.0833335 0 -636 -1670 --46.5833335 -46.4166665 -27.2500005 -27.0833335 0 -958 -1670 --46.4166665 -46.2499995 -27.2500005 -27.0833335 0 -1399 -1670 --46.2500005 -46.0833335 -27.2500005 -27.0833335 0 -1604 -1670 --46.0833335 -45.9166665 -27.2500005 -27.0833335 0 -1833 -1670 --45.9166665 -45.7499995 -27.2500005 -27.0833335 0 -1993 -1670 --45.7500005 -45.5833335 -27.2500005 -27.0833335 0 -2151 -1670 --45.5833335 -45.4166665 -27.2500005 -27.0833335 0 -2245 -1670 --45.4166665 -45.2499995 -27.2500005 -27.0833335 0 -2564 -1670 --45.2500005 -45.0833335 -27.2500005 -27.0833335 0 -2646 -1670 --45.0833335 -44.9166665 -27.2500005 -27.0833335 0 -2639 -1670 --44.9166665 -44.7499995 -27.2500005 -27.0833335 0 -2576 -1670 --44.7500005 -44.5833335 -27.2500005 -27.0833335 0 -2777 -1670 --44.5833335 -44.4166665 -27.2500005 -27.0833335 0 -2681 -1670 --44.4166665 -44.2499995 -27.2500005 -27.0833335 0 -2689 -1670 --44.2500005 -44.0833335 -27.2500005 -27.0833335 0 -2845 -1670 --44.0833335 -43.9166665 -27.2500005 -27.0833335 0 -2862 -1670 --43.9166665 -43.7499995 -27.2500005 -27.0833335 0 -2711 -1670 --43.7500005 -43.5833335 -27.2500005 -27.0833335 0 -2644 -1670 --43.5833335 -43.4166665 -27.2500005 -27.0833335 0 -2622 -1670 --43.4166665 -43.2499995 -27.2500005 -27.0833335 0 -2530 -1670 --43.2500005 -43.0833335 -27.2500005 -27.0833335 0 -2439 -1670 --43.0833335 -42.9166665 -27.2500005 -27.0833335 0 -2372 -1670 --42.9166665 -42.7499995 -27.2500005 -27.0833335 0 -2399 -1670 --42.7500005 -42.5833335 -27.2500005 -27.0833335 0 -2462 -1670 --42.5833335 -42.4166665 -27.2500005 -27.0833335 0 -2431 -1670 --42.4166665 -42.2499995 -27.2500005 -27.0833335 0 -2553 -1670 --42.2500005 -42.0833335 -27.2500005 -27.0833335 0 -2704 -1670 --42.0833335 -41.9166665 -27.2500005 -27.0833335 0 -2849 -1670 --41.9166665 -41.7499995 -27.2500005 -27.0833335 0 -2909 -1670 --41.7500005 -41.5833335 -27.2500005 -27.0833335 0 -2985 -1670 --41.5833335 -41.4166665 -27.2500005 -27.0833335 0 -3046 -1670 --41.4166665 -41.2499995 -27.2500005 -27.0833335 0 -3118 -1670 --41.2500005 -41.0833335 -27.2500005 -27.0833335 0 -3189 -1670 --41.0833335 -40.9166665 -27.2500005 -27.0833335 0 -3274 -1670 --40.9166665 -40.7499995 -27.2500005 -27.0833335 0 -3313 -1670 --40.7500005 -40.5833335 -27.2500005 -27.0833335 0 -3369 -1670 --40.5833335 -40.4166665 -27.2500005 -27.0833335 0 -3478 -1670 --40.4166665 -40.2499995 -27.2500005 -27.0833335 0 -3629 -1670 --40.2500005 -40.0833335 -27.2500005 -27.0833335 0 -3599 -1670 --40.0833335 -39.9166665 -27.2500005 -27.0833335 0 -3796 -1670 --65.0833335 -64.9166665 -27.4166665 -27.2499995 301 0 2670 --64.9166665 -64.7499995 -27.4166665 -27.2499995 319 0 2670 --64.7500005 -64.5833335 -27.4166665 -27.2499995 328 0 2670 --64.5833335 -64.4166665 -27.4166665 -27.2499995 242 0 2670 --64.4166665 -64.2499995 -27.4166665 -27.2499995 237 0 2670 --64.2500005 -64.0833335 -27.4166665 -27.2499995 168 0 2670 --64.0833335 -63.9166665 -27.4166665 -27.2499995 159 0 2670 --63.9166665 -63.7499995 -27.4166665 -27.2499995 159 0 2670 --63.7500005 -63.5833335 -27.4166665 -27.2499995 160 0 2670 --63.5833335 -63.4166665 -27.4166665 -27.2499995 160 0 2670 --63.4166665 -63.2499995 -27.4166665 -27.2499995 159 0 2670 --63.2500005 -63.0833335 -27.4166665 -27.2499995 158 0 2670 --63.0833335 -62.9166665 -27.4166665 -27.2499995 158 0 2670 --62.9166665 -62.7499995 -27.4166665 -27.2499995 159 0 2670 --62.7500005 -62.5833335 -27.4166665 -27.2499995 157 0 2670 --62.5833335 -62.4166665 -27.4166665 -27.2499995 156 0 2670 --62.4166665 -62.2499995 -27.4166665 -27.2499995 155 0 2670 --62.2500005 -62.0833335 -27.4166665 -27.2499995 152 0 2670 --62.0833335 -61.9166665 -27.4166665 -27.2499995 153 0 2670 --61.9166665 -61.7499995 -27.4166665 -27.2499995 133 0 2670 --61.7500005 -61.5833335 -27.4166665 -27.2499995 127 0 2670 --61.5833335 -61.4166665 -27.4166665 -27.2499995 111 0 2670 --61.4166665 -61.2499995 -27.4166665 -27.2499995 95 0 2670 --61.2500005 -61.0833335 -27.4166665 -27.2499995 94 0 2670 --61.0833335 -60.9166665 -27.4166665 -27.2499995 93 0 2670 --60.9166665 -60.7499995 -27.4166665 -27.2499995 89 0 2670 --60.7500005 -60.5833335 -27.4166665 -27.2499995 85 0 2670 --60.5833335 -60.4166665 -27.4166665 -27.2499995 81 0 2670 --60.4166665 -60.2499995 -27.4166665 -27.2499995 78 0 2670 --60.2500005 -60.0833335 -27.4166665 -27.2499995 77 0 2670 --60.0833335 -59.9166665 -27.4166665 -27.2499995 73 0 2670 --59.9166665 -59.7499995 -27.4166665 -27.2499995 69 0 2670 --59.7500005 -59.5833335 -27.4166665 -27.2499995 71 0 2670 --59.5833335 -59.4166665 -27.4166665 -27.2499995 68 0 2670 --59.4166665 -59.2499995 -27.4166665 -27.2499995 63 0 2670 --59.2500005 -59.0833335 -27.4166665 -27.2499995 60 0 2670 --59.0833335 -58.9166665 -27.4166665 -27.2499995 55 0 2670 --58.9166665 -58.7499995 -27.4166665 -27.2499995 52 0 2670 --58.7500005 -58.5833335 -27.4166665 -27.2499995 51 0 2670 --58.5833335 -58.4166665 -27.4166665 -27.2499995 61 0 2670 --58.4166665 -58.2499995 -27.4166665 -27.2499995 65 0 2670 --58.2500005 -58.0833335 -27.4166665 -27.2499995 67 0 2670 --58.0833335 -57.9166665 -27.4166665 -27.2499995 66 0 2670 --57.9166665 -57.7499995 -27.4166665 -27.2499995 55 0 2670 --57.7500005 -57.5833335 -27.4166665 -27.2499995 56 0 2670 --57.5833335 -57.4166665 -27.4166665 -27.2499995 55 0 2670 --57.4166665 -57.2499995 -27.4166665 -27.2499995 64 0 2670 --57.2500005 -57.0833335 -27.4166665 -27.2499995 72 0 2670 --57.0833335 -56.9166665 -27.4166665 -27.2499995 71 0 2670 --56.9166665 -56.7499995 -27.4166665 -27.2499995 76 0 2670 --56.7500005 -56.5833335 -27.4166665 -27.2499995 77 0 2670 --56.5833335 -56.4166665 -27.4166665 -27.2499995 75 0 2670 --56.4166665 -56.2499995 -27.4166665 -27.2499995 82 0 2670 --56.2500005 -56.0833335 -27.4166665 -27.2499995 75 0 2670 --56.0833335 -55.9166665 -27.4166665 -27.2499995 75 0 2670 --55.9166665 -55.7499995 -27.4166665 -27.2499995 103 0 2670 --55.7500005 -55.5833335 -27.4166665 -27.2499995 165 0 2670 --55.5833335 -55.4166665 -27.4166665 -27.2499995 131 0 2670 --55.4166665 -55.2499995 -27.4166665 -27.2499995 194 0 2670 --55.2500005 -55.0833335 -27.4166665 -27.2499995 327 0 2670 --55.0833335 -54.9166665 -27.4166665 -27.2499995 293 0 2670 --54.9166665 -54.7499995 -27.4166665 -27.2499995 232 0 2670 --54.7500005 -54.5833335 -27.4166665 -27.2499995 258 0 2670 --54.5833335 -54.4166665 -27.4166665 -27.2499995 379 0 2670 --54.4166665 -54.2499995 -27.4166665 -27.2499995 266 0 2670 --54.2500005 -54.0833335 -27.4166665 -27.2499995 276 0 2670 --54.0833335 -53.9166665 -27.4166665 -27.2499995 280 0 2670 --53.9166665 -53.7499995 -27.4166665 -27.2499995 388 0 2670 --53.7500005 -53.5833335 -27.4166665 -27.2499995 344 0 2670 --53.5833335 -53.4166665 -27.4166665 -27.2499995 456 0 2670 --53.4166665 -53.2499995 -27.4166665 -27.2499995 332 0 2670 --53.2500005 -53.0833335 -27.4166665 -27.2499995 439 0 2670 --53.0833335 -52.9166665 -27.4166665 -27.2499995 537 0 2670 --52.9166665 -52.7499995 -27.4166665 -27.2499995 549 0 2670 --52.7500005 -52.5833335 -27.4166665 -27.2499995 508 0 2670 --52.5833335 -52.4166665 -27.4166665 -27.2499995 555 0 2670 --52.4166665 -52.2499995 -27.4166665 -27.2499995 475 0 2670 --52.2500005 -52.0833335 -27.4166665 -27.2499995 475 0 2670 --52.0833335 -51.9166665 -27.4166665 -27.2499995 431 0 2670 --51.9166665 -51.7499995 -27.4166665 -27.2499995 623 0 2670 --51.7500005 -51.5833335 -27.4166665 -27.2499995 525 0 2670 --51.5833335 -51.4166665 -27.4166665 -27.2499995 635 0 2670 --51.4166665 -51.2499995 -27.4166665 -27.2499995 780 0 2670 --51.2500005 -51.0833335 -27.4166665 -27.2499995 962 0 2670 --51.0833335 -50.9166665 -27.4166665 -27.2499995 980 0 2670 --50.9166665 -50.7499995 -27.4166665 -27.2499995 923 0 2670 --50.7500005 -50.5833335 -27.4166665 -27.2499995 902 0 2670 --50.5833335 -50.4166665 -27.4166665 -27.2499995 1038 0 2670 --50.4166665 -50.2499995 -27.4166665 -27.2499995 1129 0 2670 --50.2500005 -50.0833335 -27.4166665 -27.2499995 861 0 2670 --50.0833335 -49.9166665 -27.4166665 -27.2499995 645 0 2670 --49.9166665 -49.7499995 -27.4166665 -27.2499995 395 0 2670 --49.7500005 -49.5833335 -27.4166665 -27.2499995 472 0 2670 --49.5833335 -49.4166665 -27.4166665 -27.2499995 670 0 2670 --49.4166665 -49.2499995 -27.4166665 -27.2499995 403 0 2670 --49.2500005 -49.0833335 -27.4166665 -27.2499995 323 0 2670 --49.0833335 -48.9166665 -27.4166665 -27.2499995 291 0 2670 --48.9166665 -48.7499995 -27.4166665 -27.2499995 152 0 2670 --48.7500005 -48.5833335 -27.4166665 -27.2499995 204 0 2670 --48.5833335 -48.4166665 -27.4166665 -27.2499995 0 -1 -1670 --48.4166665 -48.2499995 -27.4166665 -27.2499995 0 -24 -1670 --48.2500005 -48.0833335 -27.4166665 -27.2499995 0 -53 -1670 --48.0833335 -47.9166665 -27.4166665 -27.2499995 0 -85 -1670 --47.9166665 -47.7499995 -27.4166665 -27.2499995 0 -106 -1670 --47.7500005 -47.5833335 -27.4166665 -27.2499995 0 -118 -1670 --47.5833335 -47.4166665 -27.4166665 -27.2499995 0 -138 -1670 --47.4166665 -47.2499995 -27.4166665 -27.2499995 0 -163 -1670 --47.2500005 -47.0833335 -27.4166665 -27.2499995 0 -262 -1670 --47.0833335 -46.9166665 -27.4166665 -27.2499995 0 -633 -1670 --46.9166665 -46.7499995 -27.4166665 -27.2499995 0 -794 -1670 --46.7500005 -46.5833335 -27.4166665 -27.2499995 0 -1045 -1670 --46.5833335 -46.4166665 -27.4166665 -27.2499995 0 -1398 -1670 --46.4166665 -46.2499995 -27.4166665 -27.2499995 0 -1732 -1670 --46.2500005 -46.0833335 -27.4166665 -27.2499995 0 -1861 -1670 --46.0833335 -45.9166665 -27.4166665 -27.2499995 0 -2027 -1670 --45.9166665 -45.7499995 -27.4166665 -27.2499995 0 -2234 -1670 --45.7500005 -45.5833335 -27.4166665 -27.2499995 0 -2238 -1670 --45.5833335 -45.4166665 -27.4166665 -27.2499995 0 -2403 -1670 --45.4166665 -45.2499995 -27.4166665 -27.2499995 0 -2564 -1670 --45.2500005 -45.0833335 -27.4166665 -27.2499995 0 -2579 -1670 --45.0833335 -44.9166665 -27.4166665 -27.2499995 0 -2607 -1670 --44.9166665 -44.7499995 -27.4166665 -27.2499995 0 -2604 -1670 --44.7500005 -44.5833335 -27.4166665 -27.2499995 0 -2332 -1670 --44.5833335 -44.4166665 -27.4166665 -27.2499995 0 -2926 -1670 --44.4166665 -44.2499995 -27.4166665 -27.2499995 0 -2714 -1670 --44.2500005 -44.0833335 -27.4166665 -27.2499995 0 -2770 -1670 --44.0833335 -43.9166665 -27.4166665 -27.2499995 0 -2645 -1670 --43.9166665 -43.7499995 -27.4166665 -27.2499995 0 -2816 -1670 --43.7500005 -43.5833335 -27.4166665 -27.2499995 0 -2741 -1670 --43.5833335 -43.4166665 -27.4166665 -27.2499995 0 -2735 -1670 --43.4166665 -43.2499995 -27.4166665 -27.2499995 0 -2709 -1670 --43.2500005 -43.0833335 -27.4166665 -27.2499995 0 -2613 -1670 --43.0833335 -42.9166665 -27.4166665 -27.2499995 0 -2443 -1670 --42.9166665 -42.7499995 -27.4166665 -27.2499995 0 -2426 -1670 --42.7500005 -42.5833335 -27.4166665 -27.2499995 0 -2486 -1670 --42.5833335 -42.4166665 -27.4166665 -27.2499995 0 -2600 -1670 --42.4166665 -42.2499995 -27.4166665 -27.2499995 0 -2781 -1670 --42.2500005 -42.0833335 -27.4166665 -27.2499995 0 -2864 -1670 --42.0833335 -41.9166665 -27.4166665 -27.2499995 0 -2937 -1670 --41.9166665 -41.7499995 -27.4166665 -27.2499995 0 -3034 -1670 --41.7500005 -41.5833335 -27.4166665 -27.2499995 0 -3062 -1670 --41.5833335 -41.4166665 -27.4166665 -27.2499995 0 -3133 -1670 --41.4166665 -41.2499995 -27.4166665 -27.2499995 0 -3202 -1670 --41.2500005 -41.0833335 -27.4166665 -27.2499995 0 -3208 -1670 --41.0833335 -40.9166665 -27.4166665 -27.2499995 0 -3302 -1670 --40.9166665 -40.7499995 -27.4166665 -27.2499995 0 -3417 -1670 --40.7500005 -40.5833335 -27.4166665 -27.2499995 0 -3471 -1670 --40.5833335 -40.4166665 -27.4166665 -27.2499995 0 -3482 -1670 --40.4166665 -40.2499995 -27.4166665 -27.2499995 0 -3572 -1670 --40.2500005 -40.0833335 -27.4166665 -27.2499995 0 -3871 -1670 --40.0833335 -39.9166665 -27.4166665 -27.2499995 0 -3730 -1670 --65.0833335 -64.9166665 -27.5833335 -27.4166665 274 0 2670 --64.9166665 -64.7499995 -27.5833335 -27.4166665 268 0 2670 --64.7500005 -64.5833335 -27.5833335 -27.4166665 265 0 2670 --64.5833335 -64.4166665 -27.5833335 -27.4166665 236 0 2670 --64.4166665 -64.2499995 -27.5833335 -27.4166665 232 0 2670 --64.2500005 -64.0833335 -27.5833335 -27.4166665 176 0 2670 --64.0833335 -63.9166665 -27.5833335 -27.4166665 161 0 2670 --63.9166665 -63.7499995 -27.5833335 -27.4166665 154 0 2670 --63.7500005 -63.5833335 -27.5833335 -27.4166665 151 0 2670 --63.5833335 -63.4166665 -27.5833335 -27.4166665 149 0 2670 --63.4166665 -63.2499995 -27.5833335 -27.4166665 150 0 2670 --63.2500005 -63.0833335 -27.5833335 -27.4166665 150 0 2670 --63.0833335 -62.9166665 -27.5833335 -27.4166665 152 0 2670 --62.9166665 -62.7499995 -27.5833335 -27.4166665 151 0 2670 --62.7500005 -62.5833335 -27.5833335 -27.4166665 148 0 2670 --62.5833335 -62.4166665 -27.5833335 -27.4166665 153 0 2670 --62.4166665 -62.2499995 -27.5833335 -27.4166665 144 0 2670 --62.2500005 -62.0833335 -27.5833335 -27.4166665 147 0 2670 --62.0833335 -61.9166665 -27.5833335 -27.4166665 168 0 2670 --61.9166665 -61.7499995 -27.5833335 -27.4166665 127 0 2670 --61.7500005 -61.5833335 -27.5833335 -27.4166665 101 0 2670 --61.5833335 -61.4166665 -27.5833335 -27.4166665 115 0 2670 --61.4166665 -61.2499995 -27.5833335 -27.4166665 87 0 2670 --61.2500005 -61.0833335 -27.5833335 -27.4166665 87 0 2670 --61.0833335 -60.9166665 -27.5833335 -27.4166665 87 0 2670 --60.9166665 -60.7499995 -27.5833335 -27.4166665 82 0 2670 --60.7500005 -60.5833335 -27.5833335 -27.4166665 78 0 2670 --60.5833335 -60.4166665 -27.5833335 -27.4166665 76 0 2670 --60.4166665 -60.2499995 -27.5833335 -27.4166665 75 0 2670 --60.2500005 -60.0833335 -27.5833335 -27.4166665 71 0 2670 --60.0833335 -59.9166665 -27.5833335 -27.4166665 73 0 2670 --59.9166665 -59.7499995 -27.5833335 -27.4166665 72 0 2670 --59.7500005 -59.5833335 -27.5833335 -27.4166665 67 0 2670 --59.5833335 -59.4166665 -27.5833335 -27.4166665 66 0 2670 --59.4166665 -59.2499995 -27.5833335 -27.4166665 63 0 2670 --59.2500005 -59.0833335 -27.5833335 -27.4166665 55 0 2670 --59.0833335 -58.9166665 -27.5833335 -27.4166665 51 0 2670 --58.9166665 -58.7499995 -27.5833335 -27.4166665 61 0 2670 --58.7500005 -58.5833335 -27.5833335 -27.4166665 62 0 2670 --58.5833335 -58.4166665 -27.5833335 -27.4166665 62 0 2670 --58.4166665 -58.2499995 -27.5833335 -27.4166665 63 0 2670 --58.2500005 -58.0833335 -27.5833335 -27.4166665 66 0 2670 --58.0833335 -57.9166665 -27.5833335 -27.4166665 66 0 2670 --57.9166665 -57.7499995 -27.5833335 -27.4166665 67 0 2670 --57.7500005 -57.5833335 -27.5833335 -27.4166665 69 0 2670 --57.5833335 -57.4166665 -27.5833335 -27.4166665 70 0 2670 --57.4166665 -57.2499995 -27.5833335 -27.4166665 72 0 2670 --57.2500005 -57.0833335 -27.5833335 -27.4166665 60 0 2670 --57.0833335 -56.9166665 -27.5833335 -27.4166665 60 0 2670 --56.9166665 -56.7499995 -27.5833335 -27.4166665 62 0 2670 --56.7500005 -56.5833335 -27.5833335 -27.4166665 81 0 2670 --56.5833335 -56.4166665 -27.5833335 -27.4166665 75 0 2670 --56.4166665 -56.2499995 -27.5833335 -27.4166665 75 0 2670 --56.2500005 -56.0833335 -27.5833335 -27.4166665 104 0 2670 --56.0833335 -55.9166665 -27.5833335 -27.4166665 148 0 2670 --55.9166665 -55.7499995 -27.5833335 -27.4166665 88 0 2670 --55.7500005 -55.5833335 -27.5833335 -27.4166665 130 0 2670 --55.5833335 -55.4166665 -27.5833335 -27.4166665 261 0 2670 --55.4166665 -55.2499995 -27.5833335 -27.4166665 231 0 2670 --55.2500005 -55.0833335 -27.5833335 -27.4166665 322 0 2670 --55.0833335 -54.9166665 -27.5833335 -27.4166665 286 0 2670 --54.9166665 -54.7499995 -27.5833335 -27.4166665 265 0 2670 --54.7500005 -54.5833335 -27.5833335 -27.4166665 135 0 2670 --54.5833335 -54.4166665 -27.5833335 -27.4166665 171 0 2670 --54.4166665 -54.2499995 -27.5833335 -27.4166665 200 0 2670 --54.2500005 -54.0833335 -27.5833335 -27.4166665 263 0 2670 --54.0833335 -53.9166665 -27.5833335 -27.4166665 310 0 2670 --53.9166665 -53.7499995 -27.5833335 -27.4166665 325 0 2670 --53.7500005 -53.5833335 -27.5833335 -27.4166665 451 0 2670 --53.5833335 -53.4166665 -27.5833335 -27.4166665 467 0 2670 --53.4166665 -53.2499995 -27.5833335 -27.4166665 408 0 2670 --53.2500005 -53.0833335 -27.5833335 -27.4166665 322 0 2670 --53.0833335 -52.9166665 -27.5833335 -27.4166665 536 0 2670 --52.9166665 -52.7499995 -27.5833335 -27.4166665 574 0 2670 --52.7500005 -52.5833335 -27.5833335 -27.4166665 592 0 2670 --52.5833335 -52.4166665 -27.5833335 -27.4166665 649 0 2670 --52.4166665 -52.2499995 -27.5833335 -27.4166665 706 0 2670 --52.2500005 -52.0833335 -27.5833335 -27.4166665 620 0 2670 --52.0833335 -51.9166665 -27.5833335 -27.4166665 546 0 2670 --51.9166665 -51.7499995 -27.5833335 -27.4166665 481 0 2670 --51.7500005 -51.5833335 -27.5833335 -27.4166665 554 0 2670 --51.5833335 -51.4166665 -27.5833335 -27.4166665 698 0 2670 --51.4166665 -51.2499995 -27.5833335 -27.4166665 825 0 2670 --51.2500005 -51.0833335 -27.5833335 -27.4166665 866 0 2670 --51.0833335 -50.9166665 -27.5833335 -27.4166665 864 0 2670 --50.9166665 -50.7499995 -27.5833335 -27.4166665 783 0 2670 --50.7500005 -50.5833335 -27.5833335 -27.4166665 867 0 2670 --50.5833335 -50.4166665 -27.5833335 -27.4166665 888 0 2670 --50.4166665 -50.2499995 -27.5833335 -27.4166665 898 0 2670 --50.2500005 -50.0833335 -27.5833335 -27.4166665 851 0 2670 --50.0833335 -49.9166665 -27.5833335 -27.4166665 855 0 2670 --49.9166665 -49.7499995 -27.5833335 -27.4166665 722 0 2670 --49.7500005 -49.5833335 -27.5833335 -27.4166665 511 0 2670 --49.5833335 -49.4166665 -27.5833335 -27.4166665 639 0 2670 --49.4166665 -49.2499995 -27.5833335 -27.4166665 740 0 2670 --49.2500005 -49.0833335 -27.5833335 -27.4166665 776 0 2670 --49.0833335 -48.9166665 -27.5833335 -27.4166665 302 0 2670 --48.9166665 -48.7499995 -27.5833335 -27.4166665 219 0 2670 --48.7500005 -48.5833335 -27.5833335 -27.4166665 79 0 2670 --48.5833335 -48.4166665 -27.5833335 -27.4166665 85 0 2670 --48.4166665 -48.2499995 -27.5833335 -27.4166665 0 -22 -1670 --48.2500005 -48.0833335 -27.5833335 -27.4166665 0 -60 -1670 --48.0833335 -47.9166665 -27.5833335 -27.4166665 0 -71 -1670 --47.9166665 -47.7499995 -27.5833335 -27.4166665 0 -113 -1670 --47.7500005 -47.5833335 -27.5833335 -27.4166665 0 -126 -1670 --47.5833335 -47.4166665 -27.5833335 -27.4166665 0 -151 -1670 --47.4166665 -47.2499995 -27.5833335 -27.4166665 0 -207 -1670 --47.2500005 -47.0833335 -27.5833335 -27.4166665 0 -449 -1670 --47.0833335 -46.9166665 -27.5833335 -27.4166665 0 -673 -1670 --46.9166665 -46.7499995 -27.5833335 -27.4166665 0 -1031 -1670 --46.7500005 -46.5833335 -27.5833335 -27.4166665 0 -1230 -1670 --46.5833335 -46.4166665 -27.5833335 -27.4166665 0 -1558 -1670 --46.4166665 -46.2499995 -27.5833335 -27.4166665 0 -1853 -1670 --46.2500005 -46.0833335 -27.5833335 -27.4166665 0 -2074 -1670 --46.0833335 -45.9166665 -27.5833335 -27.4166665 0 -2195 -1670 --45.9166665 -45.7499995 -27.5833335 -27.4166665 0 -2273 -1670 --45.7500005 -45.5833335 -27.5833335 -27.4166665 0 -2399 -1670 --45.5833335 -45.4166665 -27.5833335 -27.4166665 0 -2395 -1670 --45.4166665 -45.2499995 -27.5833335 -27.4166665 0 -2620 -1670 --45.2500005 -45.0833335 -27.5833335 -27.4166665 0 -2601 -1670 --45.0833335 -44.9166665 -27.5833335 -27.4166665 0 -2638 -1670 --44.9166665 -44.7499995 -27.5833335 -27.4166665 0 -2677 -1670 --44.7500005 -44.5833335 -27.5833335 -27.4166665 0 -2745 -1670 --44.5833335 -44.4166665 -27.5833335 -27.4166665 0 -2880 -1670 --44.4166665 -44.2499995 -27.5833335 -27.4166665 0 -2770 -1670 --44.2500005 -44.0833335 -27.5833335 -27.4166665 0 -2780 -1670 --44.0833335 -43.9166665 -27.5833335 -27.4166665 0 -2906 -1670 --43.9166665 -43.7499995 -27.5833335 -27.4166665 0 -2883 -1670 --43.7500005 -43.5833335 -27.5833335 -27.4166665 0 -2856 -1670 --43.5833335 -43.4166665 -27.5833335 -27.4166665 0 -2844 -1670 --43.4166665 -43.2499995 -27.5833335 -27.4166665 0 -2821 -1670 --43.2500005 -43.0833335 -27.5833335 -27.4166665 0 -2666 -1670 --43.0833335 -42.9166665 -27.5833335 -27.4166665 0 -2621 -1670 --42.9166665 -42.7499995 -27.5833335 -27.4166665 0 -2622 -1670 --42.7500005 -42.5833335 -27.5833335 -27.4166665 0 -2662 -1670 --42.5833335 -42.4166665 -27.5833335 -27.4166665 0 -2790 -1670 --42.4166665 -42.2499995 -27.5833335 -27.4166665 0 -2901 -1670 --42.2500005 -42.0833335 -27.5833335 -27.4166665 0 -2948 -1670 --42.0833335 -41.9166665 -27.5833335 -27.4166665 0 -3068 -1670 --41.9166665 -41.7499995 -27.5833335 -27.4166665 0 -3055 -1670 --41.7500005 -41.5833335 -27.5833335 -27.4166665 0 -3183 -1670 --41.5833335 -41.4166665 -27.5833335 -27.4166665 0 -3118 -1670 --41.4166665 -41.2499995 -27.5833335 -27.4166665 0 -3166 -1670 --41.2500005 -41.0833335 -27.5833335 -27.4166665 0 -3221 -1670 --41.0833335 -40.9166665 -27.5833335 -27.4166665 0 -3280 -1670 --40.9166665 -40.7499995 -27.5833335 -27.4166665 0 -3174 -1670 --40.7500005 -40.5833335 -27.5833335 -27.4166665 0 -3213 -1670 --40.5833335 -40.4166665 -27.5833335 -27.4166665 0 -3206 -1670 --40.4166665 -40.2499995 -27.5833335 -27.4166665 0 -3278 -1670 --40.2500005 -40.0833335 -27.5833335 -27.4166665 0 -3464 -1670 --40.0833335 -39.9166665 -27.5833335 -27.4166665 0 -3556 -1670 --65.0833335 -64.9166665 -27.7500005 -27.5833335 291 0 2670 --64.9166665 -64.7499995 -27.7500005 -27.5833335 378 0 2670 --64.7500005 -64.5833335 -27.7500005 -27.5833335 335 0 2670 --64.5833335 -64.4166665 -27.7500005 -27.5833335 274 0 2670 --64.4166665 -64.2499995 -27.7500005 -27.5833335 213 0 2670 --64.2500005 -64.0833335 -27.7500005 -27.5833335 184 0 2670 --64.0833335 -63.9166665 -27.7500005 -27.5833335 167 0 2670 --63.9166665 -63.7499995 -27.7500005 -27.5833335 158 0 2670 --63.7500005 -63.5833335 -27.7500005 -27.5833335 148 0 2670 --63.5833335 -63.4166665 -27.7500005 -27.5833335 143 0 2670 --63.4166665 -63.2499995 -27.7500005 -27.5833335 146 0 2670 --63.2500005 -63.0833335 -27.7500005 -27.5833335 143 0 2670 --63.0833335 -62.9166665 -27.7500005 -27.5833335 143 0 2670 --62.9166665 -62.7499995 -27.7500005 -27.5833335 143 0 2670 --62.7500005 -62.5833335 -27.7500005 -27.5833335 144 0 2670 --62.5833335 -62.4166665 -27.7500005 -27.5833335 138 0 2670 --62.4166665 -62.2499995 -27.7500005 -27.5833335 138 0 2670 --62.2500005 -62.0833335 -27.7500005 -27.5833335 165 0 2670 --62.0833335 -61.9166665 -27.7500005 -27.5833335 130 0 2670 --61.9166665 -61.7499995 -27.7500005 -27.5833335 117 0 2670 --61.7500005 -61.5833335 -27.7500005 -27.5833335 78 0 2670 --61.5833335 -61.4166665 -27.7500005 -27.5833335 79 0 2670 --61.4166665 -61.2499995 -27.7500005 -27.5833335 81 0 2670 --61.2500005 -61.0833335 -27.7500005 -27.5833335 80 0 2670 --61.0833335 -60.9166665 -27.7500005 -27.5833335 79 0 2670 --60.9166665 -60.7499995 -27.7500005 -27.5833335 76 0 2670 --60.7500005 -60.5833335 -27.7500005 -27.5833335 74 0 2670 --60.5833335 -60.4166665 -27.7500005 -27.5833335 73 0 2670 --60.4166665 -60.2499995 -27.7500005 -27.5833335 69 0 2670 --60.2500005 -60.0833335 -27.7500005 -27.5833335 68 0 2670 --60.0833335 -59.9166665 -27.7500005 -27.5833335 66 0 2670 --59.9166665 -59.7499995 -27.7500005 -27.5833335 65 0 2670 --59.7500005 -59.5833335 -27.7500005 -27.5833335 62 0 2670 --59.5833335 -59.4166665 -27.7500005 -27.5833335 63 0 2670 --59.4166665 -59.2499995 -27.7500005 -27.5833335 61 0 2670 --59.2500005 -59.0833335 -27.7500005 -27.5833335 50 0 2670 --59.0833335 -58.9166665 -27.7500005 -27.5833335 48 0 2670 --58.9166665 -58.7499995 -27.7500005 -27.5833335 46 0 2670 --58.7500005 -58.5833335 -27.7500005 -27.5833335 63 0 2670 --58.5833335 -58.4166665 -27.7500005 -27.5833335 64 0 2670 --58.4166665 -58.2499995 -27.7500005 -27.5833335 64 0 2670 --58.2500005 -58.0833335 -27.7500005 -27.5833335 66 0 2670 --58.0833335 -57.9166665 -27.7500005 -27.5833335 66 0 2670 --57.9166665 -57.7499995 -27.7500005 -27.5833335 69 0 2670 --57.7500005 -57.5833335 -27.7500005 -27.5833335 70 0 2670 --57.5833335 -57.4166665 -27.7500005 -27.5833335 71 0 2670 --57.4166665 -57.2499995 -27.7500005 -27.5833335 70 0 2670 --57.2500005 -57.0833335 -27.7500005 -27.5833335 72 0 2670 --57.0833335 -56.9166665 -27.7500005 -27.5833335 72 0 2670 --56.9166665 -56.7499995 -27.7500005 -27.5833335 73 0 2670 --56.7500005 -56.5833335 -27.7500005 -27.5833335 72 0 2670 --56.5833335 -56.4166665 -27.7500005 -27.5833335 80 0 2670 --56.4166665 -56.2499995 -27.7500005 -27.5833335 91 0 2670 --56.2500005 -56.0833335 -27.7500005 -27.5833335 104 0 2670 --56.0833335 -55.9166665 -27.7500005 -27.5833335 135 0 2670 --55.9166665 -55.7499995 -27.7500005 -27.5833335 133 0 2670 --55.7500005 -55.5833335 -27.7500005 -27.5833335 125 0 2670 --55.5833335 -55.4166665 -27.7500005 -27.5833335 280 0 2670 --55.4166665 -55.2499995 -27.7500005 -27.5833335 215 0 2670 --55.2500005 -55.0833335 -27.7500005 -27.5833335 192 0 2670 --55.0833335 -54.9166665 -27.7500005 -27.5833335 286 0 2670 --54.9166665 -54.7499995 -27.7500005 -27.5833335 173 0 2670 --54.7500005 -54.5833335 -27.7500005 -27.5833335 148 0 2670 --54.5833335 -54.4166665 -27.7500005 -27.5833335 178 0 2670 --54.4166665 -54.2499995 -27.7500005 -27.5833335 260 0 2670 --54.2500005 -54.0833335 -27.7500005 -27.5833335 190 0 2670 --54.0833335 -53.9166665 -27.7500005 -27.5833335 319 0 2670 --53.9166665 -53.7499995 -27.7500005 -27.5833335 443 0 2670 --53.7500005 -53.5833335 -27.7500005 -27.5833335 475 0 2670 --53.5833335 -53.4166665 -27.7500005 -27.5833335 546 0 2670 --53.4166665 -53.2499995 -27.7500005 -27.5833335 543 0 2670 --53.2500005 -53.0833335 -27.7500005 -27.5833335 377 0 2670 --53.0833335 -52.9166665 -27.7500005 -27.5833335 410 0 2670 --52.9166665 -52.7499995 -27.7500005 -27.5833335 644 0 2670 --52.7500005 -52.5833335 -27.7500005 -27.5833335 571 0 2670 --52.5833335 -52.4166665 -27.7500005 -27.5833335 570 0 2670 --52.4166665 -52.2499995 -27.7500005 -27.5833335 722 0 2670 --52.2500005 -52.0833335 -27.7500005 -27.5833335 593 0 2670 --52.0833335 -51.9166665 -27.7500005 -27.5833335 597 0 2670 --51.9166665 -51.7499995 -27.7500005 -27.5833335 511 0 2670 --51.7500005 -51.5833335 -27.7500005 -27.5833335 707 0 2670 --51.5833335 -51.4166665 -27.7500005 -27.5833335 682 0 2670 --51.4166665 -51.2499995 -27.7500005 -27.5833335 620 0 2670 --51.2500005 -51.0833335 -27.7500005 -27.5833335 824 0 2670 --51.0833335 -50.9166665 -27.7500005 -27.5833335 709 0 2670 --50.9166665 -50.7499995 -27.7500005 -27.5833335 861 0 2670 --50.7500005 -50.5833335 -27.7500005 -27.5833335 805 0 2670 --50.5833335 -50.4166665 -27.7500005 -27.5833335 973 0 2670 --50.4166665 -50.2499995 -27.7500005 -27.5833335 875 0 2670 --50.2500005 -50.0833335 -27.7500005 -27.5833335 893 0 2670 --50.0833335 -49.9166665 -27.7500005 -27.5833335 847 0 2670 --49.9166665 -49.7499995 -27.7500005 -27.5833335 876 0 2670 --49.7500005 -49.5833335 -27.7500005 -27.5833335 925 0 2670 --49.5833335 -49.4166665 -27.7500005 -27.5833335 598 0 2670 --49.4166665 -49.2499995 -27.7500005 -27.5833335 804 0 2670 --49.2500005 -49.0833335 -27.7500005 -27.5833335 1019 0 2670 --49.0833335 -48.9166665 -27.7500005 -27.5833335 813 0 2670 --48.9166665 -48.7499995 -27.7500005 -27.5833335 333 0 2670 --48.7500005 -48.5833335 -27.7500005 -27.5833335 4 0 2670 --48.5833335 -48.4166665 -27.7500005 -27.5833335 42 0 2670 --48.4166665 -48.2499995 -27.7500005 -27.5833335 0 -36 -1670 --48.2500005 -48.0833335 -27.7500005 -27.5833335 0 -76 -1670 --48.0833335 -47.9166665 -27.7500005 -27.5833335 0 -92 -1670 --47.9166665 -47.7499995 -27.7500005 -27.5833335 0 -71 -1670 --47.7500005 -47.5833335 -27.7500005 -27.5833335 0 -139 -1670 --47.5833335 -47.4166665 -27.7500005 -27.5833335 0 -155 -1670 --47.4166665 -47.2499995 -27.7500005 -27.5833335 0 -210 -1670 --47.2500005 -47.0833335 -27.7500005 -27.5833335 0 -471 -1670 --47.0833335 -46.9166665 -27.7500005 -27.5833335 0 -630 -1670 --46.9166665 -46.7499995 -27.7500005 -27.5833335 0 -942 -1670 --46.7500005 -46.5833335 -27.7500005 -27.5833335 0 -1275 -1670 --46.5833335 -46.4166665 -27.7500005 -27.5833335 0 -1616 -1670 --46.4166665 -46.2499995 -27.7500005 -27.5833335 0 -1947 -1670 --46.2500005 -46.0833335 -27.7500005 -27.5833335 0 -2194 -1670 --46.0833335 -45.9166665 -27.7500005 -27.5833335 0 -2273 -1670 --45.9166665 -45.7499995 -27.7500005 -27.5833335 0 -2363 -1670 --45.7500005 -45.5833335 -27.7500005 -27.5833335 0 -2460 -1670 --45.5833335 -45.4166665 -27.7500005 -27.5833335 0 -2556 -1670 --45.4166665 -45.2499995 -27.7500005 -27.5833335 0 -2658 -1670 --45.2500005 -45.0833335 -27.7500005 -27.5833335 0 -2760 -1670 --45.0833335 -44.9166665 -27.7500005 -27.5833335 0 -2909 -1670 --44.9166665 -44.7499995 -27.7500005 -27.5833335 0 -3016 -1670 --44.7500005 -44.5833335 -27.7500005 -27.5833335 0 -3079 -1670 --44.5833335 -44.4166665 -27.7500005 -27.5833335 0 -3145 -1670 --44.4166665 -44.2499995 -27.7500005 -27.5833335 0 -2902 -1670 --44.2500005 -44.0833335 -27.7500005 -27.5833335 0 -2861 -1670 --44.0833335 -43.9166665 -27.7500005 -27.5833335 0 -2980 -1670 --43.9166665 -43.7499995 -27.7500005 -27.5833335 0 -3009 -1670 --43.7500005 -43.5833335 -27.7500005 -27.5833335 0 -3249 -1670 --43.5833335 -43.4166665 -27.7500005 -27.5833335 0 -2882 -1670 --43.4166665 -43.2499995 -27.7500005 -27.5833335 0 -2969 -1670 --43.2500005 -43.0833335 -27.7500005 -27.5833335 0 -2796 -1670 --43.0833335 -42.9166665 -27.7500005 -27.5833335 0 -2667 -1670 --42.9166665 -42.7499995 -27.7500005 -27.5833335 0 -2664 -1670 --42.7500005 -42.5833335 -27.7500005 -27.5833335 0 -2775 -1670 --42.5833335 -42.4166665 -27.7500005 -27.5833335 0 -2846 -1670 --42.4166665 -42.2499995 -27.7500005 -27.5833335 0 -2812 -1670 --42.2500005 -42.0833335 -27.7500005 -27.5833335 0 -2974 -1670 --42.0833335 -41.9166665 -27.7500005 -27.5833335 0 -3045 -1670 --41.9166665 -41.7499995 -27.7500005 -27.5833335 0 -2985 -1670 --41.7500005 -41.5833335 -27.7500005 -27.5833335 0 -3122 -1670 --41.5833335 -41.4166665 -27.7500005 -27.5833335 0 -3176 -1670 --41.4166665 -41.2499995 -27.7500005 -27.5833335 0 -3083 -1670 --41.2500005 -41.0833335 -27.7500005 -27.5833335 0 -3091 -1670 --41.0833335 -40.9166665 -27.7500005 -27.5833335 0 -3038 -1670 --40.9166665 -40.7499995 -27.7500005 -27.5833335 0 -3085 -1670 --40.7500005 -40.5833335 -27.7500005 -27.5833335 0 -3032 -1670 --40.5833335 -40.4166665 -27.7500005 -27.5833335 0 -3014 -1670 --40.4166665 -40.2499995 -27.7500005 -27.5833335 0 -2925 -1670 --40.2500005 -40.0833335 -27.7500005 -27.5833335 0 -3502 -1670 --40.0833335 -39.9166665 -27.7500005 -27.5833335 0 -3002 -1670 --65.0833335 -64.9166665 -27.9166665 -27.7499995 374 0 2670 --64.9166665 -64.7499995 -27.9166665 -27.7499995 495 0 2670 --64.7500005 -64.5833335 -27.9166665 -27.7499995 395 0 2670 --64.5833335 -64.4166665 -27.9166665 -27.7499995 312 0 2670 --64.4166665 -64.2499995 -27.9166665 -27.7499995 214 0 2670 --64.2500005 -64.0833335 -27.9166665 -27.7499995 179 0 2670 --64.0833335 -63.9166665 -27.9166665 -27.7499995 164 0 2670 --63.9166665 -63.7499995 -27.9166665 -27.7499995 156 0 2670 --63.7500005 -63.5833335 -27.9166665 -27.7499995 146 0 2670 --63.5833335 -63.4166665 -27.9166665 -27.7499995 138 0 2670 --63.4166665 -63.2499995 -27.9166665 -27.7499995 139 0 2670 --63.2500005 -63.0833335 -27.9166665 -27.7499995 133 0 2670 --63.0833335 -62.9166665 -27.9166665 -27.7499995 133 0 2670 --62.9166665 -62.7499995 -27.9166665 -27.7499995 136 0 2670 --62.7500005 -62.5833335 -27.9166665 -27.7499995 134 0 2670 --62.5833335 -62.4166665 -27.9166665 -27.7499995 131 0 2670 --62.4166665 -62.2499995 -27.9166665 -27.7499995 148 0 2670 --62.2500005 -62.0833335 -27.9166665 -27.7499995 132 0 2670 --62.0833335 -61.9166665 -27.9166665 -27.7499995 106 0 2670 --61.9166665 -61.7499995 -27.9166665 -27.7499995 120 0 2670 --61.7500005 -61.5833335 -27.9166665 -27.7499995 95 0 2670 --61.5833335 -61.4166665 -27.9166665 -27.7499995 72 0 2670 --61.4166665 -61.2499995 -27.9166665 -27.7499995 74 0 2670 --61.2500005 -61.0833335 -27.9166665 -27.7499995 74 0 2670 --61.0833335 -60.9166665 -27.9166665 -27.7499995 74 0 2670 --60.9166665 -60.7499995 -27.9166665 -27.7499995 73 0 2670 --60.7500005 -60.5833335 -27.9166665 -27.7499995 71 0 2670 --60.5833335 -60.4166665 -27.9166665 -27.7499995 70 0 2670 --60.4166665 -60.2499995 -27.9166665 -27.7499995 67 0 2670 --60.2500005 -60.0833335 -27.9166665 -27.7499995 65 0 2670 --60.0833335 -59.9166665 -27.9166665 -27.7499995 65 0 2670 --59.9166665 -59.7499995 -27.9166665 -27.7499995 62 0 2670 --59.7500005 -59.5833335 -27.9166665 -27.7499995 61 0 2670 --59.5833335 -59.4166665 -27.9166665 -27.7499995 61 0 2670 --59.4166665 -59.2499995 -27.9166665 -27.7499995 57 0 2670 --59.2500005 -59.0833335 -27.9166665 -27.7499995 49 0 2670 --59.0833335 -58.9166665 -27.9166665 -27.7499995 46 0 2670 --58.9166665 -58.7499995 -27.9166665 -27.7499995 46 0 2670 --58.7500005 -58.5833335 -27.9166665 -27.7499995 63 0 2670 --58.5833335 -58.4166665 -27.9166665 -27.7499995 64 0 2670 --58.4166665 -58.2499995 -27.9166665 -27.7499995 66 0 2670 --58.2500005 -58.0833335 -27.9166665 -27.7499995 66 0 2670 --58.0833335 -57.9166665 -27.9166665 -27.7499995 69 0 2670 --57.9166665 -57.7499995 -27.9166665 -27.7499995 72 0 2670 --57.7500005 -57.5833335 -27.9166665 -27.7499995 71 0 2670 --57.5833335 -57.4166665 -27.9166665 -27.7499995 68 0 2670 --57.4166665 -57.2499995 -27.9166665 -27.7499995 75 0 2670 --57.2500005 -57.0833335 -27.9166665 -27.7499995 68 0 2670 --57.0833335 -56.9166665 -27.9166665 -27.7499995 70 0 2670 --56.9166665 -56.7499995 -27.9166665 -27.7499995 72 0 2670 --56.7500005 -56.5833335 -27.9166665 -27.7499995 72 0 2670 --56.5833335 -56.4166665 -27.9166665 -27.7499995 75 0 2670 --56.4166665 -56.2499995 -27.9166665 -27.7499995 90 0 2670 --56.2500005 -56.0833335 -27.9166665 -27.7499995 89 0 2670 --56.0833335 -55.9166665 -27.9166665 -27.7499995 128 0 2670 --55.9166665 -55.7499995 -27.9166665 -27.7499995 150 0 2670 --55.7500005 -55.5833335 -27.9166665 -27.7499995 153 0 2670 --55.5833335 -55.4166665 -27.9166665 -27.7499995 266 0 2670 --55.4166665 -55.2499995 -27.9166665 -27.7499995 132 0 2670 --55.2500005 -55.0833335 -27.9166665 -27.7499995 148 0 2670 --55.0833335 -54.9166665 -27.9166665 -27.7499995 131 0 2670 --54.9166665 -54.7499995 -27.9166665 -27.7499995 141 0 2670 --54.7500005 -54.5833335 -27.9166665 -27.7499995 287 0 2670 --54.5833335 -54.4166665 -27.9166665 -27.7499995 289 0 2670 --54.4166665 -54.2499995 -27.9166665 -27.7499995 261 0 2670 --54.2500005 -54.0833335 -27.9166665 -27.7499995 321 0 2670 --54.0833335 -53.9166665 -27.9166665 -27.7499995 367 0 2670 --53.9166665 -53.7499995 -27.9166665 -27.7499995 452 0 2670 --53.7500005 -53.5833335 -27.9166665 -27.7499995 516 0 2670 --53.5833335 -53.4166665 -27.9166665 -27.7499995 514 0 2670 --53.4166665 -53.2499995 -27.9166665 -27.7499995 596 0 2670 --53.2500005 -53.0833335 -27.9166665 -27.7499995 448 0 2670 --53.0833335 -52.9166665 -27.9166665 -27.7499995 377 0 2670 --52.9166665 -52.7499995 -27.9166665 -27.7499995 578 0 2670 --52.7500005 -52.5833335 -27.9166665 -27.7499995 599 0 2670 --52.5833335 -52.4166665 -27.9166665 -27.7499995 695 0 2670 --52.4166665 -52.2499995 -27.9166665 -27.7499995 717 0 2670 --52.2500005 -52.0833335 -27.9166665 -27.7499995 693 0 2670 --52.0833335 -51.9166665 -27.9166665 -27.7499995 484 0 2670 --51.9166665 -51.7499995 -27.9166665 -27.7499995 701 0 2670 --51.7500005 -51.5833335 -27.9166665 -27.7499995 701 0 2670 --51.5833335 -51.4166665 -27.9166665 -27.7499995 775 0 2670 --51.4166665 -51.2499995 -27.9166665 -27.7499995 799 0 2670 --51.2500005 -51.0833335 -27.9166665 -27.7499995 847 0 2670 --51.0833335 -50.9166665 -27.9166665 -27.7499995 851 0 2670 --50.9166665 -50.7499995 -27.9166665 -27.7499995 1001 0 2670 --50.7500005 -50.5833335 -27.9166665 -27.7499995 922 0 2670 --50.5833335 -50.4166665 -27.9166665 -27.7499995 920 0 2670 --50.4166665 -50.2499995 -27.9166665 -27.7499995 922 0 2670 --50.2500005 -50.0833335 -27.9166665 -27.7499995 1110 0 2670 --50.0833335 -49.9166665 -27.9166665 -27.7499995 1286 0 2670 --49.9166665 -49.7499995 -27.9166665 -27.7499995 1081 0 2670 --49.7500005 -49.5833335 -27.9166665 -27.7499995 943 0 2670 --49.5833335 -49.4166665 -27.9166665 -27.7499995 993 0 2670 --49.4166665 -49.2499995 -27.9166665 -27.7499995 1453 0 2670 --49.2500005 -49.0833335 -27.9166665 -27.7499995 868 0 2670 --49.0833335 -48.9166665 -27.9166665 -27.7499995 781 0 2670 --48.9166665 -48.7499995 -27.9166665 -27.7499995 788 0 2670 --48.7500005 -48.5833335 -27.9166665 -27.7499995 225 0 2670 --48.5833335 -48.4166665 -27.9166665 -27.7499995 0 0 2670 --48.4166665 -48.2499995 -27.9166665 -27.7499995 0 -61 -1670 --48.2500005 -48.0833335 -27.9166665 -27.7499995 0 -73 -1670 --48.0833335 -47.9166665 -27.9166665 -27.7499995 0 -78 -1670 --47.9166665 -47.7499995 -27.9166665 -27.7499995 0 -108 -1670 --47.7500005 -47.5833335 -27.9166665 -27.7499995 0 -154 -1670 --47.5833335 -47.4166665 -27.9166665 -27.7499995 0 -231 -1670 --47.4166665 -47.2499995 -27.9166665 -27.7499995 0 -237 -1670 --47.2500005 -47.0833335 -27.9166665 -27.7499995 0 -353 -1670 --47.0833335 -46.9166665 -27.9166665 -27.7499995 0 -528 -1670 --46.9166665 -46.7499995 -27.9166665 -27.7499995 0 -774 -1670 --46.7500005 -46.5833335 -27.9166665 -27.7499995 0 -1228 -1670 --46.5833335 -46.4166665 -27.9166665 -27.7499995 0 -1623 -1670 --46.4166665 -46.2499995 -27.9166665 -27.7499995 0 -2057 -1670 --46.2500005 -46.0833335 -27.9166665 -27.7499995 0 -2302 -1670 --46.0833335 -45.9166665 -27.9166665 -27.7499995 0 -2397 -1670 --45.9166665 -45.7499995 -27.9166665 -27.7499995 0 -2490 -1670 --45.7500005 -45.5833335 -27.9166665 -27.7499995 0 -2672 -1670 --45.5833335 -45.4166665 -27.9166665 -27.7499995 0 -2853 -1670 --45.4166665 -45.2499995 -27.9166665 -27.7499995 0 -3009 -1670 --45.2500005 -45.0833335 -27.9166665 -27.7499995 0 -2997 -1670 --45.0833335 -44.9166665 -27.9166665 -27.7499995 0 -3124 -1670 --44.9166665 -44.7499995 -27.9166665 -27.7499995 0 -3413 -1670 --44.7500005 -44.5833335 -27.9166665 -27.7499995 0 -3413 -1670 --44.5833335 -44.4166665 -27.9166665 -27.7499995 0 -3452 -1670 --44.4166665 -44.2499995 -27.9166665 -27.7499995 0 -3367 -1670 --44.2500005 -44.0833335 -27.9166665 -27.7499995 0 -3276 -1670 --44.0833335 -43.9166665 -27.9166665 -27.7499995 0 -3338 -1670 --43.9166665 -43.7499995 -27.9166665 -27.7499995 0 -3250 -1670 --43.7500005 -43.5833335 -27.9166665 -27.7499995 0 -3249 -1670 --43.5833335 -43.4166665 -27.9166665 -27.7499995 0 -3381 -1670 --43.4166665 -43.2499995 -27.9166665 -27.7499995 0 -3072 -1670 --43.2500005 -43.0833335 -27.9166665 -27.7499995 0 -2876 -1670 --43.0833335 -42.9166665 -27.9166665 -27.7499995 0 -2741 -1670 --42.9166665 -42.7499995 -27.9166665 -27.7499995 0 -2745 -1670 --42.7500005 -42.5833335 -27.9166665 -27.7499995 0 -2855 -1670 --42.5833335 -42.4166665 -27.9166665 -27.7499995 0 -2913 -1670 --42.4166665 -42.2499995 -27.9166665 -27.7499995 0 -2919 -1670 --42.2500005 -42.0833335 -27.9166665 -27.7499995 0 -3012 -1670 --42.0833335 -41.9166665 -27.9166665 -27.7499995 0 -2947 -1670 --41.9166665 -41.7499995 -27.9166665 -27.7499995 0 -3198 -1670 --41.7500005 -41.5833335 -27.9166665 -27.7499995 0 -3167 -1670 --41.5833335 -41.4166665 -27.9166665 -27.7499995 0 -3291 -1670 --41.4166665 -41.2499995 -27.9166665 -27.7499995 0 -3119 -1670 --41.2500005 -41.0833335 -27.9166665 -27.7499995 0 -2977 -1670 --41.0833335 -40.9166665 -27.9166665 -27.7499995 0 -2985 -1670 --40.9166665 -40.7499995 -27.9166665 -27.7499995 0 -3173 -1670 --40.7500005 -40.5833335 -27.9166665 -27.7499995 0 -3202 -1670 --40.5833335 -40.4166665 -27.9166665 -27.7499995 0 -2856 -1670 --40.4166665 -40.2499995 -27.9166665 -27.7499995 0 -2703 -1670 --40.2500005 -40.0833335 -27.9166665 -27.7499995 0 -2686 -1670 --40.0833335 -39.9166665 -27.9166665 -27.7499995 0 -3155 -1670 --65.0833335 -64.9166665 -28.0833335 -27.9166665 433 0 2670 --64.9166665 -64.7499995 -28.0833335 -27.9166665 645 0 2670 --64.7500005 -64.5833335 -28.0833335 -27.9166665 423 0 2670 --64.5833335 -64.4166665 -28.0833335 -27.9166665 292 0 2670 --64.4166665 -64.2499995 -28.0833335 -27.9166665 219 0 2670 --64.2500005 -64.0833335 -28.0833335 -27.9166665 164 0 2670 --64.0833335 -63.9166665 -28.0833335 -27.9166665 155 0 2670 --63.9166665 -63.7499995 -28.0833335 -27.9166665 145 0 2670 --63.7500005 -63.5833335 -28.0833335 -27.9166665 141 0 2670 --63.5833335 -63.4166665 -28.0833335 -27.9166665 136 0 2670 --63.4166665 -63.2499995 -28.0833335 -27.9166665 132 0 2670 --63.2500005 -63.0833335 -28.0833335 -27.9166665 127 0 2670 --63.0833335 -62.9166665 -28.0833335 -27.9166665 128 0 2670 --62.9166665 -62.7499995 -28.0833335 -27.9166665 128 0 2670 --62.7500005 -62.5833335 -28.0833335 -27.9166665 127 0 2670 --62.5833335 -62.4166665 -28.0833335 -27.9166665 126 0 2670 --62.4166665 -62.2499995 -28.0833335 -27.9166665 123 0 2670 --62.2500005 -62.0833335 -28.0833335 -27.9166665 84 0 2670 --62.0833335 -61.9166665 -28.0833335 -27.9166665 83 0 2670 --61.9166665 -61.7499995 -28.0833335 -27.9166665 80 0 2670 --61.7500005 -61.5833335 -28.0833335 -27.9166665 74 0 2670 --61.5833335 -61.4166665 -28.0833335 -27.9166665 70 0 2670 --61.4166665 -61.2499995 -28.0833335 -27.9166665 69 0 2670 --61.2500005 -61.0833335 -28.0833335 -27.9166665 71 0 2670 --61.0833335 -60.9166665 -28.0833335 -27.9166665 68 0 2670 --60.9166665 -60.7499995 -28.0833335 -27.9166665 67 0 2670 --60.7500005 -60.5833335 -28.0833335 -27.9166665 67 0 2670 --60.5833335 -60.4166665 -28.0833335 -27.9166665 67 0 2670 --60.4166665 -60.2499995 -28.0833335 -27.9166665 64 0 2670 --60.2500005 -60.0833335 -28.0833335 -27.9166665 63 0 2670 --60.0833335 -59.9166665 -28.0833335 -27.9166665 61 0 2670 --59.9166665 -59.7499995 -28.0833335 -27.9166665 62 0 2670 --59.7500005 -59.5833335 -28.0833335 -27.9166665 57 0 2670 --59.5833335 -59.4166665 -28.0833335 -27.9166665 58 0 2670 --59.4166665 -59.2499995 -28.0833335 -27.9166665 54 0 2670 --59.2500005 -59.0833335 -28.0833335 -27.9166665 45 0 2670 --59.0833335 -58.9166665 -28.0833335 -27.9166665 43 0 2670 --58.9166665 -58.7499995 -28.0833335 -27.9166665 41 0 2670 --58.7500005 -58.5833335 -28.0833335 -27.9166665 64 0 2670 --58.5833335 -58.4166665 -28.0833335 -27.9166665 66 0 2670 --58.4166665 -58.2499995 -28.0833335 -27.9166665 68 0 2670 --58.2500005 -58.0833335 -28.0833335 -27.9166665 73 0 2670 --58.0833335 -57.9166665 -28.0833335 -27.9166665 72 0 2670 --57.9166665 -57.7499995 -28.0833335 -27.9166665 65 0 2670 --57.7500005 -57.5833335 -28.0833335 -27.9166665 69 0 2670 --57.5833335 -57.4166665 -28.0833335 -27.9166665 74 0 2670 --57.4166665 -57.2499995 -28.0833335 -27.9166665 66 0 2670 --57.2500005 -57.0833335 -28.0833335 -27.9166665 66 0 2670 --57.0833335 -56.9166665 -28.0833335 -27.9166665 69 0 2670 --56.9166665 -56.7499995 -28.0833335 -27.9166665 69 0 2670 --56.7500005 -56.5833335 -28.0833335 -27.9166665 70 0 2670 --56.5833335 -56.4166665 -28.0833335 -27.9166665 82 0 2670 --56.4166665 -56.2499995 -28.0833335 -27.9166665 82 0 2670 --56.2500005 -56.0833335 -28.0833335 -27.9166665 104 0 2670 --56.0833335 -55.9166665 -28.0833335 -27.9166665 133 0 2670 --55.9166665 -55.7499995 -28.0833335 -27.9166665 153 0 2670 --55.7500005 -55.5833335 -28.0833335 -27.9166665 82 0 2670 --55.5833335 -55.4166665 -28.0833335 -27.9166665 148 0 2670 --55.4166665 -55.2499995 -28.0833335 -27.9166665 116 0 2670 --55.2500005 -55.0833335 -28.0833335 -27.9166665 196 0 2670 --55.0833335 -54.9166665 -28.0833335 -27.9166665 207 0 2670 --54.9166665 -54.7499995 -28.0833335 -27.9166665 205 0 2670 --54.7500005 -54.5833335 -28.0833335 -27.9166665 265 0 2670 --54.5833335 -54.4166665 -28.0833335 -27.9166665 348 0 2670 --54.4166665 -54.2499995 -28.0833335 -27.9166665 372 0 2670 --54.2500005 -54.0833335 -28.0833335 -27.9166665 336 0 2670 --54.0833335 -53.9166665 -28.0833335 -27.9166665 397 0 2670 --53.9166665 -53.7499995 -28.0833335 -27.9166665 454 0 2670 --53.7500005 -53.5833335 -28.0833335 -27.9166665 529 0 2670 --53.5833335 -53.4166665 -28.0833335 -27.9166665 557 0 2670 --53.4166665 -53.2499995 -28.0833335 -27.9166665 566 0 2670 --53.2500005 -53.0833335 -28.0833335 -27.9166665 568 0 2670 --53.0833335 -52.9166665 -28.0833335 -27.9166665 472 0 2670 --52.9166665 -52.7499995 -28.0833335 -27.9166665 615 0 2670 --52.7500005 -52.5833335 -28.0833335 -27.9166665 668 0 2670 --52.5833335 -52.4166665 -28.0833335 -27.9166665 630 0 2670 --52.4166665 -52.2499995 -28.0833335 -27.9166665 688 0 2670 --52.2500005 -52.0833335 -28.0833335 -27.9166665 626 0 2670 --52.0833335 -51.9166665 -28.0833335 -27.9166665 685 0 2670 --51.9166665 -51.7499995 -28.0833335 -27.9166665 667 0 2670 --51.7500005 -51.5833335 -28.0833335 -27.9166665 606 0 2670 --51.5833335 -51.4166665 -28.0833335 -27.9166665 806 0 2670 --51.4166665 -51.2499995 -28.0833335 -27.9166665 800 0 2670 --51.2500005 -51.0833335 -28.0833335 -27.9166665 899 0 2670 --51.0833335 -50.9166665 -28.0833335 -27.9166665 756 0 2670 --50.9166665 -50.7499995 -28.0833335 -27.9166665 913 0 2670 --50.7500005 -50.5833335 -28.0833335 -27.9166665 868 0 2670 --50.5833335 -50.4166665 -28.0833335 -27.9166665 962 0 2670 --50.4166665 -50.2499995 -28.0833335 -27.9166665 1105 0 2670 --50.2500005 -50.0833335 -28.0833335 -27.9166665 1171 0 2670 --50.0833335 -49.9166665 -28.0833335 -27.9166665 1146 0 2670 --49.9166665 -49.7499995 -28.0833335 -27.9166665 1406 0 2670 --49.7500005 -49.5833335 -28.0833335 -27.9166665 1196 0 2670 --49.5833335 -49.4166665 -28.0833335 -27.9166665 1133 0 2670 --49.4166665 -49.2499995 -28.0833335 -27.9166665 1347 0 2670 --49.2500005 -49.0833335 -28.0833335 -27.9166665 336 0 2670 --49.0833335 -48.9166665 -28.0833335 -27.9166665 583 0 2670 --48.9166665 -48.7499995 -28.0833335 -27.9166665 643 0 2670 --48.7500005 -48.5833335 -28.0833335 -27.9166665 278 0 2670 --48.5833335 -48.4166665 -28.0833335 -27.9166665 0 -38 -1670 --48.4166665 -48.2499995 -28.0833335 -27.9166665 0 -68 -1670 --48.2500005 -48.0833335 -28.0833335 -27.9166665 0 -79 -1670 --48.0833335 -47.9166665 -28.0833335 -27.9166665 0 -67 -1670 --47.9166665 -47.7499995 -28.0833335 -27.9166665 0 -133 -1670 --47.7500005 -47.5833335 -28.0833335 -27.9166665 0 -182 -1670 --47.5833335 -47.4166665 -28.0833335 -27.9166665 0 -177 -1670 --47.4166665 -47.2499995 -28.0833335 -27.9166665 0 -218 -1670 --47.2500005 -47.0833335 -28.0833335 -27.9166665 0 -269 -1670 --47.0833335 -46.9166665 -28.0833335 -27.9166665 0 -456 -1670 --46.9166665 -46.7499995 -28.0833335 -27.9166665 0 -580 -1670 --46.7500005 -46.5833335 -28.0833335 -27.9166665 0 -1213 -1670 --46.5833335 -46.4166665 -28.0833335 -27.9166665 0 -1728 -1670 --46.4166665 -46.2499995 -28.0833335 -27.9166665 0 -2209 -1670 --46.2500005 -46.0833335 -28.0833335 -27.9166665 0 -2377 -1670 --46.0833335 -45.9166665 -28.0833335 -27.9166665 0 -2510 -1670 --45.9166665 -45.7499995 -28.0833335 -27.9166665 0 -2644 -1670 --45.7500005 -45.5833335 -28.0833335 -27.9166665 0 -2748 -1670 --45.5833335 -45.4166665 -28.0833335 -27.9166665 0 -2833 -1670 --45.4166665 -45.2499995 -28.0833335 -27.9166665 0 -3039 -1670 --45.2500005 -45.0833335 -28.0833335 -27.9166665 0 -3102 -1670 --45.0833335 -44.9166665 -28.0833335 -27.9166665 0 -3392 -1670 --44.9166665 -44.7499995 -28.0833335 -27.9166665 0 -3397 -1670 --44.7500005 -44.5833335 -28.0833335 -27.9166665 0 -3373 -1670 --44.5833335 -44.4166665 -28.0833335 -27.9166665 0 -3441 -1670 --44.4166665 -44.2499995 -28.0833335 -27.9166665 0 -3366 -1670 --44.2500005 -44.0833335 -28.0833335 -27.9166665 0 -3319 -1670 --44.0833335 -43.9166665 -28.0833335 -27.9166665 0 -3396 -1670 --43.9166665 -43.7499995 -28.0833335 -27.9166665 0 -3487 -1670 --43.7500005 -43.5833335 -28.0833335 -27.9166665 0 -3442 -1670 --43.5833335 -43.4166665 -28.0833335 -27.9166665 0 -3353 -1670 --43.4166665 -43.2499995 -28.0833335 -27.9166665 0 -3555 -1670 --43.2500005 -43.0833335 -28.0833335 -27.9166665 0 -3047 -1670 --43.0833335 -42.9166665 -28.0833335 -27.9166665 0 -2750 -1670 --42.9166665 -42.7499995 -28.0833335 -27.9166665 0 -2982 -1670 --42.7500005 -42.5833335 -28.0833335 -27.9166665 0 -2975 -1670 --42.5833335 -42.4166665 -28.0833335 -27.9166665 0 -2954 -1670 --42.4166665 -42.2499995 -28.0833335 -27.9166665 0 -3074 -1670 --42.2500005 -42.0833335 -28.0833335 -27.9166665 0 -2984 -1670 --42.0833335 -41.9166665 -28.0833335 -27.9166665 0 -3131 -1670 --41.9166665 -41.7499995 -28.0833335 -27.9166665 0 -3027 -1670 --41.7500005 -41.5833335 -28.0833335 -27.9166665 0 -2915 -1670 --41.5833335 -41.4166665 -28.0833335 -27.9166665 0 -3130 -1670 --41.4166665 -41.2499995 -28.0833335 -27.9166665 0 -3215 -1670 --41.2500005 -41.0833335 -28.0833335 -27.9166665 0 -3131 -1670 --41.0833335 -40.9166665 -28.0833335 -27.9166665 0 -3124 -1670 --40.9166665 -40.7499995 -28.0833335 -27.9166665 0 -2985 -1670 --40.7500005 -40.5833335 -28.0833335 -27.9166665 0 -2796 -1670 --40.5833335 -40.4166665 -28.0833335 -27.9166665 0 -2548 -1670 --40.4166665 -40.2499995 -28.0833335 -27.9166665 0 -2613 -1670 --40.2500005 -40.0833335 -28.0833335 -27.9166665 0 -2640 -1670 --40.0833335 -39.9166665 -28.0833335 -27.9166665 0 -3693 -1670 --65.0833335 -64.9166665 -28.2500005 -28.0833335 470 0 2670 --64.9166665 -64.7499995 -28.2500005 -28.0833335 648 0 2670 --64.7500005 -64.5833335 -28.2500005 -28.0833335 338 0 2670 --64.5833335 -64.4166665 -28.2500005 -28.0833335 247 0 2670 --64.4166665 -64.2499995 -28.2500005 -28.0833335 185 0 2670 --64.2500005 -64.0833335 -28.2500005 -28.0833335 151 0 2670 --64.0833335 -63.9166665 -28.2500005 -28.0833335 147 0 2670 --63.9166665 -63.7499995 -28.2500005 -28.0833335 140 0 2670 --63.7500005 -63.5833335 -28.2500005 -28.0833335 134 0 2670 --63.5833335 -63.4166665 -28.2500005 -28.0833335 129 0 2670 --63.4166665 -63.2499995 -28.2500005 -28.0833335 126 0 2670 --63.2500005 -63.0833335 -28.2500005 -28.0833335 123 0 2670 --63.0833335 -62.9166665 -28.2500005 -28.0833335 120 0 2670 --62.9166665 -62.7499995 -28.2500005 -28.0833335 118 0 2670 --62.7500005 -62.5833335 -28.2500005 -28.0833335 121 0 2670 --62.5833335 -62.4166665 -28.2500005 -28.0833335 129 0 2670 --62.4166665 -62.2499995 -28.2500005 -28.0833335 87 0 2670 --62.2500005 -62.0833335 -28.2500005 -28.0833335 84 0 2670 --62.0833335 -61.9166665 -28.2500005 -28.0833335 82 0 2670 --61.9166665 -61.7499995 -28.2500005 -28.0833335 78 0 2670 --61.7500005 -61.5833335 -28.2500005 -28.0833335 73 0 2670 --61.5833335 -61.4166665 -28.2500005 -28.0833335 70 0 2670 --61.4166665 -61.2499995 -28.2500005 -28.0833335 67 0 2670 --61.2500005 -61.0833335 -28.2500005 -28.0833335 66 0 2670 --61.0833335 -60.9166665 -28.2500005 -28.0833335 66 0 2670 --60.9166665 -60.7499995 -28.2500005 -28.0833335 65 0 2670 --60.7500005 -60.5833335 -28.2500005 -28.0833335 63 0 2670 --60.5833335 -60.4166665 -28.2500005 -28.0833335 63 0 2670 --60.4166665 -60.2499995 -28.2500005 -28.0833335 60 0 2670 --60.2500005 -60.0833335 -28.2500005 -28.0833335 60 0 2670 --60.0833335 -59.9166665 -28.2500005 -28.0833335 60 0 2670 --59.9166665 -59.7499995 -28.2500005 -28.0833335 57 0 2670 --59.7500005 -59.5833335 -28.2500005 -28.0833335 58 0 2670 --59.5833335 -59.4166665 -28.2500005 -28.0833335 57 0 2670 --59.4166665 -59.2499995 -28.2500005 -28.0833335 55 0 2670 --59.2500005 -59.0833335 -28.2500005 -28.0833335 41 0 2670 --59.0833335 -58.9166665 -28.2500005 -28.0833335 43 0 2670 --58.9166665 -58.7499995 -28.2500005 -28.0833335 54 0 2670 --58.7500005 -58.5833335 -28.2500005 -28.0833335 65 0 2670 --58.5833335 -58.4166665 -28.2500005 -28.0833335 70 0 2670 --58.4166665 -58.2499995 -28.2500005 -28.0833335 67 0 2670 --58.2500005 -58.0833335 -28.2500005 -28.0833335 68 0 2670 --58.0833335 -57.9166665 -28.2500005 -28.0833335 73 0 2670 --57.9166665 -57.7499995 -28.2500005 -28.0833335 74 0 2670 --57.7500005 -57.5833335 -28.2500005 -28.0833335 71 0 2670 --57.5833335 -57.4166665 -28.2500005 -28.0833335 63 0 2670 --57.4166665 -57.2499995 -28.2500005 -28.0833335 64 0 2670 --57.2500005 -57.0833335 -28.2500005 -28.0833335 65 0 2670 --57.0833335 -56.9166665 -28.2500005 -28.0833335 66 0 2670 --56.9166665 -56.7499995 -28.2500005 -28.0833335 65 0 2670 --56.7500005 -56.5833335 -28.2500005 -28.0833335 77 0 2670 --56.5833335 -56.4166665 -28.2500005 -28.0833335 68 0 2670 --56.4166665 -56.2499995 -28.2500005 -28.0833335 80 0 2670 --56.2500005 -56.0833335 -28.2500005 -28.0833335 87 0 2670 --56.0833335 -55.9166665 -28.2500005 -28.0833335 114 0 2670 --55.9166665 -55.7499995 -28.2500005 -28.0833335 121 0 2670 --55.7500005 -55.5833335 -28.2500005 -28.0833335 97 0 2670 --55.5833335 -55.4166665 -28.2500005 -28.0833335 83 0 2670 --55.4166665 -55.2499995 -28.2500005 -28.0833335 113 0 2670 --55.2500005 -55.0833335 -28.2500005 -28.0833335 183 0 2670 --55.0833335 -54.9166665 -28.2500005 -28.0833335 135 0 2670 --54.9166665 -54.7499995 -28.2500005 -28.0833335 161 0 2670 --54.7500005 -54.5833335 -28.2500005 -28.0833335 240 0 2670 --54.5833335 -54.4166665 -28.2500005 -28.0833335 247 0 2670 --54.4166665 -54.2499995 -28.2500005 -28.0833335 315 0 2670 --54.2500005 -54.0833335 -28.2500005 -28.0833335 371 0 2670 --54.0833335 -53.9166665 -28.2500005 -28.0833335 355 0 2670 --53.9166665 -53.7499995 -28.2500005 -28.0833335 335 0 2670 --53.7500005 -53.5833335 -28.2500005 -28.0833335 456 0 2670 --53.5833335 -53.4166665 -28.2500005 -28.0833335 470 0 2670 --53.4166665 -53.2499995 -28.2500005 -28.0833335 543 0 2670 --53.2500005 -53.0833335 -28.2500005 -28.0833335 565 0 2670 --53.0833335 -52.9166665 -28.2500005 -28.0833335 523 0 2670 --52.9166665 -52.7499995 -28.2500005 -28.0833335 594 0 2670 --52.7500005 -52.5833335 -28.2500005 -28.0833335 575 0 2670 --52.5833335 -52.4166665 -28.2500005 -28.0833335 645 0 2670 --52.4166665 -52.2499995 -28.2500005 -28.0833335 678 0 2670 --52.2500005 -52.0833335 -28.2500005 -28.0833335 649 0 2670 --52.0833335 -51.9166665 -28.2500005 -28.0833335 738 0 2670 --51.9166665 -51.7499995 -28.2500005 -28.0833335 746 0 2670 --51.7500005 -51.5833335 -28.2500005 -28.0833335 724 0 2670 --51.5833335 -51.4166665 -28.2500005 -28.0833335 704 0 2670 --51.4166665 -51.2499995 -28.2500005 -28.0833335 869 0 2670 --51.2500005 -51.0833335 -28.2500005 -28.0833335 938 0 2670 --51.0833335 -50.9166665 -28.2500005 -28.0833335 921 0 2670 --50.9166665 -50.7499995 -28.2500005 -28.0833335 869 0 2670 --50.7500005 -50.5833335 -28.2500005 -28.0833335 985 0 2670 --50.5833335 -50.4166665 -28.2500005 -28.0833335 987 0 2670 --50.4166665 -50.2499995 -28.2500005 -28.0833335 1086 0 2670 --50.2500005 -50.0833335 -28.2500005 -28.0833335 992 0 2670 --50.0833335 -49.9166665 -28.2500005 -28.0833335 1153 0 2670 --49.9166665 -49.7499995 -28.2500005 -28.0833335 1296 0 2670 --49.7500005 -49.5833335 -28.2500005 -28.0833335 1457 0 2670 --49.5833335 -49.4166665 -28.2500005 -28.0833335 1101 0 2670 --49.4166665 -49.2499995 -28.2500005 -28.0833335 352 0 2670 --49.2500005 -49.0833335 -28.2500005 -28.0833335 154 0 2670 --49.0833335 -48.9166665 -28.2500005 -28.0833335 92 0 2670 --48.9166665 -48.7499995 -28.2500005 -28.0833335 211 0 2670 --48.7500005 -48.5833335 -28.2500005 -28.0833335 7 0 2670 --48.5833335 -48.4166665 -28.2500005 -28.0833335 0 -50 -1670 --48.4166665 -48.2499995 -28.2500005 -28.0833335 0 -67 -1670 --48.2500005 -48.0833335 -28.2500005 -28.0833335 0 -94 -1670 --48.0833335 -47.9166665 -28.2500005 -28.0833335 0 -113 -1670 --47.9166665 -47.7499995 -28.2500005 -28.0833335 0 -143 -1670 --47.7500005 -47.5833335 -28.2500005 -28.0833335 0 -185 -1670 --47.5833335 -47.4166665 -28.2500005 -28.0833335 0 -149 -1670 --47.4166665 -47.2499995 -28.2500005 -28.0833335 0 -193 -1670 --47.2500005 -47.0833335 -28.2500005 -28.0833335 0 -325 -1670 --47.0833335 -46.9166665 -28.2500005 -28.0833335 0 -494 -1670 --46.9166665 -46.7499995 -28.2500005 -28.0833335 0 -724 -1670 --46.7500005 -46.5833335 -28.2500005 -28.0833335 0 -1316 -1670 --46.5833335 -46.4166665 -28.2500005 -28.0833335 0 -1906 -1670 --46.4166665 -46.2499995 -28.2500005 -28.0833335 0 -2383 -1670 --46.2500005 -46.0833335 -28.2500005 -28.0833335 0 -2441 -1670 --46.0833335 -45.9166665 -28.2500005 -28.0833335 0 -2578 -1670 --45.9166665 -45.7499995 -28.2500005 -28.0833335 0 -2714 -1670 --45.7500005 -45.5833335 -28.2500005 -28.0833335 0 -2799 -1670 --45.5833335 -45.4166665 -28.2500005 -28.0833335 0 -2870 -1670 --45.4166665 -45.2499995 -28.2500005 -28.0833335 0 -3041 -1670 --45.2500005 -45.0833335 -28.2500005 -28.0833335 0 -3311 -1670 --45.0833335 -44.9166665 -28.2500005 -28.0833335 0 -3452 -1670 --44.9166665 -44.7499995 -28.2500005 -28.0833335 0 -3400 -1670 --44.7500005 -44.5833335 -28.2500005 -28.0833335 0 -3425 -1670 --44.5833335 -44.4166665 -28.2500005 -28.0833335 0 -3500 -1670 --44.4166665 -44.2499995 -28.2500005 -28.0833335 0 -3523 -1670 --44.2500005 -44.0833335 -28.2500005 -28.0833335 0 -3419 -1670 --44.0833335 -43.9166665 -28.2500005 -28.0833335 0 -3516 -1670 --43.9166665 -43.7499995 -28.2500005 -28.0833335 0 -3562 -1670 --43.7500005 -43.5833335 -28.2500005 -28.0833335 0 -3629 -1670 --43.5833335 -43.4166665 -28.2500005 -28.0833335 0 -3503 -1670 --43.4166665 -43.2499995 -28.2500005 -28.0833335 0 -3608 -1670 --43.2500005 -43.0833335 -28.2500005 -28.0833335 0 -3269 -1670 --43.0833335 -42.9166665 -28.2500005 -28.0833335 0 -2957 -1670 --42.9166665 -42.7499995 -28.2500005 -28.0833335 0 -2827 -1670 --42.7500005 -42.5833335 -28.2500005 -28.0833335 0 -2852 -1670 --42.5833335 -42.4166665 -28.2500005 -28.0833335 0 -2875 -1670 --42.4166665 -42.2499995 -28.2500005 -28.0833335 0 -3021 -1670 --42.2500005 -42.0833335 -28.2500005 -28.0833335 0 -3177 -1670 --42.0833335 -41.9166665 -28.2500005 -28.0833335 0 -3088 -1670 --41.9166665 -41.7499995 -28.2500005 -28.0833335 0 -3080 -1670 --41.7500005 -41.5833335 -28.2500005 -28.0833335 0 -3049 -1670 --41.5833335 -41.4166665 -28.2500005 -28.0833335 0 -3073 -1670 --41.4166665 -41.2499995 -28.2500005 -28.0833335 0 -3069 -1670 --41.2500005 -41.0833335 -28.2500005 -28.0833335 0 -3188 -1670 --41.0833335 -40.9166665 -28.2500005 -28.0833335 0 -3185 -1670 --40.9166665 -40.7499995 -28.2500005 -28.0833335 0 -2765 -1670 --40.7500005 -40.5833335 -28.2500005 -28.0833335 0 -2730 -1670 --40.5833335 -40.4166665 -28.2500005 -28.0833335 0 -2609 -1670 --40.4166665 -40.2499995 -28.2500005 -28.0833335 0 -2465 -1670 --40.2500005 -40.0833335 -28.2500005 -28.0833335 0 -2760 -1670 --40.0833335 -39.9166665 -28.2500005 -28.0833335 0 -3922 -1670 --65.0833335 -64.9166665 -28.4166665 -28.2499995 407 0 2670 --64.9166665 -64.7499995 -28.4166665 -28.2499995 581 0 2670 --64.7500005 -64.5833335 -28.4166665 -28.2499995 286 0 2670 --64.5833335 -64.4166665 -28.4166665 -28.2499995 207 0 2670 --64.4166665 -64.2499995 -28.4166665 -28.2499995 156 0 2670 --64.2500005 -64.0833335 -28.4166665 -28.2499995 137 0 2670 --64.0833335 -63.9166665 -28.4166665 -28.2499995 137 0 2670 --63.9166665 -63.7499995 -28.4166665 -28.2499995 131 0 2670 --63.7500005 -63.5833335 -28.4166665 -28.2499995 127 0 2670 --63.5833335 -63.4166665 -28.4166665 -28.2499995 124 0 2670 --63.4166665 -63.2499995 -28.4166665 -28.2499995 120 0 2670 --63.2500005 -63.0833335 -28.4166665 -28.2499995 117 0 2670 --63.0833335 -62.9166665 -28.4166665 -28.2499995 114 0 2670 --62.9166665 -62.7499995 -28.4166665 -28.2499995 115 0 2670 --62.7500005 -62.5833335 -28.4166665 -28.2499995 114 0 2670 --62.5833335 -62.4166665 -28.4166665 -28.2499995 111 0 2670 --62.4166665 -62.2499995 -28.4166665 -28.2499995 123 0 2670 --62.2500005 -62.0833335 -28.4166665 -28.2499995 90 0 2670 --62.0833335 -61.9166665 -28.4166665 -28.2499995 86 0 2670 --61.9166665 -61.7499995 -28.4166665 -28.2499995 82 0 2670 --61.7500005 -61.5833335 -28.4166665 -28.2499995 76 0 2670 --61.5833335 -61.4166665 -28.4166665 -28.2499995 74 0 2670 --61.4166665 -61.2499995 -28.4166665 -28.2499995 69 0 2670 --61.2500005 -61.0833335 -28.4166665 -28.2499995 67 0 2670 --61.0833335 -60.9166665 -28.4166665 -28.2499995 65 0 2670 --60.9166665 -60.7499995 -28.4166665 -28.2499995 63 0 2670 --60.7500005 -60.5833335 -28.4166665 -28.2499995 62 0 2670 --60.5833335 -60.4166665 -28.4166665 -28.2499995 61 0 2670 --60.4166665 -60.2499995 -28.4166665 -28.2499995 59 0 2670 --60.2500005 -60.0833335 -28.4166665 -28.2499995 60 0 2670 --60.0833335 -59.9166665 -28.4166665 -28.2499995 62 0 2670 --59.9166665 -59.7499995 -28.4166665 -28.2499995 61 0 2670 --59.7500005 -59.5833335 -28.4166665 -28.2499995 61 0 2670 --59.5833335 -59.4166665 -28.4166665 -28.2499995 54 0 2670 --59.4166665 -59.2499995 -28.4166665 -28.2499995 52 0 2670 --59.2500005 -59.0833335 -28.4166665 -28.2499995 41 0 2670 --59.0833335 -58.9166665 -28.4166665 -28.2499995 41 0 2670 --58.9166665 -58.7499995 -28.4166665 -28.2499995 67 0 2670 --58.7500005 -58.5833335 -28.4166665 -28.2499995 68 0 2670 --58.5833335 -58.4166665 -28.4166665 -28.2499995 62 0 2670 --58.4166665 -58.2499995 -28.4166665 -28.2499995 72 0 2670 --58.2500005 -58.0833335 -28.4166665 -28.2499995 64 0 2670 --58.0833335 -57.9166665 -28.4166665 -28.2499995 72 0 2670 --57.9166665 -57.7499995 -28.4166665 -28.2499995 64 0 2670 --57.7500005 -57.5833335 -28.4166665 -28.2499995 61 0 2670 --57.5833335 -57.4166665 -28.4166665 -28.2499995 61 0 2670 --57.4166665 -57.2499995 -28.4166665 -28.2499995 61 0 2670 --57.2500005 -57.0833335 -28.4166665 -28.2499995 64 0 2670 --57.0833335 -56.9166665 -28.4166665 -28.2499995 66 0 2670 --56.9166665 -56.7499995 -28.4166665 -28.2499995 68 0 2670 --56.7500005 -56.5833335 -28.4166665 -28.2499995 74 0 2670 --56.5833335 -56.4166665 -28.4166665 -28.2499995 63 0 2670 --56.4166665 -56.2499995 -28.4166665 -28.2499995 79 0 2670 --56.2500005 -56.0833335 -28.4166665 -28.2499995 80 0 2670 --56.0833335 -55.9166665 -28.4166665 -28.2499995 103 0 2670 --55.9166665 -55.7499995 -28.4166665 -28.2499995 79 0 2670 --55.7500005 -55.5833335 -28.4166665 -28.2499995 71 0 2670 --55.5833335 -55.4166665 -28.4166665 -28.2499995 74 0 2670 --55.4166665 -55.2499995 -28.4166665 -28.2499995 141 0 2670 --55.2500005 -55.0833335 -28.4166665 -28.2499995 129 0 2670 --55.0833335 -54.9166665 -28.4166665 -28.2499995 163 0 2670 --54.9166665 -54.7499995 -28.4166665 -28.2499995 293 0 2670 --54.7500005 -54.5833335 -28.4166665 -28.2499995 190 0 2670 --54.5833335 -54.4166665 -28.4166665 -28.2499995 187 0 2670 --54.4166665 -54.2499995 -28.4166665 -28.2499995 216 0 2670 --54.2500005 -54.0833335 -28.4166665 -28.2499995 223 0 2670 --54.0833335 -53.9166665 -28.4166665 -28.2499995 253 0 2670 --53.9166665 -53.7499995 -28.4166665 -28.2499995 346 0 2670 --53.7500005 -53.5833335 -28.4166665 -28.2499995 354 0 2670 --53.5833335 -53.4166665 -28.4166665 -28.2499995 472 0 2670 --53.4166665 -53.2499995 -28.4166665 -28.2499995 498 0 2670 --53.2500005 -53.0833335 -28.4166665 -28.2499995 470 0 2670 --53.0833335 -52.9166665 -28.4166665 -28.2499995 537 0 2670 --52.9166665 -52.7499995 -28.4166665 -28.2499995 527 0 2670 --52.7500005 -52.5833335 -28.4166665 -28.2499995 570 0 2670 --52.5833335 -52.4166665 -28.4166665 -28.2499995 551 0 2670 --52.4166665 -52.2499995 -28.4166665 -28.2499995 686 0 2670 --52.2500005 -52.0833335 -28.4166665 -28.2499995 675 0 2670 --52.0833335 -51.9166665 -28.4166665 -28.2499995 780 0 2670 --51.9166665 -51.7499995 -28.4166665 -28.2499995 796 0 2670 --51.7500005 -51.5833335 -28.4166665 -28.2499995 771 0 2670 --51.5833335 -51.4166665 -28.4166665 -28.2499995 749 0 2670 --51.4166665 -51.2499995 -28.4166665 -28.2499995 757 0 2670 --51.2500005 -51.0833335 -28.4166665 -28.2499995 868 0 2670 --51.0833335 -50.9166665 -28.4166665 -28.2499995 928 0 2670 --50.9166665 -50.7499995 -28.4166665 -28.2499995 947 0 2670 --50.7500005 -50.5833335 -28.4166665 -28.2499995 782 0 2670 --50.5833335 -50.4166665 -28.4166665 -28.2499995 945 0 2670 --50.4166665 -50.2499995 -28.4166665 -28.2499995 981 0 2670 --50.2500005 -50.0833335 -28.4166665 -28.2499995 1142 0 2670 --50.0833335 -49.9166665 -28.4166665 -28.2499995 1265 0 2670 --49.9166665 -49.7499995 -28.4166665 -28.2499995 1360 0 2670 --49.7500005 -49.5833335 -28.4166665 -28.2499995 1218 0 2670 --49.5833335 -49.4166665 -28.4166665 -28.2499995 542 0 2670 --49.4166665 -49.2499995 -28.4166665 -28.2499995 211 0 2670 --49.2500005 -49.0833335 -28.4166665 -28.2499995 56 0 2670 --49.0833335 -48.9166665 -28.4166665 -28.2499995 210 0 2670 --48.9166665 -48.7499995 -28.4166665 -28.2499995 3 0 2670 --48.7500005 -48.5833335 -28.4166665 -28.2499995 0 -14 -1670 --48.5833335 -48.4166665 -28.4166665 -28.2499995 0 -57 -1670 --48.4166665 -48.2499995 -28.4166665 -28.2499995 0 -79 -1670 --48.2500005 -48.0833335 -28.4166665 -28.2499995 0 -99 -1670 --48.0833335 -47.9166665 -28.4166665 -28.2499995 0 -125 -1670 --47.9166665 -47.7499995 -28.4166665 -28.2499995 0 -175 -1670 --47.7500005 -47.5833335 -28.4166665 -28.2499995 0 -146 -1670 --47.5833335 -47.4166665 -28.4166665 -28.2499995 0 -162 -1670 --47.4166665 -47.2499995 -28.4166665 -28.2499995 0 -202 -1670 --47.2500005 -47.0833335 -28.4166665 -28.2499995 0 -373 -1670 --47.0833335 -46.9166665 -28.4166665 -28.2499995 0 -446 -1670 --46.9166665 -46.7499995 -28.4166665 -28.2499995 0 -707 -1670 --46.7500005 -46.5833335 -28.4166665 -28.2499995 0 -1357 -1670 --46.5833335 -46.4166665 -28.4166665 -28.2499995 0 -2004 -1670 --46.4166665 -46.2499995 -28.4166665 -28.2499995 0 -2317 -1670 --46.2500005 -46.0833335 -28.4166665 -28.2499995 0 -2485 -1670 --46.0833335 -45.9166665 -28.4166665 -28.2499995 0 -2647 -1670 --45.9166665 -45.7499995 -28.4166665 -28.2499995 0 -2740 -1670 --45.7500005 -45.5833335 -28.4166665 -28.2499995 0 -2842 -1670 --45.5833335 -45.4166665 -28.4166665 -28.2499995 0 -2966 -1670 --45.4166665 -45.2499995 -28.4166665 -28.2499995 0 -3156 -1670 --45.2500005 -45.0833335 -28.4166665 -28.2499995 0 -3390 -1670 --45.0833335 -44.9166665 -28.4166665 -28.2499995 0 -3381 -1670 --44.9166665 -44.7499995 -28.4166665 -28.2499995 0 -3461 -1670 --44.7500005 -44.5833335 -28.4166665 -28.2499995 0 -3541 -1670 --44.5833335 -44.4166665 -28.4166665 -28.2499995 0 -3598 -1670 --44.4166665 -44.2499995 -28.4166665 -28.2499995 0 -3596 -1670 --44.2500005 -44.0833335 -28.4166665 -28.2499995 0 -3614 -1670 --44.0833335 -43.9166665 -28.4166665 -28.2499995 0 -3643 -1670 --43.9166665 -43.7499995 -28.4166665 -28.2499995 0 -3648 -1670 --43.7500005 -43.5833335 -28.4166665 -28.2499995 0 -3692 -1670 --43.5833335 -43.4166665 -28.4166665 -28.2499995 0 -3588 -1670 --43.4166665 -43.2499995 -28.4166665 -28.2499995 0 -3611 -1670 --43.2500005 -43.0833335 -28.4166665 -28.2499995 0 -3603 -1670 --43.0833335 -42.9166665 -28.4166665 -28.2499995 0 -3234 -1670 --42.9166665 -42.7499995 -28.4166665 -28.2499995 0 -3086 -1670 --42.7500005 -42.5833335 -28.4166665 -28.2499995 0 -2965 -1670 --42.5833335 -42.4166665 -28.4166665 -28.2499995 0 -3006 -1670 --42.4166665 -42.2499995 -28.4166665 -28.2499995 0 -2932 -1670 --42.2500005 -42.0833335 -28.4166665 -28.2499995 0 -3038 -1670 --42.0833335 -41.9166665 -28.4166665 -28.2499995 0 -3142 -1670 --41.9166665 -41.7499995 -28.4166665 -28.2499995 0 -3156 -1670 --41.7500005 -41.5833335 -28.4166665 -28.2499995 0 -3107 -1670 --41.5833335 -41.4166665 -28.4166665 -28.2499995 0 -3144 -1670 --41.4166665 -41.2499995 -28.4166665 -28.2499995 0 -3127 -1670 --41.2500005 -41.0833335 -28.4166665 -28.2499995 0 -3217 -1670 --41.0833335 -40.9166665 -28.4166665 -28.2499995 0 -2632 -1670 --40.9166665 -40.7499995 -28.4166665 -28.2499995 0 -3179 -1670 --40.7500005 -40.5833335 -28.4166665 -28.2499995 0 -3762 -1670 --40.5833335 -40.4166665 -28.4166665 -28.2499995 0 -4236 -1670 --40.4166665 -40.2499995 -28.4166665 -28.2499995 0 -4462 -1670 --40.2500005 -40.0833335 -28.4166665 -28.2499995 0 -4526 -1670 --40.0833335 -39.9166665 -28.4166665 -28.2499995 0 -4470 -1670 --65.0833335 -64.9166665 -28.5833335 -28.4166665 354 0 2670 --64.9166665 -64.7499995 -28.5833335 -28.4166665 400 0 2670 --64.7500005 -64.5833335 -28.5833335 -28.4166665 277 0 2670 --64.5833335 -64.4166665 -28.5833335 -28.4166665 182 0 2670 --64.4166665 -64.2499995 -28.5833335 -28.4166665 130 0 2670 --64.2500005 -64.0833335 -28.5833335 -28.4166665 127 0 2670 --64.0833335 -63.9166665 -28.5833335 -28.4166665 130 0 2670 --63.9166665 -63.7499995 -28.5833335 -28.4166665 122 0 2670 --63.7500005 -63.5833335 -28.5833335 -28.4166665 120 0 2670 --63.5833335 -63.4166665 -28.5833335 -28.4166665 118 0 2670 --63.4166665 -63.2499995 -28.5833335 -28.4166665 114 0 2670 --63.2500005 -63.0833335 -28.5833335 -28.4166665 112 0 2670 --63.0833335 -62.9166665 -28.5833335 -28.4166665 111 0 2670 --62.9166665 -62.7499995 -28.5833335 -28.4166665 109 0 2670 --62.7500005 -62.5833335 -28.5833335 -28.4166665 108 0 2670 --62.5833335 -62.4166665 -28.5833335 -28.4166665 104 0 2670 --62.4166665 -62.2499995 -28.5833335 -28.4166665 104 0 2670 --62.2500005 -62.0833335 -28.5833335 -28.4166665 95 0 2670 --62.0833335 -61.9166665 -28.5833335 -28.4166665 89 0 2670 --61.9166665 -61.7499995 -28.5833335 -28.4166665 84 0 2670 --61.7500005 -61.5833335 -28.5833335 -28.4166665 78 0 2670 --61.5833335 -61.4166665 -28.5833335 -28.4166665 73 0 2670 --61.4166665 -61.2499995 -28.5833335 -28.4166665 69 0 2670 --61.2500005 -61.0833335 -28.5833335 -28.4166665 66 0 2670 --61.0833335 -60.9166665 -28.5833335 -28.4166665 64 0 2670 --60.9166665 -60.7499995 -28.5833335 -28.4166665 61 0 2670 --60.7500005 -60.5833335 -28.5833335 -28.4166665 59 0 2670 --60.5833335 -60.4166665 -28.5833335 -28.4166665 60 0 2670 --60.4166665 -60.2499995 -28.5833335 -28.4166665 59 0 2670 --60.2500005 -60.0833335 -28.5833335 -28.4166665 61 0 2670 --60.0833335 -59.9166665 -28.5833335 -28.4166665 61 0 2670 --59.9166665 -59.7499995 -28.5833335 -28.4166665 62 0 2670 --59.7500005 -59.5833335 -28.5833335 -28.4166665 58 0 2670 --59.5833335 -59.4166665 -28.5833335 -28.4166665 51 0 2670 --59.4166665 -59.2499995 -28.5833335 -28.4166665 50 0 2670 --59.2500005 -59.0833335 -28.5833335 -28.4166665 40 0 2670 --59.0833335 -58.9166665 -28.5833335 -28.4166665 70 0 2670 --58.9166665 -58.7499995 -28.5833335 -28.4166665 65 0 2670 --58.7500005 -58.5833335 -28.5833335 -28.4166665 59 0 2670 --58.5833335 -58.4166665 -28.5833335 -28.4166665 72 0 2670 --58.4166665 -58.2499995 -28.5833335 -28.4166665 63 0 2670 --58.2500005 -58.0833335 -28.5833335 -28.4166665 61 0 2670 --58.0833335 -57.9166665 -28.5833335 -28.4166665 63 0 2670 --57.9166665 -57.7499995 -28.5833335 -28.4166665 58 0 2670 --57.7500005 -57.5833335 -28.5833335 -28.4166665 57 0 2670 --57.5833335 -57.4166665 -28.5833335 -28.4166665 59 0 2670 --57.4166665 -57.2499995 -28.5833335 -28.4166665 61 0 2670 --57.2500005 -57.0833335 -28.5833335 -28.4166665 63 0 2670 --57.0833335 -56.9166665 -28.5833335 -28.4166665 70 0 2670 --56.9166665 -56.7499995 -28.5833335 -28.4166665 72 0 2670 --56.7500005 -56.5833335 -28.5833335 -28.4166665 71 0 2670 --56.5833335 -56.4166665 -28.5833335 -28.4166665 91 0 2670 --56.4166665 -56.2499995 -28.5833335 -28.4166665 74 0 2670 --56.2500005 -56.0833335 -28.5833335 -28.4166665 71 0 2670 --56.0833335 -55.9166665 -28.5833335 -28.4166665 58 0 2670 --55.9166665 -55.7499995 -28.5833335 -28.4166665 99 0 2670 --55.7500005 -55.5833335 -28.5833335 -28.4166665 77 0 2670 --55.5833335 -55.4166665 -28.5833335 -28.4166665 99 0 2670 --55.4166665 -55.2499995 -28.5833335 -28.4166665 129 0 2670 --55.2500005 -55.0833335 -28.5833335 -28.4166665 182 0 2670 --55.0833335 -54.9166665 -28.5833335 -28.4166665 186 0 2670 --54.9166665 -54.7499995 -28.5833335 -28.4166665 244 0 2670 --54.7500005 -54.5833335 -28.5833335 -28.4166665 236 0 2670 --54.5833335 -54.4166665 -28.5833335 -28.4166665 296 0 2670 --54.4166665 -54.2499995 -28.5833335 -28.4166665 317 0 2670 --54.2500005 -54.0833335 -28.5833335 -28.4166665 336 0 2670 --54.0833335 -53.9166665 -28.5833335 -28.4166665 334 0 2670 --53.9166665 -53.7499995 -28.5833335 -28.4166665 384 0 2670 --53.7500005 -53.5833335 -28.5833335 -28.4166665 379 0 2670 --53.5833335 -53.4166665 -28.5833335 -28.4166665 458 0 2670 --53.4166665 -53.2499995 -28.5833335 -28.4166665 452 0 2670 --53.2500005 -53.0833335 -28.5833335 -28.4166665 379 0 2670 --53.0833335 -52.9166665 -28.5833335 -28.4166665 477 0 2670 --52.9166665 -52.7499995 -28.5833335 -28.4166665 490 0 2670 --52.7500005 -52.5833335 -28.5833335 -28.4166665 468 0 2670 --52.5833335 -52.4166665 -28.5833335 -28.4166665 493 0 2670 --52.4166665 -52.2499995 -28.5833335 -28.4166665 540 0 2670 --52.2500005 -52.0833335 -28.5833335 -28.4166665 587 0 2670 --52.0833335 -51.9166665 -28.5833335 -28.4166665 766 0 2670 --51.9166665 -51.7499995 -28.5833335 -28.4166665 688 0 2670 --51.7500005 -51.5833335 -28.5833335 -28.4166665 803 0 2670 --51.5833335 -51.4166665 -28.5833335 -28.4166665 699 0 2670 --51.4166665 -51.2499995 -28.5833335 -28.4166665 717 0 2670 --51.2500005 -51.0833335 -28.5833335 -28.4166665 814 0 2670 --51.0833335 -50.9166665 -28.5833335 -28.4166665 874 0 2670 --50.9166665 -50.7499995 -28.5833335 -28.4166665 950 0 2670 --50.7500005 -50.5833335 -28.5833335 -28.4166665 950 0 2670 --50.5833335 -50.4166665 -28.5833335 -28.4166665 989 0 2670 --50.4166665 -50.2499995 -28.5833335 -28.4166665 1033 0 2670 --50.2500005 -50.0833335 -28.5833335 -28.4166665 992 0 2670 --50.0833335 -49.9166665 -28.5833335 -28.4166665 1031 0 2670 --49.9166665 -49.7499995 -28.5833335 -28.4166665 1060 0 2670 --49.7500005 -49.5833335 -28.5833335 -28.4166665 1295 0 2670 --49.5833335 -49.4166665 -28.5833335 -28.4166665 284 0 2670 --49.4166665 -49.2499995 -28.5833335 -28.4166665 152 0 2670 --49.2500005 -49.0833335 -28.5833335 -28.4166665 366 0 2670 --49.0833335 -48.9166665 -28.5833335 -28.4166665 3 0 2670 --48.9166665 -48.7499995 -28.5833335 -28.4166665 0 -3 -1670 --48.7500005 -48.5833335 -28.5833335 -28.4166665 0 -44 -1670 --48.5833335 -48.4166665 -28.5833335 -28.4166665 0 -67 -1670 --48.4166665 -48.2499995 -28.5833335 -28.4166665 0 -88 -1670 --48.2500005 -48.0833335 -28.5833335 -28.4166665 0 -103 -1670 --48.0833335 -47.9166665 -28.5833335 -28.4166665 0 -149 -1670 --47.9166665 -47.7499995 -28.5833335 -28.4166665 0 -141 -1670 --47.7500005 -47.5833335 -28.5833335 -28.4166665 0 -152 -1670 --47.5833335 -47.4166665 -28.5833335 -28.4166665 0 -151 -1670 --47.4166665 -47.2499995 -28.5833335 -28.4166665 0 -234 -1670 --47.2500005 -47.0833335 -28.5833335 -28.4166665 0 -348 -1670 --47.0833335 -46.9166665 -28.5833335 -28.4166665 0 -430 -1670 --46.9166665 -46.7499995 -28.5833335 -28.4166665 0 -833 -1670 --46.7500005 -46.5833335 -28.5833335 -28.4166665 0 -1629 -1670 --46.5833335 -46.4166665 -28.5833335 -28.4166665 0 -2132 -1670 --46.4166665 -46.2499995 -28.5833335 -28.4166665 0 -2338 -1670 --46.2500005 -46.0833335 -28.5833335 -28.4166665 0 -2528 -1670 --46.0833335 -45.9166665 -28.5833335 -28.4166665 0 -2661 -1670 --45.9166665 -45.7499995 -28.5833335 -28.4166665 0 -2783 -1670 --45.7500005 -45.5833335 -28.5833335 -28.4166665 0 -2874 -1670 --45.5833335 -45.4166665 -28.5833335 -28.4166665 0 -2978 -1670 --45.4166665 -45.2499995 -28.5833335 -28.4166665 0 -3275 -1670 --45.2500005 -45.0833335 -28.5833335 -28.4166665 0 -3334 -1670 --45.0833335 -44.9166665 -28.5833335 -28.4166665 0 -3437 -1670 --44.9166665 -44.7499995 -28.5833335 -28.4166665 0 -3509 -1670 --44.7500005 -44.5833335 -28.5833335 -28.4166665 0 -3620 -1670 --44.5833335 -44.4166665 -28.5833335 -28.4166665 0 -3649 -1670 --44.4166665 -44.2499995 -28.5833335 -28.4166665 0 -3674 -1670 --44.2500005 -44.0833335 -28.5833335 -28.4166665 0 -3713 -1670 --44.0833335 -43.9166665 -28.5833335 -28.4166665 0 -3711 -1670 --43.9166665 -43.7499995 -28.5833335 -28.4166665 0 -3712 -1670 --43.7500005 -43.5833335 -28.5833335 -28.4166665 0 -3703 -1670 --43.5833335 -43.4166665 -28.5833335 -28.4166665 0 -3653 -1670 --43.4166665 -43.2499995 -28.5833335 -28.4166665 0 -3726 -1670 --43.2500005 -43.0833335 -28.5833335 -28.4166665 0 -3770 -1670 --43.0833335 -42.9166665 -28.5833335 -28.4166665 0 -3731 -1670 --42.9166665 -42.7499995 -28.5833335 -28.4166665 0 -3438 -1670 --42.7500005 -42.5833335 -28.5833335 -28.4166665 0 -3481 -1670 --42.5833335 -42.4166665 -28.5833335 -28.4166665 0 -3313 -1670 --42.4166665 -42.2499995 -28.5833335 -28.4166665 0 -3077 -1670 --42.2500005 -42.0833335 -28.5833335 -28.4166665 0 -3103 -1670 --42.0833335 -41.9166665 -28.5833335 -28.4166665 0 -3209 -1670 --41.9166665 -41.7499995 -28.5833335 -28.4166665 0 -3733 -1670 --41.7500005 -41.5833335 -28.5833335 -28.4166665 0 -4016 -1670 --41.5833335 -41.4166665 -28.5833335 -28.4166665 0 -4295 -1670 --41.4166665 -41.2499995 -28.5833335 -28.4166665 0 -4424 -1670 --41.2500005 -41.0833335 -28.5833335 -28.4166665 0 -4229 -1670 --41.0833335 -40.9166665 -28.5833335 -28.4166665 0 -4112 -1670 --40.9166665 -40.7499995 -28.5833335 -28.4166665 0 -4074 -1670 --40.7500005 -40.5833335 -28.5833335 -28.4166665 0 -3989 -1670 --40.5833335 -40.4166665 -28.5833335 -28.4166665 0 -4021 -1670 --40.4166665 -40.2499995 -28.5833335 -28.4166665 0 -4026 -1670 --40.2500005 -40.0833335 -28.5833335 -28.4166665 0 -4091 -1670 --40.0833335 -39.9166665 -28.5833335 -28.4166665 0 -3992 -1670 --65.0833335 -64.9166665 -28.7500005 -28.5833335 306 0 2670 --64.9166665 -64.7499995 -28.7500005 -28.5833335 332 0 2670 --64.7500005 -64.5833335 -28.7500005 -28.5833335 245 0 2670 --64.5833335 -64.4166665 -28.7500005 -28.5833335 162 0 2670 --64.4166665 -64.2499995 -28.7500005 -28.5833335 119 0 2670 --64.2500005 -64.0833335 -28.7500005 -28.5833335 118 0 2670 --64.0833335 -63.9166665 -28.7500005 -28.5833335 119 0 2670 --63.9166665 -63.7499995 -28.7500005 -28.5833335 123 0 2670 --63.7500005 -63.5833335 -28.7500005 -28.5833335 115 0 2670 --63.5833335 -63.4166665 -28.7500005 -28.5833335 113 0 2670 --63.4166665 -63.2499995 -28.7500005 -28.5833335 108 0 2670 --63.2500005 -63.0833335 -28.7500005 -28.5833335 107 0 2670 --63.0833335 -62.9166665 -28.7500005 -28.5833335 106 0 2670 --62.9166665 -62.7499995 -28.7500005 -28.5833335 103 0 2670 --62.7500005 -62.5833335 -28.7500005 -28.5833335 102 0 2670 --62.5833335 -62.4166665 -28.7500005 -28.5833335 99 0 2670 --62.4166665 -62.2499995 -28.7500005 -28.5833335 95 0 2670 --62.2500005 -62.0833335 -28.7500005 -28.5833335 93 0 2670 --62.0833335 -61.9166665 -28.7500005 -28.5833335 86 0 2670 --61.9166665 -61.7499995 -28.7500005 -28.5833335 85 0 2670 --61.7500005 -61.5833335 -28.7500005 -28.5833335 79 0 2670 --61.5833335 -61.4166665 -28.7500005 -28.5833335 73 0 2670 --61.4166665 -61.2499995 -28.7500005 -28.5833335 71 0 2670 --61.2500005 -61.0833335 -28.7500005 -28.5833335 66 0 2670 --61.0833335 -60.9166665 -28.7500005 -28.5833335 63 0 2670 --60.9166665 -60.7499995 -28.7500005 -28.5833335 61 0 2670 --60.7500005 -60.5833335 -28.7500005 -28.5833335 60 0 2670 --60.5833335 -60.4166665 -28.7500005 -28.5833335 58 0 2670 --60.4166665 -60.2499995 -28.7500005 -28.5833335 58 0 2670 --60.2500005 -60.0833335 -28.7500005 -28.5833335 57 0 2670 --60.0833335 -59.9166665 -28.7500005 -28.5833335 61 0 2670 --59.9166665 -59.7499995 -28.7500005 -28.5833335 57 0 2670 --59.7500005 -59.5833335 -28.7500005 -28.5833335 58 0 2670 --59.5833335 -59.4166665 -28.7500005 -28.5833335 52 0 2670 --59.4166665 -59.2499995 -28.7500005 -28.5833335 39 0 2670 --59.2500005 -59.0833335 -28.7500005 -28.5833335 38 0 2670 --59.0833335 -58.9166665 -28.7500005 -28.5833335 63 0 2670 --58.9166665 -58.7499995 -28.7500005 -28.5833335 63 0 2670 --58.7500005 -58.5833335 -28.7500005 -28.5833335 68 0 2670 --58.5833335 -58.4166665 -28.7500005 -28.5833335 59 0 2670 --58.4166665 -58.2499995 -28.7500005 -28.5833335 59 0 2670 --58.2500005 -58.0833335 -28.7500005 -28.5833335 52 0 2670 --58.0833335 -57.9166665 -28.7500005 -28.5833335 53 0 2670 --57.9166665 -57.7499995 -28.7500005 -28.5833335 54 0 2670 --57.7500005 -57.5833335 -28.7500005 -28.5833335 59 0 2670 --57.5833335 -57.4166665 -28.7500005 -28.5833335 72 0 2670 --57.4166665 -57.2499995 -28.7500005 -28.5833335 71 0 2670 --57.2500005 -57.0833335 -28.7500005 -28.5833335 67 0 2670 --57.0833335 -56.9166665 -28.7500005 -28.5833335 70 0 2670 --56.9166665 -56.7499995 -28.7500005 -28.5833335 70 0 2670 --56.7500005 -56.5833335 -28.7500005 -28.5833335 56 0 2670 --56.5833335 -56.4166665 -28.7500005 -28.5833335 69 0 2670 --56.4166665 -56.2499995 -28.7500005 -28.5833335 73 0 2670 --56.2500005 -56.0833335 -28.7500005 -28.5833335 80 0 2670 --56.0833335 -55.9166665 -28.7500005 -28.5833335 84 0 2670 --55.9166665 -55.7499995 -28.7500005 -28.5833335 77 0 2670 --55.7500005 -55.5833335 -28.7500005 -28.5833335 72 0 2670 --55.5833335 -55.4166665 -28.7500005 -28.5833335 82 0 2670 --55.4166665 -55.2499995 -28.7500005 -28.5833335 99 0 2670 --55.2500005 -55.0833335 -28.7500005 -28.5833335 150 0 2670 --55.0833335 -54.9166665 -28.7500005 -28.5833335 222 0 2670 --54.9166665 -54.7499995 -28.7500005 -28.5833335 190 0 2670 --54.7500005 -54.5833335 -28.7500005 -28.5833335 192 0 2670 --54.5833335 -54.4166665 -28.7500005 -28.5833335 229 0 2670 --54.4166665 -54.2499995 -28.7500005 -28.5833335 278 0 2670 --54.2500005 -54.0833335 -28.7500005 -28.5833335 323 0 2670 --54.0833335 -53.9166665 -28.7500005 -28.5833335 346 0 2670 --53.9166665 -53.7499995 -28.7500005 -28.5833335 388 0 2670 --53.7500005 -53.5833335 -28.7500005 -28.5833335 404 0 2670 --53.5833335 -53.4166665 -28.7500005 -28.5833335 398 0 2670 --53.4166665 -53.2499995 -28.7500005 -28.5833335 440 0 2670 --53.2500005 -53.0833335 -28.7500005 -28.5833335 352 0 2670 --53.0833335 -52.9166665 -28.7500005 -28.5833335 408 0 2670 --52.9166665 -52.7499995 -28.7500005 -28.5833335 416 0 2670 --52.7500005 -52.5833335 -28.7500005 -28.5833335 457 0 2670 --52.5833335 -52.4166665 -28.7500005 -28.5833335 610 0 2670 --52.4166665 -52.2499995 -28.7500005 -28.5833335 680 0 2670 --52.2500005 -52.0833335 -28.7500005 -28.5833335 438 0 2670 --52.0833335 -51.9166665 -28.7500005 -28.5833335 595 0 2670 --51.9166665 -51.7499995 -28.7500005 -28.5833335 488 0 2670 --51.7500005 -51.5833335 -28.7500005 -28.5833335 726 0 2670 --51.5833335 -51.4166665 -28.7500005 -28.5833335 671 0 2670 --51.4166665 -51.2499995 -28.7500005 -28.5833335 711 0 2670 --51.2500005 -51.0833335 -28.7500005 -28.5833335 800 0 2670 --51.0833335 -50.9166665 -28.7500005 -28.5833335 682 0 2670 --50.9166665 -50.7499995 -28.7500005 -28.5833335 858 0 2670 --50.7500005 -50.5833335 -28.7500005 -28.5833335 968 0 2670 --50.5833335 -50.4166665 -28.7500005 -28.5833335 1001 0 2670 --50.4166665 -50.2499995 -28.7500005 -28.5833335 1060 0 2670 --50.2500005 -50.0833335 -28.7500005 -28.5833335 1113 0 2670 --50.0833335 -49.9166665 -28.7500005 -28.5833335 1201 0 2670 --49.9166665 -49.7499995 -28.7500005 -28.5833335 1193 0 2670 --49.7500005 -49.5833335 -28.7500005 -28.5833335 351 0 2670 --49.5833335 -49.4166665 -28.7500005 -28.5833335 60 0 2670 --49.4166665 -49.2499995 -28.7500005 -28.5833335 64 0 2670 --49.2500005 -49.0833335 -28.7500005 -28.5833335 13 0 2670 --49.0833335 -48.9166665 -28.7500005 -28.5833335 26 0 2670 --48.9166665 -48.7499995 -28.7500005 -28.5833335 0 -40 -1670 --48.7500005 -48.5833335 -28.7500005 -28.5833335 0 -61 -1670 --48.5833335 -48.4166665 -28.7500005 -28.5833335 0 -79 -1670 --48.4166665 -48.2499995 -28.7500005 -28.5833335 0 -101 -1670 --48.2500005 -48.0833335 -28.7500005 -28.5833335 0 -123 -1670 --48.0833335 -47.9166665 -28.7500005 -28.5833335 0 -126 -1670 --47.9166665 -47.7499995 -28.7500005 -28.5833335 0 -127 -1670 --47.7500005 -47.5833335 -28.7500005 -28.5833335 0 -189 -1670 --47.5833335 -47.4166665 -28.7500005 -28.5833335 0 -279 -1670 --47.4166665 -47.2499995 -28.7500005 -28.5833335 0 -534 -1670 --47.2500005 -47.0833335 -28.7500005 -28.5833335 0 -619 -1670 --47.0833335 -46.9166665 -28.7500005 -28.5833335 0 -827 -1670 --46.9166665 -46.7499995 -28.7500005 -28.5833335 0 -1161 -1670 --46.7500005 -46.5833335 -28.7500005 -28.5833335 0 -1743 -1670 --46.5833335 -46.4166665 -28.7500005 -28.5833335 0 -2026 -1670 --46.4166665 -46.2499995 -28.7500005 -28.5833335 0 -2431 -1670 --46.2500005 -46.0833335 -28.7500005 -28.5833335 0 -2523 -1670 --46.0833335 -45.9166665 -28.7500005 -28.5833335 0 -2671 -1670 --45.9166665 -45.7499995 -28.7500005 -28.5833335 0 -2818 -1670 --45.7500005 -45.5833335 -28.7500005 -28.5833335 0 -2853 -1670 --45.5833335 -45.4166665 -28.7500005 -28.5833335 0 -3036 -1670 --45.4166665 -45.2499995 -28.7500005 -28.5833335 0 -3427 -1670 --45.2500005 -45.0833335 -28.7500005 -28.5833335 0 -3406 -1670 --45.0833335 -44.9166665 -28.7500005 -28.5833335 0 -3543 -1670 --44.9166665 -44.7499995 -28.7500005 -28.5833335 0 -3596 -1670 --44.7500005 -44.5833335 -28.7500005 -28.5833335 0 -3678 -1670 --44.5833335 -44.4166665 -28.7500005 -28.5833335 0 -3674 -1670 --44.4166665 -44.2499995 -28.7500005 -28.5833335 0 -3675 -1670 --44.2500005 -44.0833335 -28.7500005 -28.5833335 0 -3746 -1670 --44.0833335 -43.9166665 -28.7500005 -28.5833335 0 -3748 -1670 --43.9166665 -43.7499995 -28.7500005 -28.5833335 0 -3800 -1670 --43.7500005 -43.5833335 -28.7500005 -28.5833335 0 -3788 -1670 --43.5833335 -43.4166665 -28.7500005 -28.5833335 0 -3960 -1670 --43.4166665 -43.2499995 -28.7500005 -28.5833335 0 -3960 -1670 --43.2500005 -43.0833335 -28.7500005 -28.5833335 0 -4012 -1670 --43.0833335 -42.9166665 -28.7500005 -28.5833335 0 -4071 -1670 --42.9166665 -42.7499995 -28.7500005 -28.5833335 0 -4079 -1670 --42.7500005 -42.5833335 -28.7500005 -28.5833335 0 -3701 -1670 --42.5833335 -42.4166665 -28.7500005 -28.5833335 0 -3463 -1670 --42.4166665 -42.2499995 -28.7500005 -28.5833335 0 -3318 -1670 --42.2500005 -42.0833335 -28.7500005 -28.5833335 0 -3518 -1670 --42.0833335 -41.9166665 -28.7500005 -28.5833335 0 -3856 -1670 --41.9166665 -41.7499995 -28.7500005 -28.5833335 0 -3959 -1670 --41.7500005 -41.5833335 -28.7500005 -28.5833335 0 -3807 -1670 --41.5833335 -41.4166665 -28.7500005 -28.5833335 0 -3731 -1670 --41.4166665 -41.2499995 -28.7500005 -28.5833335 0 -3919 -1670 --41.2500005 -41.0833335 -28.7500005 -28.5833335 0 -3861 -1670 --41.0833335 -40.9166665 -28.7500005 -28.5833335 0 -3884 -1670 --40.9166665 -40.7499995 -28.7500005 -28.5833335 0 -3843 -1670 --40.7500005 -40.5833335 -28.7500005 -28.5833335 0 -3872 -1670 --40.5833335 -40.4166665 -28.7500005 -28.5833335 0 -3850 -1670 --40.4166665 -40.2499995 -28.7500005 -28.5833335 0 -3914 -1670 --40.2500005 -40.0833335 -28.7500005 -28.5833335 0 -3902 -1670 --40.0833335 -39.9166665 -28.7500005 -28.5833335 0 -4108 -1670 --65.0833335 -64.9166665 -28.9166665 -28.7499995 277 0 2670 --64.9166665 -64.7499995 -28.9166665 -28.7499995 301 0 2670 --64.7500005 -64.5833335 -28.9166665 -28.7499995 203 0 2670 --64.5833335 -64.4166665 -28.9166665 -28.7499995 128 0 2670 --64.4166665 -64.2499995 -28.9166665 -28.7499995 113 0 2670 --64.2500005 -64.0833335 -28.9166665 -28.7499995 114 0 2670 --64.0833335 -63.9166665 -28.9166665 -28.7499995 112 0 2670 --63.9166665 -63.7499995 -28.9166665 -28.7499995 113 0 2670 --63.7500005 -63.5833335 -28.9166665 -28.7499995 113 0 2670 --63.5833335 -63.4166665 -28.9166665 -28.7499995 111 0 2670 --63.4166665 -63.2499995 -28.9166665 -28.7499995 104 0 2670 --63.2500005 -63.0833335 -28.9166665 -28.7499995 102 0 2670 --63.0833335 -62.9166665 -28.9166665 -28.7499995 103 0 2670 --62.9166665 -62.7499995 -28.9166665 -28.7499995 97 0 2670 --62.7500005 -62.5833335 -28.9166665 -28.7499995 94 0 2670 --62.5833335 -62.4166665 -28.9166665 -28.7499995 97 0 2670 --62.4166665 -62.2499995 -28.9166665 -28.7499995 92 0 2670 --62.2500005 -62.0833335 -28.9166665 -28.7499995 89 0 2670 --62.0833335 -61.9166665 -28.9166665 -28.7499995 86 0 2670 --61.9166665 -61.7499995 -28.9166665 -28.7499995 81 0 2670 --61.7500005 -61.5833335 -28.9166665 -28.7499995 76 0 2670 --61.5833335 -61.4166665 -28.9166665 -28.7499995 73 0 2670 --61.4166665 -61.2499995 -28.9166665 -28.7499995 68 0 2670 --61.2500005 -61.0833335 -28.9166665 -28.7499995 65 0 2670 --61.0833335 -60.9166665 -28.9166665 -28.7499995 64 0 2670 --60.9166665 -60.7499995 -28.9166665 -28.7499995 61 0 2670 --60.7500005 -60.5833335 -28.9166665 -28.7499995 59 0 2670 --60.5833335 -60.4166665 -28.9166665 -28.7499995 58 0 2670 --60.4166665 -60.2499995 -28.9166665 -28.7499995 56 0 2670 --60.2500005 -60.0833335 -28.9166665 -28.7499995 61 0 2670 --60.0833335 -59.9166665 -28.9166665 -28.7499995 66 0 2670 --59.9166665 -59.7499995 -28.9166665 -28.7499995 60 0 2670 --59.7500005 -59.5833335 -28.9166665 -28.7499995 55 0 2670 --59.5833335 -59.4166665 -28.9166665 -28.7499995 46 0 2670 --59.4166665 -59.2499995 -28.9166665 -28.7499995 36 0 2670 --59.2500005 -59.0833335 -28.9166665 -28.7499995 38 0 2670 --59.0833335 -58.9166665 -28.9166665 -28.7499995 51 0 2670 --58.9166665 -58.7499995 -28.9166665 -28.7499995 67 0 2670 --58.7500005 -58.5833335 -28.9166665 -28.7499995 62 0 2670 --58.5833335 -58.4166665 -28.9166665 -28.7499995 62 0 2670 --58.4166665 -58.2499995 -28.9166665 -28.7499995 49 0 2670 --58.2500005 -58.0833335 -28.9166665 -28.7499995 67 0 2670 --58.0833335 -57.9166665 -28.9166665 -28.7499995 71 0 2670 --57.9166665 -57.7499995 -28.9166665 -28.7499995 74 0 2670 --57.7500005 -57.5833335 -28.9166665 -28.7499995 72 0 2670 --57.5833335 -57.4166665 -28.9166665 -28.7499995 72 0 2670 --57.4166665 -57.2499995 -28.9166665 -28.7499995 69 0 2670 --57.2500005 -57.0833335 -28.9166665 -28.7499995 67 0 2670 --57.0833335 -56.9166665 -28.9166665 -28.7499995 70 0 2670 --56.9166665 -56.7499995 -28.9166665 -28.7499995 68 0 2670 --56.7500005 -56.5833335 -28.9166665 -28.7499995 55 0 2670 --56.5833335 -56.4166665 -28.9166665 -28.7499995 69 0 2670 --56.4166665 -56.2499995 -28.9166665 -28.7499995 73 0 2670 --56.2500005 -56.0833335 -28.9166665 -28.7499995 73 0 2670 --56.0833335 -55.9166665 -28.9166665 -28.7499995 95 0 2670 --55.9166665 -55.7499995 -28.9166665 -28.7499995 86 0 2670 --55.7500005 -55.5833335 -28.9166665 -28.7499995 111 0 2670 --55.5833335 -55.4166665 -28.9166665 -28.7499995 124 0 2670 --55.4166665 -55.2499995 -28.9166665 -28.7499995 147 0 2670 --55.2500005 -55.0833335 -28.9166665 -28.7499995 162 0 2670 --55.0833335 -54.9166665 -28.9166665 -28.7499995 197 0 2670 --54.9166665 -54.7499995 -28.9166665 -28.7499995 189 0 2670 --54.7500005 -54.5833335 -28.9166665 -28.7499995 252 0 2670 --54.5833335 -54.4166665 -28.9166665 -28.7499995 300 0 2670 --54.4166665 -54.2499995 -28.9166665 -28.7499995 285 0 2670 --54.2500005 -54.0833335 -28.9166665 -28.7499995 396 0 2670 --54.0833335 -53.9166665 -28.9166665 -28.7499995 383 0 2670 --53.9166665 -53.7499995 -28.9166665 -28.7499995 398 0 2670 --53.7500005 -53.5833335 -28.9166665 -28.7499995 386 0 2670 --53.5833335 -53.4166665 -28.9166665 -28.7499995 413 0 2670 --53.4166665 -53.2499995 -28.9166665 -28.7499995 380 0 2670 --53.2500005 -53.0833335 -28.9166665 -28.7499995 359 0 2670 --53.0833335 -52.9166665 -28.9166665 -28.7499995 471 0 2670 --52.9166665 -52.7499995 -28.9166665 -28.7499995 398 0 2670 --52.7500005 -52.5833335 -28.9166665 -28.7499995 568 0 2670 --52.5833335 -52.4166665 -28.9166665 -28.7499995 677 0 2670 --52.4166665 -52.2499995 -28.9166665 -28.7499995 644 0 2670 --52.2500005 -52.0833335 -28.9166665 -28.7499995 590 0 2670 --52.0833335 -51.9166665 -28.9166665 -28.7499995 432 0 2670 --51.9166665 -51.7499995 -28.9166665 -28.7499995 412 0 2670 --51.7500005 -51.5833335 -28.9166665 -28.7499995 567 0 2670 --51.5833335 -51.4166665 -28.9166665 -28.7499995 534 0 2670 --51.4166665 -51.2499995 -28.9166665 -28.7499995 764 0 2670 --51.2500005 -51.0833335 -28.9166665 -28.7499995 550 0 2670 --51.0833335 -50.9166665 -28.9166665 -28.7499995 541 0 2670 --50.9166665 -50.7499995 -28.9166665 -28.7499995 578 0 2670 --50.7500005 -50.5833335 -28.9166665 -28.7499995 790 0 2670 --50.5833335 -50.4166665 -28.9166665 -28.7499995 854 0 2670 --50.4166665 -50.2499995 -28.9166665 -28.7499995 896 0 2670 --50.2500005 -50.0833335 -28.9166665 -28.7499995 903 0 2670 --50.0833335 -49.9166665 -28.9166665 -28.7499995 1065 0 2670 --49.9166665 -49.7499995 -28.9166665 -28.7499995 112 0 2670 --49.7500005 -49.5833335 -28.9166665 -28.7499995 45 0 2670 --49.5833335 -49.4166665 -28.9166665 -28.7499995 11 0 2670 --49.4166665 -49.2499995 -28.9166665 -28.7499995 7 0 2670 --49.2500005 -49.0833335 -28.9166665 -28.7499995 0 -27 -1670 --49.0833335 -48.9166665 -28.9166665 -28.7499995 0 -43 -1670 --48.9166665 -48.7499995 -28.9166665 -28.7499995 0 -58 -1670 --48.7500005 -48.5833335 -28.9166665 -28.7499995 0 -70 -1670 --48.5833335 -48.4166665 -28.9166665 -28.7499995 0 -91 -1670 --48.4166665 -48.2499995 -28.9166665 -28.7499995 0 -108 -1670 --48.2500005 -48.0833335 -28.9166665 -28.7499995 0 -129 -1670 --48.0833335 -47.9166665 -28.9166665 -28.7499995 0 -136 -1670 --47.9166665 -47.7499995 -28.9166665 -28.7499995 0 -208 -1670 --47.7500005 -47.5833335 -28.9166665 -28.7499995 0 -411 -1670 --47.5833335 -47.4166665 -28.9166665 -28.7499995 0 -758 -1670 --47.4166665 -47.2499995 -28.9166665 -28.7499995 0 -995 -1670 --47.2500005 -47.0833335 -28.9166665 -28.7499995 0 -1090 -1670 --47.0833335 -46.9166665 -28.9166665 -28.7499995 0 -1242 -1670 --46.9166665 -46.7499995 -28.9166665 -28.7499995 0 -1487 -1670 --46.7500005 -46.5833335 -28.9166665 -28.7499995 0 -1780 -1670 --46.5833335 -46.4166665 -28.9166665 -28.7499995 0 -2164 -1670 --46.4166665 -46.2499995 -28.9166665 -28.7499995 0 -2375 -1670 --46.2500005 -46.0833335 -28.9166665 -28.7499995 0 -2524 -1670 --46.0833335 -45.9166665 -28.9166665 -28.7499995 0 -2654 -1670 --45.9166665 -45.7499995 -28.9166665 -28.7499995 0 -2800 -1670 --45.7500005 -45.5833335 -28.9166665 -28.7499995 0 -2857 -1670 --45.5833335 -45.4166665 -28.9166665 -28.7499995 0 -3064 -1670 --45.4166665 -45.2499995 -28.9166665 -28.7499995 0 -3421 -1670 --45.2500005 -45.0833335 -28.9166665 -28.7499995 0 -3479 -1670 --45.0833335 -44.9166665 -28.9166665 -28.7499995 0 -3577 -1670 --44.9166665 -44.7499995 -28.9166665 -28.7499995 0 -3616 -1670 --44.7500005 -44.5833335 -28.9166665 -28.7499995 0 -3662 -1670 --44.5833335 -44.4166665 -28.9166665 -28.7499995 0 -3706 -1670 --44.4166665 -44.2499995 -28.9166665 -28.7499995 0 -3703 -1670 --44.2500005 -44.0833335 -28.9166665 -28.7499995 0 -3760 -1670 --44.0833335 -43.9166665 -28.9166665 -28.7499995 0 -3754 -1670 --43.9166665 -43.7499995 -28.9166665 -28.7499995 0 -3830 -1670 --43.7500005 -43.5833335 -28.9166665 -28.7499995 0 -3862 -1670 --43.5833335 -43.4166665 -28.9166665 -28.7499995 0 -3943 -1670 --43.4166665 -43.2499995 -28.9166665 -28.7499995 0 -3971 -1670 --43.2500005 -43.0833335 -28.9166665 -28.7499995 0 -3957 -1670 --43.0833335 -42.9166665 -28.9166665 -28.7499995 0 -4016 -1670 --42.9166665 -42.7499995 -28.9166665 -28.7499995 0 -4000 -1670 --42.7500005 -42.5833335 -28.9166665 -28.7499995 0 -3869 -1670 --42.5833335 -42.4166665 -28.9166665 -28.7499995 0 -3739 -1670 --42.4166665 -42.2499995 -28.9166665 -28.7499995 0 -3800 -1670 --42.2500005 -42.0833335 -28.9166665 -28.7499995 0 -3958 -1670 --42.0833335 -41.9166665 -28.9166665 -28.7499995 0 -4070 -1670 --41.9166665 -41.7499995 -28.9166665 -28.7499995 0 -3997 -1670 --41.7500005 -41.5833335 -28.9166665 -28.7499995 0 -3684 -1670 --41.5833335 -41.4166665 -28.9166665 -28.7499995 0 -3639 -1670 --41.4166665 -41.2499995 -28.9166665 -28.7499995 0 -3777 -1670 --41.2500005 -41.0833335 -28.9166665 -28.7499995 0 -3797 -1670 --41.0833335 -40.9166665 -28.9166665 -28.7499995 0 -3786 -1670 --40.9166665 -40.7499995 -28.9166665 -28.7499995 0 -3797 -1670 --40.7500005 -40.5833335 -28.9166665 -28.7499995 0 -3785 -1670 --40.5833335 -40.4166665 -28.9166665 -28.7499995 0 -3808 -1670 --40.4166665 -40.2499995 -28.9166665 -28.7499995 0 -3784 -1670 --40.2500005 -40.0833335 -28.9166665 -28.7499995 0 -3873 -1670 --40.0833335 -39.9166665 -28.9166665 -28.7499995 0 -3954 -1670 --65.0833335 -64.9166665 -29.0833335 -28.9166665 284 0 2670 --64.9166665 -64.7499995 -29.0833335 -28.9166665 235 0 2670 --64.7500005 -64.5833335 -29.0833335 -28.9166665 168 0 2670 --64.5833335 -64.4166665 -29.0833335 -28.9166665 116 0 2670 --64.4166665 -64.2499995 -29.0833335 -28.9166665 114 0 2670 --64.2500005 -64.0833335 -29.0833335 -28.9166665 110 0 2670 --64.0833335 -63.9166665 -29.0833335 -28.9166665 136 0 2670 --63.9166665 -63.7499995 -29.0833335 -28.9166665 158 0 2670 --63.7500005 -63.5833335 -29.0833335 -28.9166665 147 0 2670 --63.5833335 -63.4166665 -29.0833335 -28.9166665 107 0 2670 --63.4166665 -63.2499995 -29.0833335 -28.9166665 102 0 2670 --63.2500005 -63.0833335 -29.0833335 -28.9166665 97 0 2670 --63.0833335 -62.9166665 -29.0833335 -28.9166665 97 0 2670 --62.9166665 -62.7499995 -29.0833335 -28.9166665 95 0 2670 --62.7500005 -62.5833335 -29.0833335 -28.9166665 91 0 2670 --62.5833335 -62.4166665 -29.0833335 -28.9166665 89 0 2670 --62.4166665 -62.2499995 -29.0833335 -28.9166665 87 0 2670 --62.2500005 -62.0833335 -29.0833335 -28.9166665 85 0 2670 --62.0833335 -61.9166665 -29.0833335 -28.9166665 82 0 2670 --61.9166665 -61.7499995 -29.0833335 -28.9166665 79 0 2670 --61.7500005 -61.5833335 -29.0833335 -28.9166665 77 0 2670 --61.5833335 -61.4166665 -29.0833335 -28.9166665 72 0 2670 --61.4166665 -61.2499995 -29.0833335 -28.9166665 68 0 2670 --61.2500005 -61.0833335 -29.0833335 -28.9166665 66 0 2670 --61.0833335 -60.9166665 -29.0833335 -28.9166665 63 0 2670 --60.9166665 -60.7499995 -29.0833335 -28.9166665 61 0 2670 --60.7500005 -60.5833335 -29.0833335 -28.9166665 58 0 2670 --60.5833335 -60.4166665 -29.0833335 -28.9166665 54 0 2670 --60.4166665 -60.2499995 -29.0833335 -28.9166665 61 0 2670 --60.2500005 -60.0833335 -29.0833335 -28.9166665 60 0 2670 --60.0833335 -59.9166665 -29.0833335 -28.9166665 59 0 2670 --59.9166665 -59.7499995 -29.0833335 -28.9166665 56 0 2670 --59.7500005 -59.5833335 -29.0833335 -28.9166665 53 0 2670 --59.5833335 -59.4166665 -29.0833335 -28.9166665 37 0 2670 --59.4166665 -59.2499995 -29.0833335 -28.9166665 35 0 2670 --59.2500005 -59.0833335 -29.0833335 -28.9166665 55 0 2670 --59.0833335 -58.9166665 -29.0833335 -28.9166665 60 0 2670 --58.9166665 -58.7499995 -29.0833335 -28.9166665 59 0 2670 --58.7500005 -58.5833335 -29.0833335 -28.9166665 59 0 2670 --58.5833335 -58.4166665 -29.0833335 -28.9166665 49 0 2670 --58.4166665 -58.2499995 -29.0833335 -28.9166665 62 0 2670 --58.2500005 -58.0833335 -29.0833335 -28.9166665 71 0 2670 --58.0833335 -57.9166665 -29.0833335 -28.9166665 94 0 2670 --57.9166665 -57.7499995 -29.0833335 -28.9166665 75 0 2670 --57.7500005 -57.5833335 -29.0833335 -28.9166665 66 0 2670 --57.5833335 -57.4166665 -29.0833335 -28.9166665 66 0 2670 --57.4166665 -57.2499995 -29.0833335 -28.9166665 65 0 2670 --57.2500005 -57.0833335 -29.0833335 -28.9166665 74 0 2670 --57.0833335 -56.9166665 -29.0833335 -28.9166665 69 0 2670 --56.9166665 -56.7499995 -29.0833335 -28.9166665 65 0 2670 --56.7500005 -56.5833335 -29.0833335 -28.9166665 64 0 2670 --56.5833335 -56.4166665 -29.0833335 -28.9166665 63 0 2670 --56.4166665 -56.2499995 -29.0833335 -28.9166665 66 0 2670 --56.2500005 -56.0833335 -29.0833335 -28.9166665 61 0 2670 --56.0833335 -55.9166665 -29.0833335 -28.9166665 75 0 2670 --55.9166665 -55.7499995 -29.0833335 -28.9166665 91 0 2670 --55.7500005 -55.5833335 -29.0833335 -28.9166665 121 0 2670 --55.5833335 -55.4166665 -29.0833335 -28.9166665 178 0 2670 --55.4166665 -55.2499995 -29.0833335 -28.9166665 235 0 2670 --55.2500005 -55.0833335 -29.0833335 -28.9166665 260 0 2670 --55.0833335 -54.9166665 -29.0833335 -28.9166665 296 0 2670 --54.9166665 -54.7499995 -29.0833335 -28.9166665 279 0 2670 --54.7500005 -54.5833335 -29.0833335 -28.9166665 354 0 2670 --54.5833335 -54.4166665 -29.0833335 -28.9166665 316 0 2670 --54.4166665 -54.2499995 -29.0833335 -28.9166665 375 0 2670 --54.2500005 -54.0833335 -29.0833335 -28.9166665 434 0 2670 --54.0833335 -53.9166665 -29.0833335 -28.9166665 487 0 2670 --53.9166665 -53.7499995 -29.0833335 -28.9166665 400 0 2670 --53.7500005 -53.5833335 -29.0833335 -28.9166665 392 0 2670 --53.5833335 -53.4166665 -29.0833335 -28.9166665 373 0 2670 --53.4166665 -53.2499995 -29.0833335 -28.9166665 365 0 2670 --53.2500005 -53.0833335 -29.0833335 -28.9166665 340 0 2670 --53.0833335 -52.9166665 -29.0833335 -28.9166665 425 0 2670 --52.9166665 -52.7499995 -29.0833335 -28.9166665 596 0 2670 --52.7500005 -52.5833335 -29.0833335 -28.9166665 669 0 2670 --52.5833335 -52.4166665 -29.0833335 -28.9166665 486 0 2670 --52.4166665 -52.2499995 -29.0833335 -28.9166665 676 0 2670 --52.2500005 -52.0833335 -29.0833335 -28.9166665 512 0 2670 --52.0833335 -51.9166665 -29.0833335 -28.9166665 440 0 2670 --51.9166665 -51.7499995 -29.0833335 -28.9166665 576 0 2670 --51.7500005 -51.5833335 -29.0833335 -28.9166665 387 0 2670 --51.5833335 -51.4166665 -29.0833335 -28.9166665 514 0 2670 --51.4166665 -51.2499995 -29.0833335 -28.9166665 579 0 2670 --51.2500005 -51.0833335 -29.0833335 -28.9166665 689 0 2670 --51.0833335 -50.9166665 -29.0833335 -28.9166665 810 0 2670 --50.9166665 -50.7499995 -29.0833335 -28.9166665 864 0 2670 --50.7500005 -50.5833335 -29.0833335 -28.9166665 915 0 2670 --50.5833335 -50.4166665 -29.0833335 -28.9166665 934 0 2670 --50.4166665 -50.2499995 -29.0833335 -28.9166665 864 0 2670 --50.2500005 -50.0833335 -29.0833335 -28.9166665 1029 0 2670 --50.0833335 -49.9166665 -29.0833335 -28.9166665 1043 0 2670 --49.9166665 -49.7499995 -29.0833335 -28.9166665 96 0 2670 --49.7500005 -49.5833335 -29.0833335 -28.9166665 20 0 2670 --49.5833335 -49.4166665 -29.0833335 -28.9166665 6 0 2670 --49.4166665 -49.2499995 -29.0833335 -28.9166665 0 -32 -1670 --49.2500005 -49.0833335 -29.0833335 -28.9166665 0 -44 -1670 --49.0833335 -48.9166665 -29.0833335 -28.9166665 0 -50 -1670 --48.9166665 -48.7499995 -29.0833335 -28.9166665 0 -63 -1670 --48.7500005 -48.5833335 -29.0833335 -28.9166665 0 -86 -1670 --48.5833335 -48.4166665 -29.0833335 -28.9166665 0 -102 -1670 --48.4166665 -48.2499995 -29.0833335 -28.9166665 0 -120 -1670 --48.2500005 -48.0833335 -29.0833335 -28.9166665 0 -127 -1670 --48.0833335 -47.9166665 -29.0833335 -28.9166665 0 -163 -1670 --47.9166665 -47.7499995 -29.0833335 -28.9166665 0 -420 -1670 --47.7500005 -47.5833335 -29.0833335 -28.9166665 0 -758 -1670 --47.5833335 -47.4166665 -29.0833335 -28.9166665 0 -971 -1670 --47.4166665 -47.2499995 -29.0833335 -28.9166665 0 -1200 -1670 --47.2500005 -47.0833335 -29.0833335 -28.9166665 0 -1438 -1670 --47.0833335 -46.9166665 -29.0833335 -28.9166665 0 -1540 -1670 --46.9166665 -46.7499995 -29.0833335 -28.9166665 0 -1770 -1670 --46.7500005 -46.5833335 -29.0833335 -28.9166665 0 -1978 -1670 --46.5833335 -46.4166665 -29.0833335 -28.9166665 0 -2276 -1670 --46.4166665 -46.2499995 -29.0833335 -28.9166665 0 -2420 -1670 --46.2500005 -46.0833335 -29.0833335 -28.9166665 0 -2534 -1670 --46.0833335 -45.9166665 -29.0833335 -28.9166665 0 -2644 -1670 --45.9166665 -45.7499995 -29.0833335 -28.9166665 0 -2749 -1670 --45.7500005 -45.5833335 -29.0833335 -28.9166665 0 -2866 -1670 --45.5833335 -45.4166665 -29.0833335 -28.9166665 0 -3201 -1670 --45.4166665 -45.2499995 -29.0833335 -28.9166665 0 -3388 -1670 --45.2500005 -45.0833335 -29.0833335 -28.9166665 0 -3524 -1670 --45.0833335 -44.9166665 -29.0833335 -28.9166665 0 -3656 -1670 --44.9166665 -44.7499995 -29.0833335 -28.9166665 0 -3654 -1670 --44.7500005 -44.5833335 -29.0833335 -28.9166665 0 -3680 -1670 --44.5833335 -44.4166665 -29.0833335 -28.9166665 0 -3652 -1670 --44.4166665 -44.2499995 -29.0833335 -28.9166665 0 -3696 -1670 --44.2500005 -44.0833335 -29.0833335 -28.9166665 0 -3771 -1670 --44.0833335 -43.9166665 -29.0833335 -28.9166665 0 -3852 -1670 --43.9166665 -43.7499995 -29.0833335 -28.9166665 0 -3848 -1670 --43.7500005 -43.5833335 -29.0833335 -28.9166665 0 -3901 -1670 --43.5833335 -43.4166665 -29.0833335 -28.9166665 0 -3935 -1670 --43.4166665 -43.2499995 -29.0833335 -28.9166665 0 -4012 -1670 --43.2500005 -43.0833335 -29.0833335 -28.9166665 0 -3992 -1670 --43.0833335 -42.9166665 -29.0833335 -28.9166665 0 -4014 -1670 --42.9166665 -42.7499995 -29.0833335 -28.9166665 0 -4023 -1670 --42.7500005 -42.5833335 -29.0833335 -28.9166665 0 -4009 -1670 --42.5833335 -42.4166665 -29.0833335 -28.9166665 0 -3983 -1670 --42.4166665 -42.2499995 -29.0833335 -28.9166665 0 -3969 -1670 --42.2500005 -42.0833335 -29.0833335 -28.9166665 0 -3982 -1670 --42.0833335 -41.9166665 -29.0833335 -28.9166665 0 -4013 -1670 --41.9166665 -41.7499995 -29.0833335 -28.9166665 0 -4085 -1670 --41.7500005 -41.5833335 -29.0833335 -28.9166665 0 -3802 -1670 --41.5833335 -41.4166665 -29.0833335 -28.9166665 0 -3769 -1670 --41.4166665 -41.2499995 -29.0833335 -28.9166665 0 -3758 -1670 --41.2500005 -41.0833335 -29.0833335 -28.9166665 0 -3748 -1670 --41.0833335 -40.9166665 -29.0833335 -28.9166665 0 -3787 -1670 --40.9166665 -40.7499995 -29.0833335 -28.9166665 0 -3782 -1670 --40.7500005 -40.5833335 -29.0833335 -28.9166665 0 -3714 -1670 --40.5833335 -40.4166665 -29.0833335 -28.9166665 0 -3733 -1670 --40.4166665 -40.2499995 -29.0833335 -28.9166665 0 -3777 -1670 --40.2500005 -40.0833335 -29.0833335 -28.9166665 0 -3871 -1670 --40.0833335 -39.9166665 -29.0833335 -28.9166665 0 -3897 -1670 --65.0833335 -64.9166665 -29.2500005 -29.0833335 285 0 2670 --64.9166665 -64.7499995 -29.2500005 -29.0833335 216 0 2670 --64.7500005 -64.5833335 -29.2500005 -29.0833335 136 0 2670 --64.5833335 -64.4166665 -29.2500005 -29.0833335 118 0 2670 --64.4166665 -64.2499995 -29.2500005 -29.0833335 114 0 2670 --64.2500005 -64.0833335 -29.2500005 -29.0833335 114 0 2670 --64.0833335 -63.9166665 -29.2500005 -29.0833335 253 0 2670 --63.9166665 -63.7499995 -29.2500005 -29.0833335 259 0 2670 --63.7500005 -63.5833335 -29.2500005 -29.0833335 253 0 2670 --63.5833335 -63.4166665 -29.2500005 -29.0833335 194 0 2670 --63.4166665 -63.2499995 -29.2500005 -29.0833335 96 0 2670 --63.2500005 -63.0833335 -29.2500005 -29.0833335 92 0 2670 --63.0833335 -62.9166665 -29.2500005 -29.0833335 93 0 2670 --62.9166665 -62.7499995 -29.2500005 -29.0833335 92 0 2670 --62.7500005 -62.5833335 -29.2500005 -29.0833335 90 0 2670 --62.5833335 -62.4166665 -29.2500005 -29.0833335 87 0 2670 --62.4166665 -62.2499995 -29.2500005 -29.0833335 82 0 2670 --62.2500005 -62.0833335 -29.2500005 -29.0833335 80 0 2670 --62.0833335 -61.9166665 -29.2500005 -29.0833335 79 0 2670 --61.9166665 -61.7499995 -29.2500005 -29.0833335 78 0 2670 --61.7500005 -61.5833335 -29.2500005 -29.0833335 75 0 2670 --61.5833335 -61.4166665 -29.2500005 -29.0833335 72 0 2670 --61.4166665 -61.2499995 -29.2500005 -29.0833335 68 0 2670 --61.2500005 -61.0833335 -29.2500005 -29.0833335 65 0 2670 --61.0833335 -60.9166665 -29.2500005 -29.0833335 63 0 2670 --60.9166665 -60.7499995 -29.2500005 -29.0833335 60 0 2670 --60.7500005 -60.5833335 -29.2500005 -29.0833335 56 0 2670 --60.5833335 -60.4166665 -29.2500005 -29.0833335 57 0 2670 --60.4166665 -60.2499995 -29.2500005 -29.0833335 59 0 2670 --60.2500005 -60.0833335 -29.2500005 -29.0833335 63 0 2670 --60.0833335 -59.9166665 -29.2500005 -29.0833335 60 0 2670 --59.9166665 -59.7499995 -29.2500005 -29.0833335 54 0 2670 --59.7500005 -59.5833335 -29.2500005 -29.0833335 49 0 2670 --59.5833335 -59.4166665 -29.2500005 -29.0833335 35 0 2670 --59.4166665 -59.2499995 -29.2500005 -29.0833335 36 0 2670 --59.2500005 -59.0833335 -29.2500005 -29.0833335 63 0 2670 --59.0833335 -58.9166665 -29.2500005 -29.0833335 57 0 2670 --58.9166665 -58.7499995 -29.2500005 -29.0833335 49 0 2670 --58.7500005 -58.5833335 -29.2500005 -29.0833335 47 0 2670 --58.5833335 -58.4166665 -29.2500005 -29.0833335 52 0 2670 --58.4166665 -58.2499995 -29.2500005 -29.0833335 74 0 2670 --58.2500005 -58.0833335 -29.2500005 -29.0833335 88 0 2670 --58.0833335 -57.9166665 -29.2500005 -29.0833335 96 0 2670 --57.9166665 -57.7499995 -29.2500005 -29.0833335 78 0 2670 --57.7500005 -57.5833335 -29.2500005 -29.0833335 66 0 2670 --57.5833335 -57.4166665 -29.2500005 -29.0833335 58 0 2670 --57.4166665 -57.2499995 -29.2500005 -29.0833335 69 0 2670 --57.2500005 -57.0833335 -29.2500005 -29.0833335 71 0 2670 --57.0833335 -56.9166665 -29.2500005 -29.0833335 64 0 2670 --56.9166665 -56.7499995 -29.2500005 -29.0833335 59 0 2670 --56.7500005 -56.5833335 -29.2500005 -29.0833335 66 0 2670 --56.5833335 -56.4166665 -29.2500005 -29.0833335 61 0 2670 --56.4166665 -56.2499995 -29.2500005 -29.0833335 65 0 2670 --56.2500005 -56.0833335 -29.2500005 -29.0833335 76 0 2670 --56.0833335 -55.9166665 -29.2500005 -29.0833335 83 0 2670 --55.9166665 -55.7499995 -29.2500005 -29.0833335 115 0 2670 --55.7500005 -55.5833335 -29.2500005 -29.0833335 156 0 2670 --55.5833335 -55.4166665 -29.2500005 -29.0833335 97 0 2670 --55.4166665 -55.2499995 -29.2500005 -29.0833335 191 0 2670 --55.2500005 -55.0833335 -29.2500005 -29.0833335 181 0 2670 --55.0833335 -54.9166665 -29.2500005 -29.0833335 258 0 2670 --54.9166665 -54.7499995 -29.2500005 -29.0833335 343 0 2670 --54.7500005 -54.5833335 -29.2500005 -29.0833335 338 0 2670 --54.5833335 -54.4166665 -29.2500005 -29.0833335 358 0 2670 --54.4166665 -54.2499995 -29.2500005 -29.0833335 293 0 2670 --54.2500005 -54.0833335 -29.2500005 -29.0833335 436 0 2670 --54.0833335 -53.9166665 -29.2500005 -29.0833335 445 0 2670 --53.9166665 -53.7499995 -29.2500005 -29.0833335 447 0 2670 --53.7500005 -53.5833335 -29.2500005 -29.0833335 460 0 2670 --53.5833335 -53.4166665 -29.2500005 -29.0833335 408 0 2670 --53.4166665 -53.2499995 -29.2500005 -29.0833335 318 0 2670 --53.2500005 -53.0833335 -29.2500005 -29.0833335 364 0 2670 --53.0833335 -52.9166665 -29.2500005 -29.0833335 312 0 2670 --52.9166665 -52.7499995 -29.2500005 -29.0833335 579 0 2670 --52.7500005 -52.5833335 -29.2500005 -29.0833335 464 0 2670 --52.5833335 -52.4166665 -29.2500005 -29.0833335 435 0 2670 --52.4166665 -52.2499995 -29.2500005 -29.0833335 448 0 2670 --52.2500005 -52.0833335 -29.2500005 -29.0833335 235 0 2670 --52.0833335 -51.9166665 -29.2500005 -29.0833335 253 0 2670 --51.9166665 -51.7499995 -29.2500005 -29.0833335 146 0 2670 --51.7500005 -51.5833335 -29.2500005 -29.0833335 385 0 2670 --51.5833335 -51.4166665 -29.2500005 -29.0833335 624 0 2670 --51.4166665 -51.2499995 -29.2500005 -29.0833335 632 0 2670 --51.2500005 -51.0833335 -29.2500005 -29.0833335 784 0 2670 --51.0833335 -50.9166665 -29.2500005 -29.0833335 693 0 2670 --50.9166665 -50.7499995 -29.2500005 -29.0833335 815 0 2670 --50.7500005 -50.5833335 -29.2500005 -29.0833335 902 0 2670 --50.5833335 -50.4166665 -29.2500005 -29.0833335 973 0 2670 --50.4166665 -50.2499995 -29.2500005 -29.0833335 895 0 2670 --50.2500005 -50.0833335 -29.2500005 -29.0833335 970 0 2670 --50.0833335 -49.9166665 -29.2500005 -29.0833335 373 0 2670 --49.9166665 -49.7499995 -29.2500005 -29.0833335 9 0 2670 --49.7500005 -49.5833335 -29.2500005 -29.0833335 0 0 2670 --49.5833335 -49.4166665 -29.2500005 -29.0833335 0 -20 -1670 --49.4166665 -49.2499995 -29.2500005 -29.0833335 0 -38 -1670 --49.2500005 -49.0833335 -29.2500005 -29.0833335 0 -47 -1670 --49.0833335 -48.9166665 -29.2500005 -29.0833335 0 -57 -1670 --48.9166665 -48.7499995 -29.2500005 -29.0833335 0 -73 -1670 --48.7500005 -48.5833335 -29.2500005 -29.0833335 0 -98 -1670 --48.5833335 -48.4166665 -29.2500005 -29.0833335 0 -117 -1670 --48.4166665 -48.2499995 -29.2500005 -29.0833335 0 -129 -1670 --48.2500005 -48.0833335 -29.2500005 -29.0833335 0 -138 -1670 --48.0833335 -47.9166665 -29.2500005 -29.0833335 0 -255 -1670 --47.9166665 -47.7499995 -29.2500005 -29.0833335 0 -485 -1670 --47.7500005 -47.5833335 -29.2500005 -29.0833335 0 -892 -1670 --47.5833335 -47.4166665 -29.2500005 -29.0833335 0 -1123 -1670 --47.4166665 -47.2499995 -29.2500005 -29.0833335 0 -1392 -1670 --47.2500005 -47.0833335 -29.2500005 -29.0833335 0 -1640 -1670 --47.0833335 -46.9166665 -29.2500005 -29.0833335 0 -1733 -1670 --46.9166665 -46.7499995 -29.2500005 -29.0833335 0 -1894 -1670 --46.7500005 -46.5833335 -29.2500005 -29.0833335 0 -2150 -1670 --46.5833335 -46.4166665 -29.2500005 -29.0833335 0 -2228 -1670 --46.4166665 -46.2499995 -29.2500005 -29.0833335 0 -2404 -1670 --46.2500005 -46.0833335 -29.2500005 -29.0833335 0 -2487 -1670 --46.0833335 -45.9166665 -29.2500005 -29.0833335 0 -2638 -1670 --45.9166665 -45.7499995 -29.2500005 -29.0833335 0 -2740 -1670 --45.7500005 -45.5833335 -29.2500005 -29.0833335 0 -2963 -1670 --45.5833335 -45.4166665 -29.2500005 -29.0833335 0 -3323 -1670 --45.4166665 -45.2499995 -29.2500005 -29.0833335 0 -3465 -1670 --45.2500005 -45.0833335 -29.2500005 -29.0833335 0 -3563 -1670 --45.0833335 -44.9166665 -29.2500005 -29.0833335 0 -3646 -1670 --44.9166665 -44.7499995 -29.2500005 -29.0833335 0 -3631 -1670 --44.7500005 -44.5833335 -29.2500005 -29.0833335 0 -3664 -1670 --44.5833335 -44.4166665 -29.2500005 -29.0833335 0 -3690 -1670 --44.4166665 -44.2499995 -29.2500005 -29.0833335 0 -3732 -1670 --44.2500005 -44.0833335 -29.2500005 -29.0833335 0 -3768 -1670 --44.0833335 -43.9166665 -29.2500005 -29.0833335 0 -3820 -1670 --43.9166665 -43.7499995 -29.2500005 -29.0833335 0 -3867 -1670 --43.7500005 -43.5833335 -29.2500005 -29.0833335 0 -3900 -1670 --43.5833335 -43.4166665 -29.2500005 -29.0833335 0 -3974 -1670 --43.4166665 -43.2499995 -29.2500005 -29.0833335 0 -4057 -1670 --43.2500005 -43.0833335 -29.2500005 -29.0833335 0 -4019 -1670 --43.0833335 -42.9166665 -29.2500005 -29.0833335 0 -4019 -1670 --42.9166665 -42.7499995 -29.2500005 -29.0833335 0 -4013 -1670 --42.7500005 -42.5833335 -29.2500005 -29.0833335 0 -4019 -1670 --42.5833335 -42.4166665 -29.2500005 -29.0833335 0 -4019 -1670 --42.4166665 -42.2499995 -29.2500005 -29.0833335 0 -4010 -1670 --42.2500005 -42.0833335 -29.2500005 -29.0833335 0 -3925 -1670 --42.0833335 -41.9166665 -29.2500005 -29.0833335 0 -3888 -1670 --41.9166665 -41.7499995 -29.2500005 -29.0833335 0 -4085 -1670 --41.7500005 -41.5833335 -29.2500005 -29.0833335 0 -3806 -1670 --41.5833335 -41.4166665 -29.2500005 -29.0833335 0 -3795 -1670 --41.4166665 -41.2499995 -29.2500005 -29.0833335 0 -3754 -1670 --41.2500005 -41.0833335 -29.2500005 -29.0833335 0 -3812 -1670 --41.0833335 -40.9166665 -29.2500005 -29.0833335 0 -3788 -1670 --40.9166665 -40.7499995 -29.2500005 -29.0833335 0 -3712 -1670 --40.7500005 -40.5833335 -29.2500005 -29.0833335 0 -3754 -1670 --40.5833335 -40.4166665 -29.2500005 -29.0833335 0 -3744 -1670 --40.4166665 -40.2499995 -29.2500005 -29.0833335 0 -3934 -1670 --40.2500005 -40.0833335 -29.2500005 -29.0833335 0 -3826 -1670 --40.0833335 -39.9166665 -29.2500005 -29.0833335 0 -3901 -1670 --65.0833335 -64.9166665 -29.4166665 -29.2499995 206 0 2670 --64.9166665 -64.7499995 -29.4166665 -29.2499995 233 0 2670 --64.7500005 -64.5833335 -29.4166665 -29.2499995 134 0 2670 --64.5833335 -64.4166665 -29.4166665 -29.2499995 119 0 2670 --64.4166665 -64.2499995 -29.4166665 -29.2499995 115 0 2670 --64.2500005 -64.0833335 -29.4166665 -29.2499995 172 0 2670 --64.0833335 -63.9166665 -29.4166665 -29.2499995 349 0 2670 --63.9166665 -63.7499995 -29.4166665 -29.2499995 399 0 2670 --63.7500005 -63.5833335 -29.4166665 -29.2499995 434 0 2670 --63.5833335 -63.4166665 -29.4166665 -29.2499995 257 0 2670 --63.4166665 -63.2499995 -29.4166665 -29.2499995 93 0 2670 --63.2500005 -63.0833335 -29.4166665 -29.2499995 90 0 2670 --63.0833335 -62.9166665 -29.4166665 -29.2499995 88 0 2670 --62.9166665 -62.7499995 -29.4166665 -29.2499995 88 0 2670 --62.7500005 -62.5833335 -29.4166665 -29.2499995 84 0 2670 --62.5833335 -62.4166665 -29.4166665 -29.2499995 83 0 2670 --62.4166665 -62.2499995 -29.4166665 -29.2499995 83 0 2670 --62.2500005 -62.0833335 -29.4166665 -29.2499995 81 0 2670 --62.0833335 -61.9166665 -29.4166665 -29.2499995 76 0 2670 --61.9166665 -61.7499995 -29.4166665 -29.2499995 74 0 2670 --61.7500005 -61.5833335 -29.4166665 -29.2499995 73 0 2670 --61.5833335 -61.4166665 -29.4166665 -29.2499995 71 0 2670 --61.4166665 -61.2499995 -29.4166665 -29.2499995 67 0 2670 --61.2500005 -61.0833335 -29.4166665 -29.2499995 65 0 2670 --61.0833335 -60.9166665 -29.4166665 -29.2499995 61 0 2670 --60.9166665 -60.7499995 -29.4166665 -29.2499995 58 0 2670 --60.7500005 -60.5833335 -29.4166665 -29.2499995 55 0 2670 --60.5833335 -60.4166665 -29.4166665 -29.2499995 54 0 2670 --60.4166665 -60.2499995 -29.4166665 -29.2499995 60 0 2670 --60.2500005 -60.0833335 -29.4166665 -29.2499995 58 0 2670 --60.0833335 -59.9166665 -29.4166665 -29.2499995 58 0 2670 --59.9166665 -59.7499995 -29.4166665 -29.2499995 50 0 2670 --59.7500005 -59.5833335 -29.4166665 -29.2499995 36 0 2670 --59.5833335 -59.4166665 -29.4166665 -29.2499995 33 0 2670 --59.4166665 -59.2499995 -29.4166665 -29.2499995 37 0 2670 --59.2500005 -59.0833335 -29.4166665 -29.2499995 59 0 2670 --59.0833335 -58.9166665 -29.4166665 -29.2499995 49 0 2670 --58.9166665 -58.7499995 -29.4166665 -29.2499995 43 0 2670 --58.7500005 -58.5833335 -29.4166665 -29.2499995 46 0 2670 --58.5833335 -58.4166665 -29.4166665 -29.2499995 73 0 2670 --58.4166665 -58.2499995 -29.4166665 -29.2499995 92 0 2670 --58.2500005 -58.0833335 -29.4166665 -29.2499995 114 0 2670 --58.0833335 -57.9166665 -29.4166665 -29.2499995 115 0 2670 --57.9166665 -57.7499995 -29.4166665 -29.2499995 90 0 2670 --57.7500005 -57.5833335 -29.4166665 -29.2499995 85 0 2670 --57.5833335 -57.4166665 -29.4166665 -29.2499995 65 0 2670 --57.4166665 -57.2499995 -29.4166665 -29.2499995 69 0 2670 --57.2500005 -57.0833335 -29.4166665 -29.2499995 70 0 2670 --57.0833335 -56.9166665 -29.4166665 -29.2499995 70 0 2670 --56.9166665 -56.7499995 -29.4166665 -29.2499995 61 0 2670 --56.7500005 -56.5833335 -29.4166665 -29.2499995 50 0 2670 --56.5833335 -56.4166665 -29.4166665 -29.2499995 59 0 2670 --56.4166665 -56.2499995 -29.4166665 -29.2499995 64 0 2670 --56.2500005 -56.0833335 -29.4166665 -29.2499995 58 0 2670 --56.0833335 -55.9166665 -29.4166665 -29.2499995 62 0 2670 --55.9166665 -55.7499995 -29.4166665 -29.2499995 82 0 2670 --55.7500005 -55.5833335 -29.4166665 -29.2499995 105 0 2670 --55.5833335 -55.4166665 -29.4166665 -29.2499995 159 0 2670 --55.4166665 -55.2499995 -29.4166665 -29.2499995 180 0 2670 --55.2500005 -55.0833335 -29.4166665 -29.2499995 229 0 2670 --55.0833335 -54.9166665 -29.4166665 -29.2499995 412 0 2670 --54.9166665 -54.7499995 -29.4166665 -29.2499995 272 0 2670 --54.7500005 -54.5833335 -29.4166665 -29.2499995 263 0 2670 --54.5833335 -54.4166665 -29.4166665 -29.2499995 192 0 2670 --54.4166665 -54.2499995 -29.4166665 -29.2499995 374 0 2670 --54.2500005 -54.0833335 -29.4166665 -29.2499995 316 0 2670 --54.0833335 -53.9166665 -29.4166665 -29.2499995 336 0 2670 --53.9166665 -53.7499995 -29.4166665 -29.2499995 419 0 2670 --53.7500005 -53.5833335 -29.4166665 -29.2499995 451 0 2670 --53.5833335 -53.4166665 -29.4166665 -29.2499995 385 0 2670 --53.4166665 -53.2499995 -29.4166665 -29.2499995 430 0 2670 --53.2500005 -53.0833335 -29.4166665 -29.2499995 168 0 2670 --53.0833335 -52.9166665 -29.4166665 -29.2499995 371 0 2670 --52.9166665 -52.7499995 -29.4166665 -29.2499995 506 0 2670 --52.7500005 -52.5833335 -29.4166665 -29.2499995 555 0 2670 --52.5833335 -52.4166665 -29.4166665 -29.2499995 618 0 2670 --52.4166665 -52.2499995 -29.4166665 -29.2499995 571 0 2670 --52.2500005 -52.0833335 -29.4166665 -29.2499995 165 0 2670 --52.0833335 -51.9166665 -29.4166665 -29.2499995 337 0 2670 --51.9166665 -51.7499995 -29.4166665 -29.2499995 374 0 2670 --51.7500005 -51.5833335 -29.4166665 -29.2499995 519 0 2670 --51.5833335 -51.4166665 -29.4166665 -29.2499995 683 0 2670 --51.4166665 -51.2499995 -29.4166665 -29.2499995 554 0 2670 --51.2500005 -51.0833335 -29.4166665 -29.2499995 116 0 2670 --51.0833335 -50.9166665 -29.4166665 -29.2499995 455 0 2670 --50.9166665 -50.7499995 -29.4166665 -29.2499995 799 0 2670 --50.7500005 -50.5833335 -29.4166665 -29.2499995 840 0 2670 --50.5833335 -50.4166665 -29.4166665 -29.2499995 892 0 2670 --50.4166665 -50.2499995 -29.4166665 -29.2499995 920 0 2670 --50.2500005 -50.0833335 -29.4166665 -29.2499995 921 0 2670 --50.0833335 -49.9166665 -29.4166665 -29.2499995 508 0 2670 --49.9166665 -49.7499995 -29.4166665 -29.2499995 12 0 2670 --49.7500005 -49.5833335 -29.4166665 -29.2499995 0 -22 -1670 --49.5833335 -49.4166665 -29.4166665 -29.2499995 0 -27 -1670 --49.4166665 -49.2499995 -29.4166665 -29.2499995 0 -44 -1670 --49.2500005 -49.0833335 -29.4166665 -29.2499995 0 -51 -1670 --49.0833335 -48.9166665 -29.4166665 -29.2499995 0 -68 -1670 --48.9166665 -48.7499995 -29.4166665 -29.2499995 0 -94 -1670 --48.7500005 -48.5833335 -29.4166665 -29.2499995 0 -114 -1670 --48.5833335 -48.4166665 -29.4166665 -29.2499995 0 -129 -1670 --48.4166665 -48.2499995 -29.4166665 -29.2499995 0 -131 -1670 --48.2500005 -48.0833335 -29.4166665 -29.2499995 0 -185 -1670 --48.0833335 -47.9166665 -29.4166665 -29.2499995 0 -330 -1670 --47.9166665 -47.7499995 -29.4166665 -29.2499995 0 -523 -1670 --47.7500005 -47.5833335 -29.4166665 -29.2499995 0 -928 -1670 --47.5833335 -47.4166665 -29.4166665 -29.2499995 0 -1207 -1670 --47.4166665 -47.2499995 -29.4166665 -29.2499995 0 -1472 -1670 --47.2500005 -47.0833335 -29.4166665 -29.2499995 0 -1833 -1670 --47.0833335 -46.9166665 -29.4166665 -29.2499995 0 -1870 -1670 --46.9166665 -46.7499995 -29.4166665 -29.2499995 0 -1991 -1670 --46.7500005 -46.5833335 -29.4166665 -29.2499995 0 -2156 -1670 --46.5833335 -46.4166665 -29.4166665 -29.2499995 0 -2340 -1670 --46.4166665 -46.2499995 -29.4166665 -29.2499995 0 -2365 -1670 --46.2500005 -46.0833335 -29.4166665 -29.2499995 0 -2476 -1670 --46.0833335 -45.9166665 -29.4166665 -29.2499995 0 -2556 -1670 --45.9166665 -45.7499995 -29.4166665 -29.2499995 0 -2769 -1670 --45.7500005 -45.5833335 -29.4166665 -29.2499995 0 -3079 -1670 --45.5833335 -45.4166665 -29.4166665 -29.2499995 0 -3410 -1670 --45.4166665 -45.2499995 -29.4166665 -29.2499995 0 -3516 -1670 --45.2500005 -45.0833335 -29.4166665 -29.2499995 0 -3586 -1670 --45.0833335 -44.9166665 -29.4166665 -29.2499995 0 -3618 -1670 --44.9166665 -44.7499995 -29.4166665 -29.2499995 0 -3648 -1670 --44.7500005 -44.5833335 -29.4166665 -29.2499995 0 -3679 -1670 --44.5833335 -44.4166665 -29.4166665 -29.2499995 0 -3720 -1670 --44.4166665 -44.2499995 -29.4166665 -29.2499995 0 -3679 -1670 --44.2500005 -44.0833335 -29.4166665 -29.2499995 0 -3741 -1670 --44.0833335 -43.9166665 -29.4166665 -29.2499995 0 -3836 -1670 --43.9166665 -43.7499995 -29.4166665 -29.2499995 0 -3847 -1670 --43.7500005 -43.5833335 -29.4166665 -29.2499995 0 -3905 -1670 --43.5833335 -43.4166665 -29.4166665 -29.2499995 0 -3945 -1670 --43.4166665 -43.2499995 -29.4166665 -29.2499995 0 -3999 -1670 --43.2500005 -43.0833335 -29.4166665 -29.2499995 0 -4022 -1670 --43.0833335 -42.9166665 -29.4166665 -29.2499995 0 -4032 -1670 --42.9166665 -42.7499995 -29.4166665 -29.2499995 0 -4044 -1670 --42.7500005 -42.5833335 -29.4166665 -29.2499995 0 -3998 -1670 --42.5833335 -42.4166665 -29.4166665 -29.2499995 0 -3965 -1670 --42.4166665 -42.2499995 -29.4166665 -29.2499995 0 -4008 -1670 --42.2500005 -42.0833335 -29.4166665 -29.2499995 0 -3971 -1670 --42.0833335 -41.9166665 -29.4166665 -29.2499995 0 -3893 -1670 --41.9166665 -41.7499995 -29.4166665 -29.2499995 0 -4137 -1670 --41.7500005 -41.5833335 -29.4166665 -29.2499995 0 -3812 -1670 --41.5833335 -41.4166665 -29.4166665 -29.2499995 0 -3801 -1670 --41.4166665 -41.2499995 -29.4166665 -29.2499995 0 -3700 -1670 --41.2500005 -41.0833335 -29.4166665 -29.2499995 0 -3775 -1670 --41.0833335 -40.9166665 -29.4166665 -29.2499995 0 -3710 -1670 --40.9166665 -40.7499995 -29.4166665 -29.2499995 0 -3825 -1670 --40.7500005 -40.5833335 -29.4166665 -29.2499995 0 -3735 -1670 --40.5833335 -40.4166665 -29.4166665 -29.2499995 0 -3766 -1670 --40.4166665 -40.2499995 -29.4166665 -29.2499995 0 -3887 -1670 --40.2500005 -40.0833335 -29.4166665 -29.2499995 0 -4170 -1670 --40.0833335 -39.9166665 -29.4166665 -29.2499995 0 -3981 -1670 --65.0833335 -64.9166665 -29.5833335 -29.4166665 187 0 2670 --64.9166665 -64.7499995 -29.5833335 -29.4166665 180 0 2670 --64.7500005 -64.5833335 -29.5833335 -29.4166665 153 0 2670 --64.5833335 -64.4166665 -29.5833335 -29.4166665 119 0 2670 --64.4166665 -64.2499995 -29.5833335 -29.4166665 123 0 2670 --64.2500005 -64.0833335 -29.5833335 -29.4166665 271 0 2670 --64.0833335 -63.9166665 -29.5833335 -29.4166665 443 0 2670 --63.9166665 -63.7499995 -29.5833335 -29.4166665 533 0 2670 --63.7500005 -63.5833335 -29.5833335 -29.4166665 504 0 2670 --63.5833335 -63.4166665 -29.5833335 -29.4166665 284 0 2670 --63.4166665 -63.2499995 -29.5833335 -29.4166665 130 0 2670 --63.2500005 -63.0833335 -29.5833335 -29.4166665 87 0 2670 --63.0833335 -62.9166665 -29.5833335 -29.4166665 84 0 2670 --62.9166665 -62.7499995 -29.5833335 -29.4166665 81 0 2670 --62.7500005 -62.5833335 -29.5833335 -29.4166665 83 0 2670 --62.5833335 -62.4166665 -29.5833335 -29.4166665 81 0 2670 --62.4166665 -62.2499995 -29.5833335 -29.4166665 79 0 2670 --62.2500005 -62.0833335 -29.5833335 -29.4166665 78 0 2670 --62.0833335 -61.9166665 -29.5833335 -29.4166665 75 0 2670 --61.9166665 -61.7499995 -29.5833335 -29.4166665 82 0 2670 --61.7500005 -61.5833335 -29.5833335 -29.4166665 69 0 2670 --61.5833335 -61.4166665 -29.5833335 -29.4166665 68 0 2670 --61.4166665 -61.2499995 -29.5833335 -29.4166665 65 0 2670 --61.2500005 -61.0833335 -29.5833335 -29.4166665 62 0 2670 --61.0833335 -60.9166665 -29.5833335 -29.4166665 59 0 2670 --60.9166665 -60.7499995 -29.5833335 -29.4166665 57 0 2670 --60.7500005 -60.5833335 -29.5833335 -29.4166665 53 0 2670 --60.5833335 -60.4166665 -29.5833335 -29.4166665 56 0 2670 --60.4166665 -60.2499995 -29.5833335 -29.4166665 61 0 2670 --60.2500005 -60.0833335 -29.5833335 -29.4166665 59 0 2670 --60.0833335 -59.9166665 -29.5833335 -29.4166665 57 0 2670 --59.9166665 -59.7499995 -29.5833335 -29.4166665 43 0 2670 --59.7500005 -59.5833335 -29.5833335 -29.4166665 30 0 2670 --59.5833335 -59.4166665 -29.5833335 -29.4166665 30 0 2670 --59.4166665 -59.2499995 -29.5833335 -29.4166665 36 0 2670 --59.2500005 -59.0833335 -29.5833335 -29.4166665 43 0 2670 --59.0833335 -58.9166665 -29.5833335 -29.4166665 44 0 2670 --58.9166665 -58.7499995 -29.5833335 -29.4166665 43 0 2670 --58.7500005 -58.5833335 -29.5833335 -29.4166665 67 0 2670 --58.5833335 -58.4166665 -29.5833335 -29.4166665 77 0 2670 --58.4166665 -58.2499995 -29.5833335 -29.4166665 83 0 2670 --58.2500005 -58.0833335 -29.5833335 -29.4166665 109 0 2670 --58.0833335 -57.9166665 -29.5833335 -29.4166665 70 0 2670 --57.9166665 -57.7499995 -29.5833335 -29.4166665 71 0 2670 --57.7500005 -57.5833335 -29.5833335 -29.4166665 73 0 2670 --57.5833335 -57.4166665 -29.5833335 -29.4166665 53 0 2670 --57.4166665 -57.2499995 -29.5833335 -29.4166665 65 0 2670 --57.2500005 -57.0833335 -29.5833335 -29.4166665 72 0 2670 --57.0833335 -56.9166665 -29.5833335 -29.4166665 68 0 2670 --56.9166665 -56.7499995 -29.5833335 -29.4166665 47 0 2670 --56.7500005 -56.5833335 -29.5833335 -29.4166665 81 0 2670 --56.5833335 -56.4166665 -29.5833335 -29.4166665 62 0 2670 --56.4166665 -56.2499995 -29.5833335 -29.4166665 67 0 2670 --56.2500005 -56.0833335 -29.5833335 -29.4166665 89 0 2670 --56.0833335 -55.9166665 -29.5833335 -29.4166665 91 0 2670 --55.9166665 -55.7499995 -29.5833335 -29.4166665 119 0 2670 --55.7500005 -55.5833335 -29.5833335 -29.4166665 67 0 2670 --55.5833335 -55.4166665 -29.5833335 -29.4166665 156 0 2670 --55.4166665 -55.2499995 -29.5833335 -29.4166665 128 0 2670 --55.2500005 -55.0833335 -29.5833335 -29.4166665 104 0 2670 --55.0833335 -54.9166665 -29.5833335 -29.4166665 261 0 2670 --54.9166665 -54.7499995 -29.5833335 -29.4166665 131 0 2670 --54.7500005 -54.5833335 -29.5833335 -29.4166665 118 0 2670 --54.5833335 -54.4166665 -29.5833335 -29.4166665 292 0 2670 --54.4166665 -54.2499995 -29.5833335 -29.4166665 208 0 2670 --54.2500005 -54.0833335 -29.5833335 -29.4166665 263 0 2670 --54.0833335 -53.9166665 -29.5833335 -29.4166665 339 0 2670 --53.9166665 -53.7499995 -29.5833335 -29.4166665 479 0 2670 --53.7500005 -53.5833335 -29.5833335 -29.4166665 491 0 2670 --53.5833335 -53.4166665 -29.5833335 -29.4166665 288 0 2670 --53.4166665 -53.2499995 -29.5833335 -29.4166665 236 0 2670 --53.2500005 -53.0833335 -29.5833335 -29.4166665 251 0 2670 --53.0833335 -52.9166665 -29.5833335 -29.4166665 569 0 2670 --52.9166665 -52.7499995 -29.5833335 -29.4166665 440 0 2670 --52.7500005 -52.5833335 -29.5833335 -29.4166665 524 0 2670 --52.5833335 -52.4166665 -29.5833335 -29.4166665 270 0 2670 --52.4166665 -52.2499995 -29.5833335 -29.4166665 260 0 2670 --52.2500005 -52.0833335 -29.5833335 -29.4166665 144 0 2670 --52.0833335 -51.9166665 -29.5833335 -29.4166665 61 0 2670 --51.9166665 -51.7499995 -29.5833335 -29.4166665 84 0 2670 --51.7500005 -51.5833335 -29.5833335 -29.4166665 458 0 2670 --51.5833335 -51.4166665 -29.5833335 -29.4166665 373 0 2670 --51.4166665 -51.2499995 -29.5833335 -29.4166665 33 0 2670 --51.2500005 -51.0833335 -29.5833335 -29.4166665 157 0 2670 --51.0833335 -50.9166665 -29.5833335 -29.4166665 466 0 2670 --50.9166665 -50.7499995 -29.5833335 -29.4166665 361 0 2670 --50.7500005 -50.5833335 -29.5833335 -29.4166665 292 0 2670 --50.5833335 -50.4166665 -29.5833335 -29.4166665 667 0 2670 --50.4166665 -50.2499995 -29.5833335 -29.4166665 855 0 2670 --50.2500005 -50.0833335 -29.5833335 -29.4166665 437 0 2670 --50.0833335 -49.9166665 -29.5833335 -29.4166665 252 0 2670 --49.9166665 -49.7499995 -29.5833335 -29.4166665 0 -8 -1670 --49.7500005 -49.5833335 -29.5833335 -29.4166665 0 -33 -1670 --49.5833335 -49.4166665 -29.5833335 -29.4166665 0 -41 -1670 --49.4166665 -49.2499995 -29.5833335 -29.4166665 0 -51 -1670 --49.2500005 -49.0833335 -29.5833335 -29.4166665 0 -53 -1670 --49.0833335 -48.9166665 -29.5833335 -29.4166665 0 -86 -1670 --48.9166665 -48.7499995 -29.5833335 -29.4166665 0 -96 -1670 --48.7500005 -48.5833335 -29.5833335 -29.4166665 0 -124 -1670 --48.5833335 -48.4166665 -29.5833335 -29.4166665 0 -125 -1670 --48.4166665 -48.2499995 -29.5833335 -29.4166665 0 -151 -1670 --48.2500005 -48.0833335 -29.5833335 -29.4166665 0 -205 -1670 --48.0833335 -47.9166665 -29.5833335 -29.4166665 0 -359 -1670 --47.9166665 -47.7499995 -29.5833335 -29.4166665 0 -556 -1670 --47.7500005 -47.5833335 -29.5833335 -29.4166665 0 -948 -1670 --47.5833335 -47.4166665 -29.5833335 -29.4166665 0 -1230 -1670 --47.4166665 -47.2499995 -29.5833335 -29.4166665 0 -1539 -1670 --47.2500005 -47.0833335 -29.5833335 -29.4166665 0 -1840 -1670 --47.0833335 -46.9166665 -29.5833335 -29.4166665 0 -1956 -1670 --46.9166665 -46.7499995 -29.5833335 -29.4166665 0 -2085 -1670 --46.7500005 -46.5833335 -29.5833335 -29.4166665 0 -2198 -1670 --46.5833335 -46.4166665 -29.5833335 -29.4166665 0 -2361 -1670 --46.4166665 -46.2499995 -29.5833335 -29.4166665 0 -2432 -1670 --46.2500005 -46.0833335 -29.5833335 -29.4166665 0 -2402 -1670 --46.0833335 -45.9166665 -29.5833335 -29.4166665 0 -2650 -1670 --45.9166665 -45.7499995 -29.5833335 -29.4166665 0 -2795 -1670 --45.7500005 -45.5833335 -29.5833335 -29.4166665 0 -3280 -1670 --45.5833335 -45.4166665 -29.5833335 -29.4166665 0 -3470 -1670 --45.4166665 -45.2499995 -29.5833335 -29.4166665 0 -3526 -1670 --45.2500005 -45.0833335 -29.5833335 -29.4166665 0 -3566 -1670 --45.0833335 -44.9166665 -29.5833335 -29.4166665 0 -3604 -1670 --44.9166665 -44.7499995 -29.5833335 -29.4166665 0 -3650 -1670 --44.7500005 -44.5833335 -29.5833335 -29.4166665 0 -3644 -1670 --44.5833335 -44.4166665 -29.5833335 -29.4166665 0 -3629 -1670 --44.4166665 -44.2499995 -29.5833335 -29.4166665 0 -3644 -1670 --44.2500005 -44.0833335 -29.5833335 -29.4166665 0 -3731 -1670 --44.0833335 -43.9166665 -29.5833335 -29.4166665 0 -3791 -1670 --43.9166665 -43.7499995 -29.5833335 -29.4166665 0 -3822 -1670 --43.7500005 -43.5833335 -29.5833335 -29.4166665 0 -3869 -1670 --43.5833335 -43.4166665 -29.5833335 -29.4166665 0 -3949 -1670 --43.4166665 -43.2499995 -29.5833335 -29.4166665 0 -4004 -1670 --43.2500005 -43.0833335 -29.5833335 -29.4166665 0 -4123 -1670 --43.0833335 -42.9166665 -29.5833335 -29.4166665 0 -4002 -1670 --42.9166665 -42.7499995 -29.5833335 -29.4166665 0 -4026 -1670 --42.7500005 -42.5833335 -29.5833335 -29.4166665 0 -4027 -1670 --42.5833335 -42.4166665 -29.5833335 -29.4166665 0 -4012 -1670 --42.4166665 -42.2499995 -29.5833335 -29.4166665 0 -4019 -1670 --42.2500005 -42.0833335 -29.5833335 -29.4166665 0 -3962 -1670 --42.0833335 -41.9166665 -29.5833335 -29.4166665 0 -3957 -1670 --41.9166665 -41.7499995 -29.5833335 -29.4166665 0 -4001 -1670 --41.7500005 -41.5833335 -29.5833335 -29.4166665 0 -3775 -1670 --41.5833335 -41.4166665 -29.5833335 -29.4166665 0 -3737 -1670 --41.4166665 -41.2499995 -29.5833335 -29.4166665 0 -3777 -1670 --41.2500005 -41.0833335 -29.5833335 -29.4166665 0 -3949 -1670 --41.0833335 -40.9166665 -29.5833335 -29.4166665 0 -3977 -1670 --40.9166665 -40.7499995 -29.5833335 -29.4166665 0 -4040 -1670 --40.7500005 -40.5833335 -29.5833335 -29.4166665 0 -3800 -1670 --40.5833335 -40.4166665 -29.5833335 -29.4166665 0 -4014 -1670 --40.4166665 -40.2499995 -29.5833335 -29.4166665 0 -4121 -1670 --40.2500005 -40.0833335 -29.5833335 -29.4166665 0 -3714 -1670 --40.0833335 -39.9166665 -29.5833335 -29.4166665 0 -3696 -1670 --65.0833335 -64.9166665 -29.7500005 -29.5833335 181 0 2670 --64.9166665 -64.7499995 -29.7500005 -29.5833335 180 0 2670 --64.7500005 -64.5833335 -29.7500005 -29.5833335 194 0 2670 --64.5833335 -64.4166665 -29.7500005 -29.5833335 126 0 2670 --64.4166665 -64.2499995 -29.7500005 -29.5833335 179 0 2670 --64.2500005 -64.0833335 -29.7500005 -29.5833335 404 0 2670 --64.0833335 -63.9166665 -29.7500005 -29.5833335 618 0 2670 --63.9166665 -63.7499995 -29.7500005 -29.5833335 632 0 2670 --63.7500005 -63.5833335 -29.7500005 -29.5833335 514 0 2670 --63.5833335 -63.4166665 -29.7500005 -29.5833335 253 0 2670 --63.4166665 -63.2499995 -29.7500005 -29.5833335 100 0 2670 --63.2500005 -63.0833335 -29.7500005 -29.5833335 83 0 2670 --63.0833335 -62.9166665 -29.7500005 -29.5833335 81 0 2670 --62.9166665 -62.7499995 -29.7500005 -29.5833335 80 0 2670 --62.7500005 -62.5833335 -29.7500005 -29.5833335 79 0 2670 --62.5833335 -62.4166665 -29.7500005 -29.5833335 77 0 2670 --62.4166665 -62.2499995 -29.7500005 -29.5833335 75 0 2670 --62.2500005 -62.0833335 -29.7500005 -29.5833335 78 0 2670 --62.0833335 -61.9166665 -29.7500005 -29.5833335 84 0 2670 --61.9166665 -61.7499995 -29.7500005 -29.5833335 84 0 2670 --61.7500005 -61.5833335 -29.7500005 -29.5833335 70 0 2670 --61.5833335 -61.4166665 -29.7500005 -29.5833335 64 0 2670 --61.4166665 -61.2499995 -29.7500005 -29.5833335 63 0 2670 --61.2500005 -61.0833335 -29.7500005 -29.5833335 60 0 2670 --61.0833335 -60.9166665 -29.7500005 -29.5833335 58 0 2670 --60.9166665 -60.7499995 -29.7500005 -29.5833335 55 0 2670 --60.7500005 -60.5833335 -29.7500005 -29.5833335 55 0 2670 --60.5833335 -60.4166665 -29.7500005 -29.5833335 60 0 2670 --60.4166665 -60.2499995 -29.7500005 -29.5833335 59 0 2670 --60.2500005 -60.0833335 -29.7500005 -29.5833335 63 0 2670 --60.0833335 -59.9166665 -29.7500005 -29.5833335 42 0 2670 --59.9166665 -59.7499995 -29.7500005 -29.5833335 34 0 2670 --59.7500005 -59.5833335 -29.7500005 -29.5833335 31 0 2670 --59.5833335 -59.4166665 -29.7500005 -29.5833335 29 0 2670 --59.4166665 -59.2499995 -29.7500005 -29.5833335 39 0 2670 --59.2500005 -59.0833335 -29.7500005 -29.5833335 41 0 2670 --59.0833335 -58.9166665 -29.7500005 -29.5833335 44 0 2670 --58.9166665 -58.7499995 -29.7500005 -29.5833335 42 0 2670 --58.7500005 -58.5833335 -29.7500005 -29.5833335 60 0 2670 --58.5833335 -58.4166665 -29.7500005 -29.5833335 79 0 2670 --58.4166665 -58.2499995 -29.7500005 -29.5833335 86 0 2670 --58.2500005 -58.0833335 -29.7500005 -29.5833335 95 0 2670 --58.0833335 -57.9166665 -29.7500005 -29.5833335 81 0 2670 --57.9166665 -57.7499995 -29.7500005 -29.5833335 56 0 2670 --57.7500005 -57.5833335 -29.7500005 -29.5833335 67 0 2670 --57.5833335 -57.4166665 -29.7500005 -29.5833335 68 0 2670 --57.4166665 -57.2499995 -29.7500005 -29.5833335 76 0 2670 --57.2500005 -57.0833335 -29.7500005 -29.5833335 66 0 2670 --57.0833335 -56.9166665 -29.7500005 -29.5833335 48 0 2670 --56.9166665 -56.7499995 -29.7500005 -29.5833335 62 0 2670 --56.7500005 -56.5833335 -29.7500005 -29.5833335 81 0 2670 --56.5833335 -56.4166665 -29.7500005 -29.5833335 104 0 2670 --56.4166665 -56.2499995 -29.7500005 -29.5833335 71 0 2670 --56.2500005 -56.0833335 -29.7500005 -29.5833335 88 0 2670 --56.0833335 -55.9166665 -29.7500005 -29.5833335 120 0 2670 --55.9166665 -55.7499995 -29.7500005 -29.5833335 84 0 2670 --55.7500005 -55.5833335 -29.7500005 -29.5833335 124 0 2670 --55.5833335 -55.4166665 -29.7500005 -29.5833335 120 0 2670 --55.4166665 -55.2499995 -29.7500005 -29.5833335 119 0 2670 --55.2500005 -55.0833335 -29.7500005 -29.5833335 136 0 2670 --55.0833335 -54.9166665 -29.7500005 -29.5833335 93 0 2670 --54.9166665 -54.7499995 -29.7500005 -29.5833335 87 0 2670 --54.7500005 -54.5833335 -29.7500005 -29.5833335 112 0 2670 --54.5833335 -54.4166665 -29.7500005 -29.5833335 94 0 2670 --54.4166665 -54.2499995 -29.7500005 -29.5833335 127 0 2670 --54.2500005 -54.0833335 -29.7500005 -29.5833335 135 0 2670 --54.0833335 -53.9166665 -29.7500005 -29.5833335 149 0 2670 --53.9166665 -53.7499995 -29.7500005 -29.5833335 134 0 2670 --53.7500005 -53.5833335 -29.7500005 -29.5833335 83 0 2670 --53.5833335 -53.4166665 -29.7500005 -29.5833335 275 0 2670 --53.4166665 -53.2499995 -29.7500005 -29.5833335 38 0 2670 --53.2500005 -53.0833335 -29.7500005 -29.5833335 122 0 2670 --53.0833335 -52.9166665 -29.7500005 -29.5833335 328 0 2670 --52.9166665 -52.7499995 -29.7500005 -29.5833335 93 0 2670 --52.7500005 -52.5833335 -29.7500005 -29.5833335 73 0 2670 --52.5833335 -52.4166665 -29.7500005 -29.5833335 112 0 2670 --52.4166665 -52.2499995 -29.7500005 -29.5833335 56 0 2670 --52.2500005 -52.0833335 -29.7500005 -29.5833335 47 0 2670 --52.0833335 -51.9166665 -29.7500005 -29.5833335 16 0 2670 --51.9166665 -51.7499995 -29.7500005 -29.5833335 81 0 2670 --51.7500005 -51.5833335 -29.7500005 -29.5833335 74 0 2670 --51.5833335 -51.4166665 -29.7500005 -29.5833335 131 0 2670 --51.4166665 -51.2499995 -29.7500005 -29.5833335 69 0 2670 --51.2500005 -51.0833335 -29.7500005 -29.5833335 92 0 2670 --51.0833335 -50.9166665 -29.7500005 -29.5833335 30 0 2670 --50.9166665 -50.7499995 -29.7500005 -29.5833335 37 0 2670 --50.7500005 -50.5833335 -29.7500005 -29.5833335 34 0 2670 --50.5833335 -50.4166665 -29.7500005 -29.5833335 343 0 2670 --50.4166665 -50.2499995 -29.7500005 -29.5833335 809 0 2670 --50.2500005 -50.0833335 -29.7500005 -29.5833335 127 0 2670 --50.0833335 -49.9166665 -29.7500005 -29.5833335 7 0 2670 --49.9166665 -49.7499995 -29.7500005 -29.5833335 0 -34 -1670 --49.7500005 -49.5833335 -29.7500005 -29.5833335 0 -42 -1670 --49.5833335 -49.4166665 -29.7500005 -29.5833335 0 -48 -1670 --49.4166665 -49.2499995 -29.7500005 -29.5833335 0 -59 -1670 --49.2500005 -49.0833335 -29.7500005 -29.5833335 0 -83 -1670 --49.0833335 -48.9166665 -29.7500005 -29.5833335 0 -104 -1670 --48.9166665 -48.7499995 -29.7500005 -29.5833335 0 -121 -1670 --48.7500005 -48.5833335 -29.7500005 -29.5833335 0 -119 -1670 --48.5833335 -48.4166665 -29.7500005 -29.5833335 0 -145 -1670 --48.4166665 -48.2499995 -29.7500005 -29.5833335 0 -169 -1670 --48.2500005 -48.0833335 -29.7500005 -29.5833335 0 -247 -1670 --48.0833335 -47.9166665 -29.7500005 -29.5833335 0 -359 -1670 --47.9166665 -47.7499995 -29.7500005 -29.5833335 0 -493 -1670 --47.7500005 -47.5833335 -29.7500005 -29.5833335 0 -938 -1670 --47.5833335 -47.4166665 -29.7500005 -29.5833335 0 -1223 -1670 --47.4166665 -47.2499995 -29.7500005 -29.5833335 0 -1563 -1670 --47.2500005 -47.0833335 -29.7500005 -29.5833335 0 -1832 -1670 --47.0833335 -46.9166665 -29.7500005 -29.5833335 0 -2053 -1670 --46.9166665 -46.7499995 -29.7500005 -29.5833335 0 -2212 -1670 --46.7500005 -46.5833335 -29.7500005 -29.5833335 0 -2273 -1670 --46.5833335 -46.4166665 -29.7500005 -29.5833335 0 -2298 -1670 --46.4166665 -46.2499995 -29.7500005 -29.5833335 0 -2411 -1670 --46.2500005 -46.0833335 -29.7500005 -29.5833335 0 -2568 -1670 --46.0833335 -45.9166665 -29.7500005 -29.5833335 0 -2626 -1670 --45.9166665 -45.7499995 -29.7500005 -29.5833335 0 -3050 -1670 --45.7500005 -45.5833335 -29.7500005 -29.5833335 0 -3258 -1670 --45.5833335 -45.4166665 -29.7500005 -29.5833335 0 -3409 -1670 --45.4166665 -45.2499995 -29.7500005 -29.5833335 0 -3541 -1670 --45.2500005 -45.0833335 -29.7500005 -29.5833335 0 -3500 -1670 --45.0833335 -44.9166665 -29.7500005 -29.5833335 0 -3583 -1670 --44.9166665 -44.7499995 -29.7500005 -29.5833335 0 -3604 -1670 --44.7500005 -44.5833335 -29.7500005 -29.5833335 0 -3626 -1670 --44.5833335 -44.4166665 -29.7500005 -29.5833335 0 -3594 -1670 --44.4166665 -44.2499995 -29.7500005 -29.5833335 0 -3623 -1670 --44.2500005 -44.0833335 -29.7500005 -29.5833335 0 -3680 -1670 --44.0833335 -43.9166665 -29.7500005 -29.5833335 0 -3755 -1670 --43.9166665 -43.7499995 -29.7500005 -29.5833335 0 -3796 -1670 --43.7500005 -43.5833335 -29.7500005 -29.5833335 0 -3872 -1670 --43.5833335 -43.4166665 -29.7500005 -29.5833335 0 -3914 -1670 --43.4166665 -43.2499995 -29.7500005 -29.5833335 0 -4021 -1670 --43.2500005 -43.0833335 -29.7500005 -29.5833335 0 -4139 -1670 --43.0833335 -42.9166665 -29.7500005 -29.5833335 0 -4017 -1670 --42.9166665 -42.7499995 -29.7500005 -29.5833335 0 -4013 -1670 --42.7500005 -42.5833335 -29.7500005 -29.5833335 0 -4017 -1670 --42.5833335 -42.4166665 -29.7500005 -29.5833335 0 -4018 -1670 --42.4166665 -42.2499995 -29.7500005 -29.5833335 0 -4005 -1670 --42.2500005 -42.0833335 -29.7500005 -29.5833335 0 -3950 -1670 --42.0833335 -41.9166665 -29.7500005 -29.5833335 0 -3901 -1670 --41.9166665 -41.7499995 -29.7500005 -29.5833335 0 -3961 -1670 --41.7500005 -41.5833335 -29.7500005 -29.5833335 0 -3738 -1670 --41.5833335 -41.4166665 -29.7500005 -29.5833335 0 -3728 -1670 --41.4166665 -41.2499995 -29.7500005 -29.5833335 0 -3803 -1670 --41.2500005 -41.0833335 -29.7500005 -29.5833335 0 -3718 -1670 --41.0833335 -40.9166665 -29.7500005 -29.5833335 0 -3669 -1670 --40.9166665 -40.7499995 -29.7500005 -29.5833335 0 -3629 -1670 --40.7500005 -40.5833335 -29.7500005 -29.5833335 0 -3743 -1670 --40.5833335 -40.4166665 -29.7500005 -29.5833335 0 -4180 -1670 --40.4166665 -40.2499995 -29.7500005 -29.5833335 0 -3725 -1670 --40.2500005 -40.0833335 -29.7500005 -29.5833335 0 -3514 -1670 --40.0833335 -39.9166665 -29.7500005 -29.5833335 0 -3502 -1670 --65.0833335 -64.9166665 -29.9166665 -29.7499995 182 0 2670 --64.9166665 -64.7499995 -29.9166665 -29.7499995 178 0 2670 --64.7500005 -64.5833335 -29.9166665 -29.7499995 191 0 2670 --64.5833335 -64.4166665 -29.9166665 -29.7499995 233 0 2670 --64.4166665 -64.2499995 -29.9166665 -29.7499995 276 0 2670 --64.2500005 -64.0833335 -29.9166665 -29.7499995 726 0 2670 --64.0833335 -63.9166665 -29.9166665 -29.7499995 708 0 2670 --63.9166665 -63.7499995 -29.9166665 -29.7499995 614 0 2670 --63.7500005 -63.5833335 -29.9166665 -29.7499995 387 0 2670 --63.5833335 -63.4166665 -29.9166665 -29.7499995 196 0 2670 --63.4166665 -63.2499995 -29.9166665 -29.7499995 95 0 2670 --63.2500005 -63.0833335 -29.9166665 -29.7499995 79 0 2670 --63.0833335 -62.9166665 -29.9166665 -29.7499995 79 0 2670 --62.9166665 -62.7499995 -29.9166665 -29.7499995 78 0 2670 --62.7500005 -62.5833335 -29.9166665 -29.7499995 77 0 2670 --62.5833335 -62.4166665 -29.9166665 -29.7499995 74 0 2670 --62.4166665 -62.2499995 -29.9166665 -29.7499995 74 0 2670 --62.2500005 -62.0833335 -29.9166665 -29.7499995 94 0 2670 --62.0833335 -61.9166665 -29.9166665 -29.7499995 90 0 2670 --61.9166665 -61.7499995 -29.9166665 -29.7499995 82 0 2670 --61.7500005 -61.5833335 -29.9166665 -29.7499995 78 0 2670 --61.5833335 -61.4166665 -29.9166665 -29.7499995 68 0 2670 --61.4166665 -61.2499995 -29.9166665 -29.7499995 67 0 2670 --61.2500005 -61.0833335 -29.9166665 -29.7499995 63 0 2670 --61.0833335 -60.9166665 -29.9166665 -29.7499995 55 0 2670 --60.9166665 -60.7499995 -29.9166665 -29.7499995 56 0 2670 --60.7500005 -60.5833335 -29.9166665 -29.7499995 53 0 2670 --60.5833335 -60.4166665 -29.9166665 -29.7499995 55 0 2670 --60.4166665 -60.2499995 -29.9166665 -29.7499995 58 0 2670 --60.2500005 -60.0833335 -29.9166665 -29.7499995 58 0 2670 --60.0833335 -59.9166665 -29.9166665 -29.7499995 35 0 2670 --59.9166665 -59.7499995 -29.9166665 -29.7499995 34 0 2670 --59.7500005 -59.5833335 -29.9166665 -29.7499995 29 0 2670 --59.5833335 -59.4166665 -29.9166665 -29.7499995 28 0 2670 --59.4166665 -59.2499995 -29.9166665 -29.7499995 39 0 2670 --59.2500005 -59.0833335 -29.9166665 -29.7499995 42 0 2670 --59.0833335 -58.9166665 -29.9166665 -29.7499995 40 0 2670 --58.9166665 -58.7499995 -29.9166665 -29.7499995 50 0 2670 --58.7500005 -58.5833335 -29.9166665 -29.7499995 60 0 2670 --58.5833335 -58.4166665 -29.9166665 -29.7499995 74 0 2670 --58.4166665 -58.2499995 -29.9166665 -29.7499995 86 0 2670 --58.2500005 -58.0833335 -29.9166665 -29.7499995 92 0 2670 --58.0833335 -57.9166665 -29.9166665 -29.7499995 66 0 2670 --57.9166665 -57.7499995 -29.9166665 -29.7499995 67 0 2670 --57.7500005 -57.5833335 -29.9166665 -29.7499995 48 0 2670 --57.5833335 -57.4166665 -29.9166665 -29.7499995 62 0 2670 --57.4166665 -57.2499995 -29.9166665 -29.7499995 50 0 2670 --57.2500005 -57.0833335 -29.9166665 -29.7499995 52 0 2670 --57.0833335 -56.9166665 -29.9166665 -29.7499995 91 0 2670 --56.9166665 -56.7499995 -29.9166665 -29.7499995 155 0 2670 --56.7500005 -56.5833335 -29.9166665 -29.7499995 104 0 2670 --56.5833335 -56.4166665 -29.9166665 -29.7499995 119 0 2670 --56.4166665 -56.2499995 -29.9166665 -29.7499995 93 0 2670 --56.2500005 -56.0833335 -29.9166665 -29.7499995 129 0 2670 --56.0833335 -55.9166665 -29.9166665 -29.7499995 118 0 2670 --55.9166665 -55.7499995 -29.9166665 -29.7499995 106 0 2670 --55.7500005 -55.5833335 -29.9166665 -29.7499995 106 0 2670 --55.5833335 -55.4166665 -29.9166665 -29.7499995 104 0 2670 --55.4166665 -55.2499995 -29.9166665 -29.7499995 148 0 2670 --55.2500005 -55.0833335 -29.9166665 -29.7499995 97 0 2670 --55.0833335 -54.9166665 -29.9166665 -29.7499995 108 0 2670 --54.9166665 -54.7499995 -29.9166665 -29.7499995 85 0 2670 --54.7500005 -54.5833335 -29.9166665 -29.7499995 88 0 2670 --54.5833335 -54.4166665 -29.9166665 -29.7499995 131 0 2670 --54.4166665 -54.2499995 -29.9166665 -29.7499995 132 0 2670 --54.2500005 -54.0833335 -29.9166665 -29.7499995 88 0 2670 --54.0833335 -53.9166665 -29.9166665 -29.7499995 105 0 2670 --53.9166665 -53.7499995 -29.9166665 -29.7499995 80 0 2670 --53.7500005 -53.5833335 -29.9166665 -29.7499995 53 0 2670 --53.5833335 -53.4166665 -29.9166665 -29.7499995 89 0 2670 --53.4166665 -53.2499995 -29.9166665 -29.7499995 53 0 2670 --53.2500005 -53.0833335 -29.9166665 -29.7499995 62 0 2670 --53.0833335 -52.9166665 -29.9166665 -29.7499995 63 0 2670 --52.9166665 -52.7499995 -29.9166665 -29.7499995 80 0 2670 --52.7500005 -52.5833335 -29.9166665 -29.7499995 44 0 2670 --52.5833335 -52.4166665 -29.9166665 -29.7499995 39 0 2670 --52.4166665 -52.2499995 -29.9166665 -29.7499995 65 0 2670 --52.2500005 -52.0833335 -29.9166665 -29.7499995 53 0 2670 --52.0833335 -51.9166665 -29.9166665 -29.7499995 71 0 2670 --51.9166665 -51.7499995 -29.9166665 -29.7499995 11 0 2670 --51.7500005 -51.5833335 -29.9166665 -29.7499995 39 0 2670 --51.5833335 -51.4166665 -29.9166665 -29.7499995 70 0 2670 --51.4166665 -51.2499995 -29.9166665 -29.7499995 6 0 2670 --51.2500005 -51.0833335 -29.9166665 -29.7499995 18 0 2670 --51.0833335 -50.9166665 -29.9166665 -29.7499995 87 0 2670 --50.9166665 -50.7499995 -29.9166665 -29.7499995 81 0 2670 --50.7500005 -50.5833335 -29.9166665 -29.7499995 48 0 2670 --50.5833335 -50.4166665 -29.9166665 -29.7499995 62 0 2670 --50.4166665 -50.2499995 -29.9166665 -29.7499995 268 0 2670 --50.2500005 -50.0833335 -29.9166665 -29.7499995 2 0 2670 --50.0833335 -49.9166665 -29.9166665 -29.7499995 0 -28 -1670 --49.9166665 -49.7499995 -29.9166665 -29.7499995 0 -40 -1670 --49.7500005 -49.5833335 -29.9166665 -29.7499995 0 -47 -1670 --49.5833335 -49.4166665 -29.9166665 -29.7499995 0 -59 -1670 --49.4166665 -49.2499995 -29.9166665 -29.7499995 0 -79 -1670 --49.2500005 -49.0833335 -29.9166665 -29.7499995 0 -88 -1670 --49.0833335 -48.9166665 -29.9166665 -29.7499995 0 -118 -1670 --48.9166665 -48.7499995 -29.9166665 -29.7499995 0 -110 -1670 --48.7500005 -48.5833335 -29.9166665 -29.7499995 0 -139 -1670 --48.5833335 -48.4166665 -29.9166665 -29.7499995 0 -104 -1670 --48.4166665 -48.2499995 -29.9166665 -29.7499995 0 -206 -1670 --48.2500005 -48.0833335 -29.9166665 -29.7499995 0 -358 -1670 --48.0833335 -47.9166665 -29.9166665 -29.7499995 0 -368 -1670 --47.9166665 -47.7499995 -29.9166665 -29.7499995 0 -451 -1670 --47.7500005 -47.5833335 -29.9166665 -29.7499995 0 -830 -1670 --47.5833335 -47.4166665 -29.9166665 -29.7499995 0 -1250 -1670 --47.4166665 -47.2499995 -29.9166665 -29.7499995 0 -1517 -1670 --47.2500005 -47.0833335 -29.9166665 -29.7499995 0 -1809 -1670 --47.0833335 -46.9166665 -29.9166665 -29.7499995 0 -2044 -1670 --46.9166665 -46.7499995 -29.9166665 -29.7499995 0 -2248 -1670 --46.7500005 -46.5833335 -29.9166665 -29.7499995 0 -2367 -1670 --46.5833335 -46.4166665 -29.9166665 -29.7499995 0 -2394 -1670 --46.4166665 -46.2499995 -29.9166665 -29.7499995 0 -2498 -1670 --46.2500005 -46.0833335 -29.9166665 -29.7499995 0 -2317 -1670 --46.0833335 -45.9166665 -29.9166665 -29.7499995 0 -2772 -1670 --45.9166665 -45.7499995 -29.9166665 -29.7499995 0 -3172 -1670 --45.7500005 -45.5833335 -29.9166665 -29.7499995 0 -3352 -1670 --45.5833335 -45.4166665 -29.9166665 -29.7499995 0 -3393 -1670 --45.4166665 -45.2499995 -29.9166665 -29.7499995 0 -3532 -1670 --45.2500005 -45.0833335 -29.9166665 -29.7499995 0 -3550 -1670 --45.0833335 -44.9166665 -29.9166665 -29.7499995 0 -3538 -1670 --44.9166665 -44.7499995 -29.9166665 -29.7499995 0 -3559 -1670 --44.7500005 -44.5833335 -29.9166665 -29.7499995 0 -3566 -1670 --44.5833335 -44.4166665 -29.9166665 -29.7499995 0 -3560 -1670 --44.4166665 -44.2499995 -29.9166665 -29.7499995 0 -3582 -1670 --44.2500005 -44.0833335 -29.9166665 -29.7499995 0 -3614 -1670 --44.0833335 -43.9166665 -29.9166665 -29.7499995 0 -3684 -1670 --43.9166665 -43.7499995 -29.9166665 -29.7499995 0 -3759 -1670 --43.7500005 -43.5833335 -29.9166665 -29.7499995 0 -3899 -1670 --43.5833335 -43.4166665 -29.9166665 -29.7499995 0 -3906 -1670 --43.4166665 -43.2499995 -29.9166665 -29.7499995 0 -3950 -1670 --43.2500005 -43.0833335 -29.9166665 -29.7499995 0 -3933 -1670 --43.0833335 -42.9166665 -29.9166665 -29.7499995 0 -4010 -1670 --42.9166665 -42.7499995 -29.9166665 -29.7499995 0 -4032 -1670 --42.7500005 -42.5833335 -29.9166665 -29.7499995 0 -3987 -1670 --42.5833335 -42.4166665 -29.9166665 -29.7499995 0 -3947 -1670 --42.4166665 -42.2499995 -29.9166665 -29.7499995 0 -3922 -1670 --42.2500005 -42.0833335 -29.9166665 -29.7499995 0 -3905 -1670 --42.0833335 -41.9166665 -29.9166665 -29.7499995 0 -3871 -1670 --41.9166665 -41.7499995 -29.9166665 -29.7499995 0 -3855 -1670 --41.7500005 -41.5833335 -29.9166665 -29.7499995 0 -3745 -1670 --41.5833335 -41.4166665 -29.9166665 -29.7499995 0 -3653 -1670 --41.4166665 -41.2499995 -29.9166665 -29.7499995 0 -3884 -1670 --41.2500005 -41.0833335 -29.9166665 -29.7499995 0 -3562 -1670 --41.0833335 -40.9166665 -29.9166665 -29.7499995 0 -3450 -1670 --40.9166665 -40.7499995 -29.9166665 -29.7499995 0 -3318 -1670 --40.7500005 -40.5833335 -29.9166665 -29.7499995 0 -3478 -1670 --40.5833335 -40.4166665 -29.9166665 -29.7499995 0 -4139 -1670 --40.4166665 -40.2499995 -29.9166665 -29.7499995 0 -4028 -1670 --40.2500005 -40.0833335 -29.9166665 -29.7499995 0 -3428 -1670 --40.0833335 -39.9166665 -29.9166665 -29.7499995 0 -3141 -1670 --65.0833335 -64.9166665 -30.0833335 -29.9166665 179 0 2670 --64.9166665 -64.7499995 -30.0833335 -29.9166665 179 0 2670 --64.7500005 -64.5833335 -30.0833335 -29.9166665 178 0 2670 --64.5833335 -64.4166665 -30.0833335 -29.9166665 304 0 2670 --64.4166665 -64.2499995 -30.0833335 -29.9166665 492 0 2670 --64.2500005 -64.0833335 -30.0833335 -29.9166665 891 0 2670 --64.0833335 -63.9166665 -30.0833335 -29.9166665 737 0 2670 --63.9166665 -63.7499995 -30.0833335 -29.9166665 534 0 2670 --63.7500005 -63.5833335 -30.0833335 -29.9166665 278 0 2670 --63.5833335 -63.4166665 -30.0833335 -29.9166665 183 0 2670 --63.4166665 -63.2499995 -30.0833335 -29.9166665 94 0 2670 --63.2500005 -63.0833335 -30.0833335 -29.9166665 77 0 2670 --63.0833335 -62.9166665 -30.0833335 -29.9166665 76 0 2670 --62.9166665 -62.7499995 -30.0833335 -29.9166665 75 0 2670 --62.7500005 -62.5833335 -30.0833335 -29.9166665 74 0 2670 --62.5833335 -62.4166665 -30.0833335 -29.9166665 74 0 2670 --62.4166665 -62.2499995 -30.0833335 -29.9166665 73 0 2670 --62.2500005 -62.0833335 -30.0833335 -29.9166665 92 0 2670 --62.0833335 -61.9166665 -30.0833335 -29.9166665 89 0 2670 --61.9166665 -61.7499995 -30.0833335 -29.9166665 90 0 2670 --61.7500005 -61.5833335 -30.0833335 -29.9166665 86 0 2670 --61.5833335 -61.4166665 -30.0833335 -29.9166665 78 0 2670 --61.4166665 -61.2499995 -30.0833335 -29.9166665 64 0 2670 --61.2500005 -61.0833335 -30.0833335 -29.9166665 67 0 2670 --61.0833335 -60.9166665 -30.0833335 -29.9166665 55 0 2670 --60.9166665 -60.7499995 -30.0833335 -29.9166665 62 0 2670 --60.7500005 -60.5833335 -30.0833335 -29.9166665 51 0 2670 --60.5833335 -60.4166665 -30.0833335 -29.9166665 56 0 2670 --60.4166665 -60.2499995 -30.0833335 -29.9166665 63 0 2670 --60.2500005 -60.0833335 -30.0833335 -29.9166665 46 0 2670 --60.0833335 -59.9166665 -30.0833335 -29.9166665 33 0 2670 --59.9166665 -59.7499995 -30.0833335 -29.9166665 30 0 2670 --59.7500005 -59.5833335 -30.0833335 -29.9166665 28 0 2670 --59.5833335 -59.4166665 -30.0833335 -29.9166665 41 0 2670 --59.4166665 -59.2499995 -30.0833335 -29.9166665 39 0 2670 --59.2500005 -59.0833335 -30.0833335 -29.9166665 36 0 2670 --59.0833335 -58.9166665 -30.0833335 -29.9166665 42 0 2670 --58.9166665 -58.7499995 -30.0833335 -29.9166665 67 0 2670 --58.7500005 -58.5833335 -30.0833335 -29.9166665 71 0 2670 --58.5833335 -58.4166665 -30.0833335 -29.9166665 74 0 2670 --58.4166665 -58.2499995 -30.0833335 -29.9166665 78 0 2670 --58.2500005 -58.0833335 -30.0833335 -29.9166665 69 0 2670 --58.0833335 -57.9166665 -30.0833335 -29.9166665 92 0 2670 --57.9166665 -57.7499995 -30.0833335 -29.9166665 77 0 2670 --57.7500005 -57.5833335 -30.0833335 -29.9166665 44 0 2670 --57.5833335 -57.4166665 -30.0833335 -29.9166665 60 0 2670 --57.4166665 -57.2499995 -30.0833335 -29.9166665 44 0 2670 --57.2500005 -57.0833335 -30.0833335 -29.9166665 80 0 2670 --57.0833335 -56.9166665 -30.0833335 -29.9166665 78 0 2670 --56.9166665 -56.7499995 -30.0833335 -29.9166665 72 0 2670 --56.7500005 -56.5833335 -30.0833335 -29.9166665 137 0 2670 --56.5833335 -56.4166665 -30.0833335 -29.9166665 149 0 2670 --56.4166665 -56.2499995 -30.0833335 -29.9166665 183 0 2670 --56.2500005 -56.0833335 -30.0833335 -29.9166665 174 0 2670 --56.0833335 -55.9166665 -30.0833335 -29.9166665 163 0 2670 --55.9166665 -55.7499995 -30.0833335 -29.9166665 96 0 2670 --55.7500005 -55.5833335 -30.0833335 -29.9166665 127 0 2670 --55.5833335 -55.4166665 -30.0833335 -29.9166665 140 0 2670 --55.4166665 -55.2499995 -30.0833335 -29.9166665 155 0 2670 --55.2500005 -55.0833335 -30.0833335 -29.9166665 162 0 2670 --55.0833335 -54.9166665 -30.0833335 -29.9166665 120 0 2670 --54.9166665 -54.7499995 -30.0833335 -29.9166665 126 0 2670 --54.7500005 -54.5833335 -30.0833335 -29.9166665 124 0 2670 --54.5833335 -54.4166665 -30.0833335 -29.9166665 168 0 2670 --54.4166665 -54.2499995 -30.0833335 -29.9166665 149 0 2670 --54.2500005 -54.0833335 -30.0833335 -29.9166665 131 0 2670 --54.0833335 -53.9166665 -30.0833335 -29.9166665 70 0 2670 --53.9166665 -53.7499995 -30.0833335 -29.9166665 54 0 2670 --53.7500005 -53.5833335 -30.0833335 -29.9166665 81 0 2670 --53.5833335 -53.4166665 -30.0833335 -29.9166665 106 0 2670 --53.4166665 -53.2499995 -30.0833335 -29.9166665 37 0 2670 --53.2500005 -53.0833335 -30.0833335 -29.9166665 34 0 2670 --53.0833335 -52.9166665 -30.0833335 -29.9166665 30 0 2670 --52.9166665 -52.7499995 -30.0833335 -29.9166665 59 0 2670 --52.7500005 -52.5833335 -30.0833335 -29.9166665 18 0 2670 --52.5833335 -52.4166665 -30.0833335 -29.9166665 94 0 2670 --52.4166665 -52.2499995 -30.0833335 -29.9166665 49 0 2670 --52.2500005 -52.0833335 -30.0833335 -29.9166665 37 0 2670 --52.0833335 -51.9166665 -30.0833335 -29.9166665 41 0 2670 --51.9166665 -51.7499995 -30.0833335 -29.9166665 42 0 2670 --51.7500005 -51.5833335 -30.0833335 -29.9166665 23 0 2670 --51.5833335 -51.4166665 -30.0833335 -29.9166665 21 0 2670 --51.4166665 -51.2499995 -30.0833335 -29.9166665 6 0 2670 --51.2500005 -51.0833335 -30.0833335 -29.9166665 11 0 2670 --51.0833335 -50.9166665 -30.0833335 -29.9166665 34 0 2670 --50.9166665 -50.7499995 -30.0833335 -29.9166665 5 0 2670 --50.7500005 -50.5833335 -30.0833335 -29.9166665 56 0 2670 --50.5833335 -50.4166665 -30.0833335 -29.9166665 8 0 2670 --50.4166665 -50.2499995 -30.0833335 -29.9166665 15 0 2670 --50.2500005 -50.0833335 -30.0833335 -29.9166665 2 0 2670 --50.0833335 -49.9166665 -30.0833335 -29.9166665 0 -31 -1670 --49.9166665 -49.7499995 -30.0833335 -29.9166665 0 -43 -1670 --49.7500005 -49.5833335 -30.0833335 -29.9166665 0 -51 -1670 --49.5833335 -49.4166665 -30.0833335 -29.9166665 0 -61 -1670 --49.4166665 -49.2499995 -30.0833335 -29.9166665 0 -91 -1670 --49.2500005 -49.0833335 -30.0833335 -29.9166665 0 -111 -1670 --49.0833335 -48.9166665 -30.0833335 -29.9166665 0 -116 -1670 --48.9166665 -48.7499995 -30.0833335 -29.9166665 0 -136 -1670 --48.7500005 -48.5833335 -30.0833335 -29.9166665 0 -146 -1670 --48.5833335 -48.4166665 -30.0833335 -29.9166665 0 -176 -1670 --48.4166665 -48.2499995 -30.0833335 -29.9166665 0 -197 -1670 --48.2500005 -48.0833335 -30.0833335 -29.9166665 0 -305 -1670 --48.0833335 -47.9166665 -30.0833335 -29.9166665 0 -340 -1670 --47.9166665 -47.7499995 -30.0833335 -29.9166665 0 -517 -1670 --47.7500005 -47.5833335 -30.0833335 -29.9166665 0 -839 -1670 --47.5833335 -47.4166665 -30.0833335 -29.9166665 0 -1362 -1670 --47.4166665 -47.2499995 -30.0833335 -29.9166665 0 -1557 -1670 --47.2500005 -47.0833335 -30.0833335 -29.9166665 0 -1787 -1670 --47.0833335 -46.9166665 -30.0833335 -29.9166665 0 -2081 -1670 --46.9166665 -46.7499995 -30.0833335 -29.9166665 0 -2289 -1670 --46.7500005 -46.5833335 -30.0833335 -29.9166665 0 -2425 -1670 --46.5833335 -46.4166665 -30.0833335 -29.9166665 0 -2472 -1670 --46.4166665 -46.2499995 -30.0833335 -29.9166665 0 -2490 -1670 --46.2500005 -46.0833335 -30.0833335 -29.9166665 0 -2597 -1670 --46.0833335 -45.9166665 -30.0833335 -29.9166665 0 -2920 -1670 --45.9166665 -45.7499995 -30.0833335 -29.9166665 0 -3194 -1670 --45.7500005 -45.5833335 -30.0833335 -29.9166665 0 -3453 -1670 --45.5833335 -45.4166665 -30.0833335 -29.9166665 0 -3521 -1670 --45.4166665 -45.2499995 -30.0833335 -29.9166665 0 -3595 -1670 --45.2500005 -45.0833335 -30.0833335 -29.9166665 0 -3501 -1670 --45.0833335 -44.9166665 -30.0833335 -29.9166665 0 -3509 -1670 --44.9166665 -44.7499995 -30.0833335 -29.9166665 0 -3526 -1670 --44.7500005 -44.5833335 -30.0833335 -29.9166665 0 -3547 -1670 --44.5833335 -44.4166665 -30.0833335 -29.9166665 0 -3534 -1670 --44.4166665 -44.2499995 -30.0833335 -29.9166665 0 -3543 -1670 --44.2500005 -44.0833335 -30.0833335 -29.9166665 0 -3585 -1670 --44.0833335 -43.9166665 -30.0833335 -29.9166665 0 -3632 -1670 --43.9166665 -43.7499995 -30.0833335 -29.9166665 0 -3683 -1670 --43.7500005 -43.5833335 -30.0833335 -29.9166665 0 -3828 -1670 --43.5833335 -43.4166665 -30.0833335 -29.9166665 0 -3944 -1670 --43.4166665 -43.2499995 -30.0833335 -29.9166665 0 -3860 -1670 --43.2500005 -43.0833335 -30.0833335 -29.9166665 0 -3885 -1670 --43.0833335 -42.9166665 -30.0833335 -29.9166665 0 -3993 -1670 --42.9166665 -42.7499995 -30.0833335 -29.9166665 0 -3902 -1670 --42.7500005 -42.5833335 -30.0833335 -29.9166665 0 -3889 -1670 --42.5833335 -42.4166665 -30.0833335 -29.9166665 0 -3929 -1670 --42.4166665 -42.2499995 -30.0833335 -29.9166665 0 -3876 -1670 --42.2500005 -42.0833335 -30.0833335 -29.9166665 0 -3875 -1670 --42.0833335 -41.9166665 -30.0833335 -29.9166665 0 -3893 -1670 --41.9166665 -41.7499995 -30.0833335 -29.9166665 0 -3851 -1670 --41.7500005 -41.5833335 -30.0833335 -29.9166665 0 -3755 -1670 --41.5833335 -41.4166665 -30.0833335 -29.9166665 0 -3642 -1670 --41.4166665 -41.2499995 -30.0833335 -29.9166665 0 -3705 -1670 --41.2500005 -41.0833335 -30.0833335 -29.9166665 0 -3658 -1670 --41.0833335 -40.9166665 -30.0833335 -29.9166665 0 -3218 -1670 --40.9166665 -40.7499995 -30.0833335 -29.9166665 0 -3322 -1670 --40.7500005 -40.5833335 -30.0833335 -29.9166665 0 -2966 -1670 --40.5833335 -40.4166665 -30.0833335 -29.9166665 0 -3783 -1670 --40.4166665 -40.2499995 -30.0833335 -29.9166665 0 -4147 -1670 --40.2500005 -40.0833335 -30.0833335 -29.9166665 0 -3529 -1670 --40.0833335 -39.9166665 -30.0833335 -29.9166665 0 -3195 -1670 --65.0833335 -64.9166665 -30.2500005 -30.0833335 179 0 2670 --64.9166665 -64.7499995 -30.2500005 -30.0833335 189 0 2670 --64.7500005 -64.5833335 -30.2500005 -30.0833335 227 0 2670 --64.5833335 -64.4166665 -30.2500005 -30.0833335 379 0 2670 --64.4166665 -64.2499995 -30.2500005 -30.0833335 650 0 2670 --64.2500005 -64.0833335 -30.2500005 -30.0833335 880 0 2670 --64.0833335 -63.9166665 -30.2500005 -30.0833335 696 0 2670 --63.9166665 -63.7499995 -30.2500005 -30.0833335 405 0 2670 --63.7500005 -63.5833335 -30.2500005 -30.0833335 263 0 2670 --63.5833335 -63.4166665 -30.2500005 -30.0833335 153 0 2670 --63.4166665 -63.2499995 -30.2500005 -30.0833335 76 0 2670 --63.2500005 -63.0833335 -30.2500005 -30.0833335 75 0 2670 --63.0833335 -62.9166665 -30.2500005 -30.0833335 75 0 2670 --62.9166665 -62.7499995 -30.2500005 -30.0833335 73 0 2670 --62.7500005 -62.5833335 -30.2500005 -30.0833335 72 0 2670 --62.5833335 -62.4166665 -30.2500005 -30.0833335 71 0 2670 --62.4166665 -62.2499995 -30.2500005 -30.0833335 69 0 2670 --62.2500005 -62.0833335 -30.2500005 -30.0833335 80 0 2670 --62.0833335 -61.9166665 -30.2500005 -30.0833335 89 0 2670 --61.9166665 -61.7499995 -30.2500005 -30.0833335 92 0 2670 --61.7500005 -61.5833335 -30.2500005 -30.0833335 89 0 2670 --61.5833335 -61.4166665 -30.2500005 -30.0833335 85 0 2670 --61.4166665 -61.2499995 -30.2500005 -30.0833335 75 0 2670 --61.2500005 -61.0833335 -30.2500005 -30.0833335 70 0 2670 --61.0833335 -60.9166665 -30.2500005 -30.0833335 47 0 2670 --60.9166665 -60.7499995 -30.2500005 -30.0833335 59 0 2670 --60.7500005 -60.5833335 -30.2500005 -30.0833335 48 0 2670 --60.5833335 -60.4166665 -30.2500005 -30.0833335 56 0 2670 --60.4166665 -60.2499995 -30.2500005 -30.0833335 56 0 2670 --60.2500005 -60.0833335 -30.2500005 -30.0833335 28 0 2670 --60.0833335 -59.9166665 -30.2500005 -30.0833335 27 0 2670 --59.9166665 -59.7499995 -30.2500005 -30.0833335 24 0 2670 --59.7500005 -59.5833335 -30.2500005 -30.0833335 27 0 2670 --59.5833335 -59.4166665 -30.2500005 -30.0833335 36 0 2670 --59.4166665 -59.2499995 -30.2500005 -30.0833335 36 0 2670 --59.2500005 -59.0833335 -30.2500005 -30.0833335 35 0 2670 --59.0833335 -58.9166665 -30.2500005 -30.0833335 52 0 2670 --58.9166665 -58.7499995 -30.2500005 -30.0833335 66 0 2670 --58.7500005 -58.5833335 -30.2500005 -30.0833335 56 0 2670 --58.5833335 -58.4166665 -30.2500005 -30.0833335 68 0 2670 --58.4166665 -58.2499995 -30.2500005 -30.0833335 78 0 2670 --58.2500005 -58.0833335 -30.2500005 -30.0833335 77 0 2670 --58.0833335 -57.9166665 -30.2500005 -30.0833335 66 0 2670 --57.9166665 -57.7499995 -30.2500005 -30.0833335 68 0 2670 --57.7500005 -57.5833335 -30.2500005 -30.0833335 51 0 2670 --57.5833335 -57.4166665 -30.2500005 -30.0833335 48 0 2670 --57.4166665 -57.2499995 -30.2500005 -30.0833335 64 0 2670 --57.2500005 -57.0833335 -30.2500005 -30.0833335 56 0 2670 --57.0833335 -56.9166665 -30.2500005 -30.0833335 68 0 2670 --56.9166665 -56.7499995 -30.2500005 -30.0833335 90 0 2670 --56.7500005 -56.5833335 -30.2500005 -30.0833335 106 0 2670 --56.5833335 -56.4166665 -30.2500005 -30.0833335 120 0 2670 --56.4166665 -56.2499995 -30.2500005 -30.0833335 163 0 2670 --56.2500005 -56.0833335 -30.2500005 -30.0833335 166 0 2670 --56.0833335 -55.9166665 -30.2500005 -30.0833335 210 0 2670 --55.9166665 -55.7499995 -30.2500005 -30.0833335 155 0 2670 --55.7500005 -55.5833335 -30.2500005 -30.0833335 102 0 2670 --55.5833335 -55.4166665 -30.2500005 -30.0833335 154 0 2670 --55.4166665 -55.2499995 -30.2500005 -30.0833335 130 0 2670 --55.2500005 -55.0833335 -30.2500005 -30.0833335 133 0 2670 --55.0833335 -54.9166665 -30.2500005 -30.0833335 118 0 2670 --54.9166665 -54.7499995 -30.2500005 -30.0833335 124 0 2670 --54.7500005 -54.5833335 -30.2500005 -30.0833335 126 0 2670 --54.5833335 -54.4166665 -30.2500005 -30.0833335 146 0 2670 --54.4166665 -54.2499995 -30.2500005 -30.0833335 110 0 2670 --54.2500005 -54.0833335 -30.2500005 -30.0833335 84 0 2670 --54.0833335 -53.9166665 -30.2500005 -30.0833335 69 0 2670 --53.9166665 -53.7499995 -30.2500005 -30.0833335 139 0 2670 --53.7500005 -53.5833335 -30.2500005 -30.0833335 110 0 2670 --53.5833335 -53.4166665 -30.2500005 -30.0833335 96 0 2670 --53.4166665 -53.2499995 -30.2500005 -30.0833335 49 0 2670 --53.2500005 -53.0833335 -30.2500005 -30.0833335 62 0 2670 --53.0833335 -52.9166665 -30.2500005 -30.0833335 44 0 2670 --52.9166665 -52.7499995 -30.2500005 -30.0833335 48 0 2670 --52.7500005 -52.5833335 -30.2500005 -30.0833335 44 0 2670 --52.5833335 -52.4166665 -30.2500005 -30.0833335 24 0 2670 --52.4166665 -52.2499995 -30.2500005 -30.0833335 66 0 2670 --52.2500005 -52.0833335 -30.2500005 -30.0833335 58 0 2670 --52.0833335 -51.9166665 -30.2500005 -30.0833335 108 0 2670 --51.9166665 -51.7499995 -30.2500005 -30.0833335 66 0 2670 --51.7500005 -51.5833335 -30.2500005 -30.0833335 125 0 2670 --51.5833335 -51.4166665 -30.2500005 -30.0833335 86 0 2670 --51.4166665 -51.2499995 -30.2500005 -30.0833335 8 0 2670 --51.2500005 -51.0833335 -30.2500005 -30.0833335 12 0 2670 --51.0833335 -50.9166665 -30.2500005 -30.0833335 117 0 2670 --50.9166665 -50.7499995 -30.2500005 -30.0833335 38 0 2670 --50.7500005 -50.5833335 -30.2500005 -30.0833335 2 0 2670 --50.5833335 -50.4166665 -30.2500005 -30.0833335 9 0 2670 --50.4166665 -50.2499995 -30.2500005 -30.0833335 15 0 2670 --50.2500005 -50.0833335 -30.2500005 -30.0833335 0 -15 -1670 --50.0833335 -49.9166665 -30.2500005 -30.0833335 0 -36 -1670 --49.9166665 -49.7499995 -30.2500005 -30.0833335 0 -45 -1670 --49.7500005 -49.5833335 -30.2500005 -30.0833335 0 -57 -1670 --49.5833335 -49.4166665 -30.2500005 -30.0833335 0 -84 -1670 --49.4166665 -49.2499995 -30.2500005 -30.0833335 0 -107 -1670 --49.2500005 -49.0833335 -30.2500005 -30.0833335 0 -123 -1670 --49.0833335 -48.9166665 -30.2500005 -30.0833335 0 -171 -1670 --48.9166665 -48.7499995 -30.2500005 -30.0833335 0 -166 -1670 --48.7500005 -48.5833335 -30.2500005 -30.0833335 0 -243 -1670 --48.5833335 -48.4166665 -30.2500005 -30.0833335 0 -272 -1670 --48.4166665 -48.2499995 -30.2500005 -30.0833335 0 -228 -1670 --48.2500005 -48.0833335 -30.2500005 -30.0833335 0 -313 -1670 --48.0833335 -47.9166665 -30.2500005 -30.0833335 0 -396 -1670 --47.9166665 -47.7499995 -30.2500005 -30.0833335 0 -539 -1670 --47.7500005 -47.5833335 -30.2500005 -30.0833335 0 -905 -1670 --47.5833335 -47.4166665 -30.2500005 -30.0833335 0 -1292 -1670 --47.4166665 -47.2499995 -30.2500005 -30.0833335 0 -1553 -1670 --47.2500005 -47.0833335 -30.2500005 -30.0833335 0 -2033 -1670 --47.0833335 -46.9166665 -30.2500005 -30.0833335 0 -2275 -1670 --46.9166665 -46.7499995 -30.2500005 -30.0833335 0 -2383 -1670 --46.7500005 -46.5833335 -30.2500005 -30.0833335 0 -2373 -1670 --46.5833335 -46.4166665 -30.2500005 -30.0833335 0 -2457 -1670 --46.4166665 -46.2499995 -30.2500005 -30.0833335 0 -2540 -1670 --46.2500005 -46.0833335 -30.2500005 -30.0833335 0 -2721 -1670 --46.0833335 -45.9166665 -30.2500005 -30.0833335 0 -3050 -1670 --45.9166665 -45.7499995 -30.2500005 -30.0833335 0 -3224 -1670 --45.7500005 -45.5833335 -30.2500005 -30.0833335 0 -3308 -1670 --45.5833335 -45.4166665 -30.2500005 -30.0833335 0 -3542 -1670 --45.4166665 -45.2499995 -30.2500005 -30.0833335 0 -3507 -1670 --45.2500005 -45.0833335 -30.2500005 -30.0833335 0 -3490 -1670 --45.0833335 -44.9166665 -30.2500005 -30.0833335 0 -3462 -1670 --44.9166665 -44.7499995 -30.2500005 -30.0833335 0 -3502 -1670 --44.7500005 -44.5833335 -30.2500005 -30.0833335 0 -3515 -1670 --44.5833335 -44.4166665 -30.2500005 -30.0833335 0 -3510 -1670 --44.4166665 -44.2499995 -30.2500005 -30.0833335 0 -3506 -1670 --44.2500005 -44.0833335 -30.2500005 -30.0833335 0 -3532 -1670 --44.0833335 -43.9166665 -30.2500005 -30.0833335 0 -3585 -1670 --43.9166665 -43.7499995 -30.2500005 -30.0833335 0 -3598 -1670 --43.7500005 -43.5833335 -30.2500005 -30.0833335 0 -3751 -1670 --43.5833335 -43.4166665 -30.2500005 -30.0833335 0 -3972 -1670 --43.4166665 -43.2499995 -30.2500005 -30.0833335 0 -3841 -1670 --43.2500005 -43.0833335 -30.2500005 -30.0833335 0 -3844 -1670 --43.0833335 -42.9166665 -30.2500005 -30.0833335 0 -3874 -1670 --42.9166665 -42.7499995 -30.2500005 -30.0833335 0 -3876 -1670 --42.7500005 -42.5833335 -30.2500005 -30.0833335 0 -3893 -1670 --42.5833335 -42.4166665 -30.2500005 -30.0833335 0 -3893 -1670 --42.4166665 -42.2499995 -30.2500005 -30.0833335 0 -3877 -1670 --42.2500005 -42.0833335 -30.2500005 -30.0833335 0 -3864 -1670 --42.0833335 -41.9166665 -30.2500005 -30.0833335 0 -3846 -1670 --41.9166665 -41.7499995 -30.2500005 -30.0833335 0 -3797 -1670 --41.7500005 -41.5833335 -30.2500005 -30.0833335 0 -3769 -1670 --41.5833335 -41.4166665 -30.2500005 -30.0833335 0 -3837 -1670 --41.4166665 -41.2499995 -30.2500005 -30.0833335 0 -3749 -1670 --41.2500005 -41.0833335 -30.2500005 -30.0833335 0 -3884 -1670 --41.0833335 -40.9166665 -30.2500005 -30.0833335 0 -3443 -1670 --40.9166665 -40.7499995 -30.2500005 -30.0833335 0 -3159 -1670 --40.7500005 -40.5833335 -30.2500005 -30.0833335 0 -3477 -1670 --40.5833335 -40.4166665 -30.2500005 -30.0833335 0 -4214 -1670 --40.4166665 -40.2499995 -30.2500005 -30.0833335 0 -3730 -1670 --40.2500005 -40.0833335 -30.2500005 -30.0833335 0 -3110 -1670 --40.0833335 -39.9166665 -30.2500005 -30.0833335 0 -3429 -1670 --65.0833335 -64.9166665 -30.4166665 -30.2499995 246 0 2670 --64.9166665 -64.7499995 -30.4166665 -30.2499995 269 0 2670 --64.7500005 -64.5833335 -30.4166665 -30.2499995 347 0 2670 --64.5833335 -64.4166665 -30.4166665 -30.2499995 493 0 2670 --64.4166665 -64.2499995 -30.4166665 -30.2499995 671 0 2670 --64.2500005 -64.0833335 -30.4166665 -30.2499995 844 0 2670 --64.0833335 -63.9166665 -30.4166665 -30.2499995 546 0 2670 --63.9166665 -63.7499995 -30.4166665 -30.2499995 380 0 2670 --63.7500005 -63.5833335 -30.4166665 -30.2499995 239 0 2670 --63.5833335 -63.4166665 -30.4166665 -30.2499995 136 0 2670 --63.4166665 -63.2499995 -30.4166665 -30.2499995 69 0 2670 --63.2500005 -63.0833335 -30.4166665 -30.2499995 71 0 2670 --63.0833335 -62.9166665 -30.4166665 -30.2499995 72 0 2670 --62.9166665 -62.7499995 -30.4166665 -30.2499995 70 0 2670 --62.7500005 -62.5833335 -30.4166665 -30.2499995 69 0 2670 --62.5833335 -62.4166665 -30.4166665 -30.2499995 69 0 2670 --62.4166665 -62.2499995 -30.4166665 -30.2499995 69 0 2670 --62.2500005 -62.0833335 -30.4166665 -30.2499995 79 0 2670 --62.0833335 -61.9166665 -30.4166665 -30.2499995 93 0 2670 --61.9166665 -61.7499995 -30.4166665 -30.2499995 91 0 2670 --61.7500005 -61.5833335 -30.4166665 -30.2499995 91 0 2670 --61.5833335 -61.4166665 -30.4166665 -30.2499995 85 0 2670 --61.4166665 -61.2499995 -30.4166665 -30.2499995 78 0 2670 --61.2500005 -61.0833335 -30.4166665 -30.2499995 69 0 2670 --61.0833335 -60.9166665 -30.4166665 -30.2499995 65 0 2670 --60.9166665 -60.7499995 -30.4166665 -30.2499995 58 0 2670 --60.7500005 -60.5833335 -30.4166665 -30.2499995 52 0 2670 --60.5833335 -60.4166665 -30.4166665 -30.2499995 51 0 2670 --60.4166665 -60.2499995 -30.4166665 -30.2499995 58 0 2670 --60.2500005 -60.0833335 -30.4166665 -30.2499995 29 0 2670 --60.0833335 -59.9166665 -30.4166665 -30.2499995 26 0 2670 --59.9166665 -59.7499995 -30.4166665 -30.2499995 22 0 2670 --59.7500005 -59.5833335 -30.4166665 -30.2499995 23 0 2670 --59.5833335 -59.4166665 -30.4166665 -30.2499995 29 0 2670 --59.4166665 -59.2499995 -30.4166665 -30.2499995 33 0 2670 --59.2500005 -59.0833335 -30.4166665 -30.2499995 41 0 2670 --59.0833335 -58.9166665 -30.4166665 -30.2499995 63 0 2670 --58.9166665 -58.7499995 -30.4166665 -30.2499995 64 0 2670 --58.7500005 -58.5833335 -30.4166665 -30.2499995 66 0 2670 --58.5833335 -58.4166665 -30.4166665 -30.2499995 70 0 2670 --58.4166665 -58.2499995 -30.4166665 -30.2499995 77 0 2670 --58.2500005 -58.0833335 -30.4166665 -30.2499995 67 0 2670 --58.0833335 -57.9166665 -30.4166665 -30.2499995 55 0 2670 --57.9166665 -57.7499995 -30.4166665 -30.2499995 62 0 2670 --57.7500005 -57.5833335 -30.4166665 -30.2499995 52 0 2670 --57.5833335 -57.4166665 -30.4166665 -30.2499995 72 0 2670 --57.4166665 -57.2499995 -30.4166665 -30.2499995 49 0 2670 --57.2500005 -57.0833335 -30.4166665 -30.2499995 61 0 2670 --57.0833335 -56.9166665 -30.4166665 -30.2499995 72 0 2670 --56.9166665 -56.7499995 -30.4166665 -30.2499995 117 0 2670 --56.7500005 -56.5833335 -30.4166665 -30.2499995 122 0 2670 --56.5833335 -56.4166665 -30.4166665 -30.2499995 114 0 2670 --56.4166665 -56.2499995 -30.4166665 -30.2499995 177 0 2670 --56.2500005 -56.0833335 -30.4166665 -30.2499995 226 0 2670 --56.0833335 -55.9166665 -30.4166665 -30.2499995 218 0 2670 --55.9166665 -55.7499995 -30.4166665 -30.2499995 209 0 2670 --55.7500005 -55.5833335 -30.4166665 -30.2499995 130 0 2670 --55.5833335 -55.4166665 -30.4166665 -30.2499995 183 0 2670 --55.4166665 -55.2499995 -30.4166665 -30.2499995 155 0 2670 --55.2500005 -55.0833335 -30.4166665 -30.2499995 154 0 2670 --55.0833335 -54.9166665 -30.4166665 -30.2499995 134 0 2670 --54.9166665 -54.7499995 -30.4166665 -30.2499995 99 0 2670 --54.7500005 -54.5833335 -30.4166665 -30.2499995 139 0 2670 --54.5833335 -54.4166665 -30.4166665 -30.2499995 122 0 2670 --54.4166665 -54.2499995 -30.4166665 -30.2499995 113 0 2670 --54.2500005 -54.0833335 -30.4166665 -30.2499995 150 0 2670 --54.0833335 -53.9166665 -30.4166665 -30.2499995 139 0 2670 --53.9166665 -53.7499995 -30.4166665 -30.2499995 202 0 2670 --53.7500005 -53.5833335 -30.4166665 -30.2499995 214 0 2670 --53.5833335 -53.4166665 -30.4166665 -30.2499995 121 0 2670 --53.4166665 -53.2499995 -30.4166665 -30.2499995 142 0 2670 --53.2500005 -53.0833335 -30.4166665 -30.2499995 51 0 2670 --53.0833335 -52.9166665 -30.4166665 -30.2499995 91 0 2670 --52.9166665 -52.7499995 -30.4166665 -30.2499995 74 0 2670 --52.7500005 -52.5833335 -30.4166665 -30.2499995 136 0 2670 --52.5833335 -52.4166665 -30.4166665 -30.2499995 100 0 2670 --52.4166665 -52.2499995 -30.4166665 -30.2499995 91 0 2670 --52.2500005 -52.0833335 -30.4166665 -30.2499995 208 0 2670 --52.0833335 -51.9166665 -30.4166665 -30.2499995 206 0 2670 --51.9166665 -51.7499995 -30.4166665 -30.2499995 250 0 2670 --51.7500005 -51.5833335 -30.4166665 -30.2499995 258 0 2670 --51.5833335 -51.4166665 -30.4166665 -30.2499995 111 0 2670 --51.4166665 -51.2499995 -30.4166665 -30.2499995 11 0 2670 --51.2500005 -51.0833335 -30.4166665 -30.2499995 0 -1 -1670 --51.0833335 -50.9166665 -30.4166665 -30.2499995 70 0 2670 --50.9166665 -50.7499995 -30.4166665 -30.2499995 0 -1 -1670 --50.7500005 -50.5833335 -30.4166665 -30.2499995 0 -1 -1670 --50.5833335 -50.4166665 -30.4166665 -30.2499995 5 0 2670 --50.4166665 -50.2499995 -30.4166665 -30.2499995 7 0 2670 --50.2500005 -50.0833335 -30.4166665 -30.2499995 0 -20 -1670 --50.0833335 -49.9166665 -30.4166665 -30.2499995 0 -39 -1670 --49.9166665 -49.7499995 -30.4166665 -30.2499995 0 -59 -1670 --49.7500005 -49.5833335 -30.4166665 -30.2499995 0 -76 -1670 --49.5833335 -49.4166665 -30.4166665 -30.2499995 0 -102 -1670 --49.4166665 -49.2499995 -30.4166665 -30.2499995 0 -122 -1670 --49.2500005 -49.0833335 -30.4166665 -30.2499995 0 -117 -1670 --49.0833335 -48.9166665 -30.4166665 -30.2499995 0 -144 -1670 --48.9166665 -48.7499995 -30.4166665 -30.2499995 0 -164 -1670 --48.7500005 -48.5833335 -30.4166665 -30.2499995 0 -198 -1670 --48.5833335 -48.4166665 -30.4166665 -30.2499995 0 -244 -1670 --48.4166665 -48.2499995 -30.4166665 -30.2499995 0 -272 -1670 --48.2500005 -48.0833335 -30.4166665 -30.2499995 0 -352 -1670 --48.0833335 -47.9166665 -30.4166665 -30.2499995 0 -443 -1670 --47.9166665 -47.7499995 -30.4166665 -30.2499995 0 -655 -1670 --47.7500005 -47.5833335 -30.4166665 -30.2499995 0 -1046 -1670 --47.5833335 -47.4166665 -30.4166665 -30.2499995 0 -1405 -1670 --47.4166665 -47.2499995 -30.4166665 -30.2499995 0 -1723 -1670 --47.2500005 -47.0833335 -30.4166665 -30.2499995 0 -2103 -1670 --47.0833335 -46.9166665 -30.4166665 -30.2499995 0 -2124 -1670 --46.9166665 -46.7499995 -30.4166665 -30.2499995 0 -2276 -1670 --46.7500005 -46.5833335 -30.4166665 -30.2499995 0 -2518 -1670 --46.5833335 -46.4166665 -30.4166665 -30.2499995 0 -2591 -1670 --46.4166665 -46.2499995 -30.4166665 -30.2499995 0 -2678 -1670 --46.2500005 -46.0833335 -30.4166665 -30.2499995 0 -2911 -1670 --46.0833335 -45.9166665 -30.4166665 -30.2499995 0 -3142 -1670 --45.9166665 -45.7499995 -30.4166665 -30.2499995 0 -3282 -1670 --45.7500005 -45.5833335 -30.4166665 -30.2499995 0 -3341 -1670 --45.5833335 -45.4166665 -30.4166665 -30.2499995 0 -3522 -1670 --45.4166665 -45.2499995 -30.4166665 -30.2499995 0 -3486 -1670 --45.2500005 -45.0833335 -30.4166665 -30.2499995 0 -3430 -1670 --45.0833335 -44.9166665 -30.4166665 -30.2499995 0 -3434 -1670 --44.9166665 -44.7499995 -30.4166665 -30.2499995 0 -3438 -1670 --44.7500005 -44.5833335 -30.4166665 -30.2499995 0 -3466 -1670 --44.5833335 -44.4166665 -30.4166665 -30.2499995 0 -3466 -1670 --44.4166665 -44.2499995 -30.4166665 -30.2499995 0 -3446 -1670 --44.2500005 -44.0833335 -30.4166665 -30.2499995 0 -3468 -1670 --44.0833335 -43.9166665 -30.4166665 -30.2499995 0 -3493 -1670 --43.9166665 -43.7499995 -30.4166665 -30.2499995 0 -3532 -1670 --43.7500005 -43.5833335 -30.4166665 -30.2499995 0 -3663 -1670 --43.5833335 -43.4166665 -30.4166665 -30.2499995 0 -3846 -1670 --43.4166665 -43.2499995 -30.4166665 -30.2499995 0 -3805 -1670 --43.2500005 -43.0833335 -30.4166665 -30.2499995 0 -3900 -1670 --43.0833335 -42.9166665 -30.4166665 -30.2499995 0 -3859 -1670 --42.9166665 -42.7499995 -30.4166665 -30.2499995 0 -3877 -1670 --42.7500005 -42.5833335 -30.4166665 -30.2499995 0 -3862 -1670 --42.5833335 -42.4166665 -30.4166665 -30.2499995 0 -3951 -1670 --42.4166665 -42.2499995 -30.4166665 -30.2499995 0 -3873 -1670 --42.2500005 -42.0833335 -30.4166665 -30.2499995 0 -3836 -1670 --42.0833335 -41.9166665 -30.4166665 -30.2499995 0 -3827 -1670 --41.9166665 -41.7499995 -30.4166665 -30.2499995 0 -3816 -1670 --41.7500005 -41.5833335 -30.4166665 -30.2499995 0 -3784 -1670 --41.5833335 -41.4166665 -30.4166665 -30.2499995 0 -3801 -1670 --41.4166665 -41.2499995 -30.4166665 -30.2499995 0 -3636 -1670 --41.2500005 -41.0833335 -30.4166665 -30.2499995 0 -3824 -1670 --41.0833335 -40.9166665 -30.4166665 -30.2499995 0 -3729 -1670 --40.9166665 -40.7499995 -30.4166665 -30.2499995 0 -3865 -1670 --40.7500005 -40.5833335 -30.4166665 -30.2499995 0 -4338 -1670 --40.5833335 -40.4166665 -30.4166665 -30.2499995 0 -3741 -1670 --40.4166665 -40.2499995 -30.4166665 -30.2499995 0 -3461 -1670 --40.2500005 -40.0833335 -30.4166665 -30.2499995 0 -3231 -1670 --40.0833335 -39.9166665 -30.4166665 -30.2499995 0 -3004 -1670 --65.0833335 -64.9166665 -30.5833335 -30.4166665 322 0 2670 --64.9166665 -64.7499995 -30.5833335 -30.4166665 376 0 2670 --64.7500005 -64.5833335 -30.5833335 -30.4166665 536 0 2670 --64.5833335 -64.4166665 -30.5833335 -30.4166665 746 0 2670 --64.4166665 -64.2499995 -30.5833335 -30.4166665 845 0 2670 --64.2500005 -64.0833335 -30.5833335 -30.4166665 730 0 2670 --64.0833335 -63.9166665 -30.5833335 -30.4166665 488 0 2670 --63.9166665 -63.7499995 -30.5833335 -30.4166665 348 0 2670 --63.7500005 -63.5833335 -30.5833335 -30.4166665 224 0 2670 --63.5833335 -63.4166665 -30.5833335 -30.4166665 130 0 2670 --63.4166665 -63.2499995 -30.5833335 -30.4166665 74 0 2670 --63.2500005 -63.0833335 -30.5833335 -30.4166665 69 0 2670 --63.0833335 -62.9166665 -30.5833335 -30.4166665 69 0 2670 --62.9166665 -62.7499995 -30.5833335 -30.4166665 69 0 2670 --62.7500005 -62.5833335 -30.5833335 -30.4166665 69 0 2670 --62.5833335 -62.4166665 -30.5833335 -30.4166665 69 0 2670 --62.4166665 -62.2499995 -30.5833335 -30.4166665 69 0 2670 --62.2500005 -62.0833335 -30.5833335 -30.4166665 95 0 2670 --62.0833335 -61.9166665 -30.5833335 -30.4166665 94 0 2670 --61.9166665 -61.7499995 -30.5833335 -30.4166665 95 0 2670 --61.7500005 -61.5833335 -30.5833335 -30.4166665 94 0 2670 --61.5833335 -61.4166665 -30.5833335 -30.4166665 88 0 2670 --61.4166665 -61.2499995 -30.5833335 -30.4166665 76 0 2670 --61.2500005 -61.0833335 -30.5833335 -30.4166665 59 0 2670 --61.0833335 -60.9166665 -30.5833335 -30.4166665 52 0 2670 --60.9166665 -60.7499995 -30.5833335 -30.4166665 62 0 2670 --60.7500005 -60.5833335 -30.5833335 -30.4166665 42 0 2670 --60.5833335 -60.4166665 -30.5833335 -30.4166665 52 0 2670 --60.4166665 -60.2499995 -30.5833335 -30.4166665 27 0 2670 --60.2500005 -60.0833335 -30.5833335 -30.4166665 25 0 2670 --60.0833335 -59.9166665 -30.5833335 -30.4166665 26 0 2670 --59.9166665 -59.7499995 -30.5833335 -30.4166665 22 0 2670 --59.7500005 -59.5833335 -30.5833335 -30.4166665 23 0 2670 --59.5833335 -59.4166665 -30.5833335 -30.4166665 32 0 2670 --59.4166665 -59.2499995 -30.5833335 -30.4166665 54 0 2670 --59.2500005 -59.0833335 -30.5833335 -30.4166665 68 0 2670 --59.0833335 -58.9166665 -30.5833335 -30.4166665 63 0 2670 --58.9166665 -58.7499995 -30.5833335 -30.4166665 56 0 2670 --58.7500005 -58.5833335 -30.5833335 -30.4166665 62 0 2670 --58.5833335 -58.4166665 -30.5833335 -30.4166665 69 0 2670 --58.4166665 -58.2499995 -30.5833335 -30.4166665 70 0 2670 --58.2500005 -58.0833335 -30.5833335 -30.4166665 59 0 2670 --58.0833335 -57.9166665 -30.5833335 -30.4166665 63 0 2670 --57.9166665 -57.7499995 -30.5833335 -30.4166665 40 0 2670 --57.7500005 -57.5833335 -30.5833335 -30.4166665 72 0 2670 --57.5833335 -57.4166665 -30.5833335 -30.4166665 86 0 2670 --57.4166665 -57.2499995 -30.5833335 -30.4166665 86 0 2670 --57.2500005 -57.0833335 -30.5833335 -30.4166665 89 0 2670 --57.0833335 -56.9166665 -30.5833335 -30.4166665 103 0 2670 --56.9166665 -56.7499995 -30.5833335 -30.4166665 148 0 2670 --56.7500005 -56.5833335 -30.5833335 -30.4166665 134 0 2670 --56.5833335 -56.4166665 -30.5833335 -30.4166665 189 0 2670 --56.4166665 -56.2499995 -30.5833335 -30.4166665 105 0 2670 --56.2500005 -56.0833335 -30.5833335 -30.4166665 168 0 2670 --56.0833335 -55.9166665 -30.5833335 -30.4166665 179 0 2670 --55.9166665 -55.7499995 -30.5833335 -30.4166665 238 0 2670 --55.7500005 -55.5833335 -30.5833335 -30.4166665 234 0 2670 --55.5833335 -55.4166665 -30.5833335 -30.4166665 188 0 2670 --55.4166665 -55.2499995 -30.5833335 -30.4166665 180 0 2670 --55.2500005 -55.0833335 -30.5833335 -30.4166665 133 0 2670 --55.0833335 -54.9166665 -30.5833335 -30.4166665 108 0 2670 --54.9166665 -54.7499995 -30.5833335 -30.4166665 169 0 2670 --54.7500005 -54.5833335 -30.5833335 -30.4166665 113 0 2670 --54.5833335 -54.4166665 -30.5833335 -30.4166665 152 0 2670 --54.4166665 -54.2499995 -30.5833335 -30.4166665 136 0 2670 --54.2500005 -54.0833335 -30.5833335 -30.4166665 267 0 2670 --54.0833335 -53.9166665 -30.5833335 -30.4166665 336 0 2670 --53.9166665 -53.7499995 -30.5833335 -30.4166665 425 0 2670 --53.7500005 -53.5833335 -30.5833335 -30.4166665 300 0 2670 --53.5833335 -53.4166665 -30.5833335 -30.4166665 364 0 2670 --53.4166665 -53.2499995 -30.5833335 -30.4166665 158 0 2670 --53.2500005 -53.0833335 -30.5833335 -30.4166665 96 0 2670 --53.0833335 -52.9166665 -30.5833335 -30.4166665 322 0 2670 --52.9166665 -52.7499995 -30.5833335 -30.4166665 154 0 2670 --52.7500005 -52.5833335 -30.5833335 -30.4166665 289 0 2670 --52.5833335 -52.4166665 -30.5833335 -30.4166665 353 0 2670 --52.4166665 -52.2499995 -30.5833335 -30.4166665 347 0 2670 --52.2500005 -52.0833335 -30.5833335 -30.4166665 367 0 2670 --52.0833335 -51.9166665 -30.5833335 -30.4166665 505 0 2670 --51.9166665 -51.7499995 -30.5833335 -30.4166665 357 0 2670 --51.7500005 -51.5833335 -30.5833335 -30.4166665 131 0 2670 --51.5833335 -51.4166665 -30.5833335 -30.4166665 106 0 2670 --51.4166665 -51.2499995 -30.5833335 -30.4166665 53 0 2670 --51.2500005 -51.0833335 -30.5833335 -30.4166665 0 -1 -1670 --51.0833335 -50.9166665 -30.5833335 -30.4166665 0 -4 -1670 --50.9166665 -50.7499995 -30.5833335 -30.4166665 0 -2 -1670 --50.7500005 -50.5833335 -30.5833335 -30.4166665 1 0 2670 --50.5833335 -50.4166665 -30.5833335 -30.4166665 9 0 2670 --50.4166665 -50.2499995 -30.5833335 -30.4166665 0 0 2670 --50.2500005 -50.0833335 -30.5833335 -30.4166665 0 -25 -1670 --50.0833335 -49.9166665 -30.5833335 -30.4166665 0 -50 -1670 --49.9166665 -49.7499995 -30.5833335 -30.4166665 0 -71 -1670 --49.7500005 -49.5833335 -30.5833335 -30.4166665 0 -98 -1670 --49.5833335 -49.4166665 -30.5833335 -30.4166665 0 -129 -1670 --49.4166665 -49.2499995 -30.5833335 -30.4166665 0 -123 -1670 --49.2500005 -49.0833335 -30.5833335 -30.4166665 0 -129 -1670 --49.0833335 -48.9166665 -30.5833335 -30.4166665 0 -144 -1670 --48.9166665 -48.7499995 -30.5833335 -30.4166665 0 -103 -1670 --48.7500005 -48.5833335 -30.5833335 -30.4166665 0 -206 -1670 --48.5833335 -48.4166665 -30.5833335 -30.4166665 0 -407 -1670 --48.4166665 -48.2499995 -30.5833335 -30.4166665 0 -418 -1670 --48.2500005 -48.0833335 -30.5833335 -30.4166665 0 -485 -1670 --48.0833335 -47.9166665 -30.5833335 -30.4166665 0 -581 -1670 --47.9166665 -47.7499995 -30.5833335 -30.4166665 0 -815 -1670 --47.7500005 -47.5833335 -30.5833335 -30.4166665 0 -1149 -1670 --47.5833335 -47.4166665 -30.5833335 -30.4166665 0 -1714 -1670 --47.4166665 -47.2499995 -30.5833335 -30.4166665 0 -2021 -1670 --47.2500005 -47.0833335 -30.5833335 -30.4166665 0 -2219 -1670 --47.0833335 -46.9166665 -30.5833335 -30.4166665 0 -2396 -1670 --46.9166665 -46.7499995 -30.5833335 -30.4166665 0 -2741 -1670 --46.7500005 -46.5833335 -30.5833335 -30.4166665 0 -3081 -1670 --46.5833335 -46.4166665 -30.5833335 -30.4166665 0 -3172 -1670 --46.4166665 -46.2499995 -30.5833335 -30.4166665 0 -3080 -1670 --46.2500005 -46.0833335 -30.5833335 -30.4166665 0 -3210 -1670 --46.0833335 -45.9166665 -30.5833335 -30.4166665 0 -3207 -1670 --45.9166665 -45.7499995 -30.5833335 -30.4166665 0 -3246 -1670 --45.7500005 -45.5833335 -30.5833335 -30.4166665 0 -3369 -1670 --45.5833335 -45.4166665 -30.5833335 -30.4166665 0 -3492 -1670 --45.4166665 -45.2499995 -30.5833335 -30.4166665 0 -3457 -1670 --45.2500005 -45.0833335 -30.5833335 -30.4166665 0 -3497 -1670 --45.0833335 -44.9166665 -30.5833335 -30.4166665 0 -3416 -1670 --44.9166665 -44.7499995 -30.5833335 -30.4166665 0 -3401 -1670 --44.7500005 -44.5833335 -30.5833335 -30.4166665 0 -3440 -1670 --44.5833335 -44.4166665 -30.5833335 -30.4166665 0 -3456 -1670 --44.4166665 -44.2499995 -30.5833335 -30.4166665 0 -3444 -1670 --44.2500005 -44.0833335 -30.5833335 -30.4166665 0 -3440 -1670 --44.0833335 -43.9166665 -30.5833335 -30.4166665 0 -3489 -1670 --43.9166665 -43.7499995 -30.5833335 -30.4166665 0 -3470 -1670 --43.7500005 -43.5833335 -30.5833335 -30.4166665 0 -3523 -1670 --43.5833335 -43.4166665 -30.5833335 -30.4166665 0 -3810 -1670 --43.4166665 -43.2499995 -30.5833335 -30.4166665 0 -3846 -1670 --43.2500005 -43.0833335 -30.5833335 -30.4166665 0 -3888 -1670 --43.0833335 -42.9166665 -30.5833335 -30.4166665 0 -3889 -1670 --42.9166665 -42.7499995 -30.5833335 -30.4166665 0 -3833 -1670 --42.7500005 -42.5833335 -30.5833335 -30.4166665 0 -3829 -1670 --42.5833335 -42.4166665 -30.5833335 -30.4166665 0 -3874 -1670 --42.4166665 -42.2499995 -30.5833335 -30.4166665 0 -3869 -1670 --42.2500005 -42.0833335 -30.5833335 -30.4166665 0 -3831 -1670 --42.0833335 -41.9166665 -30.5833335 -30.4166665 0 -3842 -1670 --41.9166665 -41.7499995 -30.5833335 -30.4166665 0 -3735 -1670 --41.7500005 -41.5833335 -30.5833335 -30.4166665 0 -3758 -1670 --41.5833335 -41.4166665 -30.5833335 -30.4166665 0 -3673 -1670 --41.4166665 -41.2499995 -30.5833335 -30.4166665 0 -3684 -1670 --41.2500005 -41.0833335 -30.5833335 -30.4166665 0 -3906 -1670 --41.0833335 -40.9166665 -30.5833335 -30.4166665 0 -3711 -1670 --40.9166665 -40.7499995 -30.5833335 -30.4166665 0 -3785 -1670 --40.7500005 -40.5833335 -30.5833335 -30.4166665 0 -3913 -1670 --40.5833335 -40.4166665 -30.5833335 -30.4166665 0 -3858 -1670 --40.4166665 -40.2499995 -30.5833335 -30.4166665 0 -3889 -1670 --40.2500005 -40.0833335 -30.5833335 -30.4166665 0 -3960 -1670 --40.0833335 -39.9166665 -30.5833335 -30.4166665 0 -3979 -1670 --65.0833335 -64.9166665 -30.7500005 -30.5833335 413 0 2670 --64.9166665 -64.7499995 -30.7500005 -30.5833335 451 0 2670 --64.7500005 -64.5833335 -30.7500005 -30.5833335 621 0 2670 --64.5833335 -64.4166665 -30.7500005 -30.5833335 952 0 2670 --64.4166665 -64.2499995 -30.7500005 -30.5833335 1027 0 2670 --64.2500005 -64.0833335 -30.7500005 -30.5833335 657 0 2670 --64.0833335 -63.9166665 -30.7500005 -30.5833335 469 0 2670 --63.9166665 -63.7499995 -30.7500005 -30.5833335 329 0 2670 --63.7500005 -63.5833335 -30.7500005 -30.5833335 214 0 2670 --63.5833335 -63.4166665 -30.7500005 -30.5833335 119 0 2670 --63.4166665 -63.2499995 -30.7500005 -30.5833335 86 0 2670 --63.2500005 -63.0833335 -30.7500005 -30.5833335 77 0 2670 --63.0833335 -62.9166665 -30.7500005 -30.5833335 69 0 2670 --62.9166665 -62.7499995 -30.7500005 -30.5833335 69 0 2670 --62.7500005 -62.5833335 -30.7500005 -30.5833335 69 0 2670 --62.5833335 -62.4166665 -30.7500005 -30.5833335 69 0 2670 --62.4166665 -62.2499995 -30.7500005 -30.5833335 69 0 2670 --62.2500005 -62.0833335 -30.7500005 -30.5833335 97 0 2670 --62.0833335 -61.9166665 -30.7500005 -30.5833335 97 0 2670 --61.9166665 -61.7499995 -30.7500005 -30.5833335 97 0 2670 --61.7500005 -61.5833335 -30.7500005 -30.5833335 94 0 2670 --61.5833335 -61.4166665 -30.7500005 -30.5833335 87 0 2670 --61.4166665 -61.2499995 -30.7500005 -30.5833335 76 0 2670 --61.2500005 -61.0833335 -30.7500005 -30.5833335 66 0 2670 --61.0833335 -60.9166665 -30.7500005 -30.5833335 46 0 2670 --60.9166665 -60.7499995 -30.7500005 -30.5833335 55 0 2670 --60.7500005 -60.5833335 -30.7500005 -30.5833335 51 0 2670 --60.5833335 -60.4166665 -30.7500005 -30.5833335 57 0 2670 --60.4166665 -60.2499995 -30.7500005 -30.5833335 23 0 2670 --60.2500005 -60.0833335 -30.7500005 -30.5833335 23 0 2670 --60.0833335 -59.9166665 -30.7500005 -30.5833335 24 0 2670 --59.9166665 -59.7499995 -30.7500005 -30.5833335 21 0 2670 --59.7500005 -59.5833335 -30.7500005 -30.5833335 22 0 2670 --59.5833335 -59.4166665 -30.7500005 -30.5833335 53 0 2670 --59.4166665 -59.2499995 -30.7500005 -30.5833335 59 0 2670 --59.2500005 -59.0833335 -30.7500005 -30.5833335 64 0 2670 --59.0833335 -58.9166665 -30.7500005 -30.5833335 54 0 2670 --58.9166665 -58.7499995 -30.7500005 -30.5833335 55 0 2670 --58.7500005 -58.5833335 -30.7500005 -30.5833335 74 0 2670 --58.5833335 -58.4166665 -30.7500005 -30.5833335 73 0 2670 --58.4166665 -58.2499995 -30.7500005 -30.5833335 73 0 2670 --58.2500005 -58.0833335 -30.7500005 -30.5833335 67 0 2670 --58.0833335 -57.9166665 -30.7500005 -30.5833335 44 0 2670 --57.9166665 -57.7499995 -30.7500005 -30.5833335 32 0 2670 --57.7500005 -57.5833335 -30.7500005 -30.5833335 73 0 2670 --57.5833335 -57.4166665 -30.7500005 -30.5833335 90 0 2670 --57.4166665 -57.2499995 -30.7500005 -30.5833335 136 0 2670 --57.2500005 -57.0833335 -30.7500005 -30.5833335 116 0 2670 --57.0833335 -56.9166665 -30.7500005 -30.5833335 112 0 2670 --56.9166665 -56.7499995 -30.7500005 -30.5833335 139 0 2670 --56.7500005 -56.5833335 -30.7500005 -30.5833335 214 0 2670 --56.5833335 -56.4166665 -30.7500005 -30.5833335 290 0 2670 --56.4166665 -56.2499995 -30.7500005 -30.5833335 145 0 2670 --56.2500005 -56.0833335 -30.7500005 -30.5833335 132 0 2670 --56.0833335 -55.9166665 -30.7500005 -30.5833335 212 0 2670 --55.9166665 -55.7499995 -30.7500005 -30.5833335 281 0 2670 --55.7500005 -55.5833335 -30.7500005 -30.5833335 201 0 2670 --55.5833335 -55.4166665 -30.7500005 -30.5833335 248 0 2670 --55.4166665 -55.2499995 -30.7500005 -30.5833335 173 0 2670 --55.2500005 -55.0833335 -30.7500005 -30.5833335 119 0 2670 --55.0833335 -54.9166665 -30.7500005 -30.5833335 164 0 2670 --54.9166665 -54.7499995 -30.7500005 -30.5833335 145 0 2670 --54.7500005 -54.5833335 -30.7500005 -30.5833335 115 0 2670 --54.5833335 -54.4166665 -30.7500005 -30.5833335 144 0 2670 --54.4166665 -54.2499995 -30.7500005 -30.5833335 201 0 2670 --54.2500005 -54.0833335 -30.7500005 -30.5833335 241 0 2670 --54.0833335 -53.9166665 -30.7500005 -30.5833335 301 0 2670 --53.9166665 -53.7499995 -30.7500005 -30.5833335 248 0 2670 --53.7500005 -53.5833335 -30.7500005 -30.5833335 274 0 2670 --53.5833335 -53.4166665 -30.7500005 -30.5833335 281 0 2670 --53.4166665 -53.2499995 -30.7500005 -30.5833335 119 0 2670 --53.2500005 -53.0833335 -30.7500005 -30.5833335 141 0 2670 --53.0833335 -52.9166665 -30.7500005 -30.5833335 265 0 2670 --52.9166665 -52.7499995 -30.7500005 -30.5833335 372 0 2670 --52.7500005 -52.5833335 -30.7500005 -30.5833335 315 0 2670 --52.5833335 -52.4166665 -30.7500005 -30.5833335 394 0 2670 --52.4166665 -52.2499995 -30.7500005 -30.5833335 202 0 2670 --52.2500005 -52.0833335 -30.7500005 -30.5833335 274 0 2670 --52.0833335 -51.9166665 -30.7500005 -30.5833335 271 0 2670 --51.9166665 -51.7499995 -30.7500005 -30.5833335 187 0 2670 --51.7500005 -51.5833335 -30.7500005 -30.5833335 90 0 2670 --51.5833335 -51.4166665 -30.7500005 -30.5833335 27 0 2670 --51.4166665 -51.2499995 -30.7500005 -30.5833335 0 -1 -1670 --51.2500005 -51.0833335 -30.7500005 -30.5833335 0 -6 -1670 --51.0833335 -50.9166665 -30.7500005 -30.5833335 0 -6 -1670 --50.9166665 -50.7499995 -30.7500005 -30.5833335 0 -5 -1670 --50.7500005 -50.5833335 -30.7500005 -30.5833335 5 0 2670 --50.5833335 -50.4166665 -30.7500005 -30.5833335 14 0 2670 --50.4166665 -50.2499995 -30.7500005 -30.5833335 0 -21 -1670 --50.2500005 -50.0833335 -30.7500005 -30.5833335 0 -45 -1670 --50.0833335 -49.9166665 -30.7500005 -30.5833335 0 -71 -1670 --49.9166665 -49.7499995 -30.7500005 -30.5833335 0 -105 -1670 --49.7500005 -49.5833335 -30.7500005 -30.5833335 0 -105 -1670 --49.5833335 -49.4166665 -30.7500005 -30.5833335 0 -130 -1670 --49.4166665 -49.2499995 -30.7500005 -30.5833335 0 -149 -1670 --49.2500005 -49.0833335 -30.7500005 -30.5833335 0 -167 -1670 --49.0833335 -48.9166665 -30.7500005 -30.5833335 0 -89 -1670 --48.9166665 -48.7499995 -30.7500005 -30.5833335 0 -331 -1670 --48.7500005 -48.5833335 -30.7500005 -30.5833335 0 -981 -1670 --48.5833335 -48.4166665 -30.7500005 -30.5833335 0 -1106 -1670 --48.4166665 -48.2499995 -30.7500005 -30.5833335 0 -1222 -1670 --48.2500005 -48.0833335 -30.7500005 -30.5833335 0 -1466 -1670 --48.0833335 -47.9166665 -30.7500005 -30.5833335 0 -1730 -1670 --47.9166665 -47.7499995 -30.7500005 -30.5833335 0 -2170 -1670 --47.7500005 -47.5833335 -30.7500005 -30.5833335 0 -2446 -1670 --47.5833335 -47.4166665 -30.7500005 -30.5833335 0 -2460 -1670 --47.4166665 -47.2499995 -30.7500005 -30.5833335 0 -2664 -1670 --47.2500005 -47.0833335 -30.7500005 -30.5833335 0 -2818 -1670 --47.0833335 -46.9166665 -30.7500005 -30.5833335 0 -3092 -1670 --46.9166665 -46.7499995 -30.7500005 -30.5833335 0 -3099 -1670 --46.7500005 -46.5833335 -30.7500005 -30.5833335 0 -3064 -1670 --46.5833335 -46.4166665 -30.7500005 -30.5833335 0 -3207 -1670 --46.4166665 -46.2499995 -30.7500005 -30.5833335 0 -3242 -1670 --46.2500005 -46.0833335 -30.7500005 -30.5833335 0 -3264 -1670 --46.0833335 -45.9166665 -30.7500005 -30.5833335 0 -3267 -1670 --45.9166665 -45.7499995 -30.7500005 -30.5833335 0 -3313 -1670 --45.7500005 -45.5833335 -30.7500005 -30.5833335 0 -3440 -1670 --45.5833335 -45.4166665 -30.7500005 -30.5833335 0 -3471 -1670 --45.4166665 -45.2499995 -30.7500005 -30.5833335 0 -3499 -1670 --45.2500005 -45.0833335 -30.7500005 -30.5833335 0 -3384 -1670 --45.0833335 -44.9166665 -30.7500005 -30.5833335 0 -3422 -1670 --44.9166665 -44.7499995 -30.7500005 -30.5833335 0 -3416 -1670 --44.7500005 -44.5833335 -30.7500005 -30.5833335 0 -3429 -1670 --44.5833335 -44.4166665 -30.7500005 -30.5833335 0 -3381 -1670 --44.4166665 -44.2499995 -30.7500005 -30.5833335 0 -3407 -1670 --44.2500005 -44.0833335 -30.7500005 -30.5833335 0 -3378 -1670 --44.0833335 -43.9166665 -30.7500005 -30.5833335 0 -3463 -1670 --43.9166665 -43.7499995 -30.7500005 -30.5833335 0 -3438 -1670 --43.7500005 -43.5833335 -30.7500005 -30.5833335 0 -3465 -1670 --43.5833335 -43.4166665 -30.7500005 -30.5833335 0 -3544 -1670 --43.4166665 -43.2499995 -30.7500005 -30.5833335 0 -3842 -1670 --43.2500005 -43.0833335 -30.7500005 -30.5833335 0 -3961 -1670 --43.0833335 -42.9166665 -30.7500005 -30.5833335 0 -3919 -1670 --42.9166665 -42.7499995 -30.7500005 -30.5833335 0 -3915 -1670 --42.7500005 -42.5833335 -30.7500005 -30.5833335 0 -3760 -1670 --42.5833335 -42.4166665 -30.7500005 -30.5833335 0 -3832 -1670 --42.4166665 -42.2499995 -30.7500005 -30.5833335 0 -3844 -1670 --42.2500005 -42.0833335 -30.7500005 -30.5833335 0 -3818 -1670 --42.0833335 -41.9166665 -30.7500005 -30.5833335 0 -3815 -1670 --41.9166665 -41.7499995 -30.7500005 -30.5833335 0 -3818 -1670 --41.7500005 -41.5833335 -30.7500005 -30.5833335 0 -3735 -1670 --41.5833335 -41.4166665 -30.7500005 -30.5833335 0 -3664 -1670 --41.4166665 -41.2499995 -30.7500005 -30.5833335 0 -3606 -1670 --41.2500005 -41.0833335 -30.7500005 -30.5833335 0 -3790 -1670 --41.0833335 -40.9166665 -30.7500005 -30.5833335 0 -3681 -1670 --40.9166665 -40.7499995 -30.7500005 -30.5833335 0 -3733 -1670 --40.7500005 -40.5833335 -30.7500005 -30.5833335 0 -3601 -1670 --40.5833335 -40.4166665 -30.7500005 -30.5833335 0 -3749 -1670 --40.4166665 -40.2499995 -30.7500005 -30.5833335 0 -4111 -1670 --40.2500005 -40.0833335 -30.7500005 -30.5833335 0 -4006 -1670 --40.0833335 -39.9166665 -30.7500005 -30.5833335 0 -3875 -1670 --65.0833335 -64.9166665 -30.9166665 -30.7499995 545 0 2670 --64.9166665 -64.7499995 -30.9166665 -30.7499995 684 0 2670 --64.7500005 -64.5833335 -30.9166665 -30.7499995 594 0 2670 --64.5833335 -64.4166665 -30.9166665 -30.7499995 1163 0 2670 --64.4166665 -64.2499995 -30.9166665 -30.7499995 1078 0 2670 --64.2500005 -64.0833335 -30.9166665 -30.7499995 697 0 2670 --64.0833335 -63.9166665 -30.9166665 -30.7499995 467 0 2670 --63.9166665 -63.7499995 -30.9166665 -30.7499995 305 0 2670 --63.7500005 -63.5833335 -30.9166665 -30.7499995 198 0 2670 --63.5833335 -63.4166665 -30.9166665 -30.7499995 127 0 2670 --63.4166665 -63.2499995 -30.9166665 -30.7499995 103 0 2670 --63.2500005 -63.0833335 -30.9166665 -30.7499995 97 0 2670 --63.0833335 -62.9166665 -30.9166665 -30.7499995 88 0 2670 --62.9166665 -62.7499995 -30.9166665 -30.7499995 69 0 2670 --62.7500005 -62.5833335 -30.9166665 -30.7499995 69 0 2670 --62.5833335 -62.4166665 -30.9166665 -30.7499995 69 0 2670 --62.4166665 -62.2499995 -30.9166665 -30.7499995 69 0 2670 --62.2500005 -62.0833335 -30.9166665 -30.7499995 102 0 2670 --62.0833335 -61.9166665 -30.9166665 -30.7499995 99 0 2670 --61.9166665 -61.7499995 -30.9166665 -30.7499995 99 0 2670 --61.7500005 -61.5833335 -30.9166665 -30.7499995 98 0 2670 --61.5833335 -61.4166665 -30.9166665 -30.7499995 93 0 2670 --61.4166665 -61.2499995 -30.9166665 -30.7499995 79 0 2670 --61.2500005 -61.0833335 -30.9166665 -30.7499995 61 0 2670 --61.0833335 -60.9166665 -30.9166665 -30.7499995 54 0 2670 --60.9166665 -60.7499995 -30.9166665 -30.7499995 37 0 2670 --60.7500005 -60.5833335 -30.9166665 -30.7499995 55 0 2670 --60.5833335 -60.4166665 -30.9166665 -30.7499995 32 0 2670 --60.4166665 -60.2499995 -30.9166665 -30.7499995 21 0 2670 --60.2500005 -60.0833335 -30.9166665 -30.7499995 21 0 2670 --60.0833335 -59.9166665 -30.9166665 -30.7499995 23 0 2670 --59.9166665 -59.7499995 -30.9166665 -30.7499995 15 0 2670 --59.7500005 -59.5833335 -30.9166665 -30.7499995 57 0 2670 --59.5833335 -59.4166665 -30.9166665 -30.7499995 48 0 2670 --59.4166665 -59.2499995 -30.9166665 -30.7499995 43 0 2670 --59.2500005 -59.0833335 -30.9166665 -30.7499995 58 0 2670 --59.0833335 -58.9166665 -30.9166665 -30.7499995 51 0 2670 --58.9166665 -58.7499995 -30.9166665 -30.7499995 71 0 2670 --58.7500005 -58.5833335 -30.9166665 -30.7499995 75 0 2670 --58.5833335 -58.4166665 -30.9166665 -30.7499995 63 0 2670 --58.4166665 -58.2499995 -30.9166665 -30.7499995 64 0 2670 --58.2500005 -58.0833335 -30.9166665 -30.7499995 62 0 2670 --58.0833335 -57.9166665 -30.9166665 -30.7499995 62 0 2670 --57.9166665 -57.7499995 -30.9166665 -30.7499995 39 0 2670 --57.7500005 -57.5833335 -30.9166665 -30.7499995 66 0 2670 --57.5833335 -57.4166665 -30.9166665 -30.7499995 84 0 2670 --57.4166665 -57.2499995 -30.9166665 -30.7499995 114 0 2670 --57.2500005 -57.0833335 -30.9166665 -30.7499995 126 0 2670 --57.0833335 -56.9166665 -30.9166665 -30.7499995 148 0 2670 --56.9166665 -56.7499995 -30.9166665 -30.7499995 157 0 2670 --56.7500005 -56.5833335 -30.9166665 -30.7499995 168 0 2670 --56.5833335 -56.4166665 -30.9166665 -30.7499995 211 0 2670 --56.4166665 -56.2499995 -30.9166665 -30.7499995 193 0 2670 --56.2500005 -56.0833335 -30.9166665 -30.7499995 234 0 2670 --56.0833335 -55.9166665 -30.9166665 -30.7499995 205 0 2670 --55.9166665 -55.7499995 -30.9166665 -30.7499995 252 0 2670 --55.7500005 -55.5833335 -30.9166665 -30.7499995 320 0 2670 --55.5833335 -55.4166665 -30.9166665 -30.7499995 218 0 2670 --55.4166665 -55.2499995 -30.9166665 -30.7499995 160 0 2670 --55.2500005 -55.0833335 -30.9166665 -30.7499995 154 0 2670 --55.0833335 -54.9166665 -30.9166665 -30.7499995 149 0 2670 --54.9166665 -54.7499995 -30.9166665 -30.7499995 160 0 2670 --54.7500005 -54.5833335 -30.9166665 -30.7499995 127 0 2670 --54.5833335 -54.4166665 -30.9166665 -30.7499995 280 0 2670 --54.4166665 -54.2499995 -30.9166665 -30.7499995 269 0 2670 --54.2500005 -54.0833335 -30.9166665 -30.7499995 318 0 2670 --54.0833335 -53.9166665 -30.9166665 -30.7499995 356 0 2670 --53.9166665 -53.7499995 -30.9166665 -30.7499995 240 0 2670 --53.7500005 -53.5833335 -30.9166665 -30.7499995 154 0 2670 --53.5833335 -53.4166665 -30.9166665 -30.7499995 235 0 2670 --53.4166665 -53.2499995 -30.9166665 -30.7499995 240 0 2670 --53.2500005 -53.0833335 -30.9166665 -30.7499995 327 0 2670 --53.0833335 -52.9166665 -30.9166665 -30.7499995 255 0 2670 --52.9166665 -52.7499995 -30.9166665 -30.7499995 251 0 2670 --52.7500005 -52.5833335 -30.9166665 -30.7499995 290 0 2670 --52.5833335 -52.4166665 -30.9166665 -30.7499995 90 0 2670 --52.4166665 -52.2499995 -30.9166665 -30.7499995 166 0 2670 --52.2500005 -52.0833335 -30.9166665 -30.7499995 122 0 2670 --52.0833335 -51.9166665 -30.9166665 -30.7499995 155 0 2670 --51.9166665 -51.7499995 -30.9166665 -30.7499995 43 0 2670 --51.7500005 -51.5833335 -30.9166665 -30.7499995 20 0 2670 --51.5833335 -51.4166665 -30.9166665 -30.7499995 9 0 2670 --51.4166665 -51.2499995 -30.9166665 -30.7499995 0 -5 -1670 --51.2500005 -51.0833335 -30.9166665 -30.7499995 0 -6 -1670 --51.0833335 -50.9166665 -30.9166665 -30.7499995 0 -6 -1670 --50.9166665 -50.7499995 -30.9166665 -30.7499995 0 -1 -1670 --50.7500005 -50.5833335 -30.9166665 -30.7499995 17 0 2670 --50.5833335 -50.4166665 -30.9166665 -30.7499995 0 -18 -1670 --50.4166665 -50.2499995 -30.9166665 -30.7499995 0 -43 -1670 --50.2500005 -50.0833335 -30.9166665 -30.7499995 0 -73 -1670 --50.0833335 -49.9166665 -30.9166665 -30.7499995 0 -100 -1670 --49.9166665 -49.7499995 -30.9166665 -30.7499995 0 -115 -1670 --49.7500005 -49.5833335 -30.9166665 -30.7499995 0 -112 -1670 --49.5833335 -49.4166665 -30.9166665 -30.7499995 0 -89 -1670 --49.4166665 -49.2499995 -30.9166665 -30.7499995 0 -170 -1670 --49.2500005 -49.0833335 -30.9166665 -30.7499995 0 -211 -1670 --49.0833335 -48.9166665 -30.9166665 -30.7499995 0 -862 -1670 --48.9166665 -48.7499995 -30.9166665 -30.7499995 0 -1384 -1670 --48.7500005 -48.5833335 -30.9166665 -30.7499995 0 -1476 -1670 --48.5833335 -48.4166665 -30.9166665 -30.7499995 0 -1725 -1670 --48.4166665 -48.2499995 -30.9166665 -30.7499995 0 -2029 -1670 --48.2500005 -48.0833335 -30.9166665 -30.7499995 0 -2309 -1670 --48.0833335 -47.9166665 -30.9166665 -30.7499995 0 -2526 -1670 --47.9166665 -47.7499995 -30.9166665 -30.7499995 0 -2607 -1670 --47.7500005 -47.5833335 -30.9166665 -30.7499995 0 -2771 -1670 --47.5833335 -47.4166665 -30.9166665 -30.7499995 0 -2880 -1670 --47.4166665 -47.2499995 -30.9166665 -30.7499995 0 -2947 -1670 --47.2500005 -47.0833335 -30.9166665 -30.7499995 0 -3105 -1670 --47.0833335 -46.9166665 -30.9166665 -30.7499995 0 -3181 -1670 --46.9166665 -46.7499995 -30.9166665 -30.7499995 0 -3103 -1670 --46.7500005 -46.5833335 -30.9166665 -30.7499995 0 -3225 -1670 --46.5833335 -46.4166665 -30.9166665 -30.7499995 0 -3294 -1670 --46.4166665 -46.2499995 -30.9166665 -30.7499995 0 -3344 -1670 --46.2500005 -46.0833335 -30.9166665 -30.7499995 0 -3258 -1670 --46.0833335 -45.9166665 -30.9166665 -30.7499995 0 -3330 -1670 --45.9166665 -45.7499995 -30.9166665 -30.7499995 0 -3396 -1670 --45.7500005 -45.5833335 -30.9166665 -30.7499995 0 -3475 -1670 --45.5833335 -45.4166665 -30.9166665 -30.7499995 0 -3489 -1670 --45.4166665 -45.2499995 -30.9166665 -30.7499995 0 -3533 -1670 --45.2500005 -45.0833335 -30.9166665 -30.7499995 0 -3472 -1670 --45.0833335 -44.9166665 -30.9166665 -30.7499995 0 -3451 -1670 --44.9166665 -44.7499995 -30.9166665 -30.7499995 0 -3429 -1670 --44.7500005 -44.5833335 -30.9166665 -30.7499995 0 -3374 -1670 --44.5833335 -44.4166665 -30.9166665 -30.7499995 0 -3422 -1670 --44.4166665 -44.2499995 -30.9166665 -30.7499995 0 -3450 -1670 --44.2500005 -44.0833335 -30.9166665 -30.7499995 0 -3374 -1670 --44.0833335 -43.9166665 -30.9166665 -30.7499995 0 -3463 -1670 --43.9166665 -43.7499995 -30.9166665 -30.7499995 0 -3398 -1670 --43.7500005 -43.5833335 -30.9166665 -30.7499995 0 -3406 -1670 --43.5833335 -43.4166665 -30.9166665 -30.7499995 0 -3573 -1670 --43.4166665 -43.2499995 -30.9166665 -30.7499995 0 -3812 -1670 --43.2500005 -43.0833335 -30.9166665 -30.7499995 0 -3937 -1670 --43.0833335 -42.9166665 -30.9166665 -30.7499995 0 -3943 -1670 --42.9166665 -42.7499995 -30.9166665 -30.7499995 0 -3812 -1670 --42.7500005 -42.5833335 -30.9166665 -30.7499995 0 -3815 -1670 --42.5833335 -42.4166665 -30.9166665 -30.7499995 0 -3839 -1670 --42.4166665 -42.2499995 -30.9166665 -30.7499995 0 -3792 -1670 --42.2500005 -42.0833335 -30.9166665 -30.7499995 0 -3804 -1670 --42.0833335 -41.9166665 -30.9166665 -30.7499995 0 -3803 -1670 --41.9166665 -41.7499995 -30.9166665 -30.7499995 0 -3783 -1670 --41.7500005 -41.5833335 -30.9166665 -30.7499995 0 -3724 -1670 --41.5833335 -41.4166665 -30.9166665 -30.7499995 0 -3611 -1670 --41.4166665 -41.2499995 -30.9166665 -30.7499995 0 -3590 -1670 --41.2500005 -41.0833335 -30.9166665 -30.7499995 0 -3806 -1670 --41.0833335 -40.9166665 -30.9166665 -30.7499995 0 -3219 -1670 --40.9166665 -40.7499995 -30.9166665 -30.7499995 0 -3591 -1670 --40.7500005 -40.5833335 -30.9166665 -30.7499995 0 -3838 -1670 --40.5833335 -40.4166665 -30.9166665 -30.7499995 0 -4088 -1670 --40.4166665 -40.2499995 -30.9166665 -30.7499995 0 -4089 -1670 --40.2500005 -40.0833335 -30.9166665 -30.7499995 0 -3784 -1670 --40.0833335 -39.9166665 -30.9166665 -30.7499995 0 -3854 -1670 --65.0833335 -64.9166665 -31.0833335 -30.9166665 721 0 2670 --64.9166665 -64.7499995 -31.0833335 -30.9166665 1019 0 2670 --64.7500005 -64.5833335 -31.0833335 -30.9166665 925 0 2670 --64.5833335 -64.4166665 -31.0833335 -30.9166665 1123 0 2670 --64.4166665 -64.2499995 -31.0833335 -30.9166665 1007 0 2670 --64.2500005 -64.0833335 -31.0833335 -30.9166665 571 0 2670 --64.0833335 -63.9166665 -31.0833335 -30.9166665 444 0 2670 --63.9166665 -63.7499995 -31.0833335 -30.9166665 319 0 2670 --63.7500005 -63.5833335 -31.0833335 -30.9166665 218 0 2670 --63.5833335 -63.4166665 -31.0833335 -30.9166665 160 0 2670 --63.4166665 -63.2499995 -31.0833335 -30.9166665 133 0 2670 --63.2500005 -63.0833335 -31.0833335 -30.9166665 120 0 2670 --63.0833335 -62.9166665 -31.0833335 -30.9166665 99 0 2670 --62.9166665 -62.7499995 -31.0833335 -30.9166665 90 0 2670 --62.7500005 -62.5833335 -31.0833335 -30.9166665 84 0 2670 --62.5833335 -62.4166665 -31.0833335 -30.9166665 80 0 2670 --62.4166665 -62.2499995 -31.0833335 -30.9166665 105 0 2670 --62.2500005 -62.0833335 -31.0833335 -30.9166665 103 0 2670 --62.0833335 -61.9166665 -31.0833335 -30.9166665 103 0 2670 --61.9166665 -61.7499995 -31.0833335 -30.9166665 102 0 2670 --61.7500005 -61.5833335 -31.0833335 -30.9166665 98 0 2670 --61.5833335 -61.4166665 -31.0833335 -30.9166665 94 0 2670 --61.4166665 -61.2499995 -31.0833335 -30.9166665 77 0 2670 --61.2500005 -61.0833335 -31.0833335 -30.9166665 61 0 2670 --61.0833335 -60.9166665 -31.0833335 -30.9166665 51 0 2670 --60.9166665 -60.7499995 -31.0833335 -30.9166665 29 0 2670 --60.7500005 -60.5833335 -31.0833335 -30.9166665 50 0 2670 --60.5833335 -60.4166665 -31.0833335 -30.9166665 26 0 2670 --60.4166665 -60.2499995 -31.0833335 -30.9166665 18 0 2670 --60.2500005 -60.0833335 -31.0833335 -30.9166665 19 0 2670 --60.0833335 -59.9166665 -31.0833335 -30.9166665 15 0 2670 --59.9166665 -59.7499995 -31.0833335 -30.9166665 57 0 2670 --59.7500005 -59.5833335 -31.0833335 -30.9166665 28 0 2670 --59.5833335 -59.4166665 -31.0833335 -30.9166665 57 0 2670 --59.4166665 -59.2499995 -31.0833335 -30.9166665 55 0 2670 --59.2500005 -59.0833335 -31.0833335 -30.9166665 64 0 2670 --59.0833335 -58.9166665 -31.0833335 -30.9166665 70 0 2670 --58.9166665 -58.7499995 -31.0833335 -30.9166665 64 0 2670 --58.7500005 -58.5833335 -31.0833335 -30.9166665 66 0 2670 --58.5833335 -58.4166665 -31.0833335 -30.9166665 57 0 2670 --58.4166665 -58.2499995 -31.0833335 -30.9166665 61 0 2670 --58.2500005 -58.0833335 -31.0833335 -30.9166665 57 0 2670 --58.0833335 -57.9166665 -31.0833335 -30.9166665 53 0 2670 --57.9166665 -57.7499995 -31.0833335 -30.9166665 42 0 2670 --57.7500005 -57.5833335 -31.0833335 -30.9166665 67 0 2670 --57.5833335 -57.4166665 -31.0833335 -30.9166665 47 0 2670 --57.4166665 -57.2499995 -31.0833335 -30.9166665 94 0 2670 --57.2500005 -57.0833335 -31.0833335 -30.9166665 73 0 2670 --57.0833335 -56.9166665 -31.0833335 -30.9166665 140 0 2670 --56.9166665 -56.7499995 -31.0833335 -30.9166665 140 0 2670 --56.7500005 -56.5833335 -31.0833335 -30.9166665 184 0 2670 --56.5833335 -56.4166665 -31.0833335 -30.9166665 184 0 2670 --56.4166665 -56.2499995 -31.0833335 -30.9166665 220 0 2670 --56.2500005 -56.0833335 -31.0833335 -30.9166665 292 0 2670 --56.0833335 -55.9166665 -31.0833335 -30.9166665 262 0 2670 --55.9166665 -55.7499995 -31.0833335 -30.9166665 331 0 2670 --55.7500005 -55.5833335 -31.0833335 -30.9166665 214 0 2670 --55.5833335 -55.4166665 -31.0833335 -30.9166665 212 0 2670 --55.4166665 -55.2499995 -31.0833335 -30.9166665 155 0 2670 --55.2500005 -55.0833335 -31.0833335 -30.9166665 133 0 2670 --55.0833335 -54.9166665 -31.0833335 -30.9166665 145 0 2670 --54.9166665 -54.7499995 -31.0833335 -30.9166665 155 0 2670 --54.7500005 -54.5833335 -31.0833335 -30.9166665 133 0 2670 --54.5833335 -54.4166665 -31.0833335 -30.9166665 222 0 2670 --54.4166665 -54.2499995 -31.0833335 -30.9166665 306 0 2670 --54.2500005 -54.0833335 -31.0833335 -30.9166665 361 0 2670 --54.0833335 -53.9166665 -31.0833335 -30.9166665 317 0 2670 --53.9166665 -53.7499995 -31.0833335 -30.9166665 323 0 2670 --53.7500005 -53.5833335 -31.0833335 -30.9166665 285 0 2670 --53.5833335 -53.4166665 -31.0833335 -30.9166665 214 0 2670 --53.4166665 -53.2499995 -31.0833335 -30.9166665 133 0 2670 --53.2500005 -53.0833335 -31.0833335 -30.9166665 159 0 2670 --53.0833335 -52.9166665 -31.0833335 -30.9166665 235 0 2670 --52.9166665 -52.7499995 -31.0833335 -30.9166665 226 0 2670 --52.7500005 -52.5833335 -31.0833335 -30.9166665 70 0 2670 --52.5833335 -52.4166665 -31.0833335 -30.9166665 85 0 2670 --52.4166665 -52.2499995 -31.0833335 -30.9166665 61 0 2670 --52.2500005 -52.0833335 -31.0833335 -30.9166665 31 0 2670 --52.0833335 -51.9166665 -31.0833335 -30.9166665 22 0 2670 --51.9166665 -51.7499995 -31.0833335 -30.9166665 18 0 2670 --51.7500005 -51.5833335 -31.0833335 -30.9166665 12 0 2670 --51.5833335 -51.4166665 -31.0833335 -30.9166665 3 0 2670 --51.4166665 -51.2499995 -31.0833335 -30.9166665 0 -6 -1670 --51.2500005 -51.0833335 -31.0833335 -30.9166665 0 -5 -1670 --51.0833335 -50.9166665 -31.0833335 -30.9166665 0 -1 -1670 --50.9166665 -50.7499995 -31.0833335 -30.9166665 12 0 2670 --50.7500005 -50.5833335 -31.0833335 -30.9166665 0 -6 -1670 --50.5833335 -50.4166665 -31.0833335 -30.9166665 0 -40 -1670 --50.4166665 -50.2499995 -31.0833335 -30.9166665 0 -73 -1670 --50.2500005 -50.0833335 -31.0833335 -30.9166665 0 -97 -1670 --50.0833335 -49.9166665 -31.0833335 -30.9166665 0 -110 -1670 --49.9166665 -49.7499995 -31.0833335 -30.9166665 0 -130 -1670 --49.7500005 -49.5833335 -31.0833335 -30.9166665 0 -171 -1670 --49.5833335 -49.4166665 -31.0833335 -30.9166665 0 -157 -1670 --49.4166665 -49.2499995 -31.0833335 -30.9166665 0 -340 -1670 --49.2500005 -49.0833335 -31.0833335 -30.9166665 0 -1096 -1670 --49.0833335 -48.9166665 -31.0833335 -30.9166665 0 -1567 -1670 --48.9166665 -48.7499995 -31.0833335 -30.9166665 0 -1759 -1670 --48.7500005 -48.5833335 -31.0833335 -30.9166665 0 -2002 -1670 --48.5833335 -48.4166665 -31.0833335 -30.9166665 0 -2264 -1670 --48.4166665 -48.2499995 -31.0833335 -30.9166665 0 -2518 -1670 --48.2500005 -48.0833335 -31.0833335 -30.9166665 0 -2606 -1670 --48.0833335 -47.9166665 -31.0833335 -30.9166665 0 -2768 -1670 --47.9166665 -47.7499995 -31.0833335 -30.9166665 0 -2662 -1670 --47.7500005 -47.5833335 -31.0833335 -30.9166665 0 -2817 -1670 --47.5833335 -47.4166665 -31.0833335 -30.9166665 0 -2941 -1670 --47.4166665 -47.2499995 -31.0833335 -30.9166665 0 -3094 -1670 --47.2500005 -47.0833335 -31.0833335 -30.9166665 0 -3239 -1670 --47.0833335 -46.9166665 -31.0833335 -30.9166665 0 -3312 -1670 --46.9166665 -46.7499995 -31.0833335 -30.9166665 0 -3204 -1670 --46.7500005 -46.5833335 -31.0833335 -30.9166665 0 -3363 -1670 --46.5833335 -46.4166665 -31.0833335 -30.9166665 0 -3384 -1670 --46.4166665 -46.2499995 -31.0833335 -30.9166665 0 -3388 -1670 --46.2500005 -46.0833335 -31.0833335 -30.9166665 0 -3299 -1670 --46.0833335 -45.9166665 -31.0833335 -30.9166665 0 -3375 -1670 --45.9166665 -45.7499995 -31.0833335 -30.9166665 0 -3468 -1670 --45.7500005 -45.5833335 -31.0833335 -30.9166665 0 -3465 -1670 --45.5833335 -45.4166665 -31.0833335 -30.9166665 0 -3512 -1670 --45.4166665 -45.2499995 -31.0833335 -30.9166665 0 -3544 -1670 --45.2500005 -45.0833335 -31.0833335 -30.9166665 0 -3512 -1670 --45.0833335 -44.9166665 -31.0833335 -30.9166665 0 -3497 -1670 --44.9166665 -44.7499995 -31.0833335 -30.9166665 0 -3504 -1670 --44.7500005 -44.5833335 -31.0833335 -30.9166665 0 -3432 -1670 --44.5833335 -44.4166665 -31.0833335 -30.9166665 0 -3453 -1670 --44.4166665 -44.2499995 -31.0833335 -30.9166665 0 -3451 -1670 --44.2500005 -44.0833335 -31.0833335 -30.9166665 0 -3394 -1670 --44.0833335 -43.9166665 -31.0833335 -30.9166665 0 -3352 -1670 --43.9166665 -43.7499995 -31.0833335 -30.9166665 0 -3461 -1670 --43.7500005 -43.5833335 -31.0833335 -30.9166665 0 -3384 -1670 --43.5833335 -43.4166665 -31.0833335 -30.9166665 0 -3592 -1670 --43.4166665 -43.2499995 -31.0833335 -30.9166665 0 -3838 -1670 --43.2500005 -43.0833335 -31.0833335 -30.9166665 0 -3956 -1670 --43.0833335 -42.9166665 -31.0833335 -30.9166665 0 -3848 -1670 --42.9166665 -42.7499995 -31.0833335 -30.9166665 0 -3902 -1670 --42.7500005 -42.5833335 -31.0833335 -30.9166665 0 -3786 -1670 --42.5833335 -42.4166665 -31.0833335 -30.9166665 0 -3771 -1670 --42.4166665 -42.2499995 -31.0833335 -30.9166665 0 -3726 -1670 --42.2500005 -42.0833335 -31.0833335 -30.9166665 0 -3762 -1670 --42.0833335 -41.9166665 -31.0833335 -30.9166665 0 -3765 -1670 --41.9166665 -41.7499995 -31.0833335 -30.9166665 0 -3732 -1670 --41.7500005 -41.5833335 -31.0833335 -30.9166665 0 -3794 -1670 --41.5833335 -41.4166665 -31.0833335 -30.9166665 0 -3697 -1670 --41.4166665 -41.2499995 -31.0833335 -30.9166665 0 -3707 -1670 --41.2500005 -41.0833335 -31.0833335 -30.9166665 0 -3902 -1670 --41.0833335 -40.9166665 -31.0833335 -30.9166665 0 -3651 -1670 --40.9166665 -40.7499995 -31.0833335 -30.9166665 0 -3748 -1670 --40.7500005 -40.5833335 -31.0833335 -30.9166665 0 -3991 -1670 --40.5833335 -40.4166665 -31.0833335 -30.9166665 0 -3858 -1670 --40.4166665 -40.2499995 -31.0833335 -30.9166665 0 -3782 -1670 --40.2500005 -40.0833335 -31.0833335 -30.9166665 0 -3702 -1670 --40.0833335 -39.9166665 -31.0833335 -30.9166665 0 -3744 -1670 --65.0833335 -64.9166665 -31.2500005 -31.0833335 980 0 2670 --64.9166665 -64.7499995 -31.2500005 -31.0833335 1592 0 2670 --64.7500005 -64.5833335 -31.2500005 -31.0833335 1327 0 2670 --64.5833335 -64.4166665 -31.2500005 -31.0833335 839 0 2670 --64.4166665 -64.2499995 -31.2500005 -31.0833335 783 0 2670 --64.2500005 -64.0833335 -31.2500005 -31.0833335 533 0 2670 --64.0833335 -63.9166665 -31.2500005 -31.0833335 398 0 2670 --63.9166665 -63.7499995 -31.2500005 -31.0833335 305 0 2670 --63.7500005 -63.5833335 -31.2500005 -31.0833335 234 0 2670 --63.5833335 -63.4166665 -31.2500005 -31.0833335 184 0 2670 --63.4166665 -63.2499995 -31.2500005 -31.0833335 162 0 2670 --63.2500005 -63.0833335 -31.2500005 -31.0833335 138 0 2670 --63.0833335 -62.9166665 -31.2500005 -31.0833335 123 0 2670 --62.9166665 -62.7499995 -31.2500005 -31.0833335 106 0 2670 --62.7500005 -62.5833335 -31.2500005 -31.0833335 96 0 2670 --62.5833335 -62.4166665 -31.2500005 -31.0833335 89 0 2670 --62.4166665 -62.2499995 -31.2500005 -31.0833335 109 0 2670 --62.2500005 -62.0833335 -31.2500005 -31.0833335 109 0 2670 --62.0833335 -61.9166665 -31.2500005 -31.0833335 106 0 2670 --61.9166665 -61.7499995 -31.2500005 -31.0833335 100 0 2670 --61.7500005 -61.5833335 -31.2500005 -31.0833335 103 0 2670 --61.5833335 -61.4166665 -31.2500005 -31.0833335 97 0 2670 --61.4166665 -61.2499995 -31.2500005 -31.0833335 69 0 2670 --61.2500005 -61.0833335 -31.2500005 -31.0833335 57 0 2670 --61.0833335 -60.9166665 -31.2500005 -31.0833335 49 0 2670 --60.9166665 -60.7499995 -31.2500005 -31.0833335 26 0 2670 --60.7500005 -60.5833335 -31.2500005 -31.0833335 25 0 2670 --60.5833335 -60.4166665 -31.2500005 -31.0833335 19 0 2670 --60.4166665 -60.2499995 -31.2500005 -31.0833335 17 0 2670 --60.2500005 -60.0833335 -31.2500005 -31.0833335 20 0 2670 --60.0833335 -59.9166665 -31.2500005 -31.0833335 16 0 2670 --59.9166665 -59.7499995 -31.2500005 -31.0833335 61 0 2670 --59.7500005 -59.5833335 -31.2500005 -31.0833335 58 0 2670 --59.5833335 -59.4166665 -31.2500005 -31.0833335 57 0 2670 --59.4166665 -59.2499995 -31.2500005 -31.0833335 66 0 2670 --59.2500005 -59.0833335 -31.2500005 -31.0833335 72 0 2670 --59.0833335 -58.9166665 -31.2500005 -31.0833335 60 0 2670 --58.9166665 -58.7499995 -31.2500005 -31.0833335 50 0 2670 --58.7500005 -58.5833335 -31.2500005 -31.0833335 59 0 2670 --58.5833335 -58.4166665 -31.2500005 -31.0833335 60 0 2670 --58.4166665 -58.2499995 -31.2500005 -31.0833335 64 0 2670 --58.2500005 -58.0833335 -31.2500005 -31.0833335 53 0 2670 --58.0833335 -57.9166665 -31.2500005 -31.0833335 34 0 2670 --57.9166665 -57.7499995 -31.2500005 -31.0833335 50 0 2670 --57.7500005 -57.5833335 -31.2500005 -31.0833335 69 0 2670 --57.5833335 -57.4166665 -31.2500005 -31.0833335 79 0 2670 --57.4166665 -57.2499995 -31.2500005 -31.0833335 65 0 2670 --57.2500005 -57.0833335 -31.2500005 -31.0833335 70 0 2670 --57.0833335 -56.9166665 -31.2500005 -31.0833335 97 0 2670 --56.9166665 -56.7499995 -31.2500005 -31.0833335 90 0 2670 --56.7500005 -56.5833335 -31.2500005 -31.0833335 109 0 2670 --56.5833335 -56.4166665 -31.2500005 -31.0833335 200 0 2670 --56.4166665 -56.2499995 -31.2500005 -31.0833335 224 0 2670 --56.2500005 -56.0833335 -31.2500005 -31.0833335 252 0 2670 --56.0833335 -55.9166665 -31.2500005 -31.0833335 295 0 2670 --55.9166665 -55.7499995 -31.2500005 -31.0833335 219 0 2670 --55.7500005 -55.5833335 -31.2500005 -31.0833335 198 0 2670 --55.5833335 -55.4166665 -31.2500005 -31.0833335 170 0 2670 --55.4166665 -55.2499995 -31.2500005 -31.0833335 182 0 2670 --55.2500005 -55.0833335 -31.2500005 -31.0833335 144 0 2670 --55.0833335 -54.9166665 -31.2500005 -31.0833335 168 0 2670 --54.9166665 -54.7499995 -31.2500005 -31.0833335 166 0 2670 --54.7500005 -54.5833335 -31.2500005 -31.0833335 148 0 2670 --54.5833335 -54.4166665 -31.2500005 -31.0833335 200 0 2670 --54.4166665 -54.2499995 -31.2500005 -31.0833335 283 0 2670 --54.2500005 -54.0833335 -31.2500005 -31.0833335 353 0 2670 --54.0833335 -53.9166665 -31.2500005 -31.0833335 350 0 2670 --53.9166665 -53.7499995 -31.2500005 -31.0833335 307 0 2670 --53.7500005 -53.5833335 -31.2500005 -31.0833335 331 0 2670 --53.5833335 -53.4166665 -31.2500005 -31.0833335 215 0 2670 --53.4166665 -53.2499995 -31.2500005 -31.0833335 203 0 2670 --53.2500005 -53.0833335 -31.2500005 -31.0833335 217 0 2670 --53.0833335 -52.9166665 -31.2500005 -31.0833335 159 0 2670 --52.9166665 -52.7499995 -31.2500005 -31.0833335 316 0 2670 --52.7500005 -52.5833335 -31.2500005 -31.0833335 297 0 2670 --52.5833335 -52.4166665 -31.2500005 -31.0833335 281 0 2670 --52.4166665 -52.2499995 -31.2500005 -31.0833335 227 0 2670 --52.2500005 -52.0833335 -31.2500005 -31.0833335 94 0 2670 --52.0833335 -51.9166665 -31.2500005 -31.0833335 49 0 2670 --51.9166665 -51.7499995 -31.2500005 -31.0833335 12 0 2670 --51.7500005 -51.5833335 -31.2500005 -31.0833335 4 0 2670 --51.5833335 -51.4166665 -31.2500005 -31.0833335 0 -5 -1670 --51.4166665 -51.2499995 -31.2500005 -31.0833335 0 -6 -1670 --51.2500005 -51.0833335 -31.2500005 -31.0833335 4 0 2670 --51.0833335 -50.9166665 -31.2500005 -31.0833335 2 0 2670 --50.9166665 -50.7499995 -31.2500005 -31.0833335 9 0 2670 --50.7500005 -50.5833335 -31.2500005 -31.0833335 0 -30 -1670 --50.5833335 -50.4166665 -31.2500005 -31.0833335 0 -64 -1670 --50.4166665 -50.2499995 -31.2500005 -31.0833335 0 -97 -1670 --50.2500005 -50.0833335 -31.2500005 -31.0833335 0 -113 -1670 --50.0833335 -49.9166665 -31.2500005 -31.0833335 0 -133 -1670 --49.9166665 -49.7499995 -31.2500005 -31.0833335 0 -146 -1670 --49.7500005 -49.5833335 -31.2500005 -31.0833335 0 -134 -1670 --49.5833335 -49.4166665 -31.2500005 -31.0833335 0 -199 -1670 --49.4166665 -49.2499995 -31.2500005 -31.0833335 0 -1252 -1670 --49.2500005 -49.0833335 -31.2500005 -31.0833335 0 -1609 -1670 --49.0833335 -48.9166665 -31.2500005 -31.0833335 0 -1905 -1670 --48.9166665 -48.7499995 -31.2500005 -31.0833335 0 -2143 -1670 --48.7500005 -48.5833335 -31.2500005 -31.0833335 0 -2335 -1670 --48.5833335 -48.4166665 -31.2500005 -31.0833335 0 -2582 -1670 --48.4166665 -48.2499995 -31.2500005 -31.0833335 0 -2667 -1670 --48.2500005 -48.0833335 -31.2500005 -31.0833335 0 -2811 -1670 --48.0833335 -47.9166665 -31.2500005 -31.0833335 0 -2722 -1670 --47.9166665 -47.7499995 -31.2500005 -31.0833335 0 -2815 -1670 --47.7500005 -47.5833335 -31.2500005 -31.0833335 0 -2966 -1670 --47.5833335 -47.4166665 -31.2500005 -31.0833335 0 -3086 -1670 --47.4166665 -47.2499995 -31.2500005 -31.0833335 0 -3122 -1670 --47.2500005 -47.0833335 -31.2500005 -31.0833335 0 -3160 -1670 --47.0833335 -46.9166665 -31.2500005 -31.0833335 0 -3239 -1670 --46.9166665 -46.7499995 -31.2500005 -31.0833335 0 -3428 -1670 --46.7500005 -46.5833335 -31.2500005 -31.0833335 0 -3436 -1670 --46.5833335 -46.4166665 -31.2500005 -31.0833335 0 -3388 -1670 --46.4166665 -46.2499995 -31.2500005 -31.0833335 0 -3301 -1670 --46.2500005 -46.0833335 -31.2500005 -31.0833335 0 -3365 -1670 --46.0833335 -45.9166665 -31.2500005 -31.0833335 0 -3413 -1670 --45.9166665 -45.7499995 -31.2500005 -31.0833335 0 -3485 -1670 --45.7500005 -45.5833335 -31.2500005 -31.0833335 0 -3546 -1670 --45.5833335 -45.4166665 -31.2500005 -31.0833335 0 -3531 -1670 --45.4166665 -45.2499995 -31.2500005 -31.0833335 0 -3548 -1670 --45.2500005 -45.0833335 -31.2500005 -31.0833335 0 -3538 -1670 --45.0833335 -44.9166665 -31.2500005 -31.0833335 0 -3527 -1670 --44.9166665 -44.7499995 -31.2500005 -31.0833335 0 -3568 -1670 --44.7500005 -44.5833335 -31.2500005 -31.0833335 0 -3519 -1670 --44.5833335 -44.4166665 -31.2500005 -31.0833335 0 -3553 -1670 --44.4166665 -44.2499995 -31.2500005 -31.0833335 0 -3575 -1670 --44.2500005 -44.0833335 -31.2500005 -31.0833335 0 -3512 -1670 --44.0833335 -43.9166665 -31.2500005 -31.0833335 0 -3446 -1670 --43.9166665 -43.7499995 -31.2500005 -31.0833335 0 -3385 -1670 --43.7500005 -43.5833335 -31.2500005 -31.0833335 0 -3414 -1670 --43.5833335 -43.4166665 -31.2500005 -31.0833335 0 -3704 -1670 --43.4166665 -43.2499995 -31.2500005 -31.0833335 0 -3931 -1670 --43.2500005 -43.0833335 -31.2500005 -31.0833335 0 -3970 -1670 --43.0833335 -42.9166665 -31.2500005 -31.0833335 0 -3873 -1670 --42.9166665 -42.7499995 -31.2500005 -31.0833335 0 -3854 -1670 --42.7500005 -42.5833335 -31.2500005 -31.0833335 0 -3891 -1670 --42.5833335 -42.4166665 -31.2500005 -31.0833335 0 -3816 -1670 --42.4166665 -42.2499995 -31.2500005 -31.0833335 0 -3677 -1670 --42.2500005 -42.0833335 -31.2500005 -31.0833335 0 -3751 -1670 --42.0833335 -41.9166665 -31.2500005 -31.0833335 0 -3816 -1670 --41.9166665 -41.7499995 -31.2500005 -31.0833335 0 -3750 -1670 --41.7500005 -41.5833335 -31.2500005 -31.0833335 0 -3701 -1670 --41.5833335 -41.4166665 -31.2500005 -31.0833335 0 -3827 -1670 --41.4166665 -41.2499995 -31.2500005 -31.0833335 0 -3845 -1670 --41.2500005 -41.0833335 -31.2500005 -31.0833335 0 -4058 -1670 --41.0833335 -40.9166665 -31.2500005 -31.0833335 0 -3994 -1670 --40.9166665 -40.7499995 -31.2500005 -31.0833335 0 -3861 -1670 --40.7500005 -40.5833335 -31.2500005 -31.0833335 0 -3790 -1670 --40.5833335 -40.4166665 -31.2500005 -31.0833335 0 -3761 -1670 --40.4166665 -40.2499995 -31.2500005 -31.0833335 0 -3762 -1670 --40.2500005 -40.0833335 -31.2500005 -31.0833335 0 -3748 -1670 --40.0833335 -39.9166665 -31.2500005 -31.0833335 0 -3697 -1670 --65.0833335 -64.9166665 -31.4166665 -31.2499995 1161 0 2670 --64.9166665 -64.7499995 -31.4166665 -31.2499995 1740 0 2670 --64.7500005 -64.5833335 -31.4166665 -31.2499995 1299 0 2670 --64.5833335 -64.4166665 -31.4166665 -31.2499995 691 0 2670 --64.4166665 -64.2499995 -31.4166665 -31.2499995 496 0 2670 --64.2500005 -64.0833335 -31.4166665 -31.2499995 443 0 2670 --64.0833335 -63.9166665 -31.4166665 -31.2499995 371 0 2670 --63.9166665 -63.7499995 -31.4166665 -31.2499995 312 0 2670 --63.7500005 -63.5833335 -31.4166665 -31.2499995 258 0 2670 --63.5833335 -63.4166665 -31.4166665 -31.2499995 218 0 2670 --63.4166665 -63.2499995 -31.4166665 -31.2499995 187 0 2670 --63.2500005 -63.0833335 -31.4166665 -31.2499995 161 0 2670 --63.0833335 -62.9166665 -31.4166665 -31.2499995 138 0 2670 --62.9166665 -62.7499995 -31.4166665 -31.2499995 123 0 2670 --62.7500005 -62.5833335 -31.4166665 -31.2499995 107 0 2670 --62.5833335 -62.4166665 -31.4166665 -31.2499995 98 0 2670 --62.4166665 -62.2499995 -31.4166665 -31.2499995 111 0 2670 --62.2500005 -62.0833335 -31.4166665 -31.2499995 116 0 2670 --62.0833335 -61.9166665 -31.4166665 -31.2499995 106 0 2670 --61.9166665 -61.7499995 -31.4166665 -31.2499995 106 0 2670 --61.7500005 -61.5833335 -31.4166665 -31.2499995 100 0 2670 --61.5833335 -61.4166665 -31.4166665 -31.2499995 91 0 2670 --61.4166665 -61.2499995 -31.4166665 -31.2499995 63 0 2670 --61.2500005 -61.0833335 -31.4166665 -31.2499995 48 0 2670 --61.0833335 -60.9166665 -31.4166665 -31.2499995 32 0 2670 --60.9166665 -60.7499995 -31.4166665 -31.2499995 34 0 2670 --60.7500005 -60.5833335 -31.4166665 -31.2499995 21 0 2670 --60.5833335 -60.4166665 -31.4166665 -31.2499995 15 0 2670 --60.4166665 -60.2499995 -31.4166665 -31.2499995 16 0 2670 --60.2500005 -60.0833335 -31.4166665 -31.2499995 17 0 2670 --60.0833335 -59.9166665 -31.4166665 -31.2499995 76 0 2670 --59.9166665 -59.7499995 -31.4166665 -31.2499995 68 0 2670 --59.7500005 -59.5833335 -31.4166665 -31.2499995 61 0 2670 --59.5833335 -59.4166665 -31.4166665 -31.2499995 71 0 2670 --59.4166665 -59.2499995 -31.4166665 -31.2499995 67 0 2670 --59.2500005 -59.0833335 -31.4166665 -31.2499995 65 0 2670 --59.0833335 -58.9166665 -31.4166665 -31.2499995 50 0 2670 --58.9166665 -58.7499995 -31.4166665 -31.2499995 66 0 2670 --58.7500005 -58.5833335 -31.4166665 -31.2499995 65 0 2670 --58.5833335 -58.4166665 -31.4166665 -31.2499995 61 0 2670 --58.4166665 -58.2499995 -31.4166665 -31.2499995 45 0 2670 --58.2500005 -58.0833335 -31.4166665 -31.2499995 46 0 2670 --58.0833335 -57.9166665 -31.4166665 -31.2499995 21 0 2670 --57.9166665 -57.7499995 -31.4166665 -31.2499995 53 0 2670 --57.7500005 -57.5833335 -31.4166665 -31.2499995 62 0 2670 --57.5833335 -57.4166665 -31.4166665 -31.2499995 93 0 2670 --57.4166665 -57.2499995 -31.4166665 -31.2499995 104 0 2670 --57.2500005 -57.0833335 -31.4166665 -31.2499995 82 0 2670 --57.0833335 -56.9166665 -31.4166665 -31.2499995 87 0 2670 --56.9166665 -56.7499995 -31.4166665 -31.2499995 103 0 2670 --56.7500005 -56.5833335 -31.4166665 -31.2499995 221 0 2670 --56.5833335 -56.4166665 -31.4166665 -31.2499995 176 0 2670 --56.4166665 -56.2499995 -31.4166665 -31.2499995 189 0 2670 --56.2500005 -56.0833335 -31.4166665 -31.2499995 378 0 2670 --56.0833335 -55.9166665 -31.4166665 -31.2499995 255 0 2670 --55.9166665 -55.7499995 -31.4166665 -31.2499995 159 0 2670 --55.7500005 -55.5833335 -31.4166665 -31.2499995 169 0 2670 --55.5833335 -55.4166665 -31.4166665 -31.2499995 159 0 2670 --55.4166665 -55.2499995 -31.4166665 -31.2499995 188 0 2670 --55.2500005 -55.0833335 -31.4166665 -31.2499995 172 0 2670 --55.0833335 -54.9166665 -31.4166665 -31.2499995 198 0 2670 --54.9166665 -54.7499995 -31.4166665 -31.2499995 165 0 2670 --54.7500005 -54.5833335 -31.4166665 -31.2499995 185 0 2670 --54.5833335 -54.4166665 -31.4166665 -31.2499995 167 0 2670 --54.4166665 -54.2499995 -31.4166665 -31.2499995 158 0 2670 --54.2500005 -54.0833335 -31.4166665 -31.2499995 248 0 2670 --54.0833335 -53.9166665 -31.4166665 -31.2499995 225 0 2670 --53.9166665 -53.7499995 -31.4166665 -31.2499995 339 0 2670 --53.7500005 -53.5833335 -31.4166665 -31.2499995 350 0 2670 --53.5833335 -53.4166665 -31.4166665 -31.2499995 362 0 2670 --53.4166665 -53.2499995 -31.4166665 -31.2499995 283 0 2670 --53.2500005 -53.0833335 -31.4166665 -31.2499995 325 0 2670 --53.0833335 -52.9166665 -31.4166665 -31.2499995 396 0 2670 --52.9166665 -52.7499995 -31.4166665 -31.2499995 399 0 2670 --52.7500005 -52.5833335 -31.4166665 -31.2499995 405 0 2670 --52.5833335 -52.4166665 -31.4166665 -31.2499995 184 0 2670 --52.4166665 -52.2499995 -31.4166665 -31.2499995 110 0 2670 --52.2500005 -52.0833335 -31.4166665 -31.2499995 105 0 2670 --52.0833335 -51.9166665 -31.4166665 -31.2499995 17 0 2670 --51.9166665 -51.7499995 -31.4166665 -31.2499995 0 -2 -1670 --51.7500005 -51.5833335 -31.4166665 -31.2499995 0 -6 -1670 --51.5833335 -51.4166665 -31.4166665 -31.2499995 0 -6 -1670 --51.4166665 -51.2499995 -31.4166665 -31.2499995 0 -5 -1670 --51.2500005 -51.0833335 -31.4166665 -31.2499995 4 0 2670 --51.0833335 -50.9166665 -31.4166665 -31.2499995 0 -1 -1670 --50.9166665 -50.7499995 -31.4166665 -31.2499995 0 -26 -1670 --50.7500005 -50.5833335 -31.4166665 -31.2499995 0 -62 -1670 --50.5833335 -50.4166665 -31.4166665 -31.2499995 0 -99 -1670 --50.4166665 -50.2499995 -31.4166665 -31.2499995 0 -98 -1670 --50.2500005 -50.0833335 -31.4166665 -31.2499995 0 -109 -1670 --50.0833335 -49.9166665 -31.4166665 -31.2499995 0 -148 -1670 --49.9166665 -49.7499995 -31.4166665 -31.2499995 0 -120 -1670 --49.7500005 -49.5833335 -31.4166665 -31.2499995 0 -452 -1670 --49.5833335 -49.4166665 -31.4166665 -31.2499995 0 -1250 -1670 --49.4166665 -49.2499995 -31.4166665 -31.2499995 0 -1662 -1670 --49.2500005 -49.0833335 -31.4166665 -31.2499995 0 -1850 -1670 --49.0833335 -48.9166665 -31.4166665 -31.2499995 0 -2170 -1670 --48.9166665 -48.7499995 -31.4166665 -31.2499995 0 -2359 -1670 --48.7500005 -48.5833335 -31.4166665 -31.2499995 0 -2526 -1670 --48.5833335 -48.4166665 -31.4166665 -31.2499995 0 -2717 -1670 --48.4166665 -48.2499995 -31.4166665 -31.2499995 0 -2850 -1670 --48.2500005 -48.0833335 -31.4166665 -31.2499995 0 -2828 -1670 --48.0833335 -47.9166665 -31.4166665 -31.2499995 0 -2814 -1670 --47.9166665 -47.7499995 -31.4166665 -31.2499995 0 -2911 -1670 --47.7500005 -47.5833335 -31.4166665 -31.2499995 0 -3157 -1670 --47.5833335 -47.4166665 -31.4166665 -31.2499995 0 -3236 -1670 --47.4166665 -47.2499995 -31.4166665 -31.2499995 0 -3240 -1670 --47.2500005 -47.0833335 -31.4166665 -31.2499995 0 -3244 -1670 --47.0833335 -46.9166665 -31.4166665 -31.2499995 0 -3378 -1670 --46.9166665 -46.7499995 -31.4166665 -31.2499995 0 -3367 -1670 --46.7500005 -46.5833335 -31.4166665 -31.2499995 0 -3370 -1670 --46.5833335 -46.4166665 -31.4166665 -31.2499995 0 -3304 -1670 --46.4166665 -46.2499995 -31.4166665 -31.2499995 0 -3388 -1670 --46.2500005 -46.0833335 -31.4166665 -31.2499995 0 -3416 -1670 --46.0833335 -45.9166665 -31.4166665 -31.2499995 0 -3459 -1670 --45.9166665 -45.7499995 -31.4166665 -31.2499995 0 -3494 -1670 --45.7500005 -45.5833335 -31.4166665 -31.2499995 0 -3566 -1670 --45.5833335 -45.4166665 -31.4166665 -31.2499995 0 -3572 -1670 --45.4166665 -45.2499995 -31.4166665 -31.2499995 0 -3560 -1670 --45.2500005 -45.0833335 -31.4166665 -31.2499995 0 -3548 -1670 --45.0833335 -44.9166665 -31.4166665 -31.2499995 0 -3550 -1670 --44.9166665 -44.7499995 -31.4166665 -31.2499995 0 -3569 -1670 --44.7500005 -44.5833335 -31.4166665 -31.2499995 0 -3590 -1670 --44.5833335 -44.4166665 -31.4166665 -31.2499995 0 -3599 -1670 --44.4166665 -44.2499995 -31.4166665 -31.2499995 0 -3612 -1670 --44.2500005 -44.0833335 -31.4166665 -31.2499995 0 -3572 -1670 --44.0833335 -43.9166665 -31.4166665 -31.2499995 0 -3515 -1670 --43.9166665 -43.7499995 -31.4166665 -31.2499995 0 -3499 -1670 --43.7500005 -43.5833335 -31.4166665 -31.2499995 0 -3420 -1670 --43.5833335 -43.4166665 -31.4166665 -31.2499995 0 -3592 -1670 --43.4166665 -43.2499995 -31.4166665 -31.2499995 0 -3810 -1670 --43.2500005 -43.0833335 -31.4166665 -31.2499995 0 -3694 -1670 --43.0833335 -42.9166665 -31.4166665 -31.2499995 0 -3839 -1670 --42.9166665 -42.7499995 -31.4166665 -31.2499995 0 -3791 -1670 --42.7500005 -42.5833335 -31.4166665 -31.2499995 0 -3759 -1670 --42.5833335 -42.4166665 -31.4166665 -31.2499995 0 -3894 -1670 --42.4166665 -42.2499995 -31.4166665 -31.2499995 0 -3740 -1670 --42.2500005 -42.0833335 -31.4166665 -31.2499995 0 -3707 -1670 --42.0833335 -41.9166665 -31.4166665 -31.2499995 0 -3685 -1670 --41.9166665 -41.7499995 -31.4166665 -31.2499995 0 -3763 -1670 --41.7500005 -41.5833335 -31.4166665 -31.2499995 0 -3639 -1670 --41.5833335 -41.4166665 -31.4166665 -31.2499995 0 -3845 -1670 --41.4166665 -41.2499995 -31.4166665 -31.2499995 0 -3847 -1670 --41.2500005 -41.0833335 -31.4166665 -31.2499995 0 -3957 -1670 --41.0833335 -40.9166665 -31.4166665 -31.2499995 0 -3700 -1670 --40.9166665 -40.7499995 -31.4166665 -31.2499995 0 -3868 -1670 --40.7500005 -40.5833335 -31.4166665 -31.2499995 0 -3727 -1670 --40.5833335 -40.4166665 -31.4166665 -31.2499995 0 -3699 -1670 --40.4166665 -40.2499995 -31.4166665 -31.2499995 0 -3675 -1670 --40.2500005 -40.0833335 -31.4166665 -31.2499995 0 -3654 -1670 --40.0833335 -39.9166665 -31.4166665 -31.2499995 0 -3675 -1670 --65.0833335 -64.9166665 -31.5833335 -31.4166665 1384 0 2670 --64.9166665 -64.7499995 -31.5833335 -31.4166665 2294 0 2670 --64.7500005 -64.5833335 -31.5833335 -31.4166665 1174 0 2670 --64.5833335 -64.4166665 -31.5833335 -31.4166665 875 0 2670 --64.4166665 -64.2499995 -31.5833335 -31.4166665 557 0 2670 --64.2500005 -64.0833335 -31.5833335 -31.4166665 439 0 2670 --64.0833335 -63.9166665 -31.5833335 -31.4166665 369 0 2670 --63.9166665 -63.7499995 -31.5833335 -31.4166665 320 0 2670 --63.7500005 -63.5833335 -31.5833335 -31.4166665 274 0 2670 --63.5833335 -63.4166665 -31.5833335 -31.4166665 237 0 2670 --63.4166665 -63.2499995 -31.5833335 -31.4166665 202 0 2670 --63.2500005 -63.0833335 -31.5833335 -31.4166665 171 0 2670 --63.0833335 -62.9166665 -31.5833335 -31.4166665 150 0 2670 --62.9166665 -62.7499995 -31.5833335 -31.4166665 129 0 2670 --62.7500005 -62.5833335 -31.5833335 -31.4166665 117 0 2670 --62.5833335 -62.4166665 -31.5833335 -31.4166665 107 0 2670 --62.4166665 -62.2499995 -31.5833335 -31.4166665 110 0 2670 --62.2500005 -62.0833335 -31.5833335 -31.4166665 108 0 2670 --62.0833335 -61.9166665 -31.5833335 -31.4166665 114 0 2670 --61.9166665 -61.7499995 -31.5833335 -31.4166665 106 0 2670 --61.7500005 -61.5833335 -31.5833335 -31.4166665 89 0 2670 --61.5833335 -61.4166665 -31.5833335 -31.4166665 76 0 2670 --61.4166665 -61.2499995 -31.5833335 -31.4166665 64 0 2670 --61.2500005 -61.0833335 -31.5833335 -31.4166665 51 0 2670 --61.0833335 -60.9166665 -31.5833335 -31.4166665 41 0 2670 --60.9166665 -60.7499995 -31.5833335 -31.4166665 27 0 2670 --60.7500005 -60.5833335 -31.5833335 -31.4166665 17 0 2670 --60.5833335 -60.4166665 -31.5833335 -31.4166665 15 0 2670 --60.4166665 -60.2499995 -31.5833335 -31.4166665 15 0 2670 --60.2500005 -60.0833335 -31.5833335 -31.4166665 68 0 2670 --60.0833335 -59.9166665 -31.5833335 -31.4166665 76 0 2670 --59.9166665 -59.7499995 -31.5833335 -31.4166665 85 0 2670 --59.7500005 -59.5833335 -31.5833335 -31.4166665 67 0 2670 --59.5833335 -59.4166665 -31.5833335 -31.4166665 68 0 2670 --59.4166665 -59.2499995 -31.5833335 -31.4166665 56 0 2670 --59.2500005 -59.0833335 -31.5833335 -31.4166665 62 0 2670 --59.0833335 -58.9166665 -31.5833335 -31.4166665 52 0 2670 --58.9166665 -58.7499995 -31.5833335 -31.4166665 69 0 2670 --58.7500005 -58.5833335 -31.5833335 -31.4166665 69 0 2670 --58.5833335 -58.4166665 -31.5833335 -31.4166665 67 0 2670 --58.4166665 -58.2499995 -31.5833335 -31.4166665 47 0 2670 --58.2500005 -58.0833335 -31.5833335 -31.4166665 38 0 2670 --58.0833335 -57.9166665 -31.5833335 -31.4166665 17 0 2670 --57.9166665 -57.7499995 -31.5833335 -31.4166665 45 0 2670 --57.7500005 -57.5833335 -31.5833335 -31.4166665 57 0 2670 --57.5833335 -57.4166665 -31.5833335 -31.4166665 81 0 2670 --57.4166665 -57.2499995 -31.5833335 -31.4166665 117 0 2670 --57.2500005 -57.0833335 -31.5833335 -31.4166665 123 0 2670 --57.0833335 -56.9166665 -31.5833335 -31.4166665 122 0 2670 --56.9166665 -56.7499995 -31.5833335 -31.4166665 133 0 2670 --56.7500005 -56.5833335 -31.5833335 -31.4166665 208 0 2670 --56.5833335 -56.4166665 -31.5833335 -31.4166665 164 0 2670 --56.4166665 -56.2499995 -31.5833335 -31.4166665 267 0 2670 --56.2500005 -56.0833335 -31.5833335 -31.4166665 203 0 2670 --56.0833335 -55.9166665 -31.5833335 -31.4166665 165 0 2670 --55.9166665 -55.7499995 -31.5833335 -31.4166665 165 0 2670 --55.7500005 -55.5833335 -31.5833335 -31.4166665 153 0 2670 --55.5833335 -55.4166665 -31.5833335 -31.4166665 165 0 2670 --55.4166665 -55.2499995 -31.5833335 -31.4166665 149 0 2670 --55.2500005 -55.0833335 -31.5833335 -31.4166665 173 0 2670 --55.0833335 -54.9166665 -31.5833335 -31.4166665 203 0 2670 --54.9166665 -54.7499995 -31.5833335 -31.4166665 198 0 2670 --54.7500005 -54.5833335 -31.5833335 -31.4166665 172 0 2670 --54.5833335 -54.4166665 -31.5833335 -31.4166665 150 0 2670 --54.4166665 -54.2499995 -31.5833335 -31.4166665 162 0 2670 --54.2500005 -54.0833335 -31.5833335 -31.4166665 151 0 2670 --54.0833335 -53.9166665 -31.5833335 -31.4166665 182 0 2670 --53.9166665 -53.7499995 -31.5833335 -31.4166665 168 0 2670 --53.7500005 -53.5833335 -31.5833335 -31.4166665 213 0 2670 --53.5833335 -53.4166665 -31.5833335 -31.4166665 332 0 2670 --53.4166665 -53.2499995 -31.5833335 -31.4166665 387 0 2670 --53.2500005 -53.0833335 -31.5833335 -31.4166665 314 0 2670 --53.0833335 -52.9166665 -31.5833335 -31.4166665 248 0 2670 --52.9166665 -52.7499995 -31.5833335 -31.4166665 287 0 2670 --52.7500005 -52.5833335 -31.5833335 -31.4166665 257 0 2670 --52.5833335 -52.4166665 -31.5833335 -31.4166665 152 0 2670 --52.4166665 -52.2499995 -31.5833335 -31.4166665 77 0 2670 --52.2500005 -52.0833335 -31.5833335 -31.4166665 13 0 2670 --52.0833335 -51.9166665 -31.5833335 -31.4166665 0 -1 -1670 --51.9166665 -51.7499995 -31.5833335 -31.4166665 0 -5 -1670 --51.7500005 -51.5833335 -31.5833335 -31.4166665 0 -6 -1670 --51.5833335 -51.4166665 -31.5833335 -31.4166665 0 -3 -1670 --51.4166665 -51.2499995 -31.5833335 -31.4166665 0 -1 -1670 --51.2500005 -51.0833335 -31.5833335 -31.4166665 0 -2 -1670 --51.0833335 -50.9166665 -31.5833335 -31.4166665 0 -21 -1670 --50.9166665 -50.7499995 -31.5833335 -31.4166665 0 -49 -1670 --50.7500005 -50.5833335 -31.5833335 -31.4166665 0 -69 -1670 --50.5833335 -50.4166665 -31.5833335 -31.4166665 0 -93 -1670 --50.4166665 -50.2499995 -31.5833335 -31.4166665 0 -116 -1670 --50.2500005 -50.0833335 -31.5833335 -31.4166665 0 -67 -1670 --50.0833335 -49.9166665 -31.5833335 -31.4166665 0 -157 -1670 --49.9166665 -49.7499995 -31.5833335 -31.4166665 0 -261 -1670 --49.7500005 -49.5833335 -31.5833335 -31.4166665 0 -1035 -1670 --49.5833335 -49.4166665 -31.5833335 -31.4166665 0 -1685 -1670 --49.4166665 -49.2499995 -31.5833335 -31.4166665 0 -2001 -1670 --49.2500005 -49.0833335 -31.5833335 -31.4166665 0 -2210 -1670 --49.0833335 -48.9166665 -31.5833335 -31.4166665 0 -2315 -1670 --48.9166665 -48.7499995 -31.5833335 -31.4166665 0 -2415 -1670 --48.7500005 -48.5833335 -31.5833335 -31.4166665 0 -2658 -1670 --48.5833335 -48.4166665 -31.5833335 -31.4166665 0 -2800 -1670 --48.4166665 -48.2499995 -31.5833335 -31.4166665 0 -2833 -1670 --48.2500005 -48.0833335 -31.5833335 -31.4166665 0 -2914 -1670 --48.0833335 -47.9166665 -31.5833335 -31.4166665 0 -2989 -1670 --47.9166665 -47.7499995 -31.5833335 -31.4166665 0 -3020 -1670 --47.7500005 -47.5833335 -31.5833335 -31.4166665 0 -3167 -1670 --47.5833335 -47.4166665 -31.5833335 -31.4166665 0 -3355 -1670 --47.4166665 -47.2499995 -31.5833335 -31.4166665 0 -3224 -1670 --47.2500005 -47.0833335 -31.5833335 -31.4166665 0 -3299 -1670 --47.0833335 -46.9166665 -31.5833335 -31.4166665 0 -3336 -1670 --46.9166665 -46.7499995 -31.5833335 -31.4166665 0 -3385 -1670 --46.7500005 -46.5833335 -31.5833335 -31.4166665 0 -3398 -1670 --46.5833335 -46.4166665 -31.5833335 -31.4166665 0 -3393 -1670 --46.4166665 -46.2499995 -31.5833335 -31.4166665 0 -3479 -1670 --46.2500005 -46.0833335 -31.5833335 -31.4166665 0 -3528 -1670 --46.0833335 -45.9166665 -31.5833335 -31.4166665 0 -3528 -1670 --45.9166665 -45.7499995 -31.5833335 -31.4166665 0 -3568 -1670 --45.7500005 -45.5833335 -31.5833335 -31.4166665 0 -3600 -1670 --45.5833335 -45.4166665 -31.5833335 -31.4166665 0 -3610 -1670 --45.4166665 -45.2499995 -31.5833335 -31.4166665 0 -3595 -1670 --45.2500005 -45.0833335 -31.5833335 -31.4166665 0 -3589 -1670 --45.0833335 -44.9166665 -31.5833335 -31.4166665 0 -3587 -1670 --44.9166665 -44.7499995 -31.5833335 -31.4166665 0 -3592 -1670 --44.7500005 -44.5833335 -31.5833335 -31.4166665 0 -3590 -1670 --44.5833335 -44.4166665 -31.5833335 -31.4166665 0 -3652 -1670 --44.4166665 -44.2499995 -31.5833335 -31.4166665 0 -3588 -1670 --44.2500005 -44.0833335 -31.5833335 -31.4166665 0 -3643 -1670 --44.0833335 -43.9166665 -31.5833335 -31.4166665 0 -3683 -1670 --43.9166665 -43.7499995 -31.5833335 -31.4166665 0 -3679 -1670 --43.7500005 -43.5833335 -31.5833335 -31.4166665 0 -3634 -1670 --43.5833335 -43.4166665 -31.5833335 -31.4166665 0 -3763 -1670 --43.4166665 -43.2499995 -31.5833335 -31.4166665 0 -3772 -1670 --43.2500005 -43.0833335 -31.5833335 -31.4166665 0 -3797 -1670 --43.0833335 -42.9166665 -31.5833335 -31.4166665 0 -3871 -1670 --42.9166665 -42.7499995 -31.5833335 -31.4166665 0 -3805 -1670 --42.7500005 -42.5833335 -31.5833335 -31.4166665 0 -3762 -1670 --42.5833335 -42.4166665 -31.5833335 -31.4166665 0 -3712 -1670 --42.4166665 -42.2499995 -31.5833335 -31.4166665 0 -3892 -1670 --42.2500005 -42.0833335 -31.5833335 -31.4166665 0 -3669 -1670 --42.0833335 -41.9166665 -31.5833335 -31.4166665 0 -3716 -1670 --41.9166665 -41.7499995 -31.5833335 -31.4166665 0 -3613 -1670 --41.7500005 -41.5833335 -31.5833335 -31.4166665 0 -3680 -1670 --41.5833335 -41.4166665 -31.5833335 -31.4166665 0 -3699 -1670 --41.4166665 -41.2499995 -31.5833335 -31.4166665 0 -4031 -1670 --41.2500005 -41.0833335 -31.5833335 -31.4166665 0 -3834 -1670 --41.0833335 -40.9166665 -31.5833335 -31.4166665 0 -3713 -1670 --40.9166665 -40.7499995 -31.5833335 -31.4166665 0 -3674 -1670 --40.7500005 -40.5833335 -31.5833335 -31.4166665 0 -3719 -1670 --40.5833335 -40.4166665 -31.5833335 -31.4166665 0 -3680 -1670 --40.4166665 -40.2499995 -31.5833335 -31.4166665 0 -3807 -1670 --40.2500005 -40.0833335 -31.5833335 -31.4166665 0 -3683 -1670 --40.0833335 -39.9166665 -31.5833335 -31.4166665 0 -3686 -1670 --65.0833335 -64.9166665 -31.7500005 -31.5833335 1017 0 2670 --64.9166665 -64.7499995 -31.7500005 -31.5833335 2069 0 2670 --64.7500005 -64.5833335 -31.7500005 -31.5833335 1349 0 2670 --64.5833335 -64.4166665 -31.7500005 -31.5833335 848 0 2670 --64.4166665 -64.2499995 -31.7500005 -31.5833335 523 0 2670 --64.2500005 -64.0833335 -31.7500005 -31.5833335 401 0 2670 --64.0833335 -63.9166665 -31.7500005 -31.5833335 363 0 2670 --63.9166665 -63.7499995 -31.7500005 -31.5833335 322 0 2670 --63.7500005 -63.5833335 -31.7500005 -31.5833335 284 0 2670 --63.5833335 -63.4166665 -31.7500005 -31.5833335 247 0 2670 --63.4166665 -63.2499995 -31.7500005 -31.5833335 215 0 2670 --63.2500005 -63.0833335 -31.7500005 -31.5833335 184 0 2670 --63.0833335 -62.9166665 -31.7500005 -31.5833335 158 0 2670 --62.9166665 -62.7499995 -31.7500005 -31.5833335 141 0 2670 --62.7500005 -62.5833335 -31.7500005 -31.5833335 124 0 2670 --62.5833335 -62.4166665 -31.7500005 -31.5833335 114 0 2670 --62.4166665 -62.2499995 -31.7500005 -31.5833335 106 0 2670 --62.2500005 -62.0833335 -31.7500005 -31.5833335 108 0 2670 --62.0833335 -61.9166665 -31.7500005 -31.5833335 105 0 2670 --61.9166665 -61.7499995 -31.7500005 -31.5833335 115 0 2670 --61.7500005 -61.5833335 -31.7500005 -31.5833335 90 0 2670 --61.5833335 -61.4166665 -31.7500005 -31.5833335 62 0 2670 --61.4166665 -61.2499995 -31.7500005 -31.5833335 55 0 2670 --61.2500005 -61.0833335 -31.7500005 -31.5833335 43 0 2670 --61.0833335 -60.9166665 -31.7500005 -31.5833335 35 0 2670 --60.9166665 -60.7499995 -31.7500005 -31.5833335 20 0 2670 --60.7500005 -60.5833335 -31.7500005 -31.5833335 11 0 2670 --60.5833335 -60.4166665 -31.7500005 -31.5833335 12 0 2670 --60.4166665 -60.2499995 -31.7500005 -31.5833335 49 0 2670 --60.2500005 -60.0833335 -31.7500005 -31.5833335 91 0 2670 --60.0833335 -59.9166665 -31.7500005 -31.5833335 64 0 2670 --59.9166665 -59.7499995 -31.7500005 -31.5833335 85 0 2670 --59.7500005 -59.5833335 -31.7500005 -31.5833335 77 0 2670 --59.5833335 -59.4166665 -31.7500005 -31.5833335 52 0 2670 --59.4166665 -59.2499995 -31.7500005 -31.5833335 48 0 2670 --59.2500005 -59.0833335 -31.7500005 -31.5833335 42 0 2670 --59.0833335 -58.9166665 -31.7500005 -31.5833335 61 0 2670 --58.9166665 -58.7499995 -31.7500005 -31.5833335 50 0 2670 --58.7500005 -58.5833335 -31.7500005 -31.5833335 62 0 2670 --58.5833335 -58.4166665 -31.7500005 -31.5833335 66 0 2670 --58.4166665 -58.2499995 -31.7500005 -31.5833335 41 0 2670 --58.2500005 -58.0833335 -31.7500005 -31.5833335 30 0 2670 --58.0833335 -57.9166665 -31.7500005 -31.5833335 8 0 2670 --57.9166665 -57.7499995 -31.7500005 -31.5833335 60 0 2670 --57.7500005 -57.5833335 -31.7500005 -31.5833335 64 0 2670 --57.5833335 -57.4166665 -31.7500005 -31.5833335 67 0 2670 --57.4166665 -57.2499995 -31.7500005 -31.5833335 88 0 2670 --57.2500005 -57.0833335 -31.7500005 -31.5833335 134 0 2670 --57.0833335 -56.9166665 -31.7500005 -31.5833335 220 0 2670 --56.9166665 -56.7499995 -31.7500005 -31.5833335 245 0 2670 --56.7500005 -56.5833335 -31.7500005 -31.5833335 164 0 2670 --56.5833335 -56.4166665 -31.7500005 -31.5833335 209 0 2670 --56.4166665 -56.2499995 -31.7500005 -31.5833335 249 0 2670 --56.2500005 -56.0833335 -31.7500005 -31.5833335 167 0 2670 --56.0833335 -55.9166665 -31.7500005 -31.5833335 162 0 2670 --55.9166665 -55.7499995 -31.7500005 -31.5833335 141 0 2670 --55.7500005 -55.5833335 -31.7500005 -31.5833335 131 0 2670 --55.5833335 -55.4166665 -31.7500005 -31.5833335 112 0 2670 --55.4166665 -55.2499995 -31.7500005 -31.5833335 249 0 2670 --55.2500005 -55.0833335 -31.7500005 -31.5833335 249 0 2670 --55.0833335 -54.9166665 -31.7500005 -31.5833335 215 0 2670 --54.9166665 -54.7499995 -31.7500005 -31.5833335 174 0 2670 --54.7500005 -54.5833335 -31.7500005 -31.5833335 155 0 2670 --54.5833335 -54.4166665 -31.7500005 -31.5833335 136 0 2670 --54.4166665 -54.2499995 -31.7500005 -31.5833335 138 0 2670 --54.2500005 -54.0833335 -31.7500005 -31.5833335 169 0 2670 --54.0833335 -53.9166665 -31.7500005 -31.5833335 138 0 2670 --53.9166665 -53.7499995 -31.7500005 -31.5833335 160 0 2670 --53.7500005 -53.5833335 -31.7500005 -31.5833335 169 0 2670 --53.5833335 -53.4166665 -31.7500005 -31.5833335 339 0 2670 --53.4166665 -53.2499995 -31.7500005 -31.5833335 331 0 2670 --53.2500005 -53.0833335 -31.7500005 -31.5833335 242 0 2670 --53.0833335 -52.9166665 -31.7500005 -31.5833335 213 0 2670 --52.9166665 -52.7499995 -31.7500005 -31.5833335 168 0 2670 --52.7500005 -52.5833335 -31.7500005 -31.5833335 82 0 2670 --52.5833335 -52.4166665 -31.7500005 -31.5833335 69 0 2670 --52.4166665 -52.2499995 -31.7500005 -31.5833335 23 0 2670 --52.2500005 -52.0833335 -31.7500005 -31.5833335 7 0 2670 --52.0833335 -51.9166665 -31.7500005 -31.5833335 0 -3 -1670 --51.9166665 -51.7499995 -31.7500005 -31.5833335 0 -6 -1670 --51.7500005 -51.5833335 -31.7500005 -31.5833335 0 -4 -1670 --51.5833335 -51.4166665 -31.7500005 -31.5833335 5 0 2670 --51.4166665 -51.2499995 -31.7500005 -31.5833335 0 -3 -1670 --51.2500005 -51.0833335 -31.7500005 -31.5833335 0 -18 -1670 --51.0833335 -50.9166665 -31.7500005 -31.5833335 0 -39 -1670 --50.9166665 -50.7499995 -31.7500005 -31.5833335 0 -59 -1670 --50.7500005 -50.5833335 -31.7500005 -31.5833335 0 -81 -1670 --50.5833335 -50.4166665 -31.7500005 -31.5833335 0 -91 -1670 --50.4166665 -50.2499995 -31.7500005 -31.5833335 0 -129 -1670 --50.2500005 -50.0833335 -31.7500005 -31.5833335 0 -139 -1670 --50.0833335 -49.9166665 -31.7500005 -31.5833335 0 -135 -1670 --49.9166665 -49.7499995 -31.7500005 -31.5833335 0 -755 -1670 --49.7500005 -49.5833335 -31.7500005 -31.5833335 0 -1425 -1670 --49.5833335 -49.4166665 -31.7500005 -31.5833335 0 -1844 -1670 --49.4166665 -49.2499995 -31.7500005 -31.5833335 0 -2065 -1670 --49.2500005 -49.0833335 -31.7500005 -31.5833335 0 -2157 -1670 --49.0833335 -48.9166665 -31.7500005 -31.5833335 0 -2437 -1670 --48.9166665 -48.7499995 -31.7500005 -31.5833335 0 -2649 -1670 --48.7500005 -48.5833335 -31.7500005 -31.5833335 0 -2670 -1670 --48.5833335 -48.4166665 -31.7500005 -31.5833335 0 -2752 -1670 --48.4166665 -48.2499995 -31.7500005 -31.5833335 0 -2886 -1670 --48.2500005 -48.0833335 -31.7500005 -31.5833335 0 -3035 -1670 --48.0833335 -47.9166665 -31.7500005 -31.5833335 0 -3060 -1670 --47.9166665 -47.7499995 -31.7500005 -31.5833335 0 -3125 -1670 --47.7500005 -47.5833335 -31.7500005 -31.5833335 0 -3233 -1670 --47.5833335 -47.4166665 -31.7500005 -31.5833335 0 -3208 -1670 --47.4166665 -47.2499995 -31.7500005 -31.5833335 0 -3276 -1670 --47.2500005 -47.0833335 -31.7500005 -31.5833335 0 -3293 -1670 --47.0833335 -46.9166665 -31.7500005 -31.5833335 0 -3358 -1670 --46.9166665 -46.7499995 -31.7500005 -31.5833335 0 -3405 -1670 --46.7500005 -46.5833335 -31.7500005 -31.5833335 0 -3420 -1670 --46.5833335 -46.4166665 -31.7500005 -31.5833335 0 -3478 -1670 --46.4166665 -46.2499995 -31.7500005 -31.5833335 0 -3524 -1670 --46.2500005 -46.0833335 -31.7500005 -31.5833335 0 -3610 -1670 --46.0833335 -45.9166665 -31.7500005 -31.5833335 0 -3605 -1670 --45.9166665 -45.7499995 -31.7500005 -31.5833335 0 -3645 -1670 --45.7500005 -45.5833335 -31.7500005 -31.5833335 0 -3657 -1670 --45.5833335 -45.4166665 -31.7500005 -31.5833335 0 -3646 -1670 --45.4166665 -45.2499995 -31.7500005 -31.5833335 0 -3623 -1670 --45.2500005 -45.0833335 -31.7500005 -31.5833335 0 -3617 -1670 --45.0833335 -44.9166665 -31.7500005 -31.5833335 0 -3608 -1670 --44.9166665 -44.7499995 -31.7500005 -31.5833335 0 -3621 -1670 --44.7500005 -44.5833335 -31.7500005 -31.5833335 0 -3636 -1670 --44.5833335 -44.4166665 -31.7500005 -31.5833335 0 -3663 -1670 --44.4166665 -44.2499995 -31.7500005 -31.5833335 0 -3646 -1670 --44.2500005 -44.0833335 -31.7500005 -31.5833335 0 -3658 -1670 --44.0833335 -43.9166665 -31.7500005 -31.5833335 0 -3625 -1670 --43.9166665 -43.7499995 -31.7500005 -31.5833335 0 -3722 -1670 --43.7500005 -43.5833335 -31.7500005 -31.5833335 0 -3671 -1670 --43.5833335 -43.4166665 -31.7500005 -31.5833335 0 -3776 -1670 --43.4166665 -43.2499995 -31.7500005 -31.5833335 0 -3709 -1670 --43.2500005 -43.0833335 -31.7500005 -31.5833335 0 -3585 -1670 --43.0833335 -42.9166665 -31.7500005 -31.5833335 0 -3735 -1670 --42.9166665 -42.7499995 -31.7500005 -31.5833335 0 -3287 -1670 --42.7500005 -42.5833335 -31.7500005 -31.5833335 0 -3826 -1670 --42.5833335 -42.4166665 -31.7500005 -31.5833335 0 -3642 -1670 --42.4166665 -42.2499995 -31.7500005 -31.5833335 0 -3774 -1670 --42.2500005 -42.0833335 -31.7500005 -31.5833335 0 -3773 -1670 --42.0833335 -41.9166665 -31.7500005 -31.5833335 0 -3719 -1670 --41.9166665 -41.7499995 -31.7500005 -31.5833335 0 -3660 -1670 --41.7500005 -41.5833335 -31.7500005 -31.5833335 0 -3686 -1670 --41.5833335 -41.4166665 -31.7500005 -31.5833335 0 -3678 -1670 --41.4166665 -41.2499995 -31.7500005 -31.5833335 0 -3834 -1670 --41.2500005 -41.0833335 -31.7500005 -31.5833335 0 -3660 -1670 --41.0833335 -40.9166665 -31.7500005 -31.5833335 0 -3809 -1670 --40.9166665 -40.7499995 -31.7500005 -31.5833335 0 -3695 -1670 --40.7500005 -40.5833335 -31.7500005 -31.5833335 0 -3808 -1670 --40.5833335 -40.4166665 -31.7500005 -31.5833335 0 -3711 -1670 --40.4166665 -40.2499995 -31.7500005 -31.5833335 0 -3798 -1670 --40.2500005 -40.0833335 -31.7500005 -31.5833335 0 -3701 -1670 --40.0833335 -39.9166665 -31.7500005 -31.5833335 0 -3692 -1670 --65.0833335 -64.9166665 -31.9166665 -31.7499995 863 0 2670 --64.9166665 -64.7499995 -31.9166665 -31.7499995 2152 0 2670 --64.7500005 -64.5833335 -31.9166665 -31.7499995 1039 0 2670 --64.5833335 -64.4166665 -31.9166665 -31.7499995 786 0 2670 --64.4166665 -64.2499995 -31.9166665 -31.7499995 467 0 2670 --64.2500005 -64.0833335 -31.9166665 -31.7499995 418 0 2670 --64.0833335 -63.9166665 -31.9166665 -31.7499995 366 0 2670 --63.9166665 -63.7499995 -31.9166665 -31.7499995 314 0 2670 --63.7500005 -63.5833335 -31.9166665 -31.7499995 275 0 2670 --63.5833335 -63.4166665 -31.9166665 -31.7499995 243 0 2670 --63.4166665 -63.2499995 -31.9166665 -31.7499995 212 0 2670 --63.2500005 -63.0833335 -31.9166665 -31.7499995 188 0 2670 --63.0833335 -62.9166665 -31.9166665 -31.7499995 162 0 2670 --62.9166665 -62.7499995 -31.9166665 -31.7499995 145 0 2670 --62.7500005 -62.5833335 -31.9166665 -31.7499995 129 0 2670 --62.5833335 -62.4166665 -31.9166665 -31.7499995 118 0 2670 --62.4166665 -62.2499995 -31.9166665 -31.7499995 106 0 2670 --62.2500005 -62.0833335 -31.9166665 -31.7499995 105 0 2670 --62.0833335 -61.9166665 -31.9166665 -31.7499995 104 0 2670 --61.9166665 -61.7499995 -31.9166665 -31.7499995 104 0 2670 --61.7500005 -61.5833335 -31.9166665 -31.7499995 84 0 2670 --61.5833335 -61.4166665 -31.9166665 -31.7499995 53 0 2670 --61.4166665 -61.2499995 -31.9166665 -31.7499995 53 0 2670 --61.2500005 -61.0833335 -31.9166665 -31.7499995 44 0 2670 --61.0833335 -60.9166665 -31.9166665 -31.7499995 34 0 2670 --60.9166665 -60.7499995 -31.9166665 -31.7499995 12 0 2670 --60.7500005 -60.5833335 -31.9166665 -31.7499995 12 0 2670 --60.5833335 -60.4166665 -31.9166665 -31.7499995 85 0 2670 --60.4166665 -60.2499995 -31.9166665 -31.7499995 59 0 2670 --60.2500005 -60.0833335 -31.9166665 -31.7499995 59 0 2670 --60.0833335 -59.9166665 -31.9166665 -31.7499995 85 0 2670 --59.9166665 -59.7499995 -31.9166665 -31.7499995 87 0 2670 --59.7500005 -59.5833335 -31.9166665 -31.7499995 69 0 2670 --59.5833335 -59.4166665 -31.9166665 -31.7499995 63 0 2670 --59.4166665 -59.2499995 -31.9166665 -31.7499995 68 0 2670 --59.2500005 -59.0833335 -31.9166665 -31.7499995 41 0 2670 --59.0833335 -58.9166665 -31.9166665 -31.7499995 47 0 2670 --58.9166665 -58.7499995 -31.9166665 -31.7499995 64 0 2670 --58.7500005 -58.5833335 -31.9166665 -31.7499995 70 0 2670 --58.5833335 -58.4166665 -31.9166665 -31.7499995 52 0 2670 --58.4166665 -58.2499995 -31.9166665 -31.7499995 31 0 2670 --58.2500005 -58.0833335 -31.9166665 -31.7499995 11 0 2670 --58.0833335 -57.9166665 -31.9166665 -31.7499995 34 0 2670 --57.9166665 -57.7499995 -31.9166665 -31.7499995 45 0 2670 --57.7500005 -57.5833335 -31.9166665 -31.7499995 70 0 2670 --57.5833335 -57.4166665 -31.9166665 -31.7499995 101 0 2670 --57.4166665 -57.2499995 -31.9166665 -31.7499995 127 0 2670 --57.2500005 -57.0833335 -31.9166665 -31.7499995 145 0 2670 --57.0833335 -56.9166665 -31.9166665 -31.7499995 163 0 2670 --56.9166665 -56.7499995 -31.9166665 -31.7499995 215 0 2670 --56.7500005 -56.5833335 -31.9166665 -31.7499995 235 0 2670 --56.5833335 -56.4166665 -31.9166665 -31.7499995 235 0 2670 --56.4166665 -56.2499995 -31.9166665 -31.7499995 229 0 2670 --56.2500005 -56.0833335 -31.9166665 -31.7499995 195 0 2670 --56.0833335 -55.9166665 -31.9166665 -31.7499995 154 0 2670 --55.9166665 -55.7499995 -31.9166665 -31.7499995 125 0 2670 --55.7500005 -55.5833335 -31.9166665 -31.7499995 133 0 2670 --55.5833335 -55.4166665 -31.9166665 -31.7499995 106 0 2670 --55.4166665 -55.2499995 -31.9166665 -31.7499995 133 0 2670 --55.2500005 -55.0833335 -31.9166665 -31.7499995 118 0 2670 --55.0833335 -54.9166665 -31.9166665 -31.7499995 151 0 2670 --54.9166665 -54.7499995 -31.9166665 -31.7499995 137 0 2670 --54.7500005 -54.5833335 -31.9166665 -31.7499995 149 0 2670 --54.5833335 -54.4166665 -31.9166665 -31.7499995 121 0 2670 --54.4166665 -54.2499995 -31.9166665 -31.7499995 144 0 2670 --54.2500005 -54.0833335 -31.9166665 -31.7499995 160 0 2670 --54.0833335 -53.9166665 -31.9166665 -31.7499995 155 0 2670 --53.9166665 -53.7499995 -31.9166665 -31.7499995 121 0 2670 --53.7500005 -53.5833335 -31.9166665 -31.7499995 248 0 2670 --53.5833335 -53.4166665 -31.9166665 -31.7499995 226 0 2670 --53.4166665 -53.2499995 -31.9166665 -31.7499995 153 0 2670 --53.2500005 -53.0833335 -31.9166665 -31.7499995 223 0 2670 --53.0833335 -52.9166665 -31.9166665 -31.7499995 63 0 2670 --52.9166665 -52.7499995 -31.9166665 -31.7499995 62 0 2670 --52.7500005 -52.5833335 -31.9166665 -31.7499995 56 0 2670 --52.5833335 -52.4166665 -31.9166665 -31.7499995 11 0 2670 --52.4166665 -52.2499995 -31.9166665 -31.7499995 1 0 2670 --52.2500005 -52.0833335 -31.9166665 -31.7499995 0 -1 -1670 --52.0833335 -51.9166665 -31.9166665 -31.7499995 11 0 2670 --51.9166665 -51.7499995 -31.9166665 -31.7499995 0 -1 -1670 --51.7500005 -51.5833335 -31.9166665 -31.7499995 0 -1 -1670 --51.5833335 -51.4166665 -31.9166665 -31.7499995 0 -6 -1670 --51.4166665 -51.2499995 -31.9166665 -31.7499995 0 -15 -1670 --51.2500005 -51.0833335 -31.9166665 -31.7499995 0 -26 -1670 --51.0833335 -50.9166665 -31.9166665 -31.7499995 0 -52 -1670 --50.9166665 -50.7499995 -31.9166665 -31.7499995 0 -66 -1670 --50.7500005 -50.5833335 -31.9166665 -31.7499995 0 -81 -1670 --50.5833335 -50.4166665 -31.9166665 -31.7499995 0 -98 -1670 --50.4166665 -50.2499995 -31.9166665 -31.7499995 0 -119 -1670 --50.2500005 -50.0833335 -31.9166665 -31.7499995 0 -87 -1670 --50.0833335 -49.9166665 -31.9166665 -31.7499995 0 -208 -1670 --49.9166665 -49.7499995 -31.9166665 -31.7499995 0 -1310 -1670 --49.7500005 -49.5833335 -31.9166665 -31.7499995 0 -1636 -1670 --49.5833335 -49.4166665 -31.9166665 -31.7499995 0 -1952 -1670 --49.4166665 -49.2499995 -31.9166665 -31.7499995 0 -2044 -1670 --49.2500005 -49.0833335 -31.9166665 -31.7499995 0 -2275 -1670 --49.0833335 -48.9166665 -31.9166665 -31.7499995 0 -2403 -1670 --48.9166665 -48.7499995 -31.9166665 -31.7499995 0 -2672 -1670 --48.7500005 -48.5833335 -31.9166665 -31.7499995 0 -2716 -1670 --48.5833335 -48.4166665 -31.9166665 -31.7499995 0 -2835 -1670 --48.4166665 -48.2499995 -31.9166665 -31.7499995 0 -2909 -1670 --48.2500005 -48.0833335 -31.9166665 -31.7499995 0 -3026 -1670 --48.0833335 -47.9166665 -31.9166665 -31.7499995 0 -3069 -1670 --47.9166665 -47.7499995 -31.9166665 -31.7499995 0 -3141 -1670 --47.7500005 -47.5833335 -31.9166665 -31.7499995 0 -3176 -1670 --47.5833335 -47.4166665 -31.9166665 -31.7499995 0 -3246 -1670 --47.4166665 -47.2499995 -31.9166665 -31.7499995 0 -3295 -1670 --47.2500005 -47.0833335 -31.9166665 -31.7499995 0 -3366 -1670 --47.0833335 -46.9166665 -31.9166665 -31.7499995 0 -3414 -1670 --46.9166665 -46.7499995 -31.9166665 -31.7499995 0 -3474 -1670 --46.7500005 -46.5833335 -31.9166665 -31.7499995 0 -3500 -1670 --46.5833335 -46.4166665 -31.9166665 -31.7499995 0 -3567 -1670 --46.4166665 -46.2499995 -31.9166665 -31.7499995 0 -3615 -1670 --46.2500005 -46.0833335 -31.9166665 -31.7499995 0 -3658 -1670 --46.0833335 -45.9166665 -31.9166665 -31.7499995 0 -3704 -1670 --45.9166665 -45.7499995 -31.9166665 -31.7499995 0 -3732 -1670 --45.7500005 -45.5833335 -31.9166665 -31.7499995 0 -3743 -1670 --45.5833335 -45.4166665 -31.9166665 -31.7499995 0 -3745 -1670 --45.4166665 -45.2499995 -31.9166665 -31.7499995 0 -3727 -1670 --45.2500005 -45.0833335 -31.9166665 -31.7499995 0 -3692 -1670 --45.0833335 -44.9166665 -31.9166665 -31.7499995 0 -3676 -1670 --44.9166665 -44.7499995 -31.9166665 -31.7499995 0 -3675 -1670 --44.7500005 -44.5833335 -31.9166665 -31.7499995 0 -3688 -1670 --44.5833335 -44.4166665 -31.9166665 -31.7499995 0 -3651 -1670 --44.4166665 -44.2499995 -31.9166665 -31.7499995 0 -3647 -1670 --44.2500005 -44.0833335 -31.9166665 -31.7499995 0 -3696 -1670 --44.0833335 -43.9166665 -31.9166665 -31.7499995 0 -3735 -1670 --43.9166665 -43.7499995 -31.9166665 -31.7499995 0 -3773 -1670 --43.7500005 -43.5833335 -31.9166665 -31.7499995 0 -3668 -1670 --43.5833335 -43.4166665 -31.9166665 -31.7499995 0 -3792 -1670 --43.4166665 -43.2499995 -31.9166665 -31.7499995 0 -3801 -1670 --43.2500005 -43.0833335 -31.9166665 -31.7499995 0 -3750 -1670 --43.0833335 -42.9166665 -31.9166665 -31.7499995 0 -3977 -1670 --42.9166665 -42.7499995 -31.9166665 -31.7499995 0 -3806 -1670 --42.7500005 -42.5833335 -31.9166665 -31.7499995 0 -3734 -1670 --42.5833335 -42.4166665 -31.9166665 -31.7499995 0 -3667 -1670 --42.4166665 -42.2499995 -31.9166665 -31.7499995 0 -3672 -1670 --42.2500005 -42.0833335 -31.9166665 -31.7499995 0 -3957 -1670 --42.0833335 -41.9166665 -31.9166665 -31.7499995 0 -3880 -1670 --41.9166665 -41.7499995 -31.9166665 -31.7499995 0 -3809 -1670 --41.7500005 -41.5833335 -31.9166665 -31.7499995 0 -3798 -1670 --41.5833335 -41.4166665 -31.9166665 -31.7499995 0 -3828 -1670 --41.4166665 -41.2499995 -31.9166665 -31.7499995 0 -3875 -1670 --41.2500005 -41.0833335 -31.9166665 -31.7499995 0 -3907 -1670 --41.0833335 -40.9166665 -31.9166665 -31.7499995 0 -3985 -1670 --40.9166665 -40.7499995 -31.9166665 -31.7499995 0 -3895 -1670 --40.7500005 -40.5833335 -31.9166665 -31.7499995 0 -3979 -1670 --40.5833335 -40.4166665 -31.9166665 -31.7499995 0 -3958 -1670 --40.4166665 -40.2499995 -31.9166665 -31.7499995 0 -4096 -1670 --40.2500005 -40.0833335 -31.9166665 -31.7499995 0 -3756 -1670 --40.0833335 -39.9166665 -31.9166665 -31.7499995 0 -3848 -1670 --65.0833335 -64.9166665 -32.0833335 -31.9166665 1072 0 2670 --64.9166665 -64.7499995 -32.0833335 -31.9166665 1448 0 2670 --64.7500005 -64.5833335 -32.0833335 -31.9166665 978 0 2670 --64.5833335 -64.4166665 -32.0833335 -31.9166665 1120 0 2670 --64.4166665 -64.2499995 -32.0833335 -31.9166665 553 0 2670 --64.2500005 -64.0833335 -32.0833335 -31.9166665 453 0 2670 --64.0833335 -63.9166665 -32.0833335 -31.9166665 371 0 2670 --63.9166665 -63.7499995 -32.0833335 -31.9166665 317 0 2670 --63.7500005 -63.5833335 -32.0833335 -31.9166665 283 0 2670 --63.5833335 -63.4166665 -32.0833335 -31.9166665 247 0 2670 --63.4166665 -63.2499995 -32.0833335 -31.9166665 218 0 2670 --63.2500005 -63.0833335 -32.0833335 -31.9166665 193 0 2670 --63.0833335 -62.9166665 -32.0833335 -31.9166665 167 0 2670 --62.9166665 -62.7499995 -32.0833335 -31.9166665 145 0 2670 --62.7500005 -62.5833335 -32.0833335 -31.9166665 129 0 2670 --62.5833335 -62.4166665 -32.0833335 -31.9166665 116 0 2670 --62.4166665 -62.2499995 -32.0833335 -31.9166665 106 0 2670 --62.2500005 -62.0833335 -32.0833335 -31.9166665 99 0 2670 --62.0833335 -61.9166665 -32.0833335 -31.9166665 112 0 2670 --61.9166665 -61.7499995 -32.0833335 -31.9166665 109 0 2670 --61.7500005 -61.5833335 -32.0833335 -31.9166665 76 0 2670 --61.5833335 -61.4166665 -32.0833335 -31.9166665 51 0 2670 --61.4166665 -61.2499995 -32.0833335 -31.9166665 56 0 2670 --61.2500005 -61.0833335 -32.0833335 -31.9166665 43 0 2670 --61.0833335 -60.9166665 -32.0833335 -31.9166665 27 0 2670 --60.9166665 -60.7499995 -32.0833335 -31.9166665 9 0 2670 --60.7500005 -60.5833335 -32.0833335 -31.9166665 11 0 2670 --60.5833335 -60.4166665 -32.0833335 -31.9166665 58 0 2670 --60.4166665 -60.2499995 -32.0833335 -31.9166665 95 0 2670 --60.2500005 -60.0833335 -32.0833335 -31.9166665 102 0 2670 --60.0833335 -59.9166665 -32.0833335 -31.9166665 96 0 2670 --59.9166665 -59.7499995 -32.0833335 -31.9166665 73 0 2670 --59.7500005 -59.5833335 -32.0833335 -31.9166665 77 0 2670 --59.5833335 -59.4166665 -32.0833335 -31.9166665 64 0 2670 --59.4166665 -59.2499995 -32.0833335 -31.9166665 56 0 2670 --59.2500005 -59.0833335 -32.0833335 -31.9166665 45 0 2670 --59.0833335 -58.9166665 -32.0833335 -31.9166665 53 0 2670 --58.9166665 -58.7499995 -32.0833335 -31.9166665 62 0 2670 --58.7500005 -58.5833335 -32.0833335 -31.9166665 57 0 2670 --58.5833335 -58.4166665 -32.0833335 -31.9166665 55 0 2670 --58.4166665 -58.2499995 -32.0833335 -31.9166665 36 0 2670 --58.2500005 -58.0833335 -32.0833335 -31.9166665 8 0 2670 --58.0833335 -57.9166665 -32.0833335 -31.9166665 34 0 2670 --57.9166665 -57.7499995 -32.0833335 -31.9166665 68 0 2670 --57.7500005 -57.5833335 -32.0833335 -31.9166665 83 0 2670 --57.5833335 -57.4166665 -32.0833335 -31.9166665 72 0 2670 --57.4166665 -57.2499995 -32.0833335 -31.9166665 80 0 2670 --57.2500005 -57.0833335 -32.0833335 -31.9166665 80 0 2670 --57.0833335 -56.9166665 -32.0833335 -31.9166665 135 0 2670 --56.9166665 -56.7499995 -32.0833335 -31.9166665 166 0 2670 --56.7500005 -56.5833335 -32.0833335 -31.9166665 136 0 2670 --56.5833335 -56.4166665 -32.0833335 -31.9166665 202 0 2670 --56.4166665 -56.2499995 -32.0833335 -31.9166665 211 0 2670 --56.2500005 -56.0833335 -32.0833335 -31.9166665 256 0 2670 --56.0833335 -55.9166665 -32.0833335 -31.9166665 153 0 2670 --55.9166665 -55.7499995 -32.0833335 -31.9166665 142 0 2670 --55.7500005 -55.5833335 -32.0833335 -31.9166665 111 0 2670 --55.5833335 -55.4166665 -32.0833335 -31.9166665 101 0 2670 --55.4166665 -55.2499995 -32.0833335 -31.9166665 103 0 2670 --55.2500005 -55.0833335 -32.0833335 -31.9166665 141 0 2670 --55.0833335 -54.9166665 -32.0833335 -31.9166665 145 0 2670 --54.9166665 -54.7499995 -32.0833335 -31.9166665 138 0 2670 --54.7500005 -54.5833335 -32.0833335 -31.9166665 127 0 2670 --54.5833335 -54.4166665 -32.0833335 -31.9166665 116 0 2670 --54.4166665 -54.2499995 -32.0833335 -31.9166665 122 0 2670 --54.2500005 -54.0833335 -32.0833335 -31.9166665 132 0 2670 --54.0833335 -53.9166665 -32.0833335 -31.9166665 104 0 2670 --53.9166665 -53.7499995 -32.0833335 -31.9166665 94 0 2670 --53.7500005 -53.5833335 -32.0833335 -31.9166665 119 0 2670 --53.5833335 -53.4166665 -32.0833335 -31.9166665 312 0 2670 --53.4166665 -53.2499995 -32.0833335 -31.9166665 217 0 2670 --53.2500005 -53.0833335 -32.0833335 -31.9166665 180 0 2670 --53.0833335 -52.9166665 -32.0833335 -31.9166665 131 0 2670 --52.9166665 -52.7499995 -32.0833335 -31.9166665 81 0 2670 --52.7500005 -52.5833335 -32.0833335 -31.9166665 16 0 2670 --52.5833335 -52.4166665 -32.0833335 -31.9166665 2 0 2670 --52.4166665 -52.2499995 -32.0833335 -31.9166665 8 0 2670 --52.2500005 -52.0833335 -32.0833335 -31.9166665 8 0 2670 --52.0833335 -51.9166665 -32.0833335 -31.9166665 9 0 2670 --51.9166665 -51.7499995 -32.0833335 -31.9166665 0 -6 -1670 --51.7500005 -51.5833335 -32.0833335 -31.9166665 0 -11 -1670 --51.5833335 -51.4166665 -32.0833335 -31.9166665 0 -16 -1670 --51.4166665 -51.2499995 -32.0833335 -31.9166665 0 -22 -1670 --51.2500005 -51.0833335 -32.0833335 -31.9166665 0 -51 -1670 --51.0833335 -50.9166665 -32.0833335 -31.9166665 0 -62 -1670 --50.9166665 -50.7499995 -32.0833335 -31.9166665 0 -71 -1670 --50.7500005 -50.5833335 -32.0833335 -31.9166665 0 -89 -1670 --50.5833335 -50.4166665 -32.0833335 -31.9166665 0 -100 -1670 --50.4166665 -50.2499995 -32.0833335 -31.9166665 0 -115 -1670 --50.2500005 -50.0833335 -32.0833335 -31.9166665 0 -158 -1670 --50.0833335 -49.9166665 -32.0833335 -31.9166665 0 -822 -1670 --49.9166665 -49.7499995 -32.0833335 -31.9166665 0 -1434 -1670 --49.7500005 -49.5833335 -32.0833335 -31.9166665 0 -1823 -1670 --49.5833335 -49.4166665 -32.0833335 -31.9166665 0 -2060 -1670 --49.4166665 -49.2499995 -32.0833335 -31.9166665 0 -2233 -1670 --49.2500005 -49.0833335 -32.0833335 -31.9166665 0 -2387 -1670 --49.0833335 -48.9166665 -32.0833335 -31.9166665 0 -2553 -1670 --48.9166665 -48.7499995 -32.0833335 -31.9166665 0 -2671 -1670 --48.7500005 -48.5833335 -32.0833335 -31.9166665 0 -2804 -1670 --48.5833335 -48.4166665 -32.0833335 -31.9166665 0 -2908 -1670 --48.4166665 -48.2499995 -32.0833335 -31.9166665 0 -2988 -1670 --48.2500005 -48.0833335 -32.0833335 -31.9166665 0 -3034 -1670 --48.0833335 -47.9166665 -32.0833335 -31.9166665 0 -3110 -1670 --47.9166665 -47.7499995 -32.0833335 -31.9166665 0 -3167 -1670 --47.7500005 -47.5833335 -32.0833335 -31.9166665 0 -3228 -1670 --47.5833335 -47.4166665 -32.0833335 -31.9166665 0 -3301 -1670 --47.4166665 -47.2499995 -32.0833335 -31.9166665 0 -3350 -1670 --47.2500005 -47.0833335 -32.0833335 -31.9166665 0 -3426 -1670 --47.0833335 -46.9166665 -32.0833335 -31.9166665 0 -3484 -1670 --46.9166665 -46.7499995 -32.0833335 -31.9166665 0 -3542 -1670 --46.7500005 -46.5833335 -32.0833335 -31.9166665 0 -3603 -1670 --46.5833335 -46.4166665 -32.0833335 -31.9166665 0 -3649 -1670 --46.4166665 -46.2499995 -32.0833335 -31.9166665 0 -3698 -1670 --46.2500005 -46.0833335 -32.0833335 -31.9166665 0 -3739 -1670 --46.0833335 -45.9166665 -32.0833335 -31.9166665 0 -3779 -1670 --45.9166665 -45.7499995 -32.0833335 -31.9166665 0 -3823 -1670 --45.7500005 -45.5833335 -32.0833335 -31.9166665 0 -3858 -1670 --45.5833335 -45.4166665 -32.0833335 -31.9166665 0 -3878 -1670 --45.4166665 -45.2499995 -32.0833335 -31.9166665 0 -3878 -1670 --45.2500005 -45.0833335 -32.0833335 -31.9166665 0 -3870 -1670 --45.0833335 -44.9166665 -32.0833335 -31.9166665 0 -3833 -1670 --44.9166665 -44.7499995 -32.0833335 -31.9166665 0 -3822 -1670 --44.7500005 -44.5833335 -32.0833335 -31.9166665 0 -3799 -1670 --44.5833335 -44.4166665 -32.0833335 -31.9166665 0 -3752 -1670 --44.4166665 -44.2499995 -32.0833335 -31.9166665 0 -3717 -1670 --44.2500005 -44.0833335 -32.0833335 -31.9166665 0 -3717 -1670 --44.0833335 -43.9166665 -32.0833335 -31.9166665 0 -3697 -1670 --43.9166665 -43.7499995 -32.0833335 -31.9166665 0 -3722 -1670 --43.7500005 -43.5833335 -32.0833335 -31.9166665 0 -3847 -1670 --43.5833335 -43.4166665 -32.0833335 -31.9166665 0 -3847 -1670 --43.4166665 -43.2499995 -32.0833335 -31.9166665 0 -3746 -1670 --43.2500005 -43.0833335 -32.0833335 -31.9166665 0 -3858 -1670 --43.0833335 -42.9166665 -32.0833335 -31.9166665 0 -3856 -1670 --42.9166665 -42.7499995 -32.0833335 -31.9166665 0 -3804 -1670 --42.7500005 -42.5833335 -32.0833335 -31.9166665 0 -3839 -1670 --42.5833335 -42.4166665 -32.0833335 -31.9166665 0 -3769 -1670 --42.4166665 -42.2499995 -32.0833335 -31.9166665 0 -3781 -1670 --42.2500005 -42.0833335 -32.0833335 -31.9166665 0 -3839 -1670 --42.0833335 -41.9166665 -32.0833335 -31.9166665 0 -3880 -1670 --41.9166665 -41.7499995 -32.0833335 -31.9166665 0 -3746 -1670 --41.7500005 -41.5833335 -32.0833335 -31.9166665 0 -3664 -1670 --41.5833335 -41.4166665 -32.0833335 -31.9166665 0 -3717 -1670 --41.4166665 -41.2499995 -32.0833335 -31.9166665 0 -3869 -1670 --41.2500005 -41.0833335 -32.0833335 -31.9166665 0 -3974 -1670 --41.0833335 -40.9166665 -32.0833335 -31.9166665 0 -4029 -1670 --40.9166665 -40.7499995 -32.0833335 -31.9166665 0 -4082 -1670 --40.7500005 -40.5833335 -32.0833335 -31.9166665 0 -4039 -1670 --40.5833335 -40.4166665 -32.0833335 -31.9166665 0 -4345 -1670 --40.4166665 -40.2499995 -32.0833335 -31.9166665 0 -4280 -1670 --40.2500005 -40.0833335 -32.0833335 -31.9166665 0 -3959 -1670 --40.0833335 -39.9166665 -32.0833335 -31.9166665 0 -3996 -1670 --65.0833335 -64.9166665 -32.2500005 -32.0833335 1090 0 2670 --64.9166665 -64.7499995 -32.2500005 -32.0833335 1326 0 2670 --64.7500005 -64.5833335 -32.2500005 -32.0833335 880 0 2670 --64.5833335 -64.4166665 -32.2500005 -32.0833335 544 0 2670 --64.4166665 -64.2499995 -32.2500005 -32.0833335 487 0 2670 --64.2500005 -64.0833335 -32.2500005 -32.0833335 392 0 2670 --64.0833335 -63.9166665 -32.2500005 -32.0833335 354 0 2670 --63.9166665 -63.7499995 -32.2500005 -32.0833335 324 0 2670 --63.7500005 -63.5833335 -32.2500005 -32.0833335 284 0 2670 --63.5833335 -63.4166665 -32.2500005 -32.0833335 252 0 2670 --63.4166665 -63.2499995 -32.2500005 -32.0833335 221 0 2670 --63.2500005 -63.0833335 -32.2500005 -32.0833335 193 0 2670 --63.0833335 -62.9166665 -32.2500005 -32.0833335 167 0 2670 --62.9166665 -62.7499995 -32.2500005 -32.0833335 147 0 2670 --62.7500005 -62.5833335 -32.2500005 -32.0833335 132 0 2670 --62.5833335 -62.4166665 -32.2500005 -32.0833335 116 0 2670 --62.4166665 -62.2499995 -32.2500005 -32.0833335 104 0 2670 --62.2500005 -62.0833335 -32.2500005 -32.0833335 96 0 2670 --62.0833335 -61.9166665 -32.2500005 -32.0833335 119 0 2670 --61.9166665 -61.7499995 -32.2500005 -32.0833335 110 0 2670 --61.7500005 -61.5833335 -32.2500005 -32.0833335 79 0 2670 --61.5833335 -61.4166665 -32.2500005 -32.0833335 52 0 2670 --61.4166665 -61.2499995 -32.2500005 -32.0833335 38 0 2670 --61.2500005 -61.0833335 -32.2500005 -32.0833335 42 0 2670 --61.0833335 -60.9166665 -32.2500005 -32.0833335 29 0 2670 --60.9166665 -60.7499995 -32.2500005 -32.0833335 9 0 2670 --60.7500005 -60.5833335 -32.2500005 -32.0833335 11 0 2670 --60.5833335 -60.4166665 -32.2500005 -32.0833335 98 0 2670 --60.4166665 -60.2499995 -32.2500005 -32.0833335 85 0 2670 --60.2500005 -60.0833335 -32.2500005 -32.0833335 103 0 2670 --60.0833335 -59.9166665 -32.2500005 -32.0833335 62 0 2670 --59.9166665 -59.7499995 -32.2500005 -32.0833335 70 0 2670 --59.7500005 -59.5833335 -32.2500005 -32.0833335 59 0 2670 --59.5833335 -59.4166665 -32.2500005 -32.0833335 67 0 2670 --59.4166665 -59.2499995 -32.2500005 -32.0833335 68 0 2670 --59.2500005 -59.0833335 -32.2500005 -32.0833335 55 0 2670 --59.0833335 -58.9166665 -32.2500005 -32.0833335 38 0 2670 --58.9166665 -58.7499995 -32.2500005 -32.0833335 64 0 2670 --58.7500005 -58.5833335 -32.2500005 -32.0833335 42 0 2670 --58.5833335 -58.4166665 -32.2500005 -32.0833335 45 0 2670 --58.4166665 -58.2499995 -32.2500005 -32.0833335 28 0 2670 --58.2500005 -58.0833335 -32.2500005 -32.0833335 6 0 2670 --58.0833335 -57.9166665 -32.2500005 -32.0833335 33 0 2670 --57.9166665 -57.7499995 -32.2500005 -32.0833335 39 0 2670 --57.7500005 -57.5833335 -32.2500005 -32.0833335 31 0 2670 --57.5833335 -57.4166665 -32.2500005 -32.0833335 37 0 2670 --57.4166665 -57.2499995 -32.2500005 -32.0833335 47 0 2670 --57.2500005 -57.0833335 -32.2500005 -32.0833335 50 0 2670 --57.0833335 -56.9166665 -32.2500005 -32.0833335 87 0 2670 --56.9166665 -56.7499995 -32.2500005 -32.0833335 97 0 2670 --56.7500005 -56.5833335 -32.2500005 -32.0833335 156 0 2670 --56.5833335 -56.4166665 -32.2500005 -32.0833335 141 0 2670 --56.4166665 -56.2499995 -32.2500005 -32.0833335 162 0 2670 --56.2500005 -56.0833335 -32.2500005 -32.0833335 134 0 2670 --56.0833335 -55.9166665 -32.2500005 -32.0833335 114 0 2670 --55.9166665 -55.7499995 -32.2500005 -32.0833335 114 0 2670 --55.7500005 -55.5833335 -32.2500005 -32.0833335 114 0 2670 --55.5833335 -55.4166665 -32.2500005 -32.0833335 94 0 2670 --55.4166665 -55.2499995 -32.2500005 -32.0833335 117 0 2670 --55.2500005 -55.0833335 -32.2500005 -32.0833335 106 0 2670 --55.0833335 -54.9166665 -32.2500005 -32.0833335 113 0 2670 --54.9166665 -54.7499995 -32.2500005 -32.0833335 117 0 2670 --54.7500005 -54.5833335 -32.2500005 -32.0833335 132 0 2670 --54.5833335 -54.4166665 -32.2500005 -32.0833335 144 0 2670 --54.4166665 -54.2499995 -32.2500005 -32.0833335 155 0 2670 --54.2500005 -54.0833335 -32.2500005 -32.0833335 172 0 2670 --54.0833335 -53.9166665 -32.2500005 -32.0833335 119 0 2670 --53.9166665 -53.7499995 -32.2500005 -32.0833335 185 0 2670 --53.7500005 -53.5833335 -32.2500005 -32.0833335 154 0 2670 --53.5833335 -53.4166665 -32.2500005 -32.0833335 114 0 2670 --53.4166665 -53.2499995 -32.2500005 -32.0833335 160 0 2670 --53.2500005 -53.0833335 -32.2500005 -32.0833335 71 0 2670 --53.0833335 -52.9166665 -32.2500005 -32.0833335 37 0 2670 --52.9166665 -52.7499995 -32.2500005 -32.0833335 5 0 2670 --52.7500005 -52.5833335 -32.2500005 -32.0833335 0 -1 -1670 --52.5833335 -52.4166665 -32.2500005 -32.0833335 1 0 2670 --52.4166665 -52.2499995 -32.2500005 -32.0833335 10 0 2670 --52.2500005 -52.0833335 -32.2500005 -32.0833335 6 0 2670 --52.0833335 -51.9166665 -32.2500005 -32.0833335 0 -9 -1670 --51.9166665 -51.7499995 -32.2500005 -32.0833335 0 -20 -1670 --51.7500005 -51.5833335 -32.2500005 -32.0833335 0 -19 -1670 --51.5833335 -51.4166665 -32.2500005 -32.0833335 0 -19 -1670 --51.4166665 -51.2499995 -32.2500005 -32.0833335 0 -45 -1670 --51.2500005 -51.0833335 -32.2500005 -32.0833335 0 -59 -1670 --51.0833335 -50.9166665 -32.2500005 -32.0833335 0 -67 -1670 --50.9166665 -50.7499995 -32.2500005 -32.0833335 0 -79 -1670 --50.7500005 -50.5833335 -32.2500005 -32.0833335 0 -85 -1670 --50.5833335 -50.4166665 -32.2500005 -32.0833335 0 -92 -1670 --50.4166665 -50.2499995 -32.2500005 -32.0833335 0 -92 -1670 --50.2500005 -50.0833335 -32.2500005 -32.0833335 0 -280 -1670 --50.0833335 -49.9166665 -32.2500005 -32.0833335 0 -648 -1670 --49.9166665 -49.7499995 -32.2500005 -32.0833335 0 -1532 -1670 --49.7500005 -49.5833335 -32.2500005 -32.0833335 0 -1882 -1670 --49.5833335 -49.4166665 -32.2500005 -32.0833335 0 -2066 -1670 --49.4166665 -49.2499995 -32.2500005 -32.0833335 0 -2284 -1670 --49.2500005 -49.0833335 -32.2500005 -32.0833335 0 -2396 -1670 --49.0833335 -48.9166665 -32.2500005 -32.0833335 0 -2646 -1670 --48.9166665 -48.7499995 -32.2500005 -32.0833335 0 -2752 -1670 --48.7500005 -48.5833335 -32.2500005 -32.0833335 0 -2798 -1670 --48.5833335 -48.4166665 -32.2500005 -32.0833335 0 -2915 -1670 --48.4166665 -48.2499995 -32.2500005 -32.0833335 0 -2996 -1670 --48.2500005 -48.0833335 -32.2500005 -32.0833335 0 -3073 -1670 --48.0833335 -47.9166665 -32.2500005 -32.0833335 0 -3147 -1670 --47.9166665 -47.7499995 -32.2500005 -32.0833335 0 -3245 -1670 --47.7500005 -47.5833335 -32.2500005 -32.0833335 0 -3325 -1670 --47.5833335 -47.4166665 -32.2500005 -32.0833335 0 -3391 -1670 --47.4166665 -47.2499995 -32.2500005 -32.0833335 0 -3462 -1670 --47.2500005 -47.0833335 -32.2500005 -32.0833335 0 -3526 -1670 --47.0833335 -46.9166665 -32.2500005 -32.0833335 0 -3599 -1670 --46.9166665 -46.7499995 -32.2500005 -32.0833335 0 -3658 -1670 --46.7500005 -46.5833335 -32.2500005 -32.0833335 0 -3706 -1670 --46.5833335 -46.4166665 -32.2500005 -32.0833335 0 -3762 -1670 --46.4166665 -46.2499995 -32.2500005 -32.0833335 0 -3809 -1670 --46.2500005 -46.0833335 -32.2500005 -32.0833335 0 -3855 -1670 --46.0833335 -45.9166665 -32.2500005 -32.0833335 0 -3897 -1670 --45.9166665 -45.7499995 -32.2500005 -32.0833335 0 -3916 -1670 --45.7500005 -45.5833335 -32.2500005 -32.0833335 0 -3943 -1670 --45.5833335 -45.4166665 -32.2500005 -32.0833335 0 -3954 -1670 --45.4166665 -45.2499995 -32.2500005 -32.0833335 0 -3996 -1670 --45.2500005 -45.0833335 -32.2500005 -32.0833335 0 -4014 -1670 --45.0833335 -44.9166665 -32.2500005 -32.0833335 0 -4005 -1670 --44.9166665 -44.7499995 -32.2500005 -32.0833335 0 -3963 -1670 --44.7500005 -44.5833335 -32.2500005 -32.0833335 0 -3939 -1670 --44.5833335 -44.4166665 -32.2500005 -32.0833335 0 -3890 -1670 --44.4166665 -44.2499995 -32.2500005 -32.0833335 0 -3875 -1670 --44.2500005 -44.0833335 -32.2500005 -32.0833335 0 -3805 -1670 --44.0833335 -43.9166665 -32.2500005 -32.0833335 0 -3804 -1670 --43.9166665 -43.7499995 -32.2500005 -32.0833335 0 -3746 -1670 --43.7500005 -43.5833335 -32.2500005 -32.0833335 0 -3757 -1670 --43.5833335 -43.4166665 -32.2500005 -32.0833335 0 -3830 -1670 --43.4166665 -43.2499995 -32.2500005 -32.0833335 0 -3845 -1670 --43.2500005 -43.0833335 -32.2500005 -32.0833335 0 -3854 -1670 --43.0833335 -42.9166665 -32.2500005 -32.0833335 0 -3970 -1670 --42.9166665 -42.7499995 -32.2500005 -32.0833335 0 -3949 -1670 --42.7500005 -42.5833335 -32.2500005 -32.0833335 0 -3934 -1670 --42.5833335 -42.4166665 -32.2500005 -32.0833335 0 -3774 -1670 --42.4166665 -42.2499995 -32.2500005 -32.0833335 0 -3755 -1670 --42.2500005 -42.0833335 -32.2500005 -32.0833335 0 -3821 -1670 --42.0833335 -41.9166665 -32.2500005 -32.0833335 0 -3819 -1670 --41.9166665 -41.7499995 -32.2500005 -32.0833335 0 -3759 -1670 --41.7500005 -41.5833335 -32.2500005 -32.0833335 0 -3842 -1670 --41.5833335 -41.4166665 -32.2500005 -32.0833335 0 -3918 -1670 --41.4166665 -41.2499995 -32.2500005 -32.0833335 0 -4107 -1670 --41.2500005 -41.0833335 -32.2500005 -32.0833335 0 -4339 -1670 --41.0833335 -40.9166665 -32.2500005 -32.0833335 0 -4267 -1670 --40.9166665 -40.7499995 -32.2500005 -32.0833335 0 -4327 -1670 --40.7500005 -40.5833335 -32.2500005 -32.0833335 0 -4161 -1670 --40.5833335 -40.4166665 -32.2500005 -32.0833335 0 -4192 -1670 --40.4166665 -40.2499995 -32.2500005 -32.0833335 0 -4250 -1670 --40.2500005 -40.0833335 -32.2500005 -32.0833335 0 -4219 -1670 --40.0833335 -39.9166665 -32.2500005 -32.0833335 0 -4231 -1670 --65.0833335 -64.9166665 -32.4166665 -32.2499995 928 0 2670 --64.9166665 -64.7499995 -32.4166665 -32.2499995 1451 0 2670 --64.7500005 -64.5833335 -32.4166665 -32.2499995 904 0 2670 --64.5833335 -64.4166665 -32.4166665 -32.2499995 601 0 2670 --64.4166665 -64.2499995 -32.4166665 -32.2499995 616 0 2670 --64.2500005 -64.0833335 -32.4166665 -32.2499995 460 0 2670 --64.0833335 -63.9166665 -32.4166665 -32.2499995 359 0 2670 --63.9166665 -63.7499995 -32.4166665 -32.2499995 313 0 2670 --63.7500005 -63.5833335 -32.4166665 -32.2499995 282 0 2670 --63.5833335 -63.4166665 -32.4166665 -32.2499995 250 0 2670 --63.4166665 -63.2499995 -32.4166665 -32.2499995 220 0 2670 --63.2500005 -63.0833335 -32.4166665 -32.2499995 192 0 2670 --63.0833335 -62.9166665 -32.4166665 -32.2499995 164 0 2670 --62.9166665 -62.7499995 -32.4166665 -32.2499995 145 0 2670 --62.7500005 -62.5833335 -32.4166665 -32.2499995 130 0 2670 --62.5833335 -62.4166665 -32.4166665 -32.2499995 119 0 2670 --62.4166665 -62.2499995 -32.4166665 -32.2499995 111 0 2670 --62.2500005 -62.0833335 -32.4166665 -32.2499995 98 0 2670 --62.0833335 -61.9166665 -32.4166665 -32.2499995 96 0 2670 --61.9166665 -61.7499995 -32.4166665 -32.2499995 111 0 2670 --61.7500005 -61.5833335 -32.4166665 -32.2499995 106 0 2670 --61.5833335 -61.4166665 -32.4166665 -32.2499995 71 0 2670 --61.4166665 -61.2499995 -32.4166665 -32.2499995 54 0 2670 --61.2500005 -61.0833335 -32.4166665 -32.2499995 28 0 2670 --61.0833335 -60.9166665 -32.4166665 -32.2499995 29 0 2670 --60.9166665 -60.7499995 -32.4166665 -32.2499995 5 0 2670 --60.7500005 -60.5833335 -32.4166665 -32.2499995 11 0 2670 --60.5833335 -60.4166665 -32.4166665 -32.2499995 10 0 2670 --60.4166665 -60.2499995 -32.4166665 -32.2499995 82 0 2670 --60.2500005 -60.0833335 -32.4166665 -32.2499995 97 0 2670 --60.0833335 -59.9166665 -32.4166665 -32.2499995 92 0 2670 --59.9166665 -59.7499995 -32.4166665 -32.2499995 65 0 2670 --59.7500005 -59.5833335 -32.4166665 -32.2499995 53 0 2670 --59.5833335 -59.4166665 -32.4166665 -32.2499995 73 0 2670 --59.4166665 -59.2499995 -32.4166665 -32.2499995 67 0 2670 --59.2500005 -59.0833335 -32.4166665 -32.2499995 49 0 2670 --59.0833335 -58.9166665 -32.4166665 -32.2499995 54 0 2670 --58.9166665 -58.7499995 -32.4166665 -32.2499995 50 0 2670 --58.7500005 -58.5833335 -32.4166665 -32.2499995 47 0 2670 --58.5833335 -58.4166665 -32.4166665 -32.2499995 35 0 2670 --58.4166665 -58.2499995 -32.4166665 -32.2499995 26 0 2670 --58.2500005 -58.0833335 -32.4166665 -32.2499995 17 0 2670 --58.0833335 -57.9166665 -32.4166665 -32.2499995 52 0 2670 --57.9166665 -57.7499995 -32.4166665 -32.2499995 63 0 2670 --57.7500005 -57.5833335 -32.4166665 -32.2499995 80 0 2670 --57.5833335 -57.4166665 -32.4166665 -32.2499995 85 0 2670 --57.4166665 -57.2499995 -32.4166665 -32.2499995 76 0 2670 --57.2500005 -57.0833335 -32.4166665 -32.2499995 85 0 2670 --57.0833335 -56.9166665 -32.4166665 -32.2499995 146 0 2670 --56.9166665 -56.7499995 -32.4166665 -32.2499995 131 0 2670 --56.7500005 -56.5833335 -32.4166665 -32.2499995 135 0 2670 --56.5833335 -56.4166665 -32.4166665 -32.2499995 118 0 2670 --56.4166665 -56.2499995 -32.4166665 -32.2499995 159 0 2670 --56.2500005 -56.0833335 -32.4166665 -32.2499995 176 0 2670 --56.0833335 -55.9166665 -32.4166665 -32.2499995 112 0 2670 --55.9166665 -55.7499995 -32.4166665 -32.2499995 94 0 2670 --55.7500005 -55.5833335 -32.4166665 -32.2499995 104 0 2670 --55.5833335 -55.4166665 -32.4166665 -32.2499995 95 0 2670 --55.4166665 -55.2499995 -32.4166665 -32.2499995 107 0 2670 --55.2500005 -55.0833335 -32.4166665 -32.2499995 127 0 2670 --55.0833335 -54.9166665 -32.4166665 -32.2499995 122 0 2670 --54.9166665 -54.7499995 -32.4166665 -32.2499995 101 0 2670 --54.7500005 -54.5833335 -32.4166665 -32.2499995 128 0 2670 --54.5833335 -54.4166665 -32.4166665 -32.2499995 145 0 2670 --54.4166665 -54.2499995 -32.4166665 -32.2499995 147 0 2670 --54.2500005 -54.0833335 -32.4166665 -32.2499995 108 0 2670 --54.0833335 -53.9166665 -32.4166665 -32.2499995 102 0 2670 --53.9166665 -53.7499995 -32.4166665 -32.2499995 110 0 2670 --53.7500005 -53.5833335 -32.4166665 -32.2499995 46 0 2670 --53.5833335 -53.4166665 -32.4166665 -32.2499995 45 0 2670 --53.4166665 -53.2499995 -32.4166665 -32.2499995 81 0 2670 --53.2500005 -53.0833335 -32.4166665 -32.2499995 55 0 2670 --53.0833335 -52.9166665 -32.4166665 -32.2499995 13 0 2670 --52.9166665 -52.7499995 -32.4166665 -32.2499995 6 0 2670 --52.7500005 -52.5833335 -32.4166665 -32.2499995 4 0 2670 --52.5833335 -52.4166665 -32.4166665 -32.2499995 6 0 2670 --52.4166665 -52.2499995 -32.4166665 -32.2499995 6 0 2670 --52.2500005 -52.0833335 -32.4166665 -32.2499995 0 -7 -1670 --52.0833335 -51.9166665 -32.4166665 -32.2499995 0 -21 -1670 --51.9166665 -51.7499995 -32.4166665 -32.2499995 0 -22 -1670 --51.7500005 -51.5833335 -32.4166665 -32.2499995 0 -24 -1670 --51.5833335 -51.4166665 -32.4166665 -32.2499995 0 -36 -1670 --51.4166665 -51.2499995 -32.4166665 -32.2499995 0 -56 -1670 --51.2500005 -51.0833335 -32.4166665 -32.2499995 0 -60 -1670 --51.0833335 -50.9166665 -32.4166665 -32.2499995 0 -78 -1670 --50.9166665 -50.7499995 -32.4166665 -32.2499995 0 -72 -1670 --50.7500005 -50.5833335 -32.4166665 -32.2499995 0 -79 -1670 --50.5833335 -50.4166665 -32.4166665 -32.2499995 0 -98 -1670 --50.4166665 -50.2499995 -32.4166665 -32.2499995 0 -145 -1670 --50.2500005 -50.0833335 -32.4166665 -32.2499995 0 -721 -1670 --50.0833335 -49.9166665 -32.4166665 -32.2499995 0 -1177 -1670 --49.9166665 -49.7499995 -32.4166665 -32.2499995 0 -1606 -1670 --49.7500005 -49.5833335 -32.4166665 -32.2499995 0 -1831 -1670 --49.5833335 -49.4166665 -32.4166665 -32.2499995 0 -2022 -1670 --49.4166665 -49.2499995 -32.4166665 -32.2499995 0 -2251 -1670 --49.2500005 -49.0833335 -32.4166665 -32.2499995 0 -2316 -1670 --49.0833335 -48.9166665 -32.4166665 -32.2499995 0 -2506 -1670 --48.9166665 -48.7499995 -32.4166665 -32.2499995 0 -2782 -1670 --48.7500005 -48.5833335 -32.4166665 -32.2499995 0 -2845 -1670 --48.5833335 -48.4166665 -32.4166665 -32.2499995 0 -2931 -1670 --48.4166665 -48.2499995 -32.4166665 -32.2499995 0 -3026 -1670 --48.2500005 -48.0833335 -32.4166665 -32.2499995 0 -3113 -1670 --48.0833335 -47.9166665 -32.4166665 -32.2499995 0 -3257 -1670 --47.9166665 -47.7499995 -32.4166665 -32.2499995 0 -3304 -1670 --47.7500005 -47.5833335 -32.4166665 -32.2499995 0 -3395 -1670 --47.5833335 -47.4166665 -32.4166665 -32.2499995 0 -3475 -1670 --47.4166665 -47.2499995 -32.4166665 -32.2499995 0 -3554 -1670 --47.2500005 -47.0833335 -32.4166665 -32.2499995 0 -3626 -1670 --47.0833335 -46.9166665 -32.4166665 -32.2499995 0 -3695 -1670 --46.9166665 -46.7499995 -32.4166665 -32.2499995 0 -3757 -1670 --46.7500005 -46.5833335 -32.4166665 -32.2499995 0 -3800 -1670 --46.5833335 -46.4166665 -32.4166665 -32.2499995 0 -3862 -1670 --46.4166665 -46.2499995 -32.4166665 -32.2499995 0 -3894 -1670 --46.2500005 -46.0833335 -32.4166665 -32.2499995 0 -3929 -1670 --46.0833335 -45.9166665 -32.4166665 -32.2499995 0 -3967 -1670 --45.9166665 -45.7499995 -32.4166665 -32.2499995 0 -3978 -1670 --45.7500005 -45.5833335 -32.4166665 -32.2499995 0 -3997 -1670 --45.5833335 -45.4166665 -32.4166665 -32.2499995 0 -4016 -1670 --45.4166665 -45.2499995 -32.4166665 -32.2499995 0 -4049 -1670 --45.2500005 -45.0833335 -32.4166665 -32.2499995 0 -4071 -1670 --45.0833335 -44.9166665 -32.4166665 -32.2499995 0 -4072 -1670 --44.9166665 -44.7499995 -32.4166665 -32.2499995 0 -4065 -1670 --44.7500005 -44.5833335 -32.4166665 -32.2499995 0 -4061 -1670 --44.5833335 -44.4166665 -32.4166665 -32.2499995 0 -4079 -1670 --44.4166665 -44.2499995 -32.4166665 -32.2499995 0 -4073 -1670 --44.2500005 -44.0833335 -32.4166665 -32.2499995 0 -4026 -1670 --44.0833335 -43.9166665 -32.4166665 -32.2499995 0 -3938 -1670 --43.9166665 -43.7499995 -32.4166665 -32.2499995 0 -3847 -1670 --43.7500005 -43.5833335 -32.4166665 -32.2499995 0 -3906 -1670 --43.5833335 -43.4166665 -32.4166665 -32.2499995 0 -3893 -1670 --43.4166665 -43.2499995 -32.4166665 -32.2499995 0 -3922 -1670 --43.2500005 -43.0833335 -32.4166665 -32.2499995 0 -3916 -1670 --43.0833335 -42.9166665 -32.4166665 -32.2499995 0 -3906 -1670 --42.9166665 -42.7499995 -32.4166665 -32.2499995 0 -4036 -1670 --42.7500005 -42.5833335 -32.4166665 -32.2499995 0 -3992 -1670 --42.5833335 -42.4166665 -32.4166665 -32.2499995 0 -3937 -1670 --42.4166665 -42.2499995 -32.4166665 -32.2499995 0 -3987 -1670 --42.2500005 -42.0833335 -32.4166665 -32.2499995 0 -3951 -1670 --42.0833335 -41.9166665 -32.4166665 -32.2499995 0 -3875 -1670 --41.9166665 -41.7499995 -32.4166665 -32.2499995 0 -4006 -1670 --41.7500005 -41.5833335 -32.4166665 -32.2499995 0 -4178 -1670 --41.5833335 -41.4166665 -32.4166665 -32.2499995 0 -4228 -1670 --41.4166665 -41.2499995 -32.4166665 -32.2499995 0 -4324 -1670 --41.2500005 -41.0833335 -32.4166665 -32.2499995 0 -4362 -1670 --41.0833335 -40.9166665 -32.4166665 -32.2499995 0 -4469 -1670 --40.9166665 -40.7499995 -32.4166665 -32.2499995 0 -4481 -1670 --40.7500005 -40.5833335 -32.4166665 -32.2499995 0 -4414 -1670 --40.5833335 -40.4166665 -32.4166665 -32.2499995 0 -3788 -1670 --40.4166665 -40.2499995 -32.4166665 -32.2499995 0 -4526 -1670 --40.2500005 -40.0833335 -32.4166665 -32.2499995 0 -4317 -1670 --40.0833335 -39.9166665 -32.4166665 -32.2499995 0 -4381 -1670 --65.0833335 -64.9166665 -32.5833335 -32.4166665 917 0 2670 --64.9166665 -64.7499995 -32.5833335 -32.4166665 1575 0 2670 --64.7500005 -64.5833335 -32.5833335 -32.4166665 902 0 2670 --64.5833335 -64.4166665 -32.5833335 -32.4166665 688 0 2670 --64.4166665 -64.2499995 -32.5833335 -32.4166665 672 0 2670 --64.2500005 -64.0833335 -32.5833335 -32.4166665 488 0 2670 --64.0833335 -63.9166665 -32.5833335 -32.4166665 382 0 2670 --63.9166665 -63.7499995 -32.5833335 -32.4166665 288 0 2670 --63.7500005 -63.5833335 -32.5833335 -32.4166665 256 0 2670 --63.5833335 -63.4166665 -32.5833335 -32.4166665 233 0 2670 --63.4166665 -63.2499995 -32.5833335 -32.4166665 207 0 2670 --63.2500005 -63.0833335 -32.5833335 -32.4166665 186 0 2670 --63.0833335 -62.9166665 -32.5833335 -32.4166665 163 0 2670 --62.9166665 -62.7499995 -32.5833335 -32.4166665 144 0 2670 --62.7500005 -62.5833335 -32.5833335 -32.4166665 128 0 2670 --62.5833335 -62.4166665 -32.5833335 -32.4166665 118 0 2670 --62.4166665 -62.2499995 -32.5833335 -32.4166665 115 0 2670 --62.2500005 -62.0833335 -32.5833335 -32.4166665 113 0 2670 --62.0833335 -61.9166665 -32.5833335 -32.4166665 88 0 2670 --61.9166665 -61.7499995 -32.5833335 -32.4166665 119 0 2670 --61.7500005 -61.5833335 -32.5833335 -32.4166665 109 0 2670 --61.5833335 -61.4166665 -32.5833335 -32.4166665 94 0 2670 --61.4166665 -61.2499995 -32.5833335 -32.4166665 65 0 2670 --61.2500005 -61.0833335 -32.5833335 -32.4166665 37 0 2670 --61.0833335 -60.9166665 -32.5833335 -32.4166665 38 0 2670 --60.9166665 -60.7499995 -32.5833335 -32.4166665 23 0 2670 --60.7500005 -60.5833335 -32.5833335 -32.4166665 8 0 2670 --60.5833335 -60.4166665 -32.5833335 -32.4166665 7 0 2670 --60.4166665 -60.2499995 -32.5833335 -32.4166665 12 0 2670 --60.2500005 -60.0833335 -32.5833335 -32.4166665 47 0 2670 --60.0833335 -59.9166665 -32.5833335 -32.4166665 89 0 2670 --59.9166665 -59.7499995 -32.5833335 -32.4166665 57 0 2670 --59.7500005 -59.5833335 -32.5833335 -32.4166665 57 0 2670 --59.5833335 -59.4166665 -32.5833335 -32.4166665 52 0 2670 --59.4166665 -59.2499995 -32.5833335 -32.4166665 55 0 2670 --59.2500005 -59.0833335 -32.5833335 -32.4166665 49 0 2670 --59.0833335 -58.9166665 -32.5833335 -32.4166665 51 0 2670 --58.9166665 -58.7499995 -32.5833335 -32.4166665 53 0 2670 --58.7500005 -58.5833335 -32.5833335 -32.4166665 27 0 2670 --58.5833335 -58.4166665 -32.5833335 -32.4166665 27 0 2670 --58.4166665 -58.2499995 -32.5833335 -32.4166665 18 0 2670 --58.2500005 -58.0833335 -32.5833335 -32.4166665 16 0 2670 --58.0833335 -57.9166665 -32.5833335 -32.4166665 38 0 2670 --57.9166665 -57.7499995 -32.5833335 -32.4166665 66 0 2670 --57.7500005 -57.5833335 -32.5833335 -32.4166665 79 0 2670 --57.5833335 -57.4166665 -32.5833335 -32.4166665 79 0 2670 --57.4166665 -57.2499995 -32.5833335 -32.4166665 94 0 2670 --57.2500005 -57.0833335 -32.5833335 -32.4166665 88 0 2670 --57.0833335 -56.9166665 -32.5833335 -32.4166665 137 0 2670 --56.9166665 -56.7499995 -32.5833335 -32.4166665 144 0 2670 --56.7500005 -56.5833335 -32.5833335 -32.4166665 132 0 2670 --56.5833335 -56.4166665 -32.5833335 -32.4166665 104 0 2670 --56.4166665 -56.2499995 -32.5833335 -32.4166665 125 0 2670 --56.2500005 -56.0833335 -32.5833335 -32.4166665 159 0 2670 --56.0833335 -55.9166665 -32.5833335 -32.4166665 133 0 2670 --55.9166665 -55.7499995 -32.5833335 -32.4166665 95 0 2670 --55.7500005 -55.5833335 -32.5833335 -32.4166665 77 0 2670 --55.5833335 -55.4166665 -32.5833335 -32.4166665 80 0 2670 --55.4166665 -55.2499995 -32.5833335 -32.4166665 90 0 2670 --55.2500005 -55.0833335 -32.5833335 -32.4166665 105 0 2670 --55.0833335 -54.9166665 -32.5833335 -32.4166665 112 0 2670 --54.9166665 -54.7499995 -32.5833335 -32.4166665 127 0 2670 --54.7500005 -54.5833335 -32.5833335 -32.4166665 144 0 2670 --54.5833335 -54.4166665 -32.5833335 -32.4166665 147 0 2670 --54.4166665 -54.2499995 -32.5833335 -32.4166665 108 0 2670 --54.2500005 -54.0833335 -32.5833335 -32.4166665 103 0 2670 --54.0833335 -53.9166665 -32.5833335 -32.4166665 114 0 2670 --53.9166665 -53.7499995 -32.5833335 -32.4166665 144 0 2670 --53.7500005 -53.5833335 -32.5833335 -32.4166665 59 0 2670 --53.5833335 -53.4166665 -32.5833335 -32.4166665 16 0 2670 --53.4166665 -53.2499995 -32.5833335 -32.4166665 53 0 2670 --53.2500005 -53.0833335 -32.5833335 -32.4166665 16 0 2670 --53.0833335 -52.9166665 -32.5833335 -32.4166665 4 0 2670 --52.9166665 -52.7499995 -32.5833335 -32.4166665 0 -18 -1670 --52.7500005 -52.5833335 -32.5833335 -32.4166665 0 -9 -1670 --52.5833335 -52.4166665 -32.5833335 -32.4166665 5 0 2670 --52.4166665 -52.2499995 -32.5833335 -32.4166665 0 -2 -1670 --52.2500005 -52.0833335 -32.5833335 -32.4166665 0 -12 -1670 --52.0833335 -51.9166665 -32.5833335 -32.4166665 0 -22 -1670 --51.9166665 -51.7499995 -32.5833335 -32.4166665 0 -28 -1670 --51.7500005 -51.5833335 -32.5833335 -32.4166665 0 -35 -1670 --51.5833335 -51.4166665 -32.5833335 -32.4166665 0 -48 -1670 --51.4166665 -51.2499995 -32.5833335 -32.4166665 0 -53 -1670 --51.2500005 -51.0833335 -32.5833335 -32.4166665 0 -63 -1670 --51.0833335 -50.9166665 -32.5833335 -32.4166665 0 -65 -1670 --50.9166665 -50.7499995 -32.5833335 -32.4166665 0 -68 -1670 --50.7500005 -50.5833335 -32.5833335 -32.4166665 0 -81 -1670 --50.5833335 -50.4166665 -32.5833335 -32.4166665 0 -96 -1670 --50.4166665 -50.2499995 -32.5833335 -32.4166665 0 -232 -1670 --50.2500005 -50.0833335 -32.5833335 -32.4166665 0 -916 -1670 --50.0833335 -49.9166665 -32.5833335 -32.4166665 0 -1219 -1670 --49.9166665 -49.7499995 -32.5833335 -32.4166665 0 -1485 -1670 --49.7500005 -49.5833335 -32.5833335 -32.4166665 0 -1736 -1670 --49.5833335 -49.4166665 -32.5833335 -32.4166665 0 -1861 -1670 --49.4166665 -49.2499995 -32.5833335 -32.4166665 0 -2048 -1670 --49.2500005 -49.0833335 -32.5833335 -32.4166665 0 -2292 -1670 --49.0833335 -48.9166665 -32.5833335 -32.4166665 0 -2461 -1670 --48.9166665 -48.7499995 -32.5833335 -32.4166665 0 -2899 -1670 --48.7500005 -48.5833335 -32.5833335 -32.4166665 0 -2889 -1670 --48.5833335 -48.4166665 -32.5833335 -32.4166665 0 -2942 -1670 --48.4166665 -48.2499995 -32.5833335 -32.4166665 0 -3083 -1670 --48.2500005 -48.0833335 -32.5833335 -32.4166665 0 -3213 -1670 --48.0833335 -47.9166665 -32.5833335 -32.4166665 0 -3284 -1670 --47.9166665 -47.7499995 -32.5833335 -32.4166665 0 -3388 -1670 --47.7500005 -47.5833335 -32.5833335 -32.4166665 0 -3453 -1670 --47.5833335 -47.4166665 -32.5833335 -32.4166665 0 -3541 -1670 --47.4166665 -47.2499995 -32.5833335 -32.4166665 0 -3626 -1670 --47.2500005 -47.0833335 -32.5833335 -32.4166665 0 -3692 -1670 --47.0833335 -46.9166665 -32.5833335 -32.4166665 0 -3762 -1670 --46.9166665 -46.7499995 -32.5833335 -32.4166665 0 -3811 -1670 --46.7500005 -46.5833335 -32.5833335 -32.4166665 0 -3848 -1670 --46.5833335 -46.4166665 -32.5833335 -32.4166665 0 -3885 -1670 --46.4166665 -46.2499995 -32.5833335 -32.4166665 0 -3925 -1670 --46.2500005 -46.0833335 -32.5833335 -32.4166665 0 -3945 -1670 --46.0833335 -45.9166665 -32.5833335 -32.4166665 0 -3980 -1670 --45.9166665 -45.7499995 -32.5833335 -32.4166665 0 -4011 -1670 --45.7500005 -45.5833335 -32.5833335 -32.4166665 0 -4031 -1670 --45.5833335 -45.4166665 -32.5833335 -32.4166665 0 -4083 -1670 --45.4166665 -45.2499995 -32.5833335 -32.4166665 0 -4103 -1670 --45.2500005 -45.0833335 -32.5833335 -32.4166665 0 -4102 -1670 --45.0833335 -44.9166665 -32.5833335 -32.4166665 0 -4127 -1670 --44.9166665 -44.7499995 -32.5833335 -32.4166665 0 -4164 -1670 --44.7500005 -44.5833335 -32.5833335 -32.4166665 0 -4117 -1670 --44.5833335 -44.4166665 -32.5833335 -32.4166665 0 -4240 -1670 --44.4166665 -44.2499995 -32.5833335 -32.4166665 0 -4096 -1670 --44.2500005 -44.0833335 -32.5833335 -32.4166665 0 -4144 -1670 --44.0833335 -43.9166665 -32.5833335 -32.4166665 0 -4141 -1670 --43.9166665 -43.7499995 -32.5833335 -32.4166665 0 -4093 -1670 --43.7500005 -43.5833335 -32.5833335 -32.4166665 0 -4061 -1670 --43.5833335 -43.4166665 -32.5833335 -32.4166665 0 -4101 -1670 --43.4166665 -43.2499995 -32.5833335 -32.4166665 0 -4002 -1670 --43.2500005 -43.0833335 -32.5833335 -32.4166665 0 -4164 -1670 --43.0833335 -42.9166665 -32.5833335 -32.4166665 0 -4125 -1670 --42.9166665 -42.7499995 -32.5833335 -32.4166665 0 -4182 -1670 --42.7500005 -42.5833335 -32.5833335 -32.4166665 0 -4116 -1670 --42.5833335 -42.4166665 -32.5833335 -32.4166665 0 -4146 -1670 --42.4166665 -42.2499995 -32.5833335 -32.4166665 0 -4124 -1670 --42.2500005 -42.0833335 -32.5833335 -32.4166665 0 -4096 -1670 --42.0833335 -41.9166665 -32.5833335 -32.4166665 0 -4087 -1670 --41.9166665 -41.7499995 -32.5833335 -32.4166665 0 -4167 -1670 --41.7500005 -41.5833335 -32.5833335 -32.4166665 0 -4277 -1670 --41.5833335 -41.4166665 -32.5833335 -32.4166665 0 -4401 -1670 --41.4166665 -41.2499995 -32.5833335 -32.4166665 0 -4400 -1670 --41.2500005 -41.0833335 -32.5833335 -32.4166665 0 -4420 -1670 --41.0833335 -40.9166665 -32.5833335 -32.4166665 0 -4472 -1670 --40.9166665 -40.7499995 -32.5833335 -32.4166665 0 -4411 -1670 --40.7500005 -40.5833335 -32.5833335 -32.4166665 0 -4514 -1670 --40.5833335 -40.4166665 -32.5833335 -32.4166665 0 -4105 -1670 --40.4166665 -40.2499995 -32.5833335 -32.4166665 0 -4196 -1670 --40.2500005 -40.0833335 -32.5833335 -32.4166665 0 -4402 -1670 --40.0833335 -39.9166665 -32.5833335 -32.4166665 0 -4337 -1670 --65.0833335 -64.9166665 -32.7500005 -32.5833335 1001 0 2670 --64.9166665 -64.7499995 -32.7500005 -32.5833335 1203 0 2670 --64.7500005 -64.5833335 -32.7500005 -32.5833335 820 0 2670 --64.5833335 -64.4166665 -32.7500005 -32.5833335 684 0 2670 --64.4166665 -64.2499995 -32.7500005 -32.5833335 579 0 2670 --64.2500005 -64.0833335 -32.7500005 -32.5833335 458 0 2670 --64.0833335 -63.9166665 -32.7500005 -32.5833335 364 0 2670 --63.9166665 -63.7499995 -32.7500005 -32.5833335 295 0 2670 --63.7500005 -63.5833335 -32.7500005 -32.5833335 244 0 2670 --63.5833335 -63.4166665 -32.7500005 -32.5833335 211 0 2670 --63.4166665 -63.2499995 -32.7500005 -32.5833335 190 0 2670 --63.2500005 -63.0833335 -32.7500005 -32.5833335 172 0 2670 --63.0833335 -62.9166665 -32.7500005 -32.5833335 157 0 2670 --62.9166665 -62.7499995 -32.7500005 -32.5833335 140 0 2670 --62.7500005 -62.5833335 -32.7500005 -32.5833335 126 0 2670 --62.5833335 -62.4166665 -32.7500005 -32.5833335 116 0 2670 --62.4166665 -62.2499995 -32.7500005 -32.5833335 115 0 2670 --62.2500005 -62.0833335 -32.7500005 -32.5833335 111 0 2670 --62.0833335 -61.9166665 -32.7500005 -32.5833335 89 0 2670 --61.9166665 -61.7499995 -32.7500005 -32.5833335 91 0 2670 --61.7500005 -61.5833335 -32.7500005 -32.5833335 113 0 2670 --61.5833335 -61.4166665 -32.7500005 -32.5833335 94 0 2670 --61.4166665 -61.2499995 -32.7500005 -32.5833335 73 0 2670 --61.2500005 -61.0833335 -32.7500005 -32.5833335 53 0 2670 --61.0833335 -60.9166665 -32.7500005 -32.5833335 38 0 2670 --60.9166665 -60.7499995 -32.7500005 -32.5833335 31 0 2670 --60.7500005 -60.5833335 -32.7500005 -32.5833335 9 0 2670 --60.5833335 -60.4166665 -32.7500005 -32.5833335 7 0 2670 --60.4166665 -60.2499995 -32.7500005 -32.5833335 5 0 2670 --60.2500005 -60.0833335 -32.7500005 -32.5833335 5 0 2670 --60.0833335 -59.9166665 -32.7500005 -32.5833335 70 0 2670 --59.9166665 -59.7499995 -32.7500005 -32.5833335 42 0 2670 --59.7500005 -59.5833335 -32.7500005 -32.5833335 74 0 2670 --59.5833335 -59.4166665 -32.7500005 -32.5833335 49 0 2670 --59.4166665 -59.2499995 -32.7500005 -32.5833335 58 0 2670 --59.2500005 -59.0833335 -32.7500005 -32.5833335 34 0 2670 --59.0833335 -58.9166665 -32.7500005 -32.5833335 32 0 2670 --58.9166665 -58.7499995 -32.7500005 -32.5833335 57 0 2670 --58.7500005 -58.5833335 -32.7500005 -32.5833335 39 0 2670 --58.5833335 -58.4166665 -32.7500005 -32.5833335 20 0 2670 --58.4166665 -58.2499995 -32.7500005 -32.5833335 37 0 2670 --58.2500005 -58.0833335 -32.7500005 -32.5833335 3 0 2670 --58.0833335 -57.9166665 -32.7500005 -32.5833335 36 0 2670 --57.9166665 -57.7499995 -32.7500005 -32.5833335 43 0 2670 --57.7500005 -57.5833335 -32.7500005 -32.5833335 68 0 2670 --57.5833335 -57.4166665 -32.7500005 -32.5833335 85 0 2670 --57.4166665 -57.2499995 -32.7500005 -32.5833335 84 0 2670 --57.2500005 -57.0833335 -32.7500005 -32.5833335 57 0 2670 --57.0833335 -56.9166665 -32.7500005 -32.5833335 105 0 2670 --56.9166665 -56.7499995 -32.7500005 -32.5833335 118 0 2670 --56.7500005 -56.5833335 -32.7500005 -32.5833335 85 0 2670 --56.5833335 -56.4166665 -32.7500005 -32.5833335 117 0 2670 --56.4166665 -56.2499995 -32.7500005 -32.5833335 78 0 2670 --56.2500005 -56.0833335 -32.7500005 -32.5833335 90 0 2670 --56.0833335 -55.9166665 -32.7500005 -32.5833335 73 0 2670 --55.9166665 -55.7499995 -32.7500005 -32.5833335 76 0 2670 --55.7500005 -55.5833335 -32.7500005 -32.5833335 102 0 2670 --55.5833335 -55.4166665 -32.7500005 -32.5833335 129 0 2670 --55.4166665 -55.2499995 -32.7500005 -32.5833335 105 0 2670 --55.2500005 -55.0833335 -32.7500005 -32.5833335 155 0 2670 --55.0833335 -54.9166665 -32.7500005 -32.5833335 156 0 2670 --54.9166665 -54.7499995 -32.7500005 -32.5833335 157 0 2670 --54.7500005 -54.5833335 -32.7500005 -32.5833335 263 0 2670 --54.5833335 -54.4166665 -32.7500005 -32.5833335 226 0 2670 --54.4166665 -54.2499995 -32.7500005 -32.5833335 229 0 2670 --54.2500005 -54.0833335 -32.7500005 -32.5833335 144 0 2670 --54.0833335 -53.9166665 -32.7500005 -32.5833335 55 0 2670 --53.9166665 -53.7499995 -32.7500005 -32.5833335 46 0 2670 --53.7500005 -53.5833335 -32.7500005 -32.5833335 50 0 2670 --53.5833335 -53.4166665 -32.7500005 -32.5833335 16 0 2670 --53.4166665 -53.2499995 -32.7500005 -32.5833335 13 0 2670 --53.2500005 -53.0833335 -32.7500005 -32.5833335 0 -12 -1670 --53.0833335 -52.9166665 -32.7500005 -32.5833335 0 -12 -1670 --52.9166665 -52.7499995 -32.7500005 -32.5833335 0 -6 -1670 --52.7500005 -52.5833335 -32.7500005 -32.5833335 0 -7 -1670 --52.5833335 -52.4166665 -32.7500005 -32.5833335 5 0 2670 --52.4166665 -52.2499995 -32.7500005 -32.5833335 0 -5 -1670 --52.2500005 -52.0833335 -32.7500005 -32.5833335 0 -14 -1670 --52.0833335 -51.9166665 -32.7500005 -32.5833335 0 -22 -1670 --51.9166665 -51.7499995 -32.7500005 -32.5833335 0 -33 -1670 --51.7500005 -51.5833335 -32.7500005 -32.5833335 0 -42 -1670 --51.5833335 -51.4166665 -32.7500005 -32.5833335 0 -49 -1670 --51.4166665 -51.2499995 -32.7500005 -32.5833335 0 -58 -1670 --51.2500005 -51.0833335 -32.7500005 -32.5833335 0 -60 -1670 --51.0833335 -50.9166665 -32.7500005 -32.5833335 0 -63 -1670 --50.9166665 -50.7499995 -32.7500005 -32.5833335 0 -103 -1670 --50.7500005 -50.5833335 -32.7500005 -32.5833335 0 -186 -1670 --50.5833335 -50.4166665 -32.7500005 -32.5833335 0 -129 -1670 --50.4166665 -50.2499995 -32.7500005 -32.5833335 0 -464 -1670 --50.2500005 -50.0833335 -32.7500005 -32.5833335 0 -926 -1670 --50.0833335 -49.9166665 -32.7500005 -32.5833335 0 -1148 -1670 --49.9166665 -49.7499995 -32.7500005 -32.5833335 0 -1342 -1670 --49.7500005 -49.5833335 -32.7500005 -32.5833335 0 -1599 -1670 --49.5833335 -49.4166665 -32.7500005 -32.5833335 0 -1782 -1670 --49.4166665 -49.2499995 -32.7500005 -32.5833335 0 -1960 -1670 --49.2500005 -49.0833335 -32.7500005 -32.5833335 0 -2186 -1670 --49.0833335 -48.9166665 -32.7500005 -32.5833335 0 -2638 -1670 --48.9166665 -48.7499995 -32.7500005 -32.5833335 0 -2864 -1670 --48.7500005 -48.5833335 -32.7500005 -32.5833335 0 -2869 -1670 --48.5833335 -48.4166665 -32.7500005 -32.5833335 0 -3090 -1670 --48.4166665 -48.2499995 -32.7500005 -32.5833335 0 -3129 -1670 --48.2500005 -48.0833335 -32.7500005 -32.5833335 0 -3219 -1670 --48.0833335 -47.9166665 -32.7500005 -32.5833335 0 -3358 -1670 --47.9166665 -47.7499995 -32.7500005 -32.5833335 0 -3411 -1670 --47.7500005 -47.5833335 -32.7500005 -32.5833335 0 -3490 -1670 --47.5833335 -47.4166665 -32.7500005 -32.5833335 0 -3573 -1670 --47.4166665 -47.2499995 -32.7500005 -32.5833335 0 -3656 -1670 --47.2500005 -47.0833335 -32.7500005 -32.5833335 0 -3720 -1670 --47.0833335 -46.9166665 -32.7500005 -32.5833335 0 -3773 -1670 --46.9166665 -46.7499995 -32.7500005 -32.5833335 0 -3802 -1670 --46.7500005 -46.5833335 -32.7500005 -32.5833335 0 -3841 -1670 --46.5833335 -46.4166665 -32.7500005 -32.5833335 0 -3889 -1670 --46.4166665 -46.2499995 -32.7500005 -32.5833335 0 -3942 -1670 --46.2500005 -46.0833335 -32.7500005 -32.5833335 0 -3968 -1670 --46.0833335 -45.9166665 -32.7500005 -32.5833335 0 -4002 -1670 --45.9166665 -45.7499995 -32.7500005 -32.5833335 0 -4031 -1670 --45.7500005 -45.5833335 -32.7500005 -32.5833335 0 -4079 -1670 --45.5833335 -45.4166665 -32.7500005 -32.5833335 0 -4093 -1670 --45.4166665 -45.2499995 -32.7500005 -32.5833335 0 -4101 -1670 --45.2500005 -45.0833335 -32.7500005 -32.5833335 0 -4124 -1670 --45.0833335 -44.9166665 -32.7500005 -32.5833335 0 -4140 -1670 --44.9166665 -44.7499995 -32.7500005 -32.5833335 0 -4179 -1670 --44.7500005 -44.5833335 -32.7500005 -32.5833335 0 -4171 -1670 --44.5833335 -44.4166665 -32.7500005 -32.5833335 0 -4233 -1670 --44.4166665 -44.2499995 -32.7500005 -32.5833335 0 -4179 -1670 --44.2500005 -44.0833335 -32.7500005 -32.5833335 0 -4235 -1670 --44.0833335 -43.9166665 -32.7500005 -32.5833335 0 -4228 -1670 --43.9166665 -43.7499995 -32.7500005 -32.5833335 0 -4220 -1670 --43.7500005 -43.5833335 -32.7500005 -32.5833335 0 -4224 -1670 --43.5833335 -43.4166665 -32.7500005 -32.5833335 0 -4175 -1670 --43.4166665 -43.2499995 -32.7500005 -32.5833335 0 -4240 -1670 --43.2500005 -43.0833335 -32.7500005 -32.5833335 0 -4252 -1670 --43.0833335 -42.9166665 -32.7500005 -32.5833335 0 -4293 -1670 --42.9166665 -42.7499995 -32.7500005 -32.5833335 0 -4313 -1670 --42.7500005 -42.5833335 -32.7500005 -32.5833335 0 -4261 -1670 --42.5833335 -42.4166665 -32.7500005 -32.5833335 0 -4247 -1670 --42.4166665 -42.2499995 -32.7500005 -32.5833335 0 -4294 -1670 --42.2500005 -42.0833335 -32.7500005 -32.5833335 0 -4293 -1670 --42.0833335 -41.9166665 -32.7500005 -32.5833335 0 -4315 -1670 --41.9166665 -41.7499995 -32.7500005 -32.5833335 0 -4341 -1670 --41.7500005 -41.5833335 -32.7500005 -32.5833335 0 -4384 -1670 --41.5833335 -41.4166665 -32.7500005 -32.5833335 0 -4417 -1670 --41.4166665 -41.2499995 -32.7500005 -32.5833335 0 -4492 -1670 --41.2500005 -41.0833335 -32.7500005 -32.5833335 0 -4467 -1670 --41.0833335 -40.9166665 -32.7500005 -32.5833335 0 -4509 -1670 --40.9166665 -40.7499995 -32.7500005 -32.5833335 0 -4462 -1670 --40.7500005 -40.5833335 -32.7500005 -32.5833335 0 -4567 -1670 --40.5833335 -40.4166665 -32.7500005 -32.5833335 0 -4535 -1670 --40.4166665 -40.2499995 -32.7500005 -32.5833335 0 -4396 -1670 --40.2500005 -40.0833335 -32.7500005 -32.5833335 0 -4484 -1670 --40.0833335 -39.9166665 -32.7500005 -32.5833335 0 -4591 -1670 --65.0833335 -64.9166665 -32.9166665 -32.7499995 1002 0 2670 --64.9166665 -64.7499995 -32.9166665 -32.7499995 896 0 2670 --64.7500005 -64.5833335 -32.9166665 -32.7499995 691 0 2670 --64.5833335 -64.4166665 -32.9166665 -32.7499995 649 0 2670 --64.4166665 -64.2499995 -32.9166665 -32.7499995 533 0 2670 --64.2500005 -64.0833335 -32.9166665 -32.7499995 429 0 2670 --64.0833335 -63.9166665 -32.9166665 -32.7499995 343 0 2670 --63.9166665 -63.7499995 -32.9166665 -32.7499995 282 0 2670 --63.7500005 -63.5833335 -32.9166665 -32.7499995 231 0 2670 --63.5833335 -63.4166665 -32.9166665 -32.7499995 191 0 2670 --63.4166665 -63.2499995 -32.9166665 -32.7499995 180 0 2670 --63.2500005 -63.0833335 -32.9166665 -32.7499995 162 0 2670 --63.0833335 -62.9166665 -32.9166665 -32.7499995 146 0 2670 --62.9166665 -62.7499995 -32.9166665 -32.7499995 133 0 2670 --62.7500005 -62.5833335 -32.9166665 -32.7499995 121 0 2670 --62.5833335 -62.4166665 -32.9166665 -32.7499995 115 0 2670 --62.4166665 -62.2499995 -32.9166665 -32.7499995 109 0 2670 --62.2500005 -62.0833335 -32.9166665 -32.7499995 108 0 2670 --62.0833335 -61.9166665 -32.9166665 -32.7499995 102 0 2670 --61.9166665 -61.7499995 -32.9166665 -32.7499995 86 0 2670 --61.7500005 -61.5833335 -32.9166665 -32.7499995 116 0 2670 --61.5833335 -61.4166665 -32.9166665 -32.7499995 100 0 2670 --61.4166665 -61.2499995 -32.9166665 -32.7499995 76 0 2670 --61.2500005 -61.0833335 -32.9166665 -32.7499995 48 0 2670 --61.0833335 -60.9166665 -32.9166665 -32.7499995 43 0 2670 --60.9166665 -60.7499995 -32.9166665 -32.7499995 29 0 2670 --60.7500005 -60.5833335 -32.9166665 -32.7499995 8 0 2670 --60.5833335 -60.4166665 -32.9166665 -32.7499995 6 0 2670 --60.4166665 -60.2499995 -32.9166665 -32.7499995 6 0 2670 --60.2500005 -60.0833335 -32.9166665 -32.7499995 4 0 2670 --60.0833335 -59.9166665 -32.9166665 -32.7499995 5 0 2670 --59.9166665 -59.7499995 -32.9166665 -32.7499995 11 0 2670 --59.7500005 -59.5833335 -32.9166665 -32.7499995 57 0 2670 --59.5833335 -59.4166665 -32.9166665 -32.7499995 29 0 2670 --59.4166665 -59.2499995 -32.9166665 -32.7499995 61 0 2670 --59.2500005 -59.0833335 -32.9166665 -32.7499995 19 0 2670 --59.0833335 -58.9166665 -32.9166665 -32.7499995 43 0 2670 --58.9166665 -58.7499995 -32.9166665 -32.7499995 46 0 2670 --58.7500005 -58.5833335 -32.9166665 -32.7499995 43 0 2670 --58.5833335 -58.4166665 -32.9166665 -32.7499995 9 0 2670 --58.4166665 -58.2499995 -32.9166665 -32.7499995 40 0 2670 --58.2500005 -58.0833335 -32.9166665 -32.7499995 1 0 2670 --58.0833335 -57.9166665 -32.9166665 -32.7499995 27 0 2670 --57.9166665 -57.7499995 -32.9166665 -32.7499995 66 0 2670 --57.7500005 -57.5833335 -32.9166665 -32.7499995 53 0 2670 --57.5833335 -57.4166665 -32.9166665 -32.7499995 37 0 2670 --57.4166665 -57.2499995 -32.9166665 -32.7499995 41 0 2670 --57.2500005 -57.0833335 -32.9166665 -32.7499995 104 0 2670 --57.0833335 -56.9166665 -32.9166665 -32.7499995 120 0 2670 --56.9166665 -56.7499995 -32.9166665 -32.7499995 74 0 2670 --56.7500005 -56.5833335 -32.9166665 -32.7499995 59 0 2670 --56.5833335 -56.4166665 -32.9166665 -32.7499995 70 0 2670 --56.4166665 -56.2499995 -32.9166665 -32.7499995 78 0 2670 --56.2500005 -56.0833335 -32.9166665 -32.7499995 82 0 2670 --56.0833335 -55.9166665 -32.9166665 -32.7499995 113 0 2670 --55.9166665 -55.7499995 -32.9166665 -32.7499995 112 0 2670 --55.7500005 -55.5833335 -32.9166665 -32.7499995 120 0 2670 --55.5833335 -55.4166665 -32.9166665 -32.7499995 103 0 2670 --55.4166665 -55.2499995 -32.9166665 -32.7499995 130 0 2670 --55.2500005 -55.0833335 -32.9166665 -32.7499995 156 0 2670 --55.0833335 -54.9166665 -32.9166665 -32.7499995 169 0 2670 --54.9166665 -54.7499995 -32.9166665 -32.7499995 286 0 2670 --54.7500005 -54.5833335 -32.9166665 -32.7499995 293 0 2670 --54.5833335 -54.4166665 -32.9166665 -32.7499995 309 0 2670 --54.4166665 -54.2499995 -32.9166665 -32.7499995 141 0 2670 --54.2500005 -54.0833335 -32.9166665 -32.7499995 89 0 2670 --54.0833335 -53.9166665 -32.9166665 -32.7499995 39 0 2670 --53.9166665 -53.7499995 -32.9166665 -32.7499995 28 0 2670 --53.7500005 -53.5833335 -32.9166665 -32.7499995 17 0 2670 --53.5833335 -53.4166665 -32.9166665 -32.7499995 8 0 2670 --53.4166665 -53.2499995 -32.9166665 -32.7499995 4 0 2670 --53.2500005 -53.0833335 -32.9166665 -32.7499995 0 -3 -1670 --53.0833335 -52.9166665 -32.9166665 -32.7499995 2 0 2670 --52.9166665 -52.7499995 -32.9166665 -32.7499995 0 -10 -1670 --52.7500005 -52.5833335 -32.9166665 -32.7499995 7 0 2670 --52.5833335 -52.4166665 -32.9166665 -32.7499995 7 0 2670 --52.4166665 -52.2499995 -32.9166665 -32.7499995 0 -9 -1670 --52.2500005 -52.0833335 -32.9166665 -32.7499995 0 -19 -1670 --52.0833335 -51.9166665 -32.9166665 -32.7499995 0 -26 -1670 --51.9166665 -51.7499995 -32.9166665 -32.7499995 0 -39 -1670 --51.7500005 -51.5833335 -32.9166665 -32.7499995 0 -48 -1670 --51.5833335 -51.4166665 -32.9166665 -32.7499995 0 -57 -1670 --51.4166665 -51.2499995 -32.9166665 -32.7499995 0 -77 -1670 --51.2500005 -51.0833335 -32.9166665 -32.7499995 0 -64 -1670 --51.0833335 -50.9166665 -32.9166665 -32.7499995 0 -68 -1670 --50.9166665 -50.7499995 -32.9166665 -32.7499995 0 -71 -1670 --50.7500005 -50.5833335 -32.9166665 -32.7499995 0 -228 -1670 --50.5833335 -50.4166665 -32.9166665 -32.7499995 0 -134 -1670 --50.4166665 -50.2499995 -32.9166665 -32.7499995 0 -610 -1670 --50.2500005 -50.0833335 -32.9166665 -32.7499995 0 -884 -1670 --50.0833335 -49.9166665 -32.9166665 -32.7499995 0 -1074 -1670 --49.9166665 -49.7499995 -32.9166665 -32.7499995 0 -1216 -1670 --49.7500005 -49.5833335 -32.9166665 -32.7499995 0 -1448 -1670 --49.5833335 -49.4166665 -32.9166665 -32.7499995 0 -1682 -1670 --49.4166665 -49.2499995 -32.9166665 -32.7499995 0 -1856 -1670 --49.2500005 -49.0833335 -32.9166665 -32.7499995 0 -2260 -1670 --49.0833335 -48.9166665 -32.9166665 -32.7499995 0 -2807 -1670 --48.9166665 -48.7499995 -32.9166665 -32.7499995 0 -2856 -1670 --48.7500005 -48.5833335 -32.9166665 -32.7499995 0 -2978 -1670 --48.5833335 -48.4166665 -32.9166665 -32.7499995 0 -3074 -1670 --48.4166665 -48.2499995 -32.9166665 -32.7499995 0 -3169 -1670 --48.2500005 -48.0833335 -32.9166665 -32.7499995 0 -3267 -1670 --48.0833335 -47.9166665 -32.9166665 -32.7499995 0 -3368 -1670 --47.9166665 -47.7499995 -32.9166665 -32.7499995 0 -3433 -1670 --47.7500005 -47.5833335 -32.9166665 -32.7499995 0 -3514 -1670 --47.5833335 -47.4166665 -32.9166665 -32.7499995 0 -3579 -1670 --47.4166665 -47.2499995 -32.9166665 -32.7499995 0 -3651 -1670 --47.2500005 -47.0833335 -32.9166665 -32.7499995 0 -3703 -1670 --47.0833335 -46.9166665 -32.9166665 -32.7499995 0 -3749 -1670 --46.9166665 -46.7499995 -32.9166665 -32.7499995 0 -3792 -1670 --46.7500005 -46.5833335 -32.9166665 -32.7499995 0 -3830 -1670 --46.5833335 -46.4166665 -32.9166665 -32.7499995 0 -3889 -1670 --46.4166665 -46.2499995 -32.9166665 -32.7499995 0 -3942 -1670 --46.2500005 -46.0833335 -32.9166665 -32.7499995 0 -3971 -1670 --46.0833335 -45.9166665 -32.9166665 -32.7499995 0 -4012 -1670 --45.9166665 -45.7499995 -32.9166665 -32.7499995 0 -4042 -1670 --45.7500005 -45.5833335 -32.9166665 -32.7499995 0 -4078 -1670 --45.5833335 -45.4166665 -32.9166665 -32.7499995 0 -4113 -1670 --45.4166665 -45.2499995 -32.9166665 -32.7499995 0 -4132 -1670 --45.2500005 -45.0833335 -32.9166665 -32.7499995 0 -4134 -1670 --45.0833335 -44.9166665 -32.9166665 -32.7499995 0 -4161 -1670 --44.9166665 -44.7499995 -32.9166665 -32.7499995 0 -4194 -1670 --44.7500005 -44.5833335 -32.9166665 -32.7499995 0 -4207 -1670 --44.5833335 -44.4166665 -32.9166665 -32.7499995 0 -4238 -1670 --44.4166665 -44.2499995 -32.9166665 -32.7499995 0 -4215 -1670 --44.2500005 -44.0833335 -32.9166665 -32.7499995 0 -4273 -1670 --44.0833335 -43.9166665 -32.9166665 -32.7499995 0 -4251 -1670 --43.9166665 -43.7499995 -32.9166665 -32.7499995 0 -4196 -1670 --43.7500005 -43.5833335 -32.9166665 -32.7499995 0 -4317 -1670 --43.5833335 -43.4166665 -32.9166665 -32.7499995 0 -4273 -1670 --43.4166665 -43.2499995 -32.9166665 -32.7499995 0 -4335 -1670 --43.2500005 -43.0833335 -32.9166665 -32.7499995 0 -4325 -1670 --43.0833335 -42.9166665 -32.9166665 -32.7499995 0 -4336 -1670 --42.9166665 -42.7499995 -32.9166665 -32.7499995 0 -4352 -1670 --42.7500005 -42.5833335 -32.9166665 -32.7499995 0 -4352 -1670 --42.5833335 -42.4166665 -32.9166665 -32.7499995 0 -4370 -1670 --42.4166665 -42.2499995 -32.9166665 -32.7499995 0 -4359 -1670 --42.2500005 -42.0833335 -32.9166665 -32.7499995 0 -4401 -1670 --42.0833335 -41.9166665 -32.9166665 -32.7499995 0 -4451 -1670 --41.9166665 -41.7499995 -32.9166665 -32.7499995 0 -4455 -1670 --41.7500005 -41.5833335 -32.9166665 -32.7499995 0 -4498 -1670 --41.5833335 -41.4166665 -32.9166665 -32.7499995 0 -4516 -1670 --41.4166665 -41.2499995 -32.9166665 -32.7499995 0 -4511 -1670 --41.2500005 -41.0833335 -32.9166665 -32.7499995 0 -4384 -1670 --41.0833335 -40.9166665 -32.9166665 -32.7499995 0 -4552 -1670 --40.9166665 -40.7499995 -32.9166665 -32.7499995 0 -4607 -1670 --40.7500005 -40.5833335 -32.9166665 -32.7499995 0 -4642 -1670 --40.5833335 -40.4166665 -32.9166665 -32.7499995 0 -4774 -1670 --40.4166665 -40.2499995 -32.9166665 -32.7499995 0 -4722 -1670 --40.2500005 -40.0833335 -32.9166665 -32.7499995 0 -4812 -1670 --40.0833335 -39.9166665 -32.9166665 -32.7499995 0 -4718 -1670 --65.0833335 -64.9166665 -33.0833335 -32.9166665 1374 0 2670 --64.9166665 -64.7499995 -33.0833335 -32.9166665 800 0 2670 --64.7500005 -64.5833335 -33.0833335 -32.9166665 606 0 2670 --64.5833335 -64.4166665 -33.0833335 -32.9166665 548 0 2670 --64.4166665 -64.2499995 -33.0833335 -32.9166665 486 0 2670 --64.2500005 -64.0833335 -33.0833335 -32.9166665 404 0 2670 --64.0833335 -63.9166665 -33.0833335 -32.9166665 318 0 2670 --63.9166665 -63.7499995 -33.0833335 -32.9166665 275 0 2670 --63.7500005 -63.5833335 -33.0833335 -32.9166665 229 0 2670 --63.5833335 -63.4166665 -33.0833335 -32.9166665 195 0 2670 --63.4166665 -63.2499995 -33.0833335 -32.9166665 164 0 2670 --63.2500005 -63.0833335 -33.0833335 -32.9166665 153 0 2670 --63.0833335 -62.9166665 -33.0833335 -32.9166665 137 0 2670 --62.9166665 -62.7499995 -33.0833335 -32.9166665 125 0 2670 --62.7500005 -62.5833335 -33.0833335 -32.9166665 116 0 2670 --62.5833335 -62.4166665 -33.0833335 -32.9166665 116 0 2670 --62.4166665 -62.2499995 -33.0833335 -32.9166665 112 0 2670 --62.2500005 -62.0833335 -33.0833335 -32.9166665 106 0 2670 --62.0833335 -61.9166665 -33.0833335 -32.9166665 102 0 2670 --61.9166665 -61.7499995 -33.0833335 -32.9166665 81 0 2670 --61.7500005 -61.5833335 -33.0833335 -32.9166665 125 0 2670 --61.5833335 -61.4166665 -33.0833335 -32.9166665 76 0 2670 --61.4166665 -61.2499995 -33.0833335 -32.9166665 50 0 2670 --61.2500005 -61.0833335 -33.0833335 -32.9166665 73 0 2670 --61.0833335 -60.9166665 -33.0833335 -32.9166665 66 0 2670 --60.9166665 -60.7499995 -33.0833335 -32.9166665 34 0 2670 --60.7500005 -60.5833335 -33.0833335 -32.9166665 38 0 2670 --60.5833335 -60.4166665 -33.0833335 -32.9166665 8 0 2670 --60.4166665 -60.2499995 -33.0833335 -32.9166665 6 0 2670 --60.2500005 -60.0833335 -33.0833335 -32.9166665 5 0 2670 --60.0833335 -59.9166665 -33.0833335 -32.9166665 5 0 2670 --59.9166665 -59.7499995 -33.0833335 -32.9166665 5 0 2670 --59.7500005 -59.5833335 -33.0833335 -32.9166665 6 0 2670 --59.5833335 -59.4166665 -33.0833335 -32.9166665 16 0 2670 --59.4166665 -59.2499995 -33.0833335 -32.9166665 44 0 2670 --59.2500005 -59.0833335 -33.0833335 -32.9166665 16 0 2670 --59.0833335 -58.9166665 -33.0833335 -32.9166665 62 0 2670 --58.9166665 -58.7499995 -33.0833335 -32.9166665 34 0 2670 --58.7500005 -58.5833335 -33.0833335 -32.9166665 14 0 2670 --58.5833335 -58.4166665 -33.0833335 -32.9166665 4 0 2670 --58.4166665 -58.2499995 -33.0833335 -32.9166665 23 0 2670 --58.2500005 -58.0833335 -33.0833335 -32.9166665 1 0 2670 --58.0833335 -57.9166665 -33.0833335 -32.9166665 37 0 2670 --57.9166665 -57.7499995 -33.0833335 -32.9166665 17 0 2670 --57.7500005 -57.5833335 -33.0833335 -32.9166665 46 0 2670 --57.5833335 -57.4166665 -33.0833335 -32.9166665 40 0 2670 --57.4166665 -57.2499995 -33.0833335 -32.9166665 53 0 2670 --57.2500005 -57.0833335 -33.0833335 -32.9166665 52 0 2670 --57.0833335 -56.9166665 -33.0833335 -32.9166665 55 0 2670 --56.9166665 -56.7499995 -33.0833335 -32.9166665 55 0 2670 --56.7500005 -56.5833335 -33.0833335 -32.9166665 99 0 2670 --56.5833335 -56.4166665 -33.0833335 -32.9166665 110 0 2670 --56.4166665 -56.2499995 -33.0833335 -32.9166665 85 0 2670 --56.2500005 -56.0833335 -33.0833335 -32.9166665 100 0 2670 --56.0833335 -55.9166665 -33.0833335 -32.9166665 112 0 2670 --55.9166665 -55.7499995 -33.0833335 -32.9166665 139 0 2670 --55.7500005 -55.5833335 -33.0833335 -32.9166665 121 0 2670 --55.5833335 -55.4166665 -33.0833335 -32.9166665 168 0 2670 --55.4166665 -55.2499995 -33.0833335 -32.9166665 156 0 2670 --55.2500005 -55.0833335 -33.0833335 -32.9166665 201 0 2670 --55.0833335 -54.9166665 -33.0833335 -32.9166665 266 0 2670 --54.9166665 -54.7499995 -33.0833335 -32.9166665 132 0 2670 --54.7500005 -54.5833335 -33.0833335 -32.9166665 133 0 2670 --54.5833335 -54.4166665 -33.0833335 -32.9166665 98 0 2670 --54.4166665 -54.2499995 -33.0833335 -32.9166665 109 0 2670 --54.2500005 -54.0833335 -33.0833335 -32.9166665 79 0 2670 --54.0833335 -53.9166665 -33.0833335 -32.9166665 36 0 2670 --53.9166665 -53.7499995 -33.0833335 -32.9166665 17 0 2670 --53.7500005 -53.5833335 -33.0833335 -32.9166665 12 0 2670 --53.5833335 -53.4166665 -33.0833335 -32.9166665 0 -19 -1670 --53.4166665 -53.2499995 -33.0833335 -32.9166665 0 -19 -1670 --53.2500005 -53.0833335 -33.0833335 -32.9166665 5 0 2670 --53.0833335 -52.9166665 -33.0833335 -32.9166665 2 0 2670 --52.9166665 -52.7499995 -33.0833335 -32.9166665 8 0 2670 --52.7500005 -52.5833335 -33.0833335 -32.9166665 0 -9 -1670 --52.5833335 -52.4166665 -33.0833335 -32.9166665 0 -3 -1670 --52.4166665 -52.2499995 -33.0833335 -32.9166665 0 -13 -1670 --52.2500005 -52.0833335 -33.0833335 -32.9166665 0 -21 -1670 --52.0833335 -51.9166665 -33.0833335 -32.9166665 0 -33 -1670 --51.9166665 -51.7499995 -33.0833335 -32.9166665 0 -47 -1670 --51.7500005 -51.5833335 -33.0833335 -32.9166665 0 -57 -1670 --51.5833335 -51.4166665 -33.0833335 -32.9166665 0 -62 -1670 --51.4166665 -51.2499995 -33.0833335 -32.9166665 0 -65 -1670 --51.2500005 -51.0833335 -33.0833335 -32.9166665 0 -55 -1670 --51.0833335 -50.9166665 -33.0833335 -32.9166665 0 -74 -1670 --50.9166665 -50.7499995 -33.0833335 -32.9166665 0 -86 -1670 --50.7500005 -50.5833335 -33.0833335 -32.9166665 0 -133 -1670 --50.5833335 -50.4166665 -33.0833335 -32.9166665 0 -148 -1670 --50.4166665 -50.2499995 -33.0833335 -32.9166665 0 -538 -1670 --50.2500005 -50.0833335 -33.0833335 -32.9166665 0 -842 -1670 --50.0833335 -49.9166665 -33.0833335 -32.9166665 0 -1007 -1670 --49.9166665 -49.7499995 -33.0833335 -32.9166665 0 -1187 -1670 --49.7500005 -49.5833335 -33.0833335 -32.9166665 0 -1368 -1670 --49.5833335 -49.4166665 -33.0833335 -32.9166665 0 -1583 -1670 --49.4166665 -49.2499995 -33.0833335 -32.9166665 0 -1881 -1670 --49.2500005 -49.0833335 -33.0833335 -32.9166665 0 -2485 -1670 --49.0833335 -48.9166665 -33.0833335 -32.9166665 0 -2890 -1670 --48.9166665 -48.7499995 -33.0833335 -32.9166665 0 -2951 -1670 --48.7500005 -48.5833335 -33.0833335 -32.9166665 0 -3122 -1670 --48.5833335 -48.4166665 -33.0833335 -32.9166665 0 -3141 -1670 --48.4166665 -48.2499995 -33.0833335 -32.9166665 0 -3209 -1670 --48.2500005 -48.0833335 -33.0833335 -32.9166665 0 -3320 -1670 --48.0833335 -47.9166665 -33.0833335 -32.9166665 0 -3404 -1670 --47.9166665 -47.7499995 -33.0833335 -32.9166665 0 -3439 -1670 --47.7500005 -47.5833335 -33.0833335 -32.9166665 0 -3514 -1670 --47.5833335 -47.4166665 -33.0833335 -32.9166665 0 -3585 -1670 --47.4166665 -47.2499995 -33.0833335 -32.9166665 0 -3642 -1670 --47.2500005 -47.0833335 -33.0833335 -32.9166665 0 -3686 -1670 --47.0833335 -46.9166665 -33.0833335 -32.9166665 0 -3744 -1670 --46.9166665 -46.7499995 -33.0833335 -32.9166665 0 -3790 -1670 --46.7500005 -46.5833335 -33.0833335 -32.9166665 0 -3832 -1670 --46.5833335 -46.4166665 -33.0833335 -32.9166665 0 -3879 -1670 --46.4166665 -46.2499995 -33.0833335 -32.9166665 0 -3906 -1670 --46.2500005 -46.0833335 -33.0833335 -32.9166665 0 -3957 -1670 --46.0833335 -45.9166665 -33.0833335 -32.9166665 0 -4005 -1670 --45.9166665 -45.7499995 -33.0833335 -32.9166665 0 -4028 -1670 --45.7500005 -45.5833335 -33.0833335 -32.9166665 0 -4068 -1670 --45.5833335 -45.4166665 -33.0833335 -32.9166665 0 -4100 -1670 --45.4166665 -45.2499995 -33.0833335 -32.9166665 0 -4154 -1670 --45.2500005 -45.0833335 -33.0833335 -32.9166665 0 -4146 -1670 --45.0833335 -44.9166665 -33.0833335 -32.9166665 0 -4265 -1670 --44.9166665 -44.7499995 -33.0833335 -32.9166665 0 -4156 -1670 --44.7500005 -44.5833335 -33.0833335 -32.9166665 0 -4172 -1670 --44.5833335 -44.4166665 -33.0833335 -32.9166665 0 -4246 -1670 --44.4166665 -44.2499995 -33.0833335 -32.9166665 0 -4267 -1670 --44.2500005 -44.0833335 -33.0833335 -32.9166665 0 -4283 -1670 --44.0833335 -43.9166665 -33.0833335 -32.9166665 0 -4297 -1670 --43.9166665 -43.7499995 -33.0833335 -32.9166665 0 -4316 -1670 --43.7500005 -43.5833335 -33.0833335 -32.9166665 0 -4320 -1670 --43.5833335 -43.4166665 -33.0833335 -32.9166665 0 -4333 -1670 --43.4166665 -43.2499995 -33.0833335 -32.9166665 0 -4388 -1670 --43.2500005 -43.0833335 -33.0833335 -32.9166665 0 -4378 -1670 --43.0833335 -42.9166665 -33.0833335 -32.9166665 0 -4390 -1670 --42.9166665 -42.7499995 -33.0833335 -32.9166665 0 -4404 -1670 --42.7500005 -42.5833335 -33.0833335 -32.9166665 0 -4416 -1670 --42.5833335 -42.4166665 -33.0833335 -32.9166665 0 -4430 -1670 --42.4166665 -42.2499995 -33.0833335 -32.9166665 0 -4457 -1670 --42.2500005 -42.0833335 -33.0833335 -32.9166665 0 -4469 -1670 --42.0833335 -41.9166665 -33.0833335 -32.9166665 0 -4482 -1670 --41.9166665 -41.7499995 -33.0833335 -32.9166665 0 -4514 -1670 --41.7500005 -41.5833335 -33.0833335 -32.9166665 0 -4525 -1670 --41.5833335 -41.4166665 -33.0833335 -32.9166665 0 -4532 -1670 --41.4166665 -41.2499995 -33.0833335 -32.9166665 0 -4496 -1670 --41.2500005 -41.0833335 -33.0833335 -32.9166665 0 -4481 -1670 --41.0833335 -40.9166665 -33.0833335 -32.9166665 0 -4471 -1670 --40.9166665 -40.7499995 -33.0833335 -32.9166665 0 -4724 -1670 --40.7500005 -40.5833335 -33.0833335 -32.9166665 0 -4742 -1670 --40.5833335 -40.4166665 -33.0833335 -32.9166665 0 -4741 -1670 --40.4166665 -40.2499995 -33.0833335 -32.9166665 0 -4766 -1670 --40.2500005 -40.0833335 -33.0833335 -32.9166665 0 -4723 -1670 --40.0833335 -39.9166665 -33.0833335 -32.9166665 0 -4723 -1670 --65.0833335 -64.9166665 -33.2500005 -33.0833335 856 0 2670 --64.9166665 -64.7499995 -33.2500005 -33.0833335 712 0 2670 --64.7500005 -64.5833335 -33.2500005 -33.0833335 601 0 2670 --64.5833335 -64.4166665 -33.2500005 -33.0833335 478 0 2670 --64.4166665 -64.2499995 -33.2500005 -33.0833335 421 0 2670 --64.2500005 -64.0833335 -33.2500005 -33.0833335 360 0 2670 --64.0833335 -63.9166665 -33.2500005 -33.0833335 307 0 2670 --63.9166665 -63.7499995 -33.2500005 -33.0833335 258 0 2670 --63.7500005 -63.5833335 -33.2500005 -33.0833335 218 0 2670 --63.5833335 -63.4166665 -33.2500005 -33.0833335 183 0 2670 --63.4166665 -63.2499995 -33.2500005 -33.0833335 158 0 2670 --63.2500005 -63.0833335 -33.2500005 -33.0833335 137 0 2670 --63.0833335 -62.9166665 -33.2500005 -33.0833335 130 0 2670 --62.9166665 -62.7499995 -33.2500005 -33.0833335 123 0 2670 --62.7500005 -62.5833335 -33.2500005 -33.0833335 110 0 2670 --62.5833335 -62.4166665 -33.2500005 -33.0833335 119 0 2670 --62.4166665 -62.2499995 -33.2500005 -33.0833335 112 0 2670 --62.2500005 -62.0833335 -33.2500005 -33.0833335 113 0 2670 --62.0833335 -61.9166665 -33.2500005 -33.0833335 101 0 2670 --61.9166665 -61.7499995 -33.2500005 -33.0833335 97 0 2670 --61.7500005 -61.5833335 -33.2500005 -33.0833335 90 0 2670 --61.5833335 -61.4166665 -33.2500005 -33.0833335 93 0 2670 --61.4166665 -61.2499995 -33.2500005 -33.0833335 91 0 2670 --61.2500005 -61.0833335 -33.2500005 -33.0833335 84 0 2670 --61.0833335 -60.9166665 -33.2500005 -33.0833335 54 0 2670 --60.9166665 -60.7499995 -33.2500005 -33.0833335 62 0 2670 --60.7500005 -60.5833335 -33.2500005 -33.0833335 37 0 2670 --60.5833335 -60.4166665 -33.2500005 -33.0833335 27 0 2670 --60.4166665 -60.2499995 -33.2500005 -33.0833335 5 0 2670 --60.2500005 -60.0833335 -33.2500005 -33.0833335 5 0 2670 --60.0833335 -59.9166665 -33.2500005 -33.0833335 4 0 2670 --59.9166665 -59.7499995 -33.2500005 -33.0833335 1 0 2670 --59.7500005 -59.5833335 -33.2500005 -33.0833335 3 0 2670 --59.5833335 -59.4166665 -33.2500005 -33.0833335 5 0 2670 --59.4166665 -59.2499995 -33.2500005 -33.0833335 8 0 2670 --59.2500005 -59.0833335 -33.2500005 -33.0833335 7 0 2670 --59.0833335 -58.9166665 -33.2500005 -33.0833335 16 0 2670 --58.9166665 -58.7499995 -33.2500005 -33.0833335 39 0 2670 --58.7500005 -58.5833335 -33.2500005 -33.0833335 30 0 2670 --58.5833335 -58.4166665 -33.2500005 -33.0833335 15 0 2670 --58.4166665 -58.2499995 -33.2500005 -33.0833335 26 0 2670 --58.2500005 -58.0833335 -33.2500005 -33.0833335 30 0 2670 --58.0833335 -57.9166665 -33.2500005 -33.0833335 32 0 2670 --57.9166665 -57.7499995 -33.2500005 -33.0833335 56 0 2670 --57.7500005 -57.5833335 -33.2500005 -33.0833335 63 0 2670 --57.5833335 -57.4166665 -33.2500005 -33.0833335 49 0 2670 --57.4166665 -57.2499995 -33.2500005 -33.0833335 58 0 2670 --57.2500005 -57.0833335 -33.2500005 -33.0833335 47 0 2670 --57.0833335 -56.9166665 -33.2500005 -33.0833335 41 0 2670 --56.9166665 -56.7499995 -33.2500005 -33.0833335 74 0 2670 --56.7500005 -56.5833335 -33.2500005 -33.0833335 86 0 2670 --56.5833335 -56.4166665 -33.2500005 -33.0833335 107 0 2670 --56.4166665 -56.2499995 -33.2500005 -33.0833335 98 0 2670 --56.2500005 -56.0833335 -33.2500005 -33.0833335 97 0 2670 --56.0833335 -55.9166665 -33.2500005 -33.0833335 125 0 2670 --55.9166665 -55.7499995 -33.2500005 -33.0833335 143 0 2670 --55.7500005 -55.5833335 -33.2500005 -33.0833335 156 0 2670 --55.5833335 -55.4166665 -33.2500005 -33.0833335 172 0 2670 --55.4166665 -55.2499995 -33.2500005 -33.0833335 172 0 2670 --55.2500005 -55.0833335 -33.2500005 -33.0833335 216 0 2670 --55.0833335 -54.9166665 -33.2500005 -33.0833335 169 0 2670 --54.9166665 -54.7499995 -33.2500005 -33.0833335 80 0 2670 --54.7500005 -54.5833335 -33.2500005 -33.0833335 62 0 2670 --54.5833335 -54.4166665 -33.2500005 -33.0833335 66 0 2670 --54.4166665 -54.2499995 -33.2500005 -33.0833335 82 0 2670 --54.2500005 -54.0833335 -33.2500005 -33.0833335 61 0 2670 --54.0833335 -53.9166665 -33.2500005 -33.0833335 19 0 2670 --53.9166665 -53.7499995 -33.2500005 -33.0833335 10 0 2670 --53.7500005 -53.5833335 -33.2500005 -33.0833335 2 0 2670 --53.5833335 -53.4166665 -33.2500005 -33.0833335 0 -42 -1670 --53.4166665 -53.2499995 -33.2500005 -33.0833335 4 0 2670 --53.2500005 -53.0833335 -33.2500005 -33.0833335 7 0 2670 --53.0833335 -52.9166665 -33.2500005 -33.0833335 15 0 2670 --52.9166665 -52.7499995 -33.2500005 -33.0833335 0 -8 -1670 --52.7500005 -52.5833335 -33.2500005 -33.0833335 0 -1 -1670 --52.5833335 -52.4166665 -33.2500005 -33.0833335 0 -9 -1670 --52.4166665 -52.2499995 -33.2500005 -33.0833335 0 -17 -1670 --52.2500005 -52.0833335 -33.2500005 -33.0833335 0 -27 -1670 --52.0833335 -51.9166665 -33.2500005 -33.0833335 0 -44 -1670 --51.9166665 -51.7499995 -33.2500005 -33.0833335 0 -58 -1670 --51.7500005 -51.5833335 -33.2500005 -33.0833335 0 -58 -1670 --51.5833335 -51.4166665 -33.2500005 -33.0833335 0 -60 -1670 --51.4166665 -51.2499995 -33.2500005 -33.0833335 0 -63 -1670 --51.2500005 -51.0833335 -33.2500005 -33.0833335 0 -69 -1670 --51.0833335 -50.9166665 -33.2500005 -33.0833335 0 -85 -1670 --50.9166665 -50.7499995 -33.2500005 -33.0833335 0 -111 -1670 --50.7500005 -50.5833335 -33.2500005 -33.0833335 0 -128 -1670 --50.5833335 -50.4166665 -33.2500005 -33.0833335 0 -300 -1670 --50.4166665 -50.2499995 -33.2500005 -33.0833335 0 -580 -1670 --50.2500005 -50.0833335 -33.2500005 -33.0833335 0 -824 -1670 --50.0833335 -49.9166665 -33.2500005 -33.0833335 0 -915 -1670 --49.9166665 -49.7499995 -33.2500005 -33.0833335 0 -1100 -1670 --49.7500005 -49.5833335 -33.2500005 -33.0833335 0 -1353 -1670 --49.5833335 -49.4166665 -33.2500005 -33.0833335 0 -1588 -1670 --49.4166665 -49.2499995 -33.2500005 -33.0833335 0 -2169 -1670 --49.2500005 -49.0833335 -33.2500005 -33.0833335 0 -2716 -1670 --49.0833335 -48.9166665 -33.2500005 -33.0833335 0 -2937 -1670 --48.9166665 -48.7499995 -33.2500005 -33.0833335 0 -3012 -1670 --48.7500005 -48.5833335 -33.2500005 -33.0833335 0 -3070 -1670 --48.5833335 -48.4166665 -33.2500005 -33.0833335 0 -3185 -1670 --48.4166665 -48.2499995 -33.2500005 -33.0833335 0 -3253 -1670 --48.2500005 -48.0833335 -33.2500005 -33.0833335 0 -3282 -1670 --48.0833335 -47.9166665 -33.2500005 -33.0833335 0 -3394 -1670 --47.9166665 -47.7499995 -33.2500005 -33.0833335 0 -3448 -1670 --47.7500005 -47.5833335 -33.2500005 -33.0833335 0 -3505 -1670 --47.5833335 -47.4166665 -33.2500005 -33.0833335 0 -3577 -1670 --47.4166665 -47.2499995 -33.2500005 -33.0833335 0 -3642 -1670 --47.2500005 -47.0833335 -33.2500005 -33.0833335 0 -3663 -1670 --47.0833335 -46.9166665 -33.2500005 -33.0833335 0 -3726 -1670 --46.9166665 -46.7499995 -33.2500005 -33.0833335 0 -3795 -1670 --46.7500005 -46.5833335 -33.2500005 -33.0833335 0 -3837 -1670 --46.5833335 -46.4166665 -33.2500005 -33.0833335 0 -3868 -1670 --46.4166665 -46.2499995 -33.2500005 -33.0833335 0 -3904 -1670 --46.2500005 -46.0833335 -33.2500005 -33.0833335 0 -3946 -1670 --46.0833335 -45.9166665 -33.2500005 -33.0833335 0 -3978 -1670 --45.9166665 -45.7499995 -33.2500005 -33.0833335 0 -3999 -1670 --45.7500005 -45.5833335 -33.2500005 -33.0833335 0 -4024 -1670 --45.5833335 -45.4166665 -33.2500005 -33.0833335 0 -4044 -1670 --45.4166665 -45.2499995 -33.2500005 -33.0833335 0 -4120 -1670 --45.2500005 -45.0833335 -33.2500005 -33.0833335 0 -4146 -1670 --45.0833335 -44.9166665 -33.2500005 -33.0833335 0 -4183 -1670 --44.9166665 -44.7499995 -33.2500005 -33.0833335 0 -4264 -1670 --44.7500005 -44.5833335 -33.2500005 -33.0833335 0 -4187 -1670 --44.5833335 -44.4166665 -33.2500005 -33.0833335 0 -4236 -1670 --44.4166665 -44.2499995 -33.2500005 -33.0833335 0 -4229 -1670 --44.2500005 -44.0833335 -33.2500005 -33.0833335 0 -4260 -1670 --44.0833335 -43.9166665 -33.2500005 -33.0833335 0 -4265 -1670 --43.9166665 -43.7499995 -33.2500005 -33.0833335 0 -4275 -1670 --43.7500005 -43.5833335 -33.2500005 -33.0833335 0 -4396 -1670 --43.5833335 -43.4166665 -33.2500005 -33.0833335 0 -4349 -1670 --43.4166665 -43.2499995 -33.2500005 -33.0833335 0 -4385 -1670 --43.2500005 -43.0833335 -33.2500005 -33.0833335 0 -4424 -1670 --43.0833335 -42.9166665 -33.2500005 -33.0833335 0 -4404 -1670 --42.9166665 -42.7499995 -33.2500005 -33.0833335 0 -4432 -1670 --42.7500005 -42.5833335 -33.2500005 -33.0833335 0 -4455 -1670 --42.5833335 -42.4166665 -33.2500005 -33.0833335 0 -4469 -1670 --42.4166665 -42.2499995 -33.2500005 -33.0833335 0 -4501 -1670 --42.2500005 -42.0833335 -33.2500005 -33.0833335 0 -4519 -1670 --42.0833335 -41.9166665 -33.2500005 -33.0833335 0 -4527 -1670 --41.9166665 -41.7499995 -33.2500005 -33.0833335 0 -4558 -1670 --41.7500005 -41.5833335 -33.2500005 -33.0833335 0 -4569 -1670 --41.5833335 -41.4166665 -33.2500005 -33.0833335 0 -4584 -1670 --41.4166665 -41.2499995 -33.2500005 -33.0833335 0 -4590 -1670 --41.2500005 -41.0833335 -33.2500005 -33.0833335 0 -4575 -1670 --41.0833335 -40.9166665 -33.2500005 -33.0833335 0 -4602 -1670 --40.9166665 -40.7499995 -33.2500005 -33.0833335 0 -4669 -1670 --40.7500005 -40.5833335 -33.2500005 -33.0833335 0 -4749 -1670 --40.5833335 -40.4166665 -33.2500005 -33.0833335 0 -4630 -1670 --40.4166665 -40.2499995 -33.2500005 -33.0833335 0 -4731 -1670 --40.2500005 -40.0833335 -33.2500005 -33.0833335 0 -4618 -1670 --40.0833335 -39.9166665 -33.2500005 -33.0833335 0 -4546 -1670 --65.0833335 -64.9166665 -33.4166665 -33.2499995 677 0 2670 --64.9166665 -64.7499995 -33.4166665 -33.2499995 629 0 2670 --64.7500005 -64.5833335 -33.4166665 -33.2499995 519 0 2670 --64.5833335 -64.4166665 -33.4166665 -33.2499995 439 0 2670 --64.4166665 -64.2499995 -33.4166665 -33.2499995 357 0 2670 --64.2500005 -64.0833335 -33.4166665 -33.2499995 325 0 2670 --64.0833335 -63.9166665 -33.4166665 -33.2499995 281 0 2670 --63.9166665 -63.7499995 -33.4166665 -33.2499995 241 0 2670 --63.7500005 -63.5833335 -33.4166665 -33.2499995 205 0 2670 --63.5833335 -63.4166665 -33.4166665 -33.2499995 179 0 2670 --63.4166665 -63.2499995 -33.4166665 -33.2499995 153 0 2670 --63.2500005 -63.0833335 -33.4166665 -33.2499995 133 0 2670 --63.0833335 -62.9166665 -33.4166665 -33.2499995 117 0 2670 --62.9166665 -62.7499995 -33.4166665 -33.2499995 112 0 2670 --62.7500005 -62.5833335 -33.4166665 -33.2499995 113 0 2670 --62.5833335 -62.4166665 -33.4166665 -33.2499995 118 0 2670 --62.4166665 -62.2499995 -33.4166665 -33.2499995 114 0 2670 --62.2500005 -62.0833335 -33.4166665 -33.2499995 118 0 2670 --62.0833335 -61.9166665 -33.4166665 -33.2499995 110 0 2670 --61.9166665 -61.7499995 -33.4166665 -33.2499995 105 0 2670 --61.7500005 -61.5833335 -33.4166665 -33.2499995 104 0 2670 --61.5833335 -61.4166665 -33.4166665 -33.2499995 91 0 2670 --61.4166665 -61.2499995 -33.4166665 -33.2499995 81 0 2670 --61.2500005 -61.0833335 -33.4166665 -33.2499995 91 0 2670 --61.0833335 -60.9166665 -33.4166665 -33.2499995 79 0 2670 --60.9166665 -60.7499995 -33.4166665 -33.2499995 60 0 2670 --60.7500005 -60.5833335 -33.4166665 -33.2499995 42 0 2670 --60.5833335 -60.4166665 -33.4166665 -33.2499995 38 0 2670 --60.4166665 -60.2499995 -33.4166665 -33.2499995 29 0 2670 --60.2500005 -60.0833335 -33.4166665 -33.2499995 4 0 2670 --60.0833335 -59.9166665 -33.4166665 -33.2499995 4 0 2670 --59.9166665 -59.7499995 -33.4166665 -33.2499995 3 0 2670 --59.7500005 -59.5833335 -33.4166665 -33.2499995 3 0 2670 --59.5833335 -59.4166665 -33.4166665 -33.2499995 4 0 2670 --59.4166665 -59.2499995 -33.4166665 -33.2499995 4 0 2670 --59.2500005 -59.0833335 -33.4166665 -33.2499995 5 0 2670 --59.0833335 -58.9166665 -33.4166665 -33.2499995 5 0 2670 --58.9166665 -58.7499995 -33.4166665 -33.2499995 4 0 2670 --58.7500005 -58.5833335 -33.4166665 -33.2499995 30 0 2670 --58.5833335 -58.4166665 -33.4166665 -33.2499995 11 0 2670 --58.4166665 -58.2499995 -33.4166665 -33.2499995 25 0 2670 --58.2500005 -58.0833335 -33.4166665 -33.2499995 32 0 2670 --58.0833335 -57.9166665 -33.4166665 -33.2499995 33 0 2670 --57.9166665 -57.7499995 -33.4166665 -33.2499995 37 0 2670 --57.7500005 -57.5833335 -33.4166665 -33.2499995 63 0 2670 --57.5833335 -57.4166665 -33.4166665 -33.2499995 97 0 2670 --57.4166665 -57.2499995 -33.4166665 -33.2499995 62 0 2670 --57.2500005 -57.0833335 -33.4166665 -33.2499995 92 0 2670 --57.0833335 -56.9166665 -33.4166665 -33.2499995 82 0 2670 --56.9166665 -56.7499995 -33.4166665 -33.2499995 70 0 2670 --56.7500005 -56.5833335 -33.4166665 -33.2499995 78 0 2670 --56.5833335 -56.4166665 -33.4166665 -33.2499995 91 0 2670 --56.4166665 -56.2499995 -33.4166665 -33.2499995 86 0 2670 --56.2500005 -56.0833335 -33.4166665 -33.2499995 113 0 2670 --56.0833335 -55.9166665 -33.4166665 -33.2499995 129 0 2670 --55.9166665 -55.7499995 -33.4166665 -33.2499995 121 0 2670 --55.7500005 -55.5833335 -33.4166665 -33.2499995 128 0 2670 --55.5833335 -55.4166665 -33.4166665 -33.2499995 144 0 2670 --55.4166665 -55.2499995 -33.4166665 -33.2499995 192 0 2670 --55.2500005 -55.0833335 -33.4166665 -33.2499995 262 0 2670 --55.0833335 -54.9166665 -33.4166665 -33.2499995 159 0 2670 --54.9166665 -54.7499995 -33.4166665 -33.2499995 86 0 2670 --54.7500005 -54.5833335 -33.4166665 -33.2499995 79 0 2670 --54.5833335 -54.4166665 -33.4166665 -33.2499995 79 0 2670 --54.4166665 -54.2499995 -33.4166665 -33.2499995 25 0 2670 --54.2500005 -54.0833335 -33.4166665 -33.2499995 21 0 2670 --54.0833335 -53.9166665 -33.4166665 -33.2499995 15 0 2670 --53.9166665 -53.7499995 -33.4166665 -33.2499995 11 0 2670 --53.7500005 -53.5833335 -33.4166665 -33.2499995 4 0 2670 --53.5833335 -53.4166665 -33.4166665 -33.2499995 0 -80 -1670 --53.4166665 -53.2499995 -33.4166665 -33.2499995 8 0 2670 --53.2500005 -53.0833335 -33.4166665 -33.2499995 18 0 2670 --53.0833335 -52.9166665 -33.4166665 -33.2499995 0 -3 -1670 --52.9166665 -52.7499995 -33.4166665 -33.2499995 0 -1 -1670 --52.7500005 -52.5833335 -33.4166665 -33.2499995 0 -11 -1670 --52.5833335 -52.4166665 -33.4166665 -33.2499995 0 -17 -1670 --52.4166665 -52.2499995 -33.4166665 -33.2499995 0 -21 -1670 --52.2500005 -52.0833335 -33.4166665 -33.2499995 0 -41 -1670 --52.0833335 -51.9166665 -33.4166665 -33.2499995 0 -56 -1670 --51.9166665 -51.7499995 -33.4166665 -33.2499995 0 -64 -1670 --51.7500005 -51.5833335 -33.4166665 -33.2499995 0 -54 -1670 --51.5833335 -51.4166665 -33.4166665 -33.2499995 0 -73 -1670 --51.4166665 -51.2499995 -33.4166665 -33.2499995 0 -75 -1670 --51.2500005 -51.0833335 -33.4166665 -33.2499995 0 -87 -1670 --51.0833335 -50.9166665 -33.4166665 -33.2499995 0 -111 -1670 --50.9166665 -50.7499995 -33.4166665 -33.2499995 0 -149 -1670 --50.7500005 -50.5833335 -33.4166665 -33.2499995 0 -232 -1670 --50.5833335 -50.4166665 -33.4166665 -33.2499995 0 -463 -1670 --50.4166665 -50.2499995 -33.4166665 -33.2499995 0 -657 -1670 --50.2500005 -50.0833335 -33.4166665 -33.2499995 0 -919 -1670 --50.0833335 -49.9166665 -33.4166665 -33.2499995 0 -1056 -1670 --49.9166665 -49.7499995 -33.4166665 -33.2499995 0 -1305 -1670 --49.7500005 -49.5833335 -33.4166665 -33.2499995 0 -1398 -1670 --49.5833335 -49.4166665 -33.4166665 -33.2499995 0 -1956 -1670 --49.4166665 -49.2499995 -33.4166665 -33.2499995 0 -2429 -1670 --49.2500005 -49.0833335 -33.4166665 -33.2499995 0 -2924 -1670 --49.0833335 -48.9166665 -33.4166665 -33.2499995 0 -2916 -1670 --48.9166665 -48.7499995 -33.4166665 -33.2499995 0 -3075 -1670 --48.7500005 -48.5833335 -33.4166665 -33.2499995 0 -3110 -1670 --48.5833335 -48.4166665 -33.4166665 -33.2499995 0 -3182 -1670 --48.4166665 -48.2499995 -33.4166665 -33.2499995 0 -3248 -1670 --48.2500005 -48.0833335 -33.4166665 -33.2499995 0 -3287 -1670 --48.0833335 -47.9166665 -33.4166665 -33.2499995 0 -3375 -1670 --47.9166665 -47.7499995 -33.4166665 -33.2499995 0 -3430 -1670 --47.7500005 -47.5833335 -33.4166665 -33.2499995 0 -3515 -1670 --47.5833335 -47.4166665 -33.4166665 -33.2499995 0 -3594 -1670 --47.4166665 -47.2499995 -33.4166665 -33.2499995 0 -3661 -1670 --47.2500005 -47.0833335 -33.4166665 -33.2499995 0 -3645 -1670 --47.0833335 -46.9166665 -33.4166665 -33.2499995 0 -3697 -1670 --46.9166665 -46.7499995 -33.4166665 -33.2499995 0 -3795 -1670 --46.7500005 -46.5833335 -33.4166665 -33.2499995 0 -3839 -1670 --46.5833335 -46.4166665 -33.4166665 -33.2499995 0 -3883 -1670 --46.4166665 -46.2499995 -33.4166665 -33.2499995 0 -3906 -1670 --46.2500005 -46.0833335 -33.4166665 -33.2499995 0 -3943 -1670 --46.0833335 -45.9166665 -33.4166665 -33.2499995 0 -3959 -1670 --45.9166665 -45.7499995 -33.4166665 -33.2499995 0 -3975 -1670 --45.7500005 -45.5833335 -33.4166665 -33.2499995 0 -3977 -1670 --45.5833335 -45.4166665 -33.4166665 -33.2499995 0 -4022 -1670 --45.4166665 -45.2499995 -33.4166665 -33.2499995 0 -4030 -1670 --45.2500005 -45.0833335 -33.4166665 -33.2499995 0 -4050 -1670 --45.0833335 -44.9166665 -33.4166665 -33.2499995 0 -4101 -1670 --44.9166665 -44.7499995 -33.4166665 -33.2499995 0 -4192 -1670 --44.7500005 -44.5833335 -33.4166665 -33.2499995 0 -4166 -1670 --44.5833335 -44.4166665 -33.4166665 -33.2499995 0 -4172 -1670 --44.4166665 -44.2499995 -33.4166665 -33.2499995 0 -4205 -1670 --44.2500005 -44.0833335 -33.4166665 -33.2499995 0 -4224 -1670 --44.0833335 -43.9166665 -33.4166665 -33.2499995 0 -4284 -1670 --43.9166665 -43.7499995 -33.4166665 -33.2499995 0 -4258 -1670 --43.7500005 -43.5833335 -33.4166665 -33.2499995 0 -4304 -1670 --43.5833335 -43.4166665 -33.4166665 -33.2499995 0 -4339 -1670 --43.4166665 -43.2499995 -33.4166665 -33.2499995 0 -4388 -1670 --43.2500005 -43.0833335 -33.4166665 -33.2499995 0 -4408 -1670 --43.0833335 -42.9166665 -33.4166665 -33.2499995 0 -4443 -1670 --42.9166665 -42.7499995 -33.4166665 -33.2499995 0 -4462 -1670 --42.7500005 -42.5833335 -33.4166665 -33.2499995 0 -4478 -1670 --42.5833335 -42.4166665 -33.4166665 -33.2499995 0 -4484 -1670 --42.4166665 -42.2499995 -33.4166665 -33.2499995 0 -4515 -1670 --42.2500005 -42.0833335 -33.4166665 -33.2499995 0 -4549 -1670 --42.0833335 -41.9166665 -33.4166665 -33.2499995 0 -4559 -1670 --41.9166665 -41.7499995 -33.4166665 -33.2499995 0 -4588 -1670 --41.7500005 -41.5833335 -33.4166665 -33.2499995 0 -4569 -1670 --41.5833335 -41.4166665 -33.4166665 -33.2499995 0 -4608 -1670 --41.4166665 -41.2499995 -33.4166665 -33.2499995 0 -4626 -1670 --41.2500005 -41.0833335 -33.4166665 -33.2499995 0 -4691 -1670 --41.0833335 -40.9166665 -33.4166665 -33.2499995 0 -4570 -1670 --40.9166665 -40.7499995 -33.4166665 -33.2499995 0 -4663 -1670 --40.7500005 -40.5833335 -33.4166665 -33.2499995 0 -4699 -1670 --40.5833335 -40.4166665 -33.4166665 -33.2499995 0 -4735 -1670 --40.4166665 -40.2499995 -33.4166665 -33.2499995 0 -4734 -1670 --40.2500005 -40.0833335 -33.4166665 -33.2499995 0 -4706 -1670 --40.0833335 -39.9166665 -33.4166665 -33.2499995 0 -4727 -1670 --65.0833335 -64.9166665 -33.5833335 -33.4166665 553 0 2670 --64.9166665 -64.7499995 -33.5833335 -33.4166665 502 0 2670 --64.7500005 -64.5833335 -33.5833335 -33.4166665 433 0 2670 --64.5833335 -64.4166665 -33.5833335 -33.4166665 365 0 2670 --64.4166665 -64.2499995 -33.5833335 -33.4166665 306 0 2670 --64.2500005 -64.0833335 -33.5833335 -33.4166665 287 0 2670 --64.0833335 -63.9166665 -33.5833335 -33.4166665 288 0 2670 --63.9166665 -63.7499995 -33.5833335 -33.4166665 211 0 2670 --63.7500005 -63.5833335 -33.5833335 -33.4166665 183 0 2670 --63.5833335 -63.4166665 -33.5833335 -33.4166665 165 0 2670 --63.4166665 -63.2499995 -33.5833335 -33.4166665 143 0 2670 --63.2500005 -63.0833335 -33.5833335 -33.4166665 124 0 2670 --63.0833335 -62.9166665 -33.5833335 -33.4166665 122 0 2670 --62.9166665 -62.7499995 -33.5833335 -33.4166665 120 0 2670 --62.7500005 -62.5833335 -33.5833335 -33.4166665 122 0 2670 --62.5833335 -62.4166665 -33.5833335 -33.4166665 127 0 2670 --62.4166665 -62.2499995 -33.5833335 -33.4166665 119 0 2670 --62.2500005 -62.0833335 -33.5833335 -33.4166665 117 0 2670 --62.0833335 -61.9166665 -33.5833335 -33.4166665 109 0 2670 --61.9166665 -61.7499995 -33.5833335 -33.4166665 110 0 2670 --61.7500005 -61.5833335 -33.5833335 -33.4166665 108 0 2670 --61.5833335 -61.4166665 -33.5833335 -33.4166665 106 0 2670 --61.4166665 -61.2499995 -33.5833335 -33.4166665 97 0 2670 --61.2500005 -61.0833335 -33.5833335 -33.4166665 92 0 2670 --61.0833335 -60.9166665 -33.5833335 -33.4166665 88 0 2670 --60.9166665 -60.7499995 -33.5833335 -33.4166665 74 0 2670 --60.7500005 -60.5833335 -33.5833335 -33.4166665 66 0 2670 --60.5833335 -60.4166665 -33.5833335 -33.4166665 55 0 2670 --60.4166665 -60.2499995 -33.5833335 -33.4166665 53 0 2670 --60.2500005 -60.0833335 -33.5833335 -33.4166665 25 0 2670 --60.0833335 -59.9166665 -33.5833335 -33.4166665 13 0 2670 --59.9166665 -59.7499995 -33.5833335 -33.4166665 3 0 2670 --59.7500005 -59.5833335 -33.5833335 -33.4166665 3 0 2670 --59.5833335 -59.4166665 -33.5833335 -33.4166665 2 0 2670 --59.4166665 -59.2499995 -33.5833335 -33.4166665 2 0 2670 --59.2500005 -59.0833335 -33.5833335 -33.4166665 2 0 2670 --59.0833335 -58.9166665 -33.5833335 -33.4166665 2 0 2670 --58.9166665 -58.7499995 -33.5833335 -33.4166665 5 0 2670 --58.7500005 -58.5833335 -33.5833335 -33.4166665 2 0 2670 --58.5833335 -58.4166665 -33.5833335 -33.4166665 0 -1 -1670 --58.4166665 -58.2499995 -33.5833335 -33.4166665 11 0 2670 --58.2500005 -58.0833335 -33.5833335 -33.4166665 19 0 2670 --58.0833335 -57.9166665 -33.5833335 -33.4166665 69 0 2670 --57.9166665 -57.7499995 -33.5833335 -33.4166665 92 0 2670 --57.7500005 -57.5833335 -33.5833335 -33.4166665 90 0 2670 --57.5833335 -57.4166665 -33.5833335 -33.4166665 112 0 2670 --57.4166665 -57.2499995 -33.5833335 -33.4166665 88 0 2670 --57.2500005 -57.0833335 -33.5833335 -33.4166665 96 0 2670 --57.0833335 -56.9166665 -33.5833335 -33.4166665 116 0 2670 --56.9166665 -56.7499995 -33.5833335 -33.4166665 101 0 2670 --56.7500005 -56.5833335 -33.5833335 -33.4166665 94 0 2670 --56.5833335 -56.4166665 -33.5833335 -33.4166665 88 0 2670 --56.4166665 -56.2499995 -33.5833335 -33.4166665 112 0 2670 --56.2500005 -56.0833335 -33.5833335 -33.4166665 102 0 2670 --56.0833335 -55.9166665 -33.5833335 -33.4166665 96 0 2670 --55.9166665 -55.7499995 -33.5833335 -33.4166665 117 0 2670 --55.7500005 -55.5833335 -33.5833335 -33.4166665 149 0 2670 --55.5833335 -55.4166665 -33.5833335 -33.4166665 182 0 2670 --55.4166665 -55.2499995 -33.5833335 -33.4166665 192 0 2670 --55.2500005 -55.0833335 -33.5833335 -33.4166665 267 0 2670 --55.0833335 -54.9166665 -33.5833335 -33.4166665 181 0 2670 --54.9166665 -54.7499995 -33.5833335 -33.4166665 177 0 2670 --54.7500005 -54.5833335 -33.5833335 -33.4166665 70 0 2670 --54.5833335 -54.4166665 -33.5833335 -33.4166665 52 0 2670 --54.4166665 -54.2499995 -33.5833335 -33.4166665 27 0 2670 --54.2500005 -54.0833335 -33.5833335 -33.4166665 19 0 2670 --54.0833335 -53.9166665 -33.5833335 -33.4166665 16 0 2670 --53.9166665 -53.7499995 -33.5833335 -33.4166665 12 0 2670 --53.7500005 -53.5833335 -33.5833335 -33.4166665 6 0 2670 --53.5833335 -53.4166665 -33.5833335 -33.4166665 0 -100 -1670 --53.4166665 -53.2499995 -33.5833335 -33.4166665 23 0 2670 --53.2500005 -53.0833335 -33.5833335 -33.4166665 13 0 2670 --53.0833335 -52.9166665 -33.5833335 -33.4166665 0 -3 -1670 --52.9166665 -52.7499995 -33.5833335 -33.4166665 0 -19 -1670 --52.7500005 -52.5833335 -33.5833335 -33.4166665 0 -20 -1670 --52.5833335 -52.4166665 -33.5833335 -33.4166665 0 -20 -1670 --52.4166665 -52.2499995 -33.5833335 -33.4166665 0 -21 -1670 --52.2500005 -52.0833335 -33.5833335 -33.4166665 0 -55 -1670 --52.0833335 -51.9166665 -33.5833335 -33.4166665 0 -64 -1670 --51.9166665 -51.7499995 -33.5833335 -33.4166665 0 -52 -1670 --51.7500005 -51.5833335 -33.5833335 -33.4166665 0 -70 -1670 --51.5833335 -51.4166665 -33.5833335 -33.4166665 0 -91 -1670 --51.4166665 -51.2499995 -33.5833335 -33.4166665 0 -105 -1670 --51.2500005 -51.0833335 -33.5833335 -33.4166665 0 -124 -1670 --51.0833335 -50.9166665 -33.5833335 -33.4166665 0 -166 -1670 --50.9166665 -50.7499995 -33.5833335 -33.4166665 0 -227 -1670 --50.7500005 -50.5833335 -33.5833335 -33.4166665 0 -524 -1670 --50.5833335 -50.4166665 -33.5833335 -33.4166665 0 -768 -1670 --50.4166665 -50.2499995 -33.5833335 -33.4166665 0 -977 -1670 --50.2500005 -50.0833335 -33.5833335 -33.4166665 0 -1149 -1670 --50.0833335 -49.9166665 -33.5833335 -33.4166665 0 -1368 -1670 --49.9166665 -49.7499995 -33.5833335 -33.4166665 0 -1554 -1670 --49.7500005 -49.5833335 -33.5833335 -33.4166665 0 -2076 -1670 --49.5833335 -49.4166665 -33.5833335 -33.4166665 0 -2333 -1670 --49.4166665 -49.2499995 -33.5833335 -33.4166665 0 -2746 -1670 --49.2500005 -49.0833335 -33.5833335 -33.4166665 0 -2970 -1670 --49.0833335 -48.9166665 -33.5833335 -33.4166665 0 -2968 -1670 --48.9166665 -48.7499995 -33.5833335 -33.4166665 0 -3046 -1670 --48.7500005 -48.5833335 -33.5833335 -33.4166665 0 -3127 -1670 --48.5833335 -48.4166665 -33.5833335 -33.4166665 0 -3204 -1670 --48.4166665 -48.2499995 -33.5833335 -33.4166665 0 -3264 -1670 --48.2500005 -48.0833335 -33.5833335 -33.4166665 0 -3323 -1670 --48.0833335 -47.9166665 -33.5833335 -33.4166665 0 -3378 -1670 --47.9166665 -47.7499995 -33.5833335 -33.4166665 0 -3427 -1670 --47.7500005 -47.5833335 -33.5833335 -33.4166665 0 -3559 -1670 --47.5833335 -47.4166665 -33.5833335 -33.4166665 0 -3652 -1670 --47.4166665 -47.2499995 -33.5833335 -33.4166665 0 -3721 -1670 --47.2500005 -47.0833335 -33.5833335 -33.4166665 0 -3705 -1670 --47.0833335 -46.9166665 -33.5833335 -33.4166665 0 -3753 -1670 --46.9166665 -46.7499995 -33.5833335 -33.4166665 0 -3840 -1670 --46.7500005 -46.5833335 -33.5833335 -33.4166665 0 -3881 -1670 --46.5833335 -46.4166665 -33.5833335 -33.4166665 0 -3912 -1670 --46.4166665 -46.2499995 -33.5833335 -33.4166665 0 -3916 -1670 --46.2500005 -46.0833335 -33.5833335 -33.4166665 0 -3941 -1670 --46.0833335 -45.9166665 -33.5833335 -33.4166665 0 -3966 -1670 --45.9166665 -45.7499995 -33.5833335 -33.4166665 0 -3984 -1670 --45.7500005 -45.5833335 -33.5833335 -33.4166665 0 -4036 -1670 --45.5833335 -45.4166665 -33.5833335 -33.4166665 0 -4058 -1670 --45.4166665 -45.2499995 -33.5833335 -33.4166665 0 -4086 -1670 --45.2500005 -45.0833335 -33.5833335 -33.4166665 0 -4131 -1670 --45.0833335 -44.9166665 -33.5833335 -33.4166665 0 -4124 -1670 --44.9166665 -44.7499995 -33.5833335 -33.4166665 0 -4151 -1670 --44.7500005 -44.5833335 -33.5833335 -33.4166665 0 -4176 -1670 --44.5833335 -44.4166665 -33.5833335 -33.4166665 0 -4212 -1670 --44.4166665 -44.2499995 -33.5833335 -33.4166665 0 -4192 -1670 --44.2500005 -44.0833335 -33.5833335 -33.4166665 0 -4158 -1670 --44.0833335 -43.9166665 -33.5833335 -33.4166665 0 -4172 -1670 --43.9166665 -43.7499995 -33.5833335 -33.4166665 0 -4195 -1670 --43.7500005 -43.5833335 -33.5833335 -33.4166665 0 -4206 -1670 --43.5833335 -43.4166665 -33.5833335 -33.4166665 0 -4295 -1670 --43.4166665 -43.2499995 -33.5833335 -33.4166665 0 -4334 -1670 --43.2500005 -43.0833335 -33.5833335 -33.4166665 0 -4358 -1670 --43.0833335 -42.9166665 -33.5833335 -33.4166665 0 -4434 -1670 --42.9166665 -42.7499995 -33.5833335 -33.4166665 0 -4471 -1670 --42.7500005 -42.5833335 -33.5833335 -33.4166665 0 -4516 -1670 --42.5833335 -42.4166665 -33.5833335 -33.4166665 0 -4532 -1670 --42.4166665 -42.2499995 -33.5833335 -33.4166665 0 -4512 -1670 --42.2500005 -42.0833335 -33.5833335 -33.4166665 0 -4543 -1670 --42.0833335 -41.9166665 -33.5833335 -33.4166665 0 -4559 -1670 --41.9166665 -41.7499995 -33.5833335 -33.4166665 0 -4560 -1670 --41.7500005 -41.5833335 -33.5833335 -33.4166665 0 -4576 -1670 --41.5833335 -41.4166665 -33.5833335 -33.4166665 0 -4557 -1670 --41.4166665 -41.2499995 -33.5833335 -33.4166665 0 -4572 -1670 --41.2500005 -41.0833335 -33.5833335 -33.4166665 0 -4582 -1670 --41.0833335 -40.9166665 -33.5833335 -33.4166665 0 -4502 -1670 --40.9166665 -40.7499995 -33.5833335 -33.4166665 0 -4618 -1670 --40.7500005 -40.5833335 -33.5833335 -33.4166665 0 -4683 -1670 --40.5833335 -40.4166665 -33.5833335 -33.4166665 0 -4573 -1670 --40.4166665 -40.2499995 -33.5833335 -33.4166665 0 -4688 -1670 --40.2500005 -40.0833335 -33.5833335 -33.4166665 0 -4579 -1670 --40.0833335 -39.9166665 -33.5833335 -33.4166665 0 -4582 -1670 --65.0833335 -64.9166665 -33.7500005 -33.5833335 446 0 2670 --64.9166665 -64.7499995 -33.7500005 -33.5833335 419 0 2670 --64.7500005 -64.5833335 -33.7500005 -33.5833335 369 0 2670 --64.5833335 -64.4166665 -33.7500005 -33.5833335 312 0 2670 --64.4166665 -64.2499995 -33.7500005 -33.5833335 263 0 2670 --64.2500005 -64.0833335 -33.7500005 -33.5833335 245 0 2670 --64.0833335 -63.9166665 -33.7500005 -33.5833335 249 0 2670 --63.9166665 -63.7499995 -33.7500005 -33.5833335 188 0 2670 --63.7500005 -63.5833335 -33.7500005 -33.5833335 161 0 2670 --63.5833335 -63.4166665 -33.7500005 -33.5833335 143 0 2670 --63.4166665 -63.2499995 -33.7500005 -33.5833335 131 0 2670 --63.2500005 -63.0833335 -33.7500005 -33.5833335 125 0 2670 --63.0833335 -62.9166665 -33.7500005 -33.5833335 126 0 2670 --62.9166665 -62.7499995 -33.7500005 -33.5833335 124 0 2670 --62.7500005 -62.5833335 -33.7500005 -33.5833335 128 0 2670 --62.5833335 -62.4166665 -33.7500005 -33.5833335 120 0 2670 --62.4166665 -62.2499995 -33.7500005 -33.5833335 119 0 2670 --62.2500005 -62.0833335 -33.7500005 -33.5833335 117 0 2670 --62.0833335 -61.9166665 -33.7500005 -33.5833335 114 0 2670 --61.9166665 -61.7499995 -33.7500005 -33.5833335 110 0 2670 --61.7500005 -61.5833335 -33.7500005 -33.5833335 105 0 2670 --61.5833335 -61.4166665 -33.7500005 -33.5833335 89 0 2670 --61.4166665 -61.2499995 -33.7500005 -33.5833335 99 0 2670 --61.2500005 -61.0833335 -33.7500005 -33.5833335 94 0 2670 --61.0833335 -60.9166665 -33.7500005 -33.5833335 86 0 2670 --60.9166665 -60.7499995 -33.7500005 -33.5833335 83 0 2670 --60.7500005 -60.5833335 -33.7500005 -33.5833335 68 0 2670 --60.5833335 -60.4166665 -33.7500005 -33.5833335 52 0 2670 --60.4166665 -60.2499995 -33.7500005 -33.5833335 46 0 2670 --60.2500005 -60.0833335 -33.7500005 -33.5833335 58 0 2670 --60.0833335 -59.9166665 -33.7500005 -33.5833335 38 0 2670 --59.9166665 -59.7499995 -33.7500005 -33.5833335 27 0 2670 --59.7500005 -59.5833335 -33.7500005 -33.5833335 9 0 2670 --59.5833335 -59.4166665 -33.7500005 -33.5833335 3 0 2670 --59.4166665 -59.2499995 -33.7500005 -33.5833335 2 0 2670 --59.2500005 -59.0833335 -33.7500005 -33.5833335 3 0 2670 --59.0833335 -58.9166665 -33.7500005 -33.5833335 1 0 2670 --58.9166665 -58.7499995 -33.7500005 -33.5833335 2 0 2670 --58.7500005 -58.5833335 -33.7500005 -33.5833335 1 0 2670 --58.5833335 -58.4166665 -33.7500005 -33.5833335 0 -1 -1670 --58.4166665 -58.2499995 -33.7500005 -33.5833335 12 0 2670 --58.2500005 -58.0833335 -33.7500005 -33.5833335 42 0 2670 --58.0833335 -57.9166665 -33.7500005 -33.5833335 38 0 2670 --57.9166665 -57.7499995 -33.7500005 -33.5833335 88 0 2670 --57.7500005 -57.5833335 -33.7500005 -33.5833335 96 0 2670 --57.5833335 -57.4166665 -33.7500005 -33.5833335 123 0 2670 --57.4166665 -57.2499995 -33.7500005 -33.5833335 114 0 2670 --57.2500005 -57.0833335 -33.7500005 -33.5833335 98 0 2670 --57.0833335 -56.9166665 -33.7500005 -33.5833335 127 0 2670 --56.9166665 -56.7499995 -33.7500005 -33.5833335 141 0 2670 --56.7500005 -56.5833335 -33.7500005 -33.5833335 134 0 2670 --56.5833335 -56.4166665 -33.7500005 -33.5833335 106 0 2670 --56.4166665 -56.2499995 -33.7500005 -33.5833335 132 0 2670 --56.2500005 -56.0833335 -33.7500005 -33.5833335 114 0 2670 --56.0833335 -55.9166665 -33.7500005 -33.5833335 155 0 2670 --55.9166665 -55.7499995 -33.7500005 -33.5833335 132 0 2670 --55.7500005 -55.5833335 -33.7500005 -33.5833335 158 0 2670 --55.5833335 -55.4166665 -33.7500005 -33.5833335 168 0 2670 --55.4166665 -55.2499995 -33.7500005 -33.5833335 196 0 2670 --55.2500005 -55.0833335 -33.7500005 -33.5833335 140 0 2670 --55.0833335 -54.9166665 -33.7500005 -33.5833335 107 0 2670 --54.9166665 -54.7499995 -33.7500005 -33.5833335 153 0 2670 --54.7500005 -54.5833335 -33.7500005 -33.5833335 66 0 2670 --54.5833335 -54.4166665 -33.7500005 -33.5833335 36 0 2670 --54.4166665 -54.2499995 -33.7500005 -33.5833335 33 0 2670 --54.2500005 -54.0833335 -33.7500005 -33.5833335 21 0 2670 --54.0833335 -53.9166665 -33.7500005 -33.5833335 16 0 2670 --53.9166665 -53.7499995 -33.7500005 -33.5833335 11 0 2670 --53.7500005 -53.5833335 -33.7500005 -33.5833335 7 0 2670 --53.5833335 -53.4166665 -33.7500005 -33.5833335 8 0 2670 --53.4166665 -53.2499995 -33.7500005 -33.5833335 14 0 2670 --53.2500005 -53.0833335 -33.7500005 -33.5833335 0 -13 -1670 --53.0833335 -52.9166665 -33.7500005 -33.5833335 0 -20 -1670 --52.9166665 -52.7499995 -33.7500005 -33.5833335 0 -21 -1670 --52.7500005 -52.5833335 -33.7500005 -33.5833335 0 -20 -1670 --52.5833335 -52.4166665 -33.7500005 -33.5833335 0 -20 -1670 --52.4166665 -52.2499995 -33.7500005 -33.5833335 0 -44 -1670 --52.2500005 -52.0833335 -33.7500005 -33.5833335 0 -70 -1670 --52.0833335 -51.9166665 -33.7500005 -33.5833335 0 -49 -1670 --51.9166665 -51.7499995 -33.7500005 -33.5833335 0 -58 -1670 --51.7500005 -51.5833335 -33.7500005 -33.5833335 0 -76 -1670 --51.5833335 -51.4166665 -33.7500005 -33.5833335 0 -118 -1670 --51.4166665 -51.2499995 -33.7500005 -33.5833335 0 -189 -1670 --51.2500005 -51.0833335 -33.7500005 -33.5833335 0 -287 -1670 --51.0833335 -50.9166665 -33.7500005 -33.5833335 0 -583 -1670 --50.9166665 -50.7499995 -33.7500005 -33.5833335 0 -728 -1670 --50.7500005 -50.5833335 -33.7500005 -33.5833335 0 -927 -1670 --50.5833335 -50.4166665 -33.7500005 -33.5833335 0 -1097 -1670 --50.4166665 -50.2499995 -33.7500005 -33.5833335 0 -1307 -1670 --50.2500005 -50.0833335 -33.7500005 -33.5833335 0 -1613 -1670 --50.0833335 -49.9166665 -33.7500005 -33.5833335 0 -1896 -1670 --49.9166665 -49.7499995 -33.7500005 -33.5833335 0 -2321 -1670 --49.7500005 -49.5833335 -33.7500005 -33.5833335 0 -2690 -1670 --49.5833335 -49.4166665 -33.7500005 -33.5833335 0 -2744 -1670 --49.4166665 -49.2499995 -33.7500005 -33.5833335 0 -2981 -1670 --49.2500005 -49.0833335 -33.7500005 -33.5833335 0 -2924 -1670 --49.0833335 -48.9166665 -33.7500005 -33.5833335 0 -3020 -1670 --48.9166665 -48.7499995 -33.7500005 -33.5833335 0 -3092 -1670 --48.7500005 -48.5833335 -33.7500005 -33.5833335 0 -3157 -1670 --48.5833335 -48.4166665 -33.7500005 -33.5833335 0 -3246 -1670 --48.4166665 -48.2499995 -33.7500005 -33.5833335 0 -3347 -1670 --48.2500005 -48.0833335 -33.7500005 -33.5833335 0 -3423 -1670 --48.0833335 -47.9166665 -33.7500005 -33.5833335 0 -3527 -1670 --47.9166665 -47.7499995 -33.7500005 -33.5833335 0 -3641 -1670 --47.7500005 -47.5833335 -33.7500005 -33.5833335 0 -3701 -1670 --47.5833335 -47.4166665 -33.7500005 -33.5833335 0 -3796 -1670 --47.4166665 -47.2499995 -33.7500005 -33.5833335 0 -3852 -1670 --47.2500005 -47.0833335 -33.7500005 -33.5833335 0 -3882 -1670 --47.0833335 -46.9166665 -33.7500005 -33.5833335 0 -3920 -1670 --46.9166665 -46.7499995 -33.7500005 -33.5833335 0 -3950 -1670 --46.7500005 -46.5833335 -33.7500005 -33.5833335 0 -3996 -1670 --46.5833335 -46.4166665 -33.7500005 -33.5833335 0 -4028 -1670 --46.4166665 -46.2499995 -33.7500005 -33.5833335 0 -4074 -1670 --46.2500005 -46.0833335 -33.7500005 -33.5833335 0 -4101 -1670 --46.0833335 -45.9166665 -33.7500005 -33.5833335 0 -4104 -1670 --45.9166665 -45.7499995 -33.7500005 -33.5833335 0 -4094 -1670 --45.7500005 -45.5833335 -33.7500005 -33.5833335 0 -4108 -1670 --45.5833335 -45.4166665 -33.7500005 -33.5833335 0 -4110 -1670 --45.4166665 -45.2499995 -33.7500005 -33.5833335 0 -4163 -1670 --45.2500005 -45.0833335 -33.7500005 -33.5833335 0 -4179 -1670 --45.0833335 -44.9166665 -33.7500005 -33.5833335 0 -4188 -1670 --44.9166665 -44.7499995 -33.7500005 -33.5833335 0 -4194 -1670 --44.7500005 -44.5833335 -33.7500005 -33.5833335 0 -4206 -1670 --44.5833335 -44.4166665 -33.7500005 -33.5833335 0 -4232 -1670 --44.4166665 -44.2499995 -33.7500005 -33.5833335 0 -4288 -1670 --44.2500005 -44.0833335 -33.7500005 -33.5833335 0 -4273 -1670 --44.0833335 -43.9166665 -33.7500005 -33.5833335 0 -4248 -1670 --43.9166665 -43.7499995 -33.7500005 -33.5833335 0 -4279 -1670 --43.7500005 -43.5833335 -33.7500005 -33.5833335 0 -4305 -1670 --43.5833335 -43.4166665 -33.7500005 -33.5833335 0 -4292 -1670 --43.4166665 -43.2499995 -33.7500005 -33.5833335 0 -4332 -1670 --43.2500005 -43.0833335 -33.7500005 -33.5833335 0 -4342 -1670 --43.0833335 -42.9166665 -33.7500005 -33.5833335 0 -4370 -1670 --42.9166665 -42.7499995 -33.7500005 -33.5833335 0 -4418 -1670 --42.7500005 -42.5833335 -33.7500005 -33.5833335 0 -4442 -1670 --42.5833335 -42.4166665 -33.7500005 -33.5833335 0 -4411 -1670 --42.4166665 -42.2499995 -33.7500005 -33.5833335 0 -4452 -1670 --42.2500005 -42.0833335 -33.7500005 -33.5833335 0 -4489 -1670 --42.0833335 -41.9166665 -33.7500005 -33.5833335 0 -4510 -1670 --41.9166665 -41.7499995 -33.7500005 -33.5833335 0 -4548 -1670 --41.7500005 -41.5833335 -33.7500005 -33.5833335 0 -4563 -1670 --41.5833335 -41.4166665 -33.7500005 -33.5833335 0 -4612 -1670 --41.4166665 -41.2499995 -33.7500005 -33.5833335 0 -4644 -1670 --41.2500005 -41.0833335 -33.7500005 -33.5833335 0 -4616 -1670 --41.0833335 -40.9166665 -33.7500005 -33.5833335 0 -4537 -1670 --40.9166665 -40.7499995 -33.7500005 -33.5833335 0 -4570 -1670 --40.7500005 -40.5833335 -33.7500005 -33.5833335 0 -4598 -1670 --40.5833335 -40.4166665 -33.7500005 -33.5833335 0 -4430 -1670 --40.4166665 -40.2499995 -33.7500005 -33.5833335 0 -4566 -1670 --40.2500005 -40.0833335 -33.7500005 -33.5833335 0 -4704 -1670 --40.0833335 -39.9166665 -33.7500005 -33.5833335 0 -4506 -1670 --65.0833335 -64.9166665 -33.9166665 -33.7499995 389 0 2670 --64.9166665 -64.7499995 -33.9166665 -33.7499995 352 0 2670 --64.7500005 -64.5833335 -33.9166665 -33.7499995 317 0 2670 --64.5833335 -64.4166665 -33.9166665 -33.7499995 279 0 2670 --64.4166665 -64.2499995 -33.9166665 -33.7499995 234 0 2670 --64.2500005 -64.0833335 -33.9166665 -33.7499995 217 0 2670 --64.0833335 -63.9166665 -33.9166665 -33.7499995 212 0 2670 --63.9166665 -63.7499995 -33.9166665 -33.7499995 178 0 2670 --63.7500005 -63.5833335 -33.9166665 -33.7499995 153 0 2670 --63.5833335 -63.4166665 -33.9166665 -33.7499995 135 0 2670 --63.4166665 -63.2499995 -33.9166665 -33.7499995 128 0 2670 --63.2500005 -63.0833335 -33.9166665 -33.7499995 129 0 2670 --63.0833335 -62.9166665 -33.9166665 -33.7499995 127 0 2670 --62.9166665 -62.7499995 -33.9166665 -33.7499995 126 0 2670 --62.7500005 -62.5833335 -33.9166665 -33.7499995 124 0 2670 --62.5833335 -62.4166665 -33.9166665 -33.7499995 124 0 2670 --62.4166665 -62.2499995 -33.9166665 -33.7499995 122 0 2670 --62.2500005 -62.0833335 -33.9166665 -33.7499995 113 0 2670 --62.0833335 -61.9166665 -33.9166665 -33.7499995 110 0 2670 --61.9166665 -61.7499995 -33.9166665 -33.7499995 109 0 2670 --61.7500005 -61.5833335 -33.9166665 -33.7499995 111 0 2670 --61.5833335 -61.4166665 -33.9166665 -33.7499995 106 0 2670 --61.4166665 -61.2499995 -33.9166665 -33.7499995 97 0 2670 --61.2500005 -61.0833335 -33.9166665 -33.7499995 83 0 2670 --61.0833335 -60.9166665 -33.9166665 -33.7499995 87 0 2670 --60.9166665 -60.7499995 -33.9166665 -33.7499995 76 0 2670 --60.7500005 -60.5833335 -33.9166665 -33.7499995 76 0 2670 --60.5833335 -60.4166665 -33.9166665 -33.7499995 80 0 2670 --60.4166665 -60.2499995 -33.9166665 -33.7499995 61 0 2670 --60.2500005 -60.0833335 -33.9166665 -33.7499995 58 0 2670 --60.0833335 -59.9166665 -33.9166665 -33.7499995 44 0 2670 --59.9166665 -59.7499995 -33.9166665 -33.7499995 34 0 2670 --59.7500005 -59.5833335 -33.9166665 -33.7499995 10 0 2670 --59.5833335 -59.4166665 -33.9166665 -33.7499995 27 0 2670 --59.4166665 -59.2499995 -33.9166665 -33.7499995 2 0 2670 --59.2500005 -59.0833335 -33.9166665 -33.7499995 2 0 2670 --59.0833335 -58.9166665 -33.9166665 -33.7499995 3 0 2670 --58.9166665 -58.7499995 -33.9166665 -33.7499995 3 0 2670 --58.7500005 -58.5833335 -33.9166665 -33.7499995 2 0 2670 --58.5833335 -58.4166665 -33.9166665 -33.7499995 6 0 2670 --58.4166665 -58.2499995 -33.9166665 -33.7499995 31 0 2670 --58.2500005 -58.0833335 -33.9166665 -33.7499995 53 0 2670 --58.0833335 -57.9166665 -33.9166665 -33.7499995 82 0 2670 --57.9166665 -57.7499995 -33.9166665 -33.7499995 75 0 2670 --57.7500005 -57.5833335 -33.9166665 -33.7499995 88 0 2670 --57.5833335 -57.4166665 -33.9166665 -33.7499995 131 0 2670 --57.4166665 -57.2499995 -33.9166665 -33.7499995 160 0 2670 --57.2500005 -57.0833335 -33.9166665 -33.7499995 128 0 2670 --57.0833335 -56.9166665 -33.9166665 -33.7499995 157 0 2670 --56.9166665 -56.7499995 -33.9166665 -33.7499995 111 0 2670 --56.7500005 -56.5833335 -33.9166665 -33.7499995 131 0 2670 --56.5833335 -56.4166665 -33.9166665 -33.7499995 140 0 2670 --56.4166665 -56.2499995 -33.9166665 -33.7499995 148 0 2670 --56.2500005 -56.0833335 -33.9166665 -33.7499995 94 0 2670 --56.0833335 -55.9166665 -33.9166665 -33.7499995 116 0 2670 --55.9166665 -55.7499995 -33.9166665 -33.7499995 154 0 2670 --55.7500005 -55.5833335 -33.9166665 -33.7499995 182 0 2670 --55.5833335 -55.4166665 -33.9166665 -33.7499995 215 0 2670 --55.4166665 -55.2499995 -33.9166665 -33.7499995 227 0 2670 --55.2500005 -55.0833335 -33.9166665 -33.7499995 212 0 2670 --55.0833335 -54.9166665 -33.9166665 -33.7499995 85 0 2670 --54.9166665 -54.7499995 -33.9166665 -33.7499995 65 0 2670 --54.7500005 -54.5833335 -33.9166665 -33.7499995 52 0 2670 --54.5833335 -54.4166665 -33.9166665 -33.7499995 49 0 2670 --54.4166665 -54.2499995 -33.9166665 -33.7499995 51 0 2670 --54.2500005 -54.0833335 -33.9166665 -33.7499995 27 0 2670 --54.0833335 -53.9166665 -33.9166665 -33.7499995 29 0 2670 --53.9166665 -53.7499995 -33.9166665 -33.7499995 15 0 2670 --53.7500005 -53.5833335 -33.9166665 -33.7499995 6 0 2670 --53.5833335 -53.4166665 -33.9166665 -33.7499995 16 0 2670 --53.4166665 -53.2499995 -33.9166665 -33.7499995 0 -13 -1670 --53.2500005 -53.0833335 -33.9166665 -33.7499995 0 -20 -1670 --53.0833335 -52.9166665 -33.9166665 -33.7499995 0 -20 -1670 --52.9166665 -52.7499995 -33.9166665 -33.7499995 0 -25 -1670 --52.7500005 -52.5833335 -33.9166665 -33.7499995 0 -28 -1670 --52.5833335 -52.4166665 -33.9166665 -33.7499995 0 -35 -1670 --52.4166665 -52.2499995 -33.9166665 -33.7499995 0 -77 -1670 --52.2500005 -52.0833335 -33.9166665 -33.7499995 0 -45 -1670 --52.0833335 -51.9166665 -33.9166665 -33.7499995 0 -51 -1670 --51.9166665 -51.7499995 -33.9166665 -33.7499995 0 -69 -1670 --51.7500005 -51.5833335 -33.9166665 -33.7499995 0 -100 -1670 --51.5833335 -51.4166665 -33.9166665 -33.7499995 0 -171 -1670 --51.4166665 -51.2499995 -33.9166665 -33.7499995 0 -692 -1670 --51.2500005 -51.0833335 -33.9166665 -33.7499995 0 -860 -1670 --51.0833335 -50.9166665 -33.9166665 -33.7499995 0 -1236 -1670 --50.9166665 -50.7499995 -33.9166665 -33.7499995 0 -1380 -1670 --50.7500005 -50.5833335 -33.9166665 -33.7499995 0 -1399 -1670 --50.5833335 -50.4166665 -33.9166665 -33.7499995 0 -1521 -1670 --50.4166665 -50.2499995 -33.9166665 -33.7499995 0 -1760 -1670 --50.2500005 -50.0833335 -33.9166665 -33.7499995 0 -2170 -1670 --50.0833335 -49.9166665 -33.9166665 -33.7499995 0 -2353 -1670 --49.9166665 -49.7499995 -33.9166665 -33.7499995 0 -2588 -1670 --49.7500005 -49.5833335 -33.9166665 -33.7499995 0 -2752 -1670 --49.5833335 -49.4166665 -33.9166665 -33.7499995 0 -2800 -1670 --49.4166665 -49.2499995 -33.9166665 -33.7499995 0 -2923 -1670 --49.2500005 -49.0833335 -33.9166665 -33.7499995 0 -2993 -1670 --49.0833335 -48.9166665 -33.9166665 -33.7499995 0 -3138 -1670 --48.9166665 -48.7499995 -33.9166665 -33.7499995 0 -3110 -1670 --48.7500005 -48.5833335 -33.9166665 -33.7499995 0 -3271 -1670 --48.5833335 -48.4166665 -33.9166665 -33.7499995 0 -3386 -1670 --48.4166665 -48.2499995 -33.9166665 -33.7499995 0 -3501 -1670 --48.2500005 -48.0833335 -33.9166665 -33.7499995 0 -3597 -1670 --48.0833335 -47.9166665 -33.9166665 -33.7499995 0 -3736 -1670 --47.9166665 -47.7499995 -33.9166665 -33.7499995 0 -3851 -1670 --47.7500005 -47.5833335 -33.9166665 -33.7499995 0 -3956 -1670 --47.5833335 -47.4166665 -33.9166665 -33.7499995 0 -4029 -1670 --47.4166665 -47.2499995 -33.9166665 -33.7499995 0 -4097 -1670 --47.2500005 -47.0833335 -33.9166665 -33.7499995 0 -4136 -1670 --47.0833335 -46.9166665 -33.9166665 -33.7499995 0 -4192 -1670 --46.9166665 -46.7499995 -33.9166665 -33.7499995 0 -4197 -1670 --46.7500005 -46.5833335 -33.9166665 -33.7499995 0 -4181 -1670 --46.5833335 -46.4166665 -33.9166665 -33.7499995 0 -4192 -1670 --46.4166665 -46.2499995 -33.9166665 -33.7499995 0 -4212 -1670 --46.2500005 -46.0833335 -33.9166665 -33.7499995 0 -4235 -1670 --46.0833335 -45.9166665 -33.9166665 -33.7499995 0 -4298 -1670 --45.9166665 -45.7499995 -33.9166665 -33.7499995 0 -4290 -1670 --45.7500005 -45.5833335 -33.9166665 -33.7499995 0 -4297 -1670 --45.5833335 -45.4166665 -33.9166665 -33.7499995 0 -4295 -1670 --45.4166665 -45.2499995 -33.9166665 -33.7499995 0 -4301 -1670 --45.2500005 -45.0833335 -33.9166665 -33.7499995 0 -4356 -1670 --45.0833335 -44.9166665 -33.9166665 -33.7499995 0 -4282 -1670 --44.9166665 -44.7499995 -33.9166665 -33.7499995 0 -4316 -1670 --44.7500005 -44.5833335 -33.9166665 -33.7499995 0 -4331 -1670 --44.5833335 -44.4166665 -33.9166665 -33.7499995 0 -4317 -1670 --44.4166665 -44.2499995 -33.9166665 -33.7499995 0 -4317 -1670 --44.2500005 -44.0833335 -33.9166665 -33.7499995 0 -4342 -1670 --44.0833335 -43.9166665 -33.9166665 -33.7499995 0 -4419 -1670 --43.9166665 -43.7499995 -33.9166665 -33.7499995 0 -4342 -1670 --43.7500005 -43.5833335 -33.9166665 -33.7499995 0 -4460 -1670 --43.5833335 -43.4166665 -33.9166665 -33.7499995 0 -4365 -1670 --43.4166665 -43.2499995 -33.9166665 -33.7499995 0 -4413 -1670 --43.2500005 -43.0833335 -33.9166665 -33.7499995 0 -4381 -1670 --43.0833335 -42.9166665 -33.9166665 -33.7499995 0 -4444 -1670 --42.9166665 -42.7499995 -33.9166665 -33.7499995 0 -4430 -1670 --42.7500005 -42.5833335 -33.9166665 -33.7499995 0 -4474 -1670 --42.5833335 -42.4166665 -33.9166665 -33.7499995 0 -4480 -1670 --42.4166665 -42.2499995 -33.9166665 -33.7499995 0 -4518 -1670 --42.2500005 -42.0833335 -33.9166665 -33.7499995 0 -4508 -1670 --42.0833335 -41.9166665 -33.9166665 -33.7499995 0 -4543 -1670 --41.9166665 -41.7499995 -33.9166665 -33.7499995 0 -4551 -1670 --41.7500005 -41.5833335 -33.9166665 -33.7499995 0 -4599 -1670 --41.5833335 -41.4166665 -33.9166665 -33.7499995 0 -4581 -1670 --41.4166665 -41.2499995 -33.9166665 -33.7499995 0 -4615 -1670 --41.2500005 -41.0833335 -33.9166665 -33.7499995 0 -4600 -1670 --41.0833335 -40.9166665 -33.9166665 -33.7499995 0 -4611 -1670 --40.9166665 -40.7499995 -33.9166665 -33.7499995 0 -4599 -1670 --40.7500005 -40.5833335 -33.9166665 -33.7499995 0 -4463 -1670 --40.5833335 -40.4166665 -33.9166665 -33.7499995 0 -4717 -1670 --40.4166665 -40.2499995 -33.9166665 -33.7499995 0 -4741 -1670 --40.2500005 -40.0833335 -33.9166665 -33.7499995 0 -4775 -1670 --40.0833335 -39.9166665 -33.9166665 -33.7499995 0 -4562 -1670 --65.0833335 -64.9166665 -34.0833335 -33.9166665 352 0 2670 --64.9166665 -64.7499995 -34.0833335 -33.9166665 322 0 2670 --64.7500005 -64.5833335 -34.0833335 -33.9166665 286 0 2670 --64.5833335 -64.4166665 -34.0833335 -33.9166665 254 0 2670 --64.4166665 -64.2499995 -34.0833335 -33.9166665 220 0 2670 --64.2500005 -64.0833335 -34.0833335 -33.9166665 199 0 2670 --64.0833335 -63.9166665 -34.0833335 -33.9166665 186 0 2670 --63.9166665 -63.7499995 -34.0833335 -33.9166665 164 0 2670 --63.7500005 -63.5833335 -34.0833335 -33.9166665 150 0 2670 --63.5833335 -63.4166665 -34.0833335 -33.9166665 138 0 2670 --63.4166665 -63.2499995 -34.0833335 -33.9166665 130 0 2670 --63.2500005 -63.0833335 -34.0833335 -33.9166665 133 0 2670 --63.0833335 -62.9166665 -34.0833335 -33.9166665 131 0 2670 --62.9166665 -62.7499995 -34.0833335 -33.9166665 129 0 2670 --62.7500005 -62.5833335 -34.0833335 -33.9166665 119 0 2670 --62.5833335 -62.4166665 -34.0833335 -33.9166665 122 0 2670 --62.4166665 -62.2499995 -34.0833335 -33.9166665 124 0 2670 --62.2500005 -62.0833335 -34.0833335 -33.9166665 117 0 2670 --62.0833335 -61.9166665 -34.0833335 -33.9166665 116 0 2670 --61.9166665 -61.7499995 -34.0833335 -33.9166665 106 0 2670 --61.7500005 -61.5833335 -34.0833335 -33.9166665 97 0 2670 --61.5833335 -61.4166665 -34.0833335 -33.9166665 102 0 2670 --61.4166665 -61.2499995 -34.0833335 -33.9166665 101 0 2670 --61.2500005 -61.0833335 -34.0833335 -33.9166665 98 0 2670 --61.0833335 -60.9166665 -34.0833335 -33.9166665 70 0 2670 --60.9166665 -60.7499995 -34.0833335 -33.9166665 81 0 2670 --60.7500005 -60.5833335 -34.0833335 -33.9166665 78 0 2670 --60.5833335 -60.4166665 -34.0833335 -33.9166665 61 0 2670 --60.4166665 -60.2499995 -34.0833335 -33.9166665 46 0 2670 --60.2500005 -60.0833335 -34.0833335 -33.9166665 53 0 2670 --60.0833335 -59.9166665 -34.0833335 -33.9166665 56 0 2670 --59.9166665 -59.7499995 -34.0833335 -33.9166665 30 0 2670 --59.7500005 -59.5833335 -34.0833335 -33.9166665 32 0 2670 --59.5833335 -59.4166665 -34.0833335 -33.9166665 30 0 2670 --59.4166665 -59.2499995 -34.0833335 -33.9166665 5 0 2670 --59.2500005 -59.0833335 -34.0833335 -33.9166665 25 0 2670 --59.0833335 -58.9166665 -34.0833335 -33.9166665 2 0 2670 --58.9166665 -58.7499995 -34.0833335 -33.9166665 3 0 2670 --58.7500005 -58.5833335 -34.0833335 -33.9166665 3 0 2670 --58.5833335 -58.4166665 -34.0833335 -33.9166665 4 0 2670 --58.4166665 -58.2499995 -34.0833335 -33.9166665 0 -1 -1670 --58.2500005 -58.0833335 -34.0833335 -33.9166665 29 0 2670 --58.0833335 -57.9166665 -34.0833335 -33.9166665 58 0 2670 --57.9166665 -57.7499995 -34.0833335 -33.9166665 87 0 2670 --57.7500005 -57.5833335 -34.0833335 -33.9166665 106 0 2670 --57.5833335 -57.4166665 -34.0833335 -33.9166665 99 0 2670 --57.4166665 -57.2499995 -34.0833335 -33.9166665 124 0 2670 --57.2500005 -57.0833335 -34.0833335 -33.9166665 115 0 2670 --57.0833335 -56.9166665 -34.0833335 -33.9166665 123 0 2670 --56.9166665 -56.7499995 -34.0833335 -33.9166665 69 0 2670 --56.7500005 -56.5833335 -34.0833335 -33.9166665 98 0 2670 --56.5833335 -56.4166665 -34.0833335 -33.9166665 122 0 2670 --56.4166665 -56.2499995 -34.0833335 -33.9166665 88 0 2670 --56.2500005 -56.0833335 -34.0833335 -33.9166665 71 0 2670 --56.0833335 -55.9166665 -34.0833335 -33.9166665 96 0 2670 --55.9166665 -55.7499995 -34.0833335 -33.9166665 129 0 2670 --55.7500005 -55.5833335 -34.0833335 -33.9166665 153 0 2670 --55.5833335 -55.4166665 -34.0833335 -33.9166665 156 0 2670 --55.4166665 -55.2499995 -34.0833335 -33.9166665 219 0 2670 --55.2500005 -55.0833335 -34.0833335 -33.9166665 197 0 2670 --55.0833335 -54.9166665 -34.0833335 -33.9166665 227 0 2670 --54.9166665 -54.7499995 -34.0833335 -33.9166665 190 0 2670 --54.7500005 -54.5833335 -34.0833335 -33.9166665 164 0 2670 --54.5833335 -54.4166665 -34.0833335 -33.9166665 67 0 2670 --54.4166665 -54.2499995 -34.0833335 -33.9166665 93 0 2670 --54.2500005 -54.0833335 -34.0833335 -33.9166665 46 0 2670 --54.0833335 -53.9166665 -34.0833335 -33.9166665 117 0 2670 --53.9166665 -53.7499995 -34.0833335 -33.9166665 28 0 2670 --53.7500005 -53.5833335 -34.0833335 -33.9166665 4 0 2670 --53.5833335 -53.4166665 -34.0833335 -33.9166665 0 -4 -1670 --53.4166665 -53.2499995 -34.0833335 -33.9166665 0 -20 -1670 --53.2500005 -53.0833335 -34.0833335 -33.9166665 0 -21 -1670 --53.0833335 -52.9166665 -34.0833335 -33.9166665 0 -19 -1670 --52.9166665 -52.7499995 -34.0833335 -33.9166665 0 -34 -1670 --52.7500005 -52.5833335 -34.0833335 -33.9166665 0 -47 -1670 --52.5833335 -52.4166665 -34.0833335 -33.9166665 0 -57 -1670 --52.4166665 -52.2499995 -34.0833335 -33.9166665 0 -49 -1670 --52.2500005 -52.0833335 -34.0833335 -33.9166665 0 -69 -1670 --52.0833335 -51.9166665 -34.0833335 -33.9166665 0 -44 -1670 --51.9166665 -51.7499995 -34.0833335 -33.9166665 0 -57 -1670 --51.7500005 -51.5833335 -34.0833335 -33.9166665 0 -177 -1670 --51.5833335 -51.4166665 -34.0833335 -33.9166665 0 -669 -1670 --51.4166665 -51.2499995 -34.0833335 -33.9166665 0 -888 -1670 --51.2500005 -51.0833335 -34.0833335 -33.9166665 0 -1396 -1670 --51.0833335 -50.9166665 -34.0833335 -33.9166665 0 -1788 -1670 --50.9166665 -50.7499995 -34.0833335 -33.9166665 0 -1991 -1670 --50.7500005 -50.5833335 -34.0833335 -33.9166665 0 -1901 -1670 --50.5833335 -50.4166665 -34.0833335 -33.9166665 0 -1976 -1670 --50.4166665 -50.2499995 -34.0833335 -33.9166665 0 -2144 -1670 --50.2500005 -50.0833335 -34.0833335 -33.9166665 0 -2457 -1670 --50.0833335 -49.9166665 -34.0833335 -33.9166665 0 -2671 -1670 --49.9166665 -49.7499995 -34.0833335 -33.9166665 0 -2845 -1670 --49.7500005 -49.5833335 -34.0833335 -33.9166665 0 -2852 -1670 --49.5833335 -49.4166665 -34.0833335 -33.9166665 0 -2795 -1670 --49.4166665 -49.2499995 -34.0833335 -33.9166665 0 -2980 -1670 --49.2500005 -49.0833335 -34.0833335 -33.9166665 0 -3101 -1670 --49.0833335 -48.9166665 -34.0833335 -33.9166665 0 -3181 -1670 --48.9166665 -48.7499995 -34.0833335 -33.9166665 0 -3333 -1670 --48.7500005 -48.5833335 -34.0833335 -33.9166665 0 -3353 -1670 --48.5833335 -48.4166665 -34.0833335 -33.9166665 0 -3456 -1670 --48.4166665 -48.2499995 -34.0833335 -33.9166665 0 -3580 -1670 --48.2500005 -48.0833335 -34.0833335 -33.9166665 0 -3700 -1670 --48.0833335 -47.9166665 -34.0833335 -33.9166665 0 -3783 -1670 --47.9166665 -47.7499995 -34.0833335 -33.9166665 0 -3915 -1670 --47.7500005 -47.5833335 -34.0833335 -33.9166665 0 -4017 -1670 --47.5833335 -47.4166665 -34.0833335 -33.9166665 0 -4138 -1670 --47.4166665 -47.2499995 -34.0833335 -33.9166665 0 -4208 -1670 --47.2500005 -47.0833335 -34.0833335 -33.9166665 0 -4310 -1670 --47.0833335 -46.9166665 -34.0833335 -33.9166665 0 -4340 -1670 --46.9166665 -46.7499995 -34.0833335 -33.9166665 0 -4385 -1670 --46.7500005 -46.5833335 -34.0833335 -33.9166665 0 -4425 -1670 --46.5833335 -46.4166665 -34.0833335 -33.9166665 0 -4450 -1670 --46.4166665 -46.2499995 -34.0833335 -33.9166665 0 -4476 -1670 --46.2500005 -46.0833335 -34.0833335 -33.9166665 0 -4501 -1670 --46.0833335 -45.9166665 -34.0833335 -33.9166665 0 -4506 -1670 --45.9166665 -45.7499995 -34.0833335 -33.9166665 0 -4501 -1670 --45.7500005 -45.5833335 -34.0833335 -33.9166665 0 -4488 -1670 --45.5833335 -45.4166665 -34.0833335 -33.9166665 0 -4514 -1670 --45.4166665 -45.2499995 -34.0833335 -33.9166665 0 -4520 -1670 --45.2500005 -45.0833335 -34.0833335 -33.9166665 0 -4496 -1670 --45.0833335 -44.9166665 -34.0833335 -33.9166665 0 -4482 -1670 --44.9166665 -44.7499995 -34.0833335 -33.9166665 0 -4429 -1670 --44.7500005 -44.5833335 -34.0833335 -33.9166665 0 -4459 -1670 --44.5833335 -44.4166665 -34.0833335 -33.9166665 0 -4457 -1670 --44.4166665 -44.2499995 -34.0833335 -33.9166665 0 -4480 -1670 --44.2500005 -44.0833335 -34.0833335 -33.9166665 0 -4513 -1670 --44.0833335 -43.9166665 -34.0833335 -33.9166665 0 -4486 -1670 --43.9166665 -43.7499995 -34.0833335 -33.9166665 0 -4508 -1670 --43.7500005 -43.5833335 -34.0833335 -33.9166665 0 -4436 -1670 --43.5833335 -43.4166665 -34.0833335 -33.9166665 0 -4494 -1670 --43.4166665 -43.2499995 -34.0833335 -33.9166665 0 -4445 -1670 --43.2500005 -43.0833335 -34.0833335 -33.9166665 0 -4448 -1670 --43.0833335 -42.9166665 -34.0833335 -33.9166665 0 -4496 -1670 --42.9166665 -42.7499995 -34.0833335 -33.9166665 0 -4495 -1670 --42.7500005 -42.5833335 -34.0833335 -33.9166665 0 -4510 -1670 --42.5833335 -42.4166665 -34.0833335 -33.9166665 0 -4532 -1670 --42.4166665 -42.2499995 -34.0833335 -33.9166665 0 -4560 -1670 --42.2500005 -42.0833335 -34.0833335 -33.9166665 0 -4579 -1670 --42.0833335 -41.9166665 -34.0833335 -33.9166665 0 -4572 -1670 --41.9166665 -41.7499995 -34.0833335 -33.9166665 0 -4576 -1670 --41.7500005 -41.5833335 -34.0833335 -33.9166665 0 -4621 -1670 --41.5833335 -41.4166665 -34.0833335 -33.9166665 0 -4613 -1670 --41.4166665 -41.2499995 -34.0833335 -33.9166665 0 -4617 -1670 --41.2500005 -41.0833335 -34.0833335 -33.9166665 0 -4625 -1670 --41.0833335 -40.9166665 -34.0833335 -33.9166665 0 -4640 -1670 --40.9166665 -40.7499995 -34.0833335 -33.9166665 0 -4566 -1670 --40.7500005 -40.5833335 -34.0833335 -33.9166665 0 -4529 -1670 --40.5833335 -40.4166665 -34.0833335 -33.9166665 0 -4599 -1670 --40.4166665 -40.2499995 -34.0833335 -33.9166665 0 -4765 -1670 --40.2500005 -40.0833335 -34.0833335 -33.9166665 0 -4748 -1670 --40.0833335 -39.9166665 -34.0833335 -33.9166665 0 -4748 -1670 --65.0833335 -64.9166665 -34.2500005 -34.0833335 329 0 2670 --64.9166665 -64.7499995 -34.2500005 -34.0833335 298 0 2670 --64.7500005 -64.5833335 -34.2500005 -34.0833335 270 0 2670 --64.5833335 -64.4166665 -34.2500005 -34.0833335 244 0 2670 --64.4166665 -64.2499995 -34.2500005 -34.0833335 221 0 2670 --64.2500005 -64.0833335 -34.2500005 -34.0833335 194 0 2670 --64.0833335 -63.9166665 -34.2500005 -34.0833335 176 0 2670 --63.9166665 -63.7499995 -34.2500005 -34.0833335 158 0 2670 --63.7500005 -63.5833335 -34.2500005 -34.0833335 148 0 2670 --63.5833335 -63.4166665 -34.2500005 -34.0833335 142 0 2670 --63.4166665 -63.2499995 -34.2500005 -34.0833335 136 0 2670 --63.2500005 -63.0833335 -34.2500005 -34.0833335 132 0 2670 --63.0833335 -62.9166665 -34.2500005 -34.0833335 128 0 2670 --62.9166665 -62.7499995 -34.2500005 -34.0833335 128 0 2670 --62.7500005 -62.5833335 -34.2500005 -34.0833335 122 0 2670 --62.5833335 -62.4166665 -34.2500005 -34.0833335 118 0 2670 --62.4166665 -62.2499995 -34.2500005 -34.0833335 115 0 2670 --62.2500005 -62.0833335 -34.2500005 -34.0833335 113 0 2670 --62.0833335 -61.9166665 -34.2500005 -34.0833335 105 0 2670 --61.9166665 -61.7499995 -34.2500005 -34.0833335 101 0 2670 --61.7500005 -61.5833335 -34.2500005 -34.0833335 92 0 2670 --61.5833335 -61.4166665 -34.2500005 -34.0833335 86 0 2670 --61.4166665 -61.2499995 -34.2500005 -34.0833335 91 0 2670 --61.2500005 -61.0833335 -34.2500005 -34.0833335 98 0 2670 --61.0833335 -60.9166665 -34.2500005 -34.0833335 80 0 2670 --60.9166665 -60.7499995 -34.2500005 -34.0833335 65 0 2670 --60.7500005 -60.5833335 -34.2500005 -34.0833335 76 0 2670 --60.5833335 -60.4166665 -34.2500005 -34.0833335 57 0 2670 --60.4166665 -60.2499995 -34.2500005 -34.0833335 72 0 2670 --60.2500005 -60.0833335 -34.2500005 -34.0833335 56 0 2670 --60.0833335 -59.9166665 -34.2500005 -34.0833335 43 0 2670 --59.9166665 -59.7499995 -34.2500005 -34.0833335 43 0 2670 --59.7500005 -59.5833335 -34.2500005 -34.0833335 45 0 2670 --59.5833335 -59.4166665 -34.2500005 -34.0833335 45 0 2670 --59.4166665 -59.2499995 -34.2500005 -34.0833335 16 0 2670 --59.2500005 -59.0833335 -34.2500005 -34.0833335 30 0 2670 --59.0833335 -58.9166665 -34.2500005 -34.0833335 4 0 2670 --58.9166665 -58.7499995 -34.2500005 -34.0833335 6 0 2670 --58.7500005 -58.5833335 -34.2500005 -34.0833335 4 0 2670 --58.5833335 -58.4166665 -34.2500005 -34.0833335 6 0 2670 --58.4166665 -58.2499995 -34.2500005 -34.0833335 0 -1 -1670 --58.2500005 -58.0833335 -34.2500005 -34.0833335 12 0 2670 --58.0833335 -57.9166665 -34.2500005 -34.0833335 75 0 2670 --57.9166665 -57.7499995 -34.2500005 -34.0833335 35 0 2670 --57.7500005 -57.5833335 -34.2500005 -34.0833335 78 0 2670 --57.5833335 -57.4166665 -34.2500005 -34.0833335 106 0 2670 --57.4166665 -57.2499995 -34.2500005 -34.0833335 72 0 2670 --57.2500005 -57.0833335 -34.2500005 -34.0833335 61 0 2670 --57.0833335 -56.9166665 -34.2500005 -34.0833335 115 0 2670 --56.9166665 -56.7499995 -34.2500005 -34.0833335 62 0 2670 --56.7500005 -56.5833335 -34.2500005 -34.0833335 60 0 2670 --56.5833335 -56.4166665 -34.2500005 -34.0833335 88 0 2670 --56.4166665 -56.2499995 -34.2500005 -34.0833335 67 0 2670 --56.2500005 -56.0833335 -34.2500005 -34.0833335 97 0 2670 --56.0833335 -55.9166665 -34.2500005 -34.0833335 85 0 2670 --55.9166665 -55.7499995 -34.2500005 -34.0833335 58 0 2670 --55.7500005 -55.5833335 -34.2500005 -34.0833335 87 0 2670 --55.5833335 -55.4166665 -34.2500005 -34.0833335 103 0 2670 --55.4166665 -55.2499995 -34.2500005 -34.0833335 117 0 2670 --55.2500005 -55.0833335 -34.2500005 -34.0833335 299 0 2670 --55.0833335 -54.9166665 -34.2500005 -34.0833335 225 0 2670 --54.9166665 -54.7499995 -34.2500005 -34.0833335 153 0 2670 --54.7500005 -54.5833335 -34.2500005 -34.0833335 91 0 2670 --54.5833335 -54.4166665 -34.2500005 -34.0833335 82 0 2670 --54.4166665 -54.2499995 -34.2500005 -34.0833335 84 0 2670 --54.2500005 -54.0833335 -34.2500005 -34.0833335 131 0 2670 --54.0833335 -53.9166665 -34.2500005 -34.0833335 78 0 2670 --53.9166665 -53.7499995 -34.2500005 -34.0833335 36 0 2670 --53.7500005 -53.5833335 -34.2500005 -34.0833335 0 -1 -1670 --53.5833335 -53.4166665 -34.2500005 -34.0833335 0 -18 -1670 --53.4166665 -53.2499995 -34.2500005 -34.0833335 0 -20 -1670 --53.2500005 -53.0833335 -34.2500005 -34.0833335 0 -26 -1670 --53.0833335 -52.9166665 -34.2500005 -34.0833335 0 -46 -1670 --52.9166665 -52.7499995 -34.2500005 -34.0833335 0 -49 -1670 --52.7500005 -52.5833335 -34.2500005 -34.0833335 0 -65 -1670 --52.5833335 -52.4166665 -34.2500005 -34.0833335 0 -40 -1670 --52.4166665 -52.2499995 -34.2500005 -34.0833335 0 -46 -1670 --52.2500005 -52.0833335 -34.2500005 -34.0833335 0 -87 -1670 --52.0833335 -51.9166665 -34.2500005 -34.0833335 0 -92 -1670 --51.9166665 -51.7499995 -34.2500005 -34.0833335 0 -92 -1670 --51.7500005 -51.5833335 -34.2500005 -34.0833335 0 -692 -1670 --51.5833335 -51.4166665 -34.2500005 -34.0833335 0 -776 -1670 --51.4166665 -51.2499995 -34.2500005 -34.0833335 0 -1117 -1670 --51.2500005 -51.0833335 -34.2500005 -34.0833335 0 -1559 -1670 --51.0833335 -50.9166665 -34.2500005 -34.0833335 0 -2027 -1670 --50.9166665 -50.7499995 -34.2500005 -34.0833335 0 -2246 -1670 --50.7500005 -50.5833335 -34.2500005 -34.0833335 0 -2280 -1670 --50.5833335 -50.4166665 -34.2500005 -34.0833335 0 -2465 -1670 --50.4166665 -50.2499995 -34.2500005 -34.0833335 0 -2504 -1670 --50.2500005 -50.0833335 -34.2500005 -34.0833335 0 -2558 -1670 --50.0833335 -49.9166665 -34.2500005 -34.0833335 0 -2770 -1670 --49.9166665 -49.7499995 -34.2500005 -34.0833335 0 -2889 -1670 --49.7500005 -49.5833335 -34.2500005 -34.0833335 0 -2929 -1670 --49.5833335 -49.4166665 -34.2500005 -34.0833335 0 -3141 -1670 --49.4166665 -49.2499995 -34.2500005 -34.0833335 0 -3145 -1670 --49.2500005 -49.0833335 -34.2500005 -34.0833335 0 -3244 -1670 --49.0833335 -48.9166665 -34.2500005 -34.0833335 0 -3371 -1670 --48.9166665 -48.7499995 -34.2500005 -34.0833335 0 -3415 -1670 --48.7500005 -48.5833335 -34.2500005 -34.0833335 0 -3476 -1670 --48.5833335 -48.4166665 -34.2500005 -34.0833335 0 -3613 -1670 --48.4166665 -48.2499995 -34.2500005 -34.0833335 0 -3738 -1670 --48.2500005 -48.0833335 -34.2500005 -34.0833335 0 -3824 -1670 --48.0833335 -47.9166665 -34.2500005 -34.0833335 0 -4003 -1670 --47.9166665 -47.7499995 -34.2500005 -34.0833335 0 -4072 -1670 --47.7500005 -47.5833335 -34.2500005 -34.0833335 0 -4124 -1670 --47.5833335 -47.4166665 -34.2500005 -34.0833335 0 -4222 -1670 --47.4166665 -47.2499995 -34.2500005 -34.0833335 0 -4271 -1670 --47.2500005 -47.0833335 -34.2500005 -34.0833335 0 -4351 -1670 --47.0833335 -46.9166665 -34.2500005 -34.0833335 0 -4431 -1670 --46.9166665 -46.7499995 -34.2500005 -34.0833335 0 -4513 -1670 --46.7500005 -46.5833335 -34.2500005 -34.0833335 0 -4564 -1670 --46.5833335 -46.4166665 -34.2500005 -34.0833335 0 -4614 -1670 --46.4166665 -46.2499995 -34.2500005 -34.0833335 0 -4624 -1670 --46.2500005 -46.0833335 -34.2500005 -34.0833335 0 -4646 -1670 --46.0833335 -45.9166665 -34.2500005 -34.0833335 0 -4655 -1670 --45.9166665 -45.7499995 -34.2500005 -34.0833335 0 -4666 -1670 --45.7500005 -45.5833335 -34.2500005 -34.0833335 0 -4654 -1670 --45.5833335 -45.4166665 -34.2500005 -34.0833335 0 -4655 -1670 --45.4166665 -45.2499995 -34.2500005 -34.0833335 0 -4654 -1670 --45.2500005 -45.0833335 -34.2500005 -34.0833335 0 -4632 -1670 --45.0833335 -44.9166665 -34.2500005 -34.0833335 0 -4643 -1670 --44.9166665 -44.7499995 -34.2500005 -34.0833335 0 -4565 -1670 --44.7500005 -44.5833335 -34.2500005 -34.0833335 0 -4632 -1670 --44.5833335 -44.4166665 -34.2500005 -34.0833335 0 -4676 -1670 --44.4166665 -44.2499995 -34.2500005 -34.0833335 0 -4675 -1670 --44.2500005 -44.0833335 -34.2500005 -34.0833335 0 -4693 -1670 --44.0833335 -43.9166665 -34.2500005 -34.0833335 0 -4595 -1670 --43.9166665 -43.7499995 -34.2500005 -34.0833335 0 -4566 -1670 --43.7500005 -43.5833335 -34.2500005 -34.0833335 0 -4539 -1670 --43.5833335 -43.4166665 -34.2500005 -34.0833335 0 -4533 -1670 --43.4166665 -43.2499995 -34.2500005 -34.0833335 0 -4514 -1670 --43.2500005 -43.0833335 -34.2500005 -34.0833335 0 -4537 -1670 --43.0833335 -42.9166665 -34.2500005 -34.0833335 0 -4577 -1670 --42.9166665 -42.7499995 -34.2500005 -34.0833335 0 -4566 -1670 --42.7500005 -42.5833335 -34.2500005 -34.0833335 0 -4569 -1670 --42.5833335 -42.4166665 -34.2500005 -34.0833335 0 -4570 -1670 --42.4166665 -42.2499995 -34.2500005 -34.0833335 0 -4585 -1670 --42.2500005 -42.0833335 -34.2500005 -34.0833335 0 -4616 -1670 --42.0833335 -41.9166665 -34.2500005 -34.0833335 0 -4620 -1670 --41.9166665 -41.7499995 -34.2500005 -34.0833335 0 -4633 -1670 --41.7500005 -41.5833335 -34.2500005 -34.0833335 0 -4629 -1670 --41.5833335 -41.4166665 -34.2500005 -34.0833335 0 -4656 -1670 --41.4166665 -41.2499995 -34.2500005 -34.0833335 0 -4633 -1670 --41.2500005 -41.0833335 -34.2500005 -34.0833335 0 -4674 -1670 --41.0833335 -40.9166665 -34.2500005 -34.0833335 0 -4582 -1670 --40.9166665 -40.7499995 -34.2500005 -34.0833335 0 -4553 -1670 --40.7500005 -40.5833335 -34.2500005 -34.0833335 0 -4614 -1670 --40.5833335 -40.4166665 -34.2500005 -34.0833335 0 -4707 -1670 --40.4166665 -40.2499995 -34.2500005 -34.0833335 0 -4754 -1670 --40.2500005 -40.0833335 -34.2500005 -34.0833335 0 -4695 -1670 --40.0833335 -39.9166665 -34.2500005 -34.0833335 0 -4873 -1670 --65.0833335 -64.9166665 -34.4166665 -34.2499995 309 0 2670 --64.9166665 -64.7499995 -34.4166665 -34.2499995 281 0 2670 --64.7500005 -64.5833335 -34.4166665 -34.2499995 257 0 2670 --64.5833335 -64.4166665 -34.4166665 -34.2499995 235 0 2670 --64.4166665 -64.2499995 -34.4166665 -34.2499995 214 0 2670 --64.2500005 -64.0833335 -34.4166665 -34.2499995 190 0 2670 --64.0833335 -63.9166665 -34.4166665 -34.2499995 172 0 2670 --63.9166665 -63.7499995 -34.4166665 -34.2499995 157 0 2670 --63.7500005 -63.5833335 -34.4166665 -34.2499995 147 0 2670 --63.5833335 -63.4166665 -34.4166665 -34.2499995 142 0 2670 --63.4166665 -63.2499995 -34.4166665 -34.2499995 138 0 2670 --63.2500005 -63.0833335 -34.4166665 -34.2499995 132 0 2670 --63.0833335 -62.9166665 -34.4166665 -34.2499995 127 0 2670 --62.9166665 -62.7499995 -34.4166665 -34.2499995 121 0 2670 --62.7500005 -62.5833335 -34.4166665 -34.2499995 112 0 2670 --62.5833335 -62.4166665 -34.4166665 -34.2499995 108 0 2670 --62.4166665 -62.2499995 -34.4166665 -34.2499995 103 0 2670 --62.2500005 -62.0833335 -34.4166665 -34.2499995 103 0 2670 --62.0833335 -61.9166665 -34.4166665 -34.2499995 104 0 2670 --61.9166665 -61.7499995 -34.4166665 -34.2499995 97 0 2670 --61.7500005 -61.5833335 -34.4166665 -34.2499995 95 0 2670 --61.5833335 -61.4166665 -34.4166665 -34.2499995 93 0 2670 --61.4166665 -61.2499995 -34.4166665 -34.2499995 84 0 2670 --61.2500005 -61.0833335 -34.4166665 -34.2499995 85 0 2670 --61.0833335 -60.9166665 -34.4166665 -34.2499995 72 0 2670 --60.9166665 -60.7499995 -34.4166665 -34.2499995 65 0 2670 --60.7500005 -60.5833335 -34.4166665 -34.2499995 70 0 2670 --60.5833335 -60.4166665 -34.4166665 -34.2499995 62 0 2670 --60.4166665 -60.2499995 -34.4166665 -34.2499995 59 0 2670 --60.2500005 -60.0833335 -34.4166665 -34.2499995 67 0 2670 --60.0833335 -59.9166665 -34.4166665 -34.2499995 54 0 2670 --59.9166665 -59.7499995 -34.4166665 -34.2499995 50 0 2670 --59.7500005 -59.5833335 -34.4166665 -34.2499995 50 0 2670 --59.5833335 -59.4166665 -34.4166665 -34.2499995 48 0 2670 --59.4166665 -59.2499995 -34.4166665 -34.2499995 39 0 2670 --59.2500005 -59.0833335 -34.4166665 -34.2499995 19 0 2670 --59.0833335 -58.9166665 -34.4166665 -34.2499995 27 0 2670 --58.9166665 -58.7499995 -34.4166665 -34.2499995 17 0 2670 --58.7500005 -58.5833335 -34.4166665 -34.2499995 3 0 2670 --58.5833335 -58.4166665 -34.4166665 -34.2499995 3 0 2670 --58.4166665 -58.2499995 -34.4166665 -34.2499995 0 -1 -1670 --58.2500005 -58.0833335 -34.4166665 -34.2499995 0 -1 -1670 --58.0833335 -57.9166665 -34.4166665 -34.2499995 0 -1 -1670 --57.9166665 -57.7499995 -34.4166665 -34.2499995 37 0 2670 --57.7500005 -57.5833335 -34.4166665 -34.2499995 53 0 2670 --57.5833335 -57.4166665 -34.4166665 -34.2499995 47 0 2670 --57.4166665 -57.2499995 -34.4166665 -34.2499995 15 0 2670 --57.2500005 -57.0833335 -34.4166665 -34.2499995 49 0 2670 --57.0833335 -56.9166665 -34.4166665 -34.2499995 67 0 2670 --56.9166665 -56.7499995 -34.4166665 -34.2499995 64 0 2670 --56.7500005 -56.5833335 -34.4166665 -34.2499995 31 0 2670 --56.5833335 -56.4166665 -34.4166665 -34.2499995 49 0 2670 --56.4166665 -56.2499995 -34.4166665 -34.2499995 19 0 2670 --56.2500005 -56.0833335 -34.4166665 -34.2499995 35 0 2670 --56.0833335 -55.9166665 -34.4166665 -34.2499995 34 0 2670 --55.9166665 -55.7499995 -34.4166665 -34.2499995 60 0 2670 --55.7500005 -55.5833335 -34.4166665 -34.2499995 85 0 2670 --55.5833335 -55.4166665 -34.4166665 -34.2499995 90 0 2670 --55.4166665 -55.2499995 -34.4166665 -34.2499995 156 0 2670 --55.2500005 -55.0833335 -34.4166665 -34.2499995 180 0 2670 --55.0833335 -54.9166665 -34.4166665 -34.2499995 285 0 2670 --54.9166665 -54.7499995 -34.4166665 -34.2499995 137 0 2670 --54.7500005 -54.5833335 -34.4166665 -34.2499995 355 0 2670 --54.5833335 -54.4166665 -34.4166665 -34.2499995 116 0 2670 --54.4166665 -54.2499995 -34.4166665 -34.2499995 101 0 2670 --54.2500005 -54.0833335 -34.4166665 -34.2499995 57 0 2670 --54.0833335 -53.9166665 -34.4166665 -34.2499995 3 0 2670 --53.9166665 -53.7499995 -34.4166665 -34.2499995 3 0 2670 --53.7500005 -53.5833335 -34.4166665 -34.2499995 0 -19 -1670 --53.5833335 -53.4166665 -34.4166665 -34.2499995 0 -20 -1670 --53.4166665 -53.2499995 -34.4166665 -34.2499995 0 -25 -1670 --53.2500005 -53.0833335 -34.4166665 -34.2499995 0 -38 -1670 --53.0833335 -52.9166665 -34.4166665 -34.2499995 0 -62 -1670 --52.9166665 -52.7499995 -34.4166665 -34.2499995 0 -45 -1670 --52.7500005 -52.5833335 -34.4166665 -34.2499995 0 -38 -1670 --52.5833335 -52.4166665 -34.4166665 -34.2499995 0 -67 -1670 --52.4166665 -52.2499995 -34.4166665 -34.2499995 0 -81 -1670 --52.2500005 -52.0833335 -34.4166665 -34.2499995 0 -108 -1670 --52.0833335 -51.9166665 -34.4166665 -34.2499995 0 -126 -1670 --51.9166665 -51.7499995 -34.4166665 -34.2499995 0 -308 -1670 --51.7500005 -51.5833335 -34.4166665 -34.2499995 0 -550 -1670 --51.5833335 -51.4166665 -34.4166665 -34.2499995 0 -1066 -1670 --51.4166665 -51.2499995 -34.4166665 -34.2499995 0 -1551 -1670 --51.2500005 -51.0833335 -34.4166665 -34.2499995 0 -1959 -1670 --51.0833335 -50.9166665 -34.4166665 -34.2499995 0 -2290 -1670 --50.9166665 -50.7499995 -34.4166665 -34.2499995 0 -2452 -1670 --50.7500005 -50.5833335 -34.4166665 -34.2499995 0 -2561 -1670 --50.5833335 -50.4166665 -34.4166665 -34.2499995 0 -2666 -1670 --50.4166665 -50.2499995 -34.4166665 -34.2499995 0 -2780 -1670 --50.2500005 -50.0833335 -34.4166665 -34.2499995 0 -2836 -1670 --50.0833335 -49.9166665 -34.4166665 -34.2499995 0 -2941 -1670 --49.9166665 -49.7499995 -34.4166665 -34.2499995 0 -2991 -1670 --49.7500005 -49.5833335 -34.4166665 -34.2499995 0 -3144 -1670 --49.5833335 -49.4166665 -34.4166665 -34.2499995 0 -3381 -1670 --49.4166665 -49.2499995 -34.4166665 -34.2499995 0 -3438 -1670 --49.2500005 -49.0833335 -34.4166665 -34.2499995 0 -3644 -1670 --49.0833335 -48.9166665 -34.4166665 -34.2499995 0 -3625 -1670 --48.9166665 -48.7499995 -34.4166665 -34.2499995 0 -3644 -1670 --48.7500005 -48.5833335 -34.4166665 -34.2499995 0 -3699 -1670 --48.5833335 -48.4166665 -34.4166665 -34.2499995 0 -3855 -1670 --48.4166665 -48.2499995 -34.4166665 -34.2499995 0 -3940 -1670 --48.2500005 -48.0833335 -34.4166665 -34.2499995 0 -4038 -1670 --48.0833335 -47.9166665 -34.4166665 -34.2499995 0 -4232 -1670 --47.9166665 -47.7499995 -34.4166665 -34.2499995 0 -4255 -1670 --47.7500005 -47.5833335 -34.4166665 -34.2499995 0 -4350 -1670 --47.5833335 -47.4166665 -34.4166665 -34.2499995 0 -4389 -1670 --47.4166665 -47.2499995 -34.4166665 -34.2499995 0 -4438 -1670 --47.2500005 -47.0833335 -34.4166665 -34.2499995 0 -4455 -1670 --47.0833335 -46.9166665 -34.4166665 -34.2499995 0 -4490 -1670 --46.9166665 -46.7499995 -34.4166665 -34.2499995 0 -4529 -1670 --46.7500005 -46.5833335 -34.4166665 -34.2499995 0 -4600 -1670 --46.5833335 -46.4166665 -34.4166665 -34.2499995 0 -4637 -1670 --46.4166665 -46.2499995 -34.4166665 -34.2499995 0 -4666 -1670 --46.2500005 -46.0833335 -34.4166665 -34.2499995 0 -4675 -1670 --46.0833335 -45.9166665 -34.4166665 -34.2499995 0 -4702 -1670 --45.9166665 -45.7499995 -34.4166665 -34.2499995 0 -4736 -1670 --45.7500005 -45.5833335 -34.4166665 -34.2499995 0 -4742 -1670 --45.5833335 -45.4166665 -34.4166665 -34.2499995 0 -4759 -1670 --45.4166665 -45.2499995 -34.4166665 -34.2499995 0 -4756 -1670 --45.2500005 -45.0833335 -34.4166665 -34.2499995 0 -4743 -1670 --45.0833335 -44.9166665 -34.4166665 -34.2499995 0 -4754 -1670 --44.9166665 -44.7499995 -34.4166665 -34.2499995 0 -4713 -1670 --44.7500005 -44.5833335 -34.4166665 -34.2499995 0 -4713 -1670 --44.5833335 -44.4166665 -34.4166665 -34.2499995 0 -4757 -1670 --44.4166665 -44.2499995 -34.4166665 -34.2499995 0 -4718 -1670 --44.2500005 -44.0833335 -34.4166665 -34.2499995 0 -4723 -1670 --44.0833335 -43.9166665 -34.4166665 -34.2499995 0 -4682 -1670 --43.9166665 -43.7499995 -34.4166665 -34.2499995 0 -4674 -1670 --43.7500005 -43.5833335 -34.4166665 -34.2499995 0 -4646 -1670 --43.5833335 -43.4166665 -34.4166665 -34.2499995 0 -4632 -1670 --43.4166665 -43.2499995 -34.4166665 -34.2499995 0 -4636 -1670 --43.2500005 -43.0833335 -34.4166665 -34.2499995 0 -4643 -1670 --43.0833335 -42.9166665 -34.4166665 -34.2499995 0 -4620 -1670 --42.9166665 -42.7499995 -34.4166665 -34.2499995 0 -4619 -1670 --42.7500005 -42.5833335 -34.4166665 -34.2499995 0 -4621 -1670 --42.5833335 -42.4166665 -34.4166665 -34.2499995 0 -4620 -1670 --42.4166665 -42.2499995 -34.4166665 -34.2499995 0 -4620 -1670 --42.2500005 -42.0833335 -34.4166665 -34.2499995 0 -4643 -1670 --42.0833335 -41.9166665 -34.4166665 -34.2499995 0 -4650 -1670 --41.9166665 -41.7499995 -34.4166665 -34.2499995 0 -4653 -1670 --41.7500005 -41.5833335 -34.4166665 -34.2499995 0 -4642 -1670 --41.5833335 -41.4166665 -34.4166665 -34.2499995 0 -4648 -1670 --41.4166665 -41.2499995 -34.4166665 -34.2499995 0 -4670 -1670 --41.2500005 -41.0833335 -34.4166665 -34.2499995 0 -4635 -1670 --41.0833335 -40.9166665 -34.4166665 -34.2499995 0 -4655 -1670 --40.9166665 -40.7499995 -34.4166665 -34.2499995 0 -4555 -1670 --40.7500005 -40.5833335 -34.4166665 -34.2499995 0 -4615 -1670 --40.5833335 -40.4166665 -34.4166665 -34.2499995 0 -4786 -1670 --40.4166665 -40.2499995 -34.4166665 -34.2499995 0 -4785 -1670 --40.2500005 -40.0833335 -34.4166665 -34.2499995 0 -4826 -1670 --40.0833335 -39.9166665 -34.4166665 -34.2499995 0 -4669 -1670 --65.0833335 -64.9166665 -34.5833335 -34.4166665 287 0 2670 --64.9166665 -64.7499995 -34.5833335 -34.4166665 262 0 2670 --64.7500005 -64.5833335 -34.5833335 -34.4166665 238 0 2670 --64.5833335 -64.4166665 -34.5833335 -34.4166665 217 0 2670 --64.4166665 -64.2499995 -34.5833335 -34.4166665 191 0 2670 --64.2500005 -64.0833335 -34.5833335 -34.4166665 178 0 2670 --64.0833335 -63.9166665 -34.5833335 -34.4166665 162 0 2670 --63.9166665 -63.7499995 -34.5833335 -34.4166665 149 0 2670 --63.7500005 -63.5833335 -34.5833335 -34.4166665 145 0 2670 --63.5833335 -63.4166665 -34.5833335 -34.4166665 141 0 2670 --63.4166665 -63.2499995 -34.5833335 -34.4166665 137 0 2670 --63.2500005 -63.0833335 -34.5833335 -34.4166665 132 0 2670 --63.0833335 -62.9166665 -34.5833335 -34.4166665 126 0 2670 --62.9166665 -62.7499995 -34.5833335 -34.4166665 122 0 2670 --62.7500005 -62.5833335 -34.5833335 -34.4166665 119 0 2670 --62.5833335 -62.4166665 -34.5833335 -34.4166665 111 0 2670 --62.4166665 -62.2499995 -34.5833335 -34.4166665 112 0 2670 --62.2500005 -62.0833335 -34.5833335 -34.4166665 108 0 2670 --62.0833335 -61.9166665 -34.5833335 -34.4166665 106 0 2670 --61.9166665 -61.7499995 -34.5833335 -34.4166665 102 0 2670 --61.7500005 -61.5833335 -34.5833335 -34.4166665 91 0 2670 --61.5833335 -61.4166665 -34.5833335 -34.4166665 87 0 2670 --61.4166665 -61.2499995 -34.5833335 -34.4166665 83 0 2670 --61.2500005 -61.0833335 -34.5833335 -34.4166665 75 0 2670 --61.0833335 -60.9166665 -34.5833335 -34.4166665 85 0 2670 --60.9166665 -60.7499995 -34.5833335 -34.4166665 78 0 2670 --60.7500005 -60.5833335 -34.5833335 -34.4166665 71 0 2670 --60.5833335 -60.4166665 -34.5833335 -34.4166665 72 0 2670 --60.4166665 -60.2499995 -34.5833335 -34.4166665 68 0 2670 --60.2500005 -60.0833335 -34.5833335 -34.4166665 64 0 2670 --60.0833335 -59.9166665 -34.5833335 -34.4166665 50 0 2670 --59.9166665 -59.7499995 -34.5833335 -34.4166665 55 0 2670 --59.7500005 -59.5833335 -34.5833335 -34.4166665 53 0 2670 --59.5833335 -59.4166665 -34.5833335 -34.4166665 50 0 2670 --59.4166665 -59.2499995 -34.5833335 -34.4166665 42 0 2670 --59.2500005 -59.0833335 -34.5833335 -34.4166665 27 0 2670 --59.0833335 -58.9166665 -34.5833335 -34.4166665 13 0 2670 --58.9166665 -58.7499995 -34.5833335 -34.4166665 27 0 2670 --58.7500005 -58.5833335 -34.5833335 -34.4166665 20 0 2670 --58.5833335 -58.4166665 -34.5833335 -34.4166665 23 0 2670 --58.4166665 -58.2499995 -34.5833335 -34.4166665 0 -1 -1670 --58.2500005 -58.0833335 -34.5833335 -34.4166665 0 -1 -1670 --58.0833335 -57.9166665 -34.5833335 -34.4166665 0 -1 -1670 --57.9166665 -57.7499995 -34.5833335 -34.4166665 0 -1 -1670 --57.7500005 -57.5833335 -34.5833335 -34.4166665 0 -1 -1670 --57.5833335 -57.4166665 -34.5833335 -34.4166665 0 -1 -1670 --57.4166665 -57.2499995 -34.5833335 -34.4166665 0 -1 -1670 --57.2500005 -57.0833335 -34.5833335 -34.4166665 0 -1 -1670 --57.0833335 -56.9166665 -34.5833335 -34.4166665 11 0 2670 --56.9166665 -56.7499995 -34.5833335 -34.4166665 26 0 2670 --56.7500005 -56.5833335 -34.5833335 -34.4166665 16 0 2670 --56.5833335 -56.4166665 -34.5833335 -34.4166665 33 0 2670 --56.4166665 -56.2499995 -34.5833335 -34.4166665 16 0 2670 --56.2500005 -56.0833335 -34.5833335 -34.4166665 40 0 2670 --56.0833335 -55.9166665 -34.5833335 -34.4166665 61 0 2670 --55.9166665 -55.7499995 -34.5833335 -34.4166665 71 0 2670 --55.7500005 -55.5833335 -34.5833335 -34.4166665 51 0 2670 --55.5833335 -55.4166665 -34.5833335 -34.4166665 37 0 2670 --55.4166665 -55.2499995 -34.5833335 -34.4166665 215 0 2670 --55.2500005 -55.0833335 -34.5833335 -34.4166665 292 0 2670 --55.0833335 -54.9166665 -34.5833335 -34.4166665 156 0 2670 --54.9166665 -54.7499995 -34.5833335 -34.4166665 137 0 2670 --54.7500005 -54.5833335 -34.5833335 -34.4166665 85 0 2670 --54.5833335 -54.4166665 -34.5833335 -34.4166665 102 0 2670 --54.4166665 -54.2499995 -34.5833335 -34.4166665 18 0 2670 --54.2500005 -54.0833335 -34.5833335 -34.4166665 51 0 2670 --54.0833335 -53.9166665 -34.5833335 -34.4166665 13 0 2670 --53.9166665 -53.7499995 -34.5833335 -34.4166665 0 -23 -1670 --53.7500005 -53.5833335 -34.5833335 -34.4166665 0 -31 -1670 --53.5833335 -53.4166665 -34.5833335 -34.4166665 0 -35 -1670 --53.4166665 -53.2499995 -34.5833335 -34.4166665 0 -42 -1670 --53.2500005 -53.0833335 -34.5833335 -34.4166665 0 -55 -1670 --53.0833335 -52.9166665 -34.5833335 -34.4166665 0 -53 -1670 --52.9166665 -52.7499995 -34.5833335 -34.4166665 0 -84 -1670 --52.7500005 -52.5833335 -34.5833335 -34.4166665 0 -63 -1670 --52.5833335 -52.4166665 -34.5833335 -34.4166665 0 -72 -1670 --52.4166665 -52.2499995 -34.5833335 -34.4166665 0 -83 -1670 --52.2500005 -52.0833335 -34.5833335 -34.4166665 0 -125 -1670 --52.0833335 -51.9166665 -34.5833335 -34.4166665 0 -208 -1670 --51.9166665 -51.7499995 -34.5833335 -34.4166665 0 -448 -1670 --51.7500005 -51.5833335 -34.5833335 -34.4166665 0 -1076 -1670 --51.5833335 -51.4166665 -34.5833335 -34.4166665 0 -1407 -1670 --51.4166665 -51.2499995 -34.5833335 -34.4166665 0 -1776 -1670 --51.2500005 -51.0833335 -34.5833335 -34.4166665 0 -2116 -1670 --51.0833335 -50.9166665 -34.5833335 -34.4166665 0 -2490 -1670 --50.9166665 -50.7499995 -34.5833335 -34.4166665 0 -2822 -1670 --50.7500005 -50.5833335 -34.5833335 -34.4166665 0 -2857 -1670 --50.5833335 -50.4166665 -34.5833335 -34.4166665 0 -2972 -1670 --50.4166665 -50.2499995 -34.5833335 -34.4166665 0 -3009 -1670 --50.2500005 -50.0833335 -34.5833335 -34.4166665 0 -3138 -1670 --50.0833335 -49.9166665 -34.5833335 -34.4166665 0 -3196 -1670 --49.9166665 -49.7499995 -34.5833335 -34.4166665 0 -3309 -1670 --49.7500005 -49.5833335 -34.5833335 -34.4166665 0 -3542 -1670 --49.5833335 -49.4166665 -34.5833335 -34.4166665 0 -3556 -1670 --49.4166665 -49.2499995 -34.5833335 -34.4166665 0 -3592 -1670 --49.2500005 -49.0833335 -34.5833335 -34.4166665 0 -3738 -1670 --49.0833335 -48.9166665 -34.5833335 -34.4166665 0 -3784 -1670 --48.9166665 -48.7499995 -34.5833335 -34.4166665 0 -3923 -1670 --48.7500005 -48.5833335 -34.5833335 -34.4166665 0 -4017 -1670 --48.5833335 -48.4166665 -34.5833335 -34.4166665 0 -4143 -1670 --48.4166665 -48.2499995 -34.5833335 -34.4166665 0 -4189 -1670 --48.2500005 -48.0833335 -34.5833335 -34.4166665 0 -4264 -1670 --48.0833335 -47.9166665 -34.5833335 -34.4166665 0 -4384 -1670 --47.9166665 -47.7499995 -34.5833335 -34.4166665 0 -4462 -1670 --47.7500005 -47.5833335 -34.5833335 -34.4166665 0 -4521 -1670 --47.5833335 -47.4166665 -34.5833335 -34.4166665 0 -4566 -1670 --47.4166665 -47.2499995 -34.5833335 -34.4166665 0 -4588 -1670 --47.2500005 -47.0833335 -34.5833335 -34.4166665 0 -4608 -1670 --47.0833335 -46.9166665 -34.5833335 -34.4166665 0 -4621 -1670 --46.9166665 -46.7499995 -34.5833335 -34.4166665 0 -4633 -1670 --46.7500005 -46.5833335 -34.5833335 -34.4166665 0 -4613 -1670 --46.5833335 -46.4166665 -34.5833335 -34.4166665 0 -4650 -1670 --46.4166665 -46.2499995 -34.5833335 -34.4166665 0 -4695 -1670 --46.2500005 -46.0833335 -34.5833335 -34.4166665 0 -4737 -1670 --46.0833335 -45.9166665 -34.5833335 -34.4166665 0 -4768 -1670 --45.9166665 -45.7499995 -34.5833335 -34.4166665 0 -4764 -1670 --45.7500005 -45.5833335 -34.5833335 -34.4166665 0 -4779 -1670 --45.5833335 -45.4166665 -34.5833335 -34.4166665 0 -4785 -1670 --45.4166665 -45.2499995 -34.5833335 -34.4166665 0 -4801 -1670 --45.2500005 -45.0833335 -34.5833335 -34.4166665 0 -4803 -1670 --45.0833335 -44.9166665 -34.5833335 -34.4166665 0 -4796 -1670 --44.9166665 -44.7499995 -34.5833335 -34.4166665 0 -4783 -1670 --44.7500005 -44.5833335 -34.5833335 -34.4166665 0 -4774 -1670 --44.5833335 -44.4166665 -34.5833335 -34.4166665 0 -4761 -1670 --44.4166665 -44.2499995 -34.5833335 -34.4166665 0 -4771 -1670 --44.2500005 -44.0833335 -34.5833335 -34.4166665 0 -4748 -1670 --44.0833335 -43.9166665 -34.5833335 -34.4166665 0 -4749 -1670 --43.9166665 -43.7499995 -34.5833335 -34.4166665 0 -4748 -1670 --43.7500005 -43.5833335 -34.5833335 -34.4166665 0 -4735 -1670 --43.5833335 -43.4166665 -34.5833335 -34.4166665 0 -4732 -1670 --43.4166665 -43.2499995 -34.5833335 -34.4166665 0 -4705 -1670 --43.2500005 -43.0833335 -34.5833335 -34.4166665 0 -4712 -1670 --43.0833335 -42.9166665 -34.5833335 -34.4166665 0 -4703 -1670 --42.9166665 -42.7499995 -34.5833335 -34.4166665 0 -4670 -1670 --42.7500005 -42.5833335 -34.5833335 -34.4166665 0 -4667 -1670 --42.5833335 -42.4166665 -34.5833335 -34.4166665 0 -4664 -1670 --42.4166665 -42.2499995 -34.5833335 -34.4166665 0 -4665 -1670 --42.2500005 -42.0833335 -34.5833335 -34.4166665 0 -4677 -1670 --42.0833335 -41.9166665 -34.5833335 -34.4166665 0 -4687 -1670 --41.9166665 -41.7499995 -34.5833335 -34.4166665 0 -4682 -1670 --41.7500005 -41.5833335 -34.5833335 -34.4166665 0 -4671 -1670 --41.5833335 -41.4166665 -34.5833335 -34.4166665 0 -4670 -1670 --41.4166665 -41.2499995 -34.5833335 -34.4166665 0 -4683 -1670 --41.2500005 -41.0833335 -34.5833335 -34.4166665 0 -4670 -1670 --41.0833335 -40.9166665 -34.5833335 -34.4166665 0 -4725 -1670 --40.9166665 -40.7499995 -34.5833335 -34.4166665 0 -4672 -1670 --40.7500005 -40.5833335 -34.5833335 -34.4166665 0 -4645 -1670 --40.5833335 -40.4166665 -34.5833335 -34.4166665 0 -4731 -1670 --40.4166665 -40.2499995 -34.5833335 -34.4166665 0 -4863 -1670 --40.2500005 -40.0833335 -34.5833335 -34.4166665 0 -4845 -1670 --40.0833335 -39.9166665 -34.5833335 -34.4166665 0 -4837 -1670 --65.0833335 -64.9166665 -34.7500005 -34.5833335 269 0 2670 --64.9166665 -64.7499995 -34.7500005 -34.5833335 249 0 2670 --64.7500005 -64.5833335 -34.7500005 -34.5833335 231 0 2670 --64.5833335 -64.4166665 -34.7500005 -34.5833335 203 0 2670 --64.4166665 -64.2499995 -34.7500005 -34.5833335 182 0 2670 --64.2500005 -64.0833335 -34.7500005 -34.5833335 162 0 2670 --64.0833335 -63.9166665 -34.7500005 -34.5833335 150 0 2670 --63.9166665 -63.7499995 -34.7500005 -34.5833335 145 0 2670 --63.7500005 -63.5833335 -34.7500005 -34.5833335 139 0 2670 --63.5833335 -63.4166665 -34.7500005 -34.5833335 129 0 2670 --63.4166665 -63.2499995 -34.7500005 -34.5833335 132 0 2670 --63.2500005 -63.0833335 -34.7500005 -34.5833335 128 0 2670 --63.0833335 -62.9166665 -34.7500005 -34.5833335 121 0 2670 --62.9166665 -62.7499995 -34.7500005 -34.5833335 116 0 2670 --62.7500005 -62.5833335 -34.7500005 -34.5833335 113 0 2670 --62.5833335 -62.4166665 -34.7500005 -34.5833335 108 0 2670 --62.4166665 -62.2499995 -34.7500005 -34.5833335 103 0 2670 --62.2500005 -62.0833335 -34.7500005 -34.5833335 102 0 2670 --62.0833335 -61.9166665 -34.7500005 -34.5833335 100 0 2670 --61.9166665 -61.7499995 -34.7500005 -34.5833335 94 0 2670 --61.7500005 -61.5833335 -34.7500005 -34.5833335 91 0 2670 --61.5833335 -61.4166665 -34.7500005 -34.5833335 87 0 2670 --61.4166665 -61.2499995 -34.7500005 -34.5833335 79 0 2670 --61.2500005 -61.0833335 -34.7500005 -34.5833335 80 0 2670 --61.0833335 -60.9166665 -34.7500005 -34.5833335 77 0 2670 --60.9166665 -60.7499995 -34.7500005 -34.5833335 77 0 2670 --60.7500005 -60.5833335 -34.7500005 -34.5833335 66 0 2670 --60.5833335 -60.4166665 -34.7500005 -34.5833335 67 0 2670 --60.4166665 -60.2499995 -34.7500005 -34.5833335 66 0 2670 --60.2500005 -60.0833335 -34.7500005 -34.5833335 59 0 2670 --60.0833335 -59.9166665 -34.7500005 -34.5833335 54 0 2670 --59.9166665 -59.7499995 -34.7500005 -34.5833335 51 0 2670 --59.7500005 -59.5833335 -34.7500005 -34.5833335 47 0 2670 --59.5833335 -59.4166665 -34.7500005 -34.5833335 34 0 2670 --59.4166665 -59.2499995 -34.7500005 -34.5833335 33 0 2670 --59.2500005 -59.0833335 -34.7500005 -34.5833335 33 0 2670 --59.0833335 -58.9166665 -34.7500005 -34.5833335 24 0 2670 --58.9166665 -58.7499995 -34.7500005 -34.5833335 27 0 2670 --58.7500005 -58.5833335 -34.7500005 -34.5833335 30 0 2670 --58.5833335 -58.4166665 -34.7500005 -34.5833335 21 0 2670 --58.4166665 -58.2499995 -34.7500005 -34.5833335 6 0 2670 --58.2500005 -58.0833335 -34.7500005 -34.5833335 0 -1 -1670 --58.0833335 -57.9166665 -34.7500005 -34.5833335 0 -1 -1670 --57.9166665 -57.7499995 -34.7500005 -34.5833335 0 -1 -1670 --57.7500005 -57.5833335 -34.7500005 -34.5833335 0 -1 -1670 --57.5833335 -57.4166665 -34.7500005 -34.5833335 0 -1 -1670 --57.4166665 -57.2499995 -34.7500005 -34.5833335 0 -1 -1670 --57.2500005 -57.0833335 -34.7500005 -34.5833335 0 -1 -1670 --57.0833335 -56.9166665 -34.7500005 -34.5833335 0 -1 -1670 --56.9166665 -56.7499995 -34.7500005 -34.5833335 3 0 2670 --56.7500005 -56.5833335 -34.7500005 -34.5833335 19 0 2670 --56.5833335 -56.4166665 -34.7500005 -34.5833335 0 -3 -1670 --56.4166665 -56.2499995 -34.7500005 -34.5833335 21 0 2670 --56.2500005 -56.0833335 -34.7500005 -34.5833335 51 0 2670 --56.0833335 -55.9166665 -34.7500005 -34.5833335 35 0 2670 --55.9166665 -55.7499995 -34.7500005 -34.5833335 45 0 2670 --55.7500005 -55.5833335 -34.7500005 -34.5833335 20 0 2670 --55.5833335 -55.4166665 -34.7500005 -34.5833335 37 0 2670 --55.4166665 -55.2499995 -34.7500005 -34.5833335 336 0 2670 --55.2500005 -55.0833335 -34.7500005 -34.5833335 85 0 2670 --55.0833335 -54.9166665 -34.7500005 -34.5833335 81 0 2670 --54.9166665 -54.7499995 -34.7500005 -34.5833335 46 0 2670 --54.7500005 -54.5833335 -34.7500005 -34.5833335 61 0 2670 --54.5833335 -54.4166665 -34.7500005 -34.5833335 31 0 2670 --54.4166665 -54.2499995 -34.7500005 -34.5833335 7 0 2670 --54.2500005 -54.0833335 -34.7500005 -34.5833335 1 0 2670 --54.0833335 -53.9166665 -34.7500005 -34.5833335 0 -20 -1670 --53.9166665 -53.7499995 -34.7500005 -34.5833335 0 -38 -1670 --53.7500005 -53.5833335 -34.7500005 -34.5833335 0 -44 -1670 --53.5833335 -53.4166665 -34.7500005 -34.5833335 0 -47 -1670 --53.4166665 -53.2499995 -34.7500005 -34.5833335 0 -65 -1670 --53.2500005 -53.0833335 -34.7500005 -34.5833335 0 -39 -1670 --53.0833335 -52.9166665 -34.7500005 -34.5833335 0 -38 -1670 --52.9166665 -52.7499995 -34.7500005 -34.5833335 0 -76 -1670 --52.7500005 -52.5833335 -34.7500005 -34.5833335 0 -67 -1670 --52.5833335 -52.4166665 -34.7500005 -34.5833335 0 -37 -1670 --52.4166665 -52.2499995 -34.7500005 -34.5833335 0 -94 -1670 --52.2500005 -52.0833335 -34.7500005 -34.5833335 0 -126 -1670 --52.0833335 -51.9166665 -34.7500005 -34.5833335 0 -438 -1670 --51.9166665 -51.7499995 -34.7500005 -34.5833335 0 -1038 -1670 --51.7500005 -51.5833335 -34.7500005 -34.5833335 0 -1396 -1670 --51.5833335 -51.4166665 -34.7500005 -34.5833335 0 -1747 -1670 --51.4166665 -51.2499995 -34.7500005 -34.5833335 0 -1987 -1670 --51.2500005 -51.0833335 -34.7500005 -34.5833335 0 -2170 -1670 --51.0833335 -50.9166665 -34.7500005 -34.5833335 0 -2372 -1670 --50.9166665 -50.7499995 -34.7500005 -34.5833335 0 -2976 -1670 --50.7500005 -50.5833335 -34.7500005 -34.5833335 0 -3064 -1670 --50.5833335 -50.4166665 -34.7500005 -34.5833335 0 -3137 -1670 --50.4166665 -50.2499995 -34.7500005 -34.5833335 0 -3225 -1670 --50.2500005 -50.0833335 -34.7500005 -34.5833335 0 -3295 -1670 --50.0833335 -49.9166665 -34.7500005 -34.5833335 0 -3386 -1670 --49.9166665 -49.7499995 -34.7500005 -34.5833335 0 -3479 -1670 --49.7500005 -49.5833335 -34.7500005 -34.5833335 0 -3462 -1670 --49.5833335 -49.4166665 -34.7500005 -34.5833335 0 -3625 -1670 --49.4166665 -49.2499995 -34.7500005 -34.5833335 0 -3747 -1670 --49.2500005 -49.0833335 -34.7500005 -34.5833335 0 -3880 -1670 --49.0833335 -48.9166665 -34.7500005 -34.5833335 0 -3953 -1670 --48.9166665 -48.7499995 -34.7500005 -34.5833335 0 -4082 -1670 --48.7500005 -48.5833335 -34.7500005 -34.5833335 0 -4225 -1670 --48.5833335 -48.4166665 -34.7500005 -34.5833335 0 -4312 -1670 --48.4166665 -48.2499995 -34.7500005 -34.5833335 0 -4357 -1670 --48.2500005 -48.0833335 -34.7500005 -34.5833335 0 -4508 -1670 --48.0833335 -47.9166665 -34.7500005 -34.5833335 0 -4598 -1670 --47.9166665 -47.7499995 -34.7500005 -34.5833335 0 -4612 -1670 --47.7500005 -47.5833335 -34.7500005 -34.5833335 0 -4631 -1670 --47.5833335 -47.4166665 -34.7500005 -34.5833335 0 -4674 -1670 --47.4166665 -47.2499995 -34.7500005 -34.5833335 0 -4686 -1670 --47.2500005 -47.0833335 -34.7500005 -34.5833335 0 -4730 -1670 --47.0833335 -46.9166665 -34.7500005 -34.5833335 0 -4719 -1670 --46.9166665 -46.7499995 -34.7500005 -34.5833335 0 -4716 -1670 --46.7500005 -46.5833335 -34.7500005 -34.5833335 0 -4704 -1670 --46.5833335 -46.4166665 -34.7500005 -34.5833335 0 -4664 -1670 --46.4166665 -46.2499995 -34.7500005 -34.5833335 0 -4674 -1670 --46.2500005 -46.0833335 -34.7500005 -34.5833335 0 -4727 -1670 --46.0833335 -45.9166665 -34.7500005 -34.5833335 0 -4766 -1670 --45.9166665 -45.7499995 -34.7500005 -34.5833335 0 -4786 -1670 --45.7500005 -45.5833335 -34.7500005 -34.5833335 0 -4792 -1670 --45.5833335 -45.4166665 -34.7500005 -34.5833335 0 -4822 -1670 --45.4166665 -45.2499995 -34.7500005 -34.5833335 0 -4833 -1670 --45.2500005 -45.0833335 -34.7500005 -34.5833335 0 -4806 -1670 --45.0833335 -44.9166665 -34.7500005 -34.5833335 0 -4792 -1670 --44.9166665 -44.7499995 -34.7500005 -34.5833335 0 -4818 -1670 --44.7500005 -44.5833335 -34.7500005 -34.5833335 0 -4819 -1670 --44.5833335 -44.4166665 -34.7500005 -34.5833335 0 -4809 -1670 --44.4166665 -44.2499995 -34.7500005 -34.5833335 0 -4798 -1670 --44.2500005 -44.0833335 -34.7500005 -34.5833335 0 -4791 -1670 --44.0833335 -43.9166665 -34.7500005 -34.5833335 0 -4794 -1670 --43.9166665 -43.7499995 -34.7500005 -34.5833335 0 -4804 -1670 --43.7500005 -43.5833335 -34.7500005 -34.5833335 0 -4796 -1670 --43.5833335 -43.4166665 -34.7500005 -34.5833335 0 -4775 -1670 --43.4166665 -43.2499995 -34.7500005 -34.5833335 0 -4785 -1670 --43.2500005 -43.0833335 -34.7500005 -34.5833335 0 -4749 -1670 --43.0833335 -42.9166665 -34.7500005 -34.5833335 0 -4757 -1670 --42.9166665 -42.7499995 -34.7500005 -34.5833335 0 -4735 -1670 --42.7500005 -42.5833335 -34.7500005 -34.5833335 0 -4723 -1670 --42.5833335 -42.4166665 -34.7500005 -34.5833335 0 -4724 -1670 --42.4166665 -42.2499995 -34.7500005 -34.5833335 0 -4726 -1670 --42.2500005 -42.0833335 -34.7500005 -34.5833335 0 -4700 -1670 --42.0833335 -41.9166665 -34.7500005 -34.5833335 0 -4715 -1670 --41.9166665 -41.7499995 -34.7500005 -34.5833335 0 -4701 -1670 --41.7500005 -41.5833335 -34.7500005 -34.5833335 0 -4701 -1670 --41.5833335 -41.4166665 -34.7500005 -34.5833335 0 -4695 -1670 --41.4166665 -41.2499995 -34.7500005 -34.5833335 0 -4689 -1670 --41.2500005 -41.0833335 -34.7500005 -34.5833335 0 -4713 -1670 --41.0833335 -40.9166665 -34.7500005 -34.5833335 0 -4703 -1670 --40.9166665 -40.7499995 -34.7500005 -34.5833335 0 -4750 -1670 --40.7500005 -40.5833335 -34.7500005 -34.5833335 0 -4662 -1670 --40.5833335 -40.4166665 -34.7500005 -34.5833335 0 -4747 -1670 --40.4166665 -40.2499995 -34.7500005 -34.5833335 0 -4792 -1670 --40.2500005 -40.0833335 -34.7500005 -34.5833335 0 -4902 -1670 --40.0833335 -39.9166665 -34.7500005 -34.5833335 0 -4880 -1670 --65.0833335 -64.9166665 -34.9166665 -34.7499995 267 0 2670 --64.9166665 -64.7499995 -34.9166665 -34.7499995 233 0 2670 --64.7500005 -64.5833335 -34.9166665 -34.7499995 230 0 2670 --64.5833335 -64.4166665 -34.9166665 -34.7499995 201 0 2670 --64.4166665 -64.2499995 -34.9166665 -34.7499995 175 0 2670 --64.2500005 -64.0833335 -34.9166665 -34.7499995 159 0 2670 --64.0833335 -63.9166665 -34.9166665 -34.7499995 148 0 2670 --63.9166665 -63.7499995 -34.9166665 -34.7499995 141 0 2670 --63.7500005 -63.5833335 -34.9166665 -34.7499995 132 0 2670 --63.5833335 -63.4166665 -34.9166665 -34.7499995 127 0 2670 --63.4166665 -63.2499995 -34.9166665 -34.7499995 122 0 2670 --63.2500005 -63.0833335 -34.9166665 -34.7499995 121 0 2670 --63.0833335 -62.9166665 -34.9166665 -34.7499995 119 0 2670 --62.9166665 -62.7499995 -34.9166665 -34.7499995 117 0 2670 --62.7500005 -62.5833335 -34.9166665 -34.7499995 113 0 2670 --62.5833335 -62.4166665 -34.9166665 -34.7499995 109 0 2670 --62.4166665 -62.2499995 -34.9166665 -34.7499995 105 0 2670 --62.2500005 -62.0833335 -34.9166665 -34.7499995 114 0 2670 --62.0833335 -61.9166665 -34.9166665 -34.7499995 100 0 2670 --61.9166665 -61.7499995 -34.9166665 -34.7499995 107 0 2670 --61.7500005 -61.5833335 -34.9166665 -34.7499995 93 0 2670 --61.5833335 -61.4166665 -34.9166665 -34.7499995 84 0 2670 --61.4166665 -61.2499995 -34.9166665 -34.7499995 81 0 2670 --61.2500005 -61.0833335 -34.9166665 -34.7499995 77 0 2670 --61.0833335 -60.9166665 -34.9166665 -34.7499995 77 0 2670 --60.9166665 -60.7499995 -34.9166665 -34.7499995 74 0 2670 --60.7500005 -60.5833335 -34.9166665 -34.7499995 63 0 2670 --60.5833335 -60.4166665 -34.9166665 -34.7499995 55 0 2670 --60.4166665 -60.2499995 -34.9166665 -34.7499995 60 0 2670 --60.2500005 -60.0833335 -34.9166665 -34.7499995 54 0 2670 --60.0833335 -59.9166665 -34.9166665 -34.7499995 56 0 2670 --59.9166665 -59.7499995 -34.9166665 -34.7499995 49 0 2670 --59.7500005 -59.5833335 -34.9166665 -34.7499995 48 0 2670 --59.5833335 -59.4166665 -34.9166665 -34.7499995 41 0 2670 --59.4166665 -59.2499995 -34.9166665 -34.7499995 37 0 2670 --59.2500005 -59.0833335 -34.9166665 -34.7499995 40 0 2670 --59.0833335 -58.9166665 -34.9166665 -34.7499995 34 0 2670 --58.9166665 -58.7499995 -34.9166665 -34.7499995 25 0 2670 --58.7500005 -58.5833335 -34.9166665 -34.7499995 20 0 2670 --58.5833335 -58.4166665 -34.9166665 -34.7499995 15 0 2670 --58.4166665 -58.2499995 -34.9166665 -34.7499995 20 0 2670 --58.2500005 -58.0833335 -34.9166665 -34.7499995 22 0 2670 --58.0833335 -57.9166665 -34.9166665 -34.7499995 2 0 2670 --57.9166665 -57.7499995 -34.9166665 -34.7499995 0 -1 -1670 --57.7500005 -57.5833335 -34.9166665 -34.7499995 0 -1 -1670 --57.5833335 -57.4166665 -34.9166665 -34.7499995 0 -1 -1670 --57.4166665 -57.2499995 -34.9166665 -34.7499995 0 -1 -1670 --57.2500005 -57.0833335 -34.9166665 -34.7499995 0 -1 -1670 --57.0833335 -56.9166665 -34.9166665 -34.7499995 0 -1 -1670 --56.9166665 -56.7499995 -34.9166665 -34.7499995 0 -1 -1670 --56.7500005 -56.5833335 -34.9166665 -34.7499995 0 -1 -1670 --56.5833335 -56.4166665 -34.9166665 -34.7499995 0 -1 -1670 --56.4166665 -56.2499995 -34.9166665 -34.7499995 38 0 2670 --56.2500005 -56.0833335 -34.9166665 -34.7499995 33 0 2670 --56.0833335 -55.9166665 -34.9166665 -34.7499995 15 0 2670 --55.9166665 -55.7499995 -34.9166665 -34.7499995 0 -2 -1670 --55.7500005 -55.5833335 -34.9166665 -34.7499995 0 -3 -1670 --55.5833335 -55.4166665 -34.9166665 -34.7499995 0 -1 -1670 --55.4166665 -55.2499995 -34.9166665 -34.7499995 0 -1 -1670 --55.2500005 -55.0833335 -34.9166665 -34.7499995 13 0 2670 --55.0833335 -54.9166665 -34.9166665 -34.7499995 28 0 2670 --54.9166665 -54.7499995 -34.9166665 -34.7499995 32 0 2670 --54.7500005 -54.5833335 -34.9166665 -34.7499995 4 0 2670 --54.5833335 -54.4166665 -34.9166665 -34.7499995 0 -18 -1670 --54.4166665 -54.2499995 -34.9166665 -34.7499995 0 -23 -1670 --54.2500005 -54.0833335 -34.9166665 -34.7499995 0 -22 -1670 --54.0833335 -53.9166665 -34.9166665 -34.7499995 0 -31 -1670 --53.9166665 -53.7499995 -34.9166665 -34.7499995 0 -42 -1670 --53.7500005 -53.5833335 -34.9166665 -34.7499995 0 -61 -1670 --53.5833335 -53.4166665 -34.9166665 -34.7499995 0 -35 -1670 --53.4166665 -53.2499995 -34.9166665 -34.7499995 0 -49 -1670 --53.2500005 -53.0833335 -34.9166665 -34.7499995 0 -49 -1670 --53.0833335 -52.9166665 -34.9166665 -34.7499995 0 -49 -1670 --52.9166665 -52.7499995 -34.9166665 -34.7499995 0 -63 -1670 --52.7500005 -52.5833335 -34.9166665 -34.7499995 0 -82 -1670 --52.5833335 -52.4166665 -34.9166665 -34.7499995 0 -112 -1670 --52.4166665 -52.2499995 -34.9166665 -34.7499995 0 -108 -1670 --52.2500005 -52.0833335 -34.9166665 -34.7499995 0 -204 -1670 --52.0833335 -51.9166665 -34.9166665 -34.7499995 0 -881 -1670 --51.9166665 -51.7499995 -34.9166665 -34.7499995 0 -1303 -1670 --51.7500005 -51.5833335 -34.9166665 -34.7499995 0 -1717 -1670 --51.5833335 -51.4166665 -34.9166665 -34.7499995 0 -1973 -1670 --51.4166665 -51.2499995 -34.9166665 -34.7499995 0 -2251 -1670 --51.2500005 -51.0833335 -34.9166665 -34.7499995 0 -2508 -1670 --51.0833335 -50.9166665 -34.9166665 -34.7499995 0 -2756 -1670 --50.9166665 -50.7499995 -34.9166665 -34.7499995 0 -2699 -1670 --50.7500005 -50.5833335 -34.9166665 -34.7499995 0 -3199 -1670 --50.5833335 -50.4166665 -34.9166665 -34.7499995 0 -3237 -1670 --50.4166665 -50.2499995 -34.9166665 -34.7499995 0 -3515 -1670 --50.2500005 -50.0833335 -34.9166665 -34.7499995 0 -3427 -1670 --50.0833335 -49.9166665 -34.9166665 -34.7499995 0 -3581 -1670 --49.9166665 -49.7499995 -34.9166665 -34.7499995 0 -3746 -1670 --49.7500005 -49.5833335 -34.9166665 -34.7499995 0 -3773 -1670 --49.5833335 -49.4166665 -34.9166665 -34.7499995 0 -3871 -1670 --49.4166665 -49.2499995 -34.9166665 -34.7499995 0 -3957 -1670 --49.2500005 -49.0833335 -34.9166665 -34.7499995 0 -4243 -1670 --49.0833335 -48.9166665 -34.9166665 -34.7499995 0 -4190 -1670 --48.9166665 -48.7499995 -34.9166665 -34.7499995 0 -4311 -1670 --48.7500005 -48.5833335 -34.9166665 -34.7499995 0 -4430 -1670 --48.5833335 -48.4166665 -34.9166665 -34.7499995 0 -4530 -1670 --48.4166665 -48.2499995 -34.9166665 -34.7499995 0 -4537 -1670 --48.2500005 -48.0833335 -34.9166665 -34.7499995 0 -4586 -1670 --48.0833335 -47.9166665 -34.9166665 -34.7499995 0 -4641 -1670 --47.9166665 -47.7499995 -34.9166665 -34.7499995 0 -4675 -1670 --47.7500005 -47.5833335 -34.9166665 -34.7499995 0 -4696 -1670 --47.5833335 -47.4166665 -34.9166665 -34.7499995 0 -4720 -1670 --47.4166665 -47.2499995 -34.9166665 -34.7499995 0 -4750 -1670 --47.2500005 -47.0833335 -34.9166665 -34.7499995 0 -4765 -1670 --47.0833335 -46.9166665 -34.9166665 -34.7499995 0 -4782 -1670 --46.9166665 -46.7499995 -34.9166665 -34.7499995 0 -4772 -1670 --46.7500005 -46.5833335 -34.9166665 -34.7499995 0 -4762 -1670 --46.5833335 -46.4166665 -34.9166665 -34.7499995 0 -4742 -1670 --46.4166665 -46.2499995 -34.9166665 -34.7499995 0 -4714 -1670 --46.2500005 -46.0833335 -34.9166665 -34.7499995 0 -4717 -1670 --46.0833335 -45.9166665 -34.9166665 -34.7499995 0 -4743 -1670 --45.9166665 -45.7499995 -34.9166665 -34.7499995 0 -4795 -1670 --45.7500005 -45.5833335 -34.9166665 -34.7499995 0 -4816 -1670 --45.5833335 -45.4166665 -34.9166665 -34.7499995 0 -4828 -1670 --45.4166665 -45.2499995 -34.9166665 -34.7499995 0 -4836 -1670 --45.2500005 -45.0833335 -34.9166665 -34.7499995 0 -4825 -1670 --45.0833335 -44.9166665 -34.9166665 -34.7499995 0 -4825 -1670 --44.9166665 -44.7499995 -34.9166665 -34.7499995 0 -4836 -1670 --44.7500005 -44.5833335 -34.9166665 -34.7499995 0 -4847 -1670 --44.5833335 -44.4166665 -34.9166665 -34.7499995 0 -4836 -1670 --44.4166665 -44.2499995 -34.9166665 -34.7499995 0 -4843 -1670 --44.2500005 -44.0833335 -34.9166665 -34.7499995 0 -4848 -1670 --44.0833335 -43.9166665 -34.9166665 -34.7499995 0 -4852 -1670 --43.9166665 -43.7499995 -34.9166665 -34.7499995 0 -4842 -1670 --43.7500005 -43.5833335 -34.9166665 -34.7499995 0 -4830 -1670 --43.5833335 -43.4166665 -34.9166665 -34.7499995 0 -4832 -1670 --43.4166665 -43.2499995 -34.9166665 -34.7499995 0 -4804 -1670 --43.2500005 -43.0833335 -34.9166665 -34.7499995 0 -4794 -1670 --43.0833335 -42.9166665 -34.9166665 -34.7499995 0 -4802 -1670 --42.9166665 -42.7499995 -34.9166665 -34.7499995 0 -4779 -1670 --42.7500005 -42.5833335 -34.9166665 -34.7499995 0 -4778 -1670 --42.5833335 -42.4166665 -34.9166665 -34.7499995 0 -4760 -1670 --42.4166665 -42.2499995 -34.9166665 -34.7499995 0 -4760 -1670 --42.2500005 -42.0833335 -34.9166665 -34.7499995 0 -4747 -1670 --42.0833335 -41.9166665 -34.9166665 -34.7499995 0 -4733 -1670 --41.9166665 -41.7499995 -34.9166665 -34.7499995 0 -4740 -1670 --41.7500005 -41.5833335 -34.9166665 -34.7499995 0 -4730 -1670 --41.5833335 -41.4166665 -34.9166665 -34.7499995 0 -4724 -1670 --41.4166665 -41.2499995 -34.9166665 -34.7499995 0 -4708 -1670 --41.2500005 -41.0833335 -34.9166665 -34.7499995 0 -4723 -1670 --41.0833335 -40.9166665 -34.9166665 -34.7499995 0 -4733 -1670 --40.9166665 -40.7499995 -34.9166665 -34.7499995 0 -4732 -1670 --40.7500005 -40.5833335 -34.9166665 -34.7499995 0 -4716 -1670 --40.5833335 -40.4166665 -34.9166665 -34.7499995 0 -4699 -1670 --40.4166665 -40.2499995 -34.9166665 -34.7499995 0 -4763 -1670 --40.2500005 -40.0833335 -34.9166665 -34.7499995 0 -4804 -1670 --40.0833335 -39.9166665 -34.9166665 -34.7499995 0 -4945 -1670 --65.0833335 -64.9166665 -35.0833335 -34.9166665 269 0 2670 --64.9166665 -64.7499995 -35.0833335 -34.9166665 261 0 2670 --64.7500005 -64.5833335 -35.0833335 -34.9166665 233 0 2670 --64.5833335 -64.4166665 -35.0833335 -34.9166665 196 0 2670 --64.4166665 -64.2499995 -35.0833335 -34.9166665 179 0 2670 --64.2500005 -64.0833335 -35.0833335 -34.9166665 157 0 2670 --64.0833335 -63.9166665 -35.0833335 -34.9166665 145 0 2670 --63.9166665 -63.7499995 -35.0833335 -34.9166665 137 0 2670 --63.7500005 -63.5833335 -35.0833335 -34.9166665 126 0 2670 --63.5833335 -63.4166665 -35.0833335 -34.9166665 125 0 2670 --63.4166665 -63.2499995 -35.0833335 -34.9166665 121 0 2670 --63.2500005 -63.0833335 -35.0833335 -34.9166665 116 0 2670 --63.0833335 -62.9166665 -35.0833335 -34.9166665 114 0 2670 --62.9166665 -62.7499995 -35.0833335 -34.9166665 114 0 2670 --62.7500005 -62.5833335 -35.0833335 -34.9166665 110 0 2670 --62.5833335 -62.4166665 -35.0833335 -34.9166665 105 0 2670 --62.4166665 -62.2499995 -35.0833335 -34.9166665 105 0 2670 --62.2500005 -62.0833335 -35.0833335 -34.9166665 128 0 2670 --62.0833335 -61.9166665 -35.0833335 -34.9166665 109 0 2670 --61.9166665 -61.7499995 -35.0833335 -34.9166665 99 0 2670 --61.7500005 -61.5833335 -35.0833335 -34.9166665 89 0 2670 --61.5833335 -61.4166665 -35.0833335 -34.9166665 82 0 2670 --61.4166665 -61.2499995 -35.0833335 -34.9166665 77 0 2670 --61.2500005 -61.0833335 -35.0833335 -34.9166665 73 0 2670 --61.0833335 -60.9166665 -35.0833335 -34.9166665 70 0 2670 --60.9166665 -60.7499995 -35.0833335 -34.9166665 63 0 2670 --60.7500005 -60.5833335 -35.0833335 -34.9166665 64 0 2670 --60.5833335 -60.4166665 -35.0833335 -34.9166665 55 0 2670 --60.4166665 -60.2499995 -35.0833335 -34.9166665 55 0 2670 --60.2500005 -60.0833335 -35.0833335 -34.9166665 48 0 2670 --60.0833335 -59.9166665 -35.0833335 -34.9166665 46 0 2670 --59.9166665 -59.7499995 -35.0833335 -34.9166665 50 0 2670 --59.7500005 -59.5833335 -35.0833335 -34.9166665 44 0 2670 --59.5833335 -59.4166665 -35.0833335 -34.9166665 44 0 2670 --59.4166665 -59.2499995 -35.0833335 -34.9166665 35 0 2670 --59.2500005 -59.0833335 -35.0833335 -34.9166665 34 0 2670 --59.0833335 -58.9166665 -35.0833335 -34.9166665 37 0 2670 --58.9166665 -58.7499995 -35.0833335 -34.9166665 31 0 2670 --58.7500005 -58.5833335 -35.0833335 -34.9166665 23 0 2670 --58.5833335 -58.4166665 -35.0833335 -34.9166665 25 0 2670 --58.4166665 -58.2499995 -35.0833335 -34.9166665 22 0 2670 --58.2500005 -58.0833335 -35.0833335 -34.9166665 24 0 2670 --58.0833335 -57.9166665 -35.0833335 -34.9166665 25 0 2670 --57.9166665 -57.7499995 -35.0833335 -34.9166665 6 0 2670 --57.7500005 -57.5833335 -35.0833335 -34.9166665 5 0 2670 --57.5833335 -57.4166665 -35.0833335 -34.9166665 0 -1 -1670 --57.4166665 -57.2499995 -35.0833335 -34.9166665 0 -1 -1670 --57.2500005 -57.0833335 -35.0833335 -34.9166665 0 -1 -1670 --57.0833335 -56.9166665 -35.0833335 -34.9166665 0 -1 -1670 --56.9166665 -56.7499995 -35.0833335 -34.9166665 0 -1 -1670 --56.7500005 -56.5833335 -35.0833335 -34.9166665 0 -2 -1670 --56.5833335 -56.4166665 -35.0833335 -34.9166665 0 -3 -1670 --56.4166665 -56.2499995 -35.0833335 -34.9166665 0 -3 -1670 --56.2500005 -56.0833335 -35.0833335 -34.9166665 0 -4 -1670 --56.0833335 -55.9166665 -35.0833335 -34.9166665 0 -7 -1670 --55.9166665 -55.7499995 -35.0833335 -34.9166665 0 -10 -1670 --55.7500005 -55.5833335 -35.0833335 -34.9166665 0 -12 -1670 --55.5833335 -55.4166665 -35.0833335 -34.9166665 0 -15 -1670 --55.4166665 -55.2499995 -35.0833335 -34.9166665 0 -19 -1670 --55.2500005 -55.0833335 -35.0833335 -34.9166665 0 -21 -1670 --55.0833335 -54.9166665 -35.0833335 -34.9166665 0 -18 -1670 --54.9166665 -54.7499995 -35.0833335 -34.9166665 0 -21 -1670 --54.7500005 -54.5833335 -35.0833335 -34.9166665 0 -21 -1670 --54.5833335 -54.4166665 -35.0833335 -34.9166665 0 -25 -1670 --54.4166665 -54.2499995 -35.0833335 -34.9166665 0 -25 -1670 --54.2500005 -54.0833335 -35.0833335 -34.9166665 0 -27 -1670 --54.0833335 -53.9166665 -35.0833335 -34.9166665 0 -32 -1670 --53.9166665 -53.7499995 -35.0833335 -34.9166665 0 -41 -1670 --53.7500005 -53.5833335 -35.0833335 -34.9166665 0 -39 -1670 --53.5833335 -53.4166665 -35.0833335 -34.9166665 0 -39 -1670 --53.4166665 -53.2499995 -35.0833335 -34.9166665 0 -41 -1670 --53.2500005 -53.0833335 -35.0833335 -34.9166665 0 -48 -1670 --53.0833335 -52.9166665 -35.0833335 -34.9166665 0 -48 -1670 --52.9166665 -52.7499995 -35.0833335 -34.9166665 0 -68 -1670 --52.7500005 -52.5833335 -35.0833335 -34.9166665 0 -103 -1670 --52.5833335 -52.4166665 -35.0833335 -34.9166665 0 -153 -1670 --52.4166665 -52.2499995 -35.0833335 -34.9166665 0 -170 -1670 --52.2500005 -52.0833335 -35.0833335 -34.9166665 0 -663 -1670 --52.0833335 -51.9166665 -35.0833335 -34.9166665 0 -1148 -1670 --51.9166665 -51.7499995 -35.0833335 -34.9166665 0 -1485 -1670 --51.7500005 -51.5833335 -35.0833335 -34.9166665 0 -1815 -1670 --51.5833335 -51.4166665 -35.0833335 -34.9166665 0 -2103 -1670 --51.4166665 -51.2499995 -35.0833335 -34.9166665 0 -2311 -1670 --51.2500005 -51.0833335 -35.0833335 -34.9166665 0 -2503 -1670 --51.0833335 -50.9166665 -35.0833335 -34.9166665 0 -2714 -1670 --50.9166665 -50.7499995 -35.0833335 -34.9166665 0 -2868 -1670 --50.7500005 -50.5833335 -35.0833335 -34.9166665 0 -2942 -1670 --50.5833335 -50.4166665 -35.0833335 -34.9166665 0 -3442 -1670 --50.4166665 -50.2499995 -35.0833335 -34.9166665 0 -3519 -1670 --50.2500005 -50.0833335 -35.0833335 -34.9166665 0 -3590 -1670 --50.0833335 -49.9166665 -35.0833335 -34.9166665 0 -3661 -1670 --49.9166665 -49.7499995 -35.0833335 -34.9166665 0 -3793 -1670 --49.7500005 -49.5833335 -35.0833335 -34.9166665 0 -3858 -1670 --49.5833335 -49.4166665 -35.0833335 -34.9166665 0 -4042 -1670 --49.4166665 -49.2499995 -35.0833335 -34.9166665 0 -4192 -1670 --49.2500005 -49.0833335 -35.0833335 -34.9166665 0 -4296 -1670 --49.0833335 -48.9166665 -35.0833335 -34.9166665 0 -4316 -1670 --48.9166665 -48.7499995 -35.0833335 -34.9166665 0 -4414 -1670 --48.7500005 -48.5833335 -35.0833335 -34.9166665 0 -4530 -1670 --48.5833335 -48.4166665 -35.0833335 -34.9166665 0 -4574 -1670 --48.4166665 -48.2499995 -35.0833335 -34.9166665 0 -4604 -1670 --48.2500005 -48.0833335 -35.0833335 -34.9166665 0 -4637 -1670 --48.0833335 -47.9166665 -35.0833335 -34.9166665 0 -4697 -1670 --47.9166665 -47.7499995 -35.0833335 -34.9166665 0 -4714 -1670 --47.7500005 -47.5833335 -35.0833335 -34.9166665 0 -4725 -1670 --47.5833335 -47.4166665 -35.0833335 -34.9166665 0 -4765 -1670 --47.4166665 -47.2499995 -35.0833335 -34.9166665 0 -4787 -1670 --47.2500005 -47.0833335 -35.0833335 -34.9166665 0 -4798 -1670 --47.0833335 -46.9166665 -35.0833335 -34.9166665 0 -4815 -1670 --46.9166665 -46.7499995 -35.0833335 -34.9166665 0 -4819 -1670 --46.7500005 -46.5833335 -35.0833335 -34.9166665 0 -4804 -1670 --46.5833335 -46.4166665 -35.0833335 -34.9166665 0 -4800 -1670 --46.4166665 -46.2499995 -35.0833335 -34.9166665 0 -4786 -1670 --46.2500005 -46.0833335 -35.0833335 -34.9166665 0 -4752 -1670 --46.0833335 -45.9166665 -35.0833335 -34.9166665 0 -4755 -1670 --45.9166665 -45.7499995 -35.0833335 -34.9166665 0 -4783 -1670 --45.7500005 -45.5833335 -35.0833335 -34.9166665 0 -4822 -1670 --45.5833335 -45.4166665 -35.0833335 -34.9166665 0 -4839 -1670 --45.4166665 -45.2499995 -35.0833335 -34.9166665 0 -4842 -1670 --45.2500005 -45.0833335 -35.0833335 -34.9166665 0 -4848 -1670 --45.0833335 -44.9166665 -35.0833335 -34.9166665 0 -4854 -1670 --44.9166665 -44.7499995 -35.0833335 -34.9166665 0 -4851 -1670 --44.7500005 -44.5833335 -35.0833335 -34.9166665 0 -4854 -1670 --44.5833335 -44.4166665 -35.0833335 -34.9166665 0 -4850 -1670 --44.4166665 -44.2499995 -35.0833335 -34.9166665 0 -4859 -1670 --44.2500005 -44.0833335 -35.0833335 -34.9166665 0 -4867 -1670 --44.0833335 -43.9166665 -35.0833335 -34.9166665 0 -4867 -1670 --43.9166665 -43.7499995 -35.0833335 -34.9166665 0 -4865 -1670 --43.7500005 -43.5833335 -35.0833335 -34.9166665 0 -4861 -1670 --43.5833335 -43.4166665 -35.0833335 -34.9166665 0 -4845 -1670 --43.4166665 -43.2499995 -35.0833335 -34.9166665 0 -4839 -1670 --43.2500005 -43.0833335 -35.0833335 -34.9166665 0 -4831 -1670 --43.0833335 -42.9166665 -35.0833335 -34.9166665 0 -4819 -1670 --42.9166665 -42.7499995 -35.0833335 -34.9166665 0 -4814 -1670 --42.7500005 -42.5833335 -35.0833335 -34.9166665 0 -4804 -1670 --42.5833335 -42.4166665 -35.0833335 -34.9166665 0 -4795 -1670 --42.4166665 -42.2499995 -35.0833335 -34.9166665 0 -4784 -1670 --42.2500005 -42.0833335 -35.0833335 -34.9166665 0 -4775 -1670 --42.0833335 -41.9166665 -35.0833335 -34.9166665 0 -4777 -1670 --41.9166665 -41.7499995 -35.0833335 -34.9166665 0 -4770 -1670 --41.7500005 -41.5833335 -35.0833335 -34.9166665 0 -4772 -1670 --41.5833335 -41.4166665 -35.0833335 -34.9166665 0 -4767 -1670 --41.4166665 -41.2499995 -35.0833335 -34.9166665 0 -4760 -1670 --41.2500005 -41.0833335 -35.0833335 -34.9166665 0 -4761 -1670 --41.0833335 -40.9166665 -35.0833335 -34.9166665 0 -4771 -1670 --40.9166665 -40.7499995 -35.0833335 -34.9166665 0 -4755 -1670 --40.7500005 -40.5833335 -35.0833335 -34.9166665 0 -4748 -1670 --40.5833335 -40.4166665 -35.0833335 -34.9166665 0 -4574 -1670 --40.4166665 -40.2499995 -35.0833335 -34.9166665 0 -4731 -1670 --40.2500005 -40.0833335 -35.0833335 -34.9166665 0 -4809 -1670 --40.0833335 -39.9166665 -35.0833335 -34.9166665 0 -4859 -1670 diff --git a/dep/tesseroids/cookbook/dem_brasil/sample-dem.png b/dep/tesseroids/cookbook/dem_brasil/sample-dem.png deleted file mode 100755 index 37e5af1..0000000 Binary files a/dep/tesseroids/cookbook/dem_brasil/sample-dem.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/simple_prism/model.txt b/dep/tesseroids/cookbook/simple_prism/model.txt deleted file mode 100755 index c54bac1..0000000 --- a/dep/tesseroids/cookbook/simple_prism/model.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Test prism model file -2000 5000 2000 15000 0 5000 1000 -10000 18000 10000 18000 0 5000 -1000 diff --git a/dep/tesseroids/cookbook/simple_prism/plot.py b/dep/tesseroids/cookbook/simple_prism/plot.py deleted file mode 100755 index 53de530..0000000 --- a/dep/tesseroids/cookbook/simple_prism/plot.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -import pylab - -data = pylab.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = pylab.reshape(data[0], shape) -lat = pylab.reshape(data[1], shape) -xmin, xmax = lon.min(), lon.max() -ymin, ymax = lat.min(), lat.max() -for i, value in enumerate(data[3:]): - value = pylab.reshape(value, shape) - pylab.figure(figsize=(4, 3)) - pylab.title("Column %d" % (i + 4)) - pylab.axis('scaled') - pylab.pcolor(lon, lat, value) - pylab.colorbar() - pylab.contour(lon, lat, value, 12, color='k') - #pylab.xlabel("Longitude") - #pylab.ylabel("Latitude") - pylab.xlim(xmin, xmax) - pylab.ylim(ymin, ymax) - pylab.savefig('column%d.png' % (i + 4)) diff --git a/dep/tesseroids/cookbook/simple_prism/simple_prism.bat b/dep/tesseroids/cookbook/simple_prism/simple_prism.bat deleted file mode 100755 index 174e5a7..0000000 --- a/dep/tesseroids/cookbook/simple_prism/simple_prism.bat +++ /dev/null @@ -1,11 +0,0 @@ - - -:: Generate a regular grid, pipe it to all the computation programs, -:: and write the result to output.txt - -tessgrd -r0/20000/0/20000 -b50/50 -z1000 | ^ -prismpot model.txt | ^ -prismgx model.txt | prismgy model.txt | prismgz model.txt | ^ -prismgxx model.txt | prismgxy model.txt | ^ -prismgxz model.txt | prismgyy model.txt | ^ -prismgyz model.txt | prismgzz model.txt > output.txt diff --git a/dep/tesseroids/cookbook/simple_prism/simple_prism.png b/dep/tesseroids/cookbook/simple_prism/simple_prism.png deleted file mode 100755 index b2775ee..0000000 Binary files a/dep/tesseroids/cookbook/simple_prism/simple_prism.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/simple_prism/simple_prism.sh b/dep/tesseroids/cookbook/simple_prism/simple_prism.sh deleted file mode 100755 index 2387e11..0000000 --- a/dep/tesseroids/cookbook/simple_prism/simple_prism.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# Generate a regular grid, pipe it to all the computation programs, -# and write the result to output.txt - -tessgrd -r0/20000/0/20000 -b50/50 -z1000 | \ -prismpot model.txt | \ -prismgx model.txt | prismgy model.txt | prismgz model.txt | \ -prismgxx model.txt | prismgxy model.txt | \ -prismgxz model.txt | prismgyy model.txt | \ -prismgyz model.txt | prismgzz model.txt > output.txt diff --git a/dep/tesseroids/cookbook/simple_tess/model.txt b/dep/tesseroids/cookbook/simple_tess/model.txt deleted file mode 100755 index b2331d2..0000000 --- a/dep/tesseroids/cookbook/simple_tess/model.txt +++ /dev/null @@ -1,3 +0,0 @@ -# Test tesseroid model file -10 20 10 20 0 -50000 200 --20 -10 -20 -10 0 -30000 -500 diff --git a/dep/tesseroids/cookbook/simple_tess/plot.py b/dep/tesseroids/cookbook/simple_tess/plot.py deleted file mode 100755 index bb5f5d8..0000000 --- a/dep/tesseroids/cookbook/simple_tess/plot.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -from matplotlib import pyplot as plt -from mpl_toolkits.basemap import Basemap -import numpy as np - -# Set up a projection -bm = Basemap(projection='ortho', lon_0=0, lat_0=0, - resolution='l', area_thresh=10000) - -# Load the data and make them into matrices -data = np.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = data[0].reshape(shape) -lat = data[1].reshape(shape) -glon, glat = bm(lon, lat) - -plt.figure(figsize=(14, 12)) -for i, value in enumerate(data[3:]): - plt.subplot(3, 4, i + 1) - plt.title("Column %d" % (i + 4)) - bm.drawcoastlines() - bm.drawmapboundary() - bm.contourf(glon, glat, value.reshape(shape), 15, cmap=plt.cm.RdBu_r) - plt.colorbar(orientation="horizontal", pad=0, aspect=30) -plt.tight_layout() -plt.savefig('output.png') diff --git a/dep/tesseroids/cookbook/simple_tess/simple_tess.bat b/dep/tesseroids/cookbook/simple_tess/simple_tess.bat deleted file mode 100755 index 094bf78..0000000 --- a/dep/tesseroids/cookbook/simple_tess/simple_tess.bat +++ /dev/null @@ -1,12 +0,0 @@ -:: Generate a regular grid, pipe it to all the computation programs, -:: and write the result to output.txt - -tessgrd -r-45/45/-45/45 -b101/101 -z260e03 | ^ -tesspot model.txt | ^ -tessgx model.txt | tessgy model.txt | tessgz model.txt | ^ -tessgxx model.txt | tessgxy model.txt | ^ -tessgxz model.txt | tessgyy model.txt | ^ -tessgyz model.txt | tessgzz model.txt -v -llog.txt > output.txt - -:: Make a plot with the columns of output.txt -python plot.py output.txt 101 101 diff --git a/dep/tesseroids/cookbook/simple_tess/simple_tess.png b/dep/tesseroids/cookbook/simple_tess/simple_tess.png deleted file mode 100755 index 06da4eb..0000000 Binary files a/dep/tesseroids/cookbook/simple_tess/simple_tess.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/simple_tess/simple_tess.sh b/dep/tesseroids/cookbook/simple_tess/simple_tess.sh deleted file mode 100755 index 646998e..0000000 --- a/dep/tesseroids/cookbook/simple_tess/simple_tess.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -# Generate a regular grid, pipe it to all the computation programs, -# and write the result to output.txt - -tessgrd -r-45/45/-45/45 -b101/101 -z260e03 | \ -tesspot model.txt | \ -tessgx model.txt | tessgy model.txt | tessgz model.txt | \ -tessgxx model.txt | tessgxy model.txt | \ -tessgxz model.txt | tessgyy model.txt | \ -tessgyz model.txt | tessgzz model.txt -v -llog.txt > output.txt - -# Make a plot with the columns of output.txt -python plot.py output.txt 101 101 diff --git a/dep/tesseroids/cookbook/tess2prism/plot.py b/dep/tesseroids/cookbook/tess2prism/plot.py deleted file mode 100755 index c681b9a..0000000 --- a/dep/tesseroids/cookbook/tess2prism/plot.py +++ /dev/null @@ -1,32 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -import pylab -from mpl_toolkits.basemap import Basemap - -# Set up a projection -bm = Basemap(projection='ortho', lon_0=-80, lat_0=-40, - resolution='l', area_thresh=10000) - -data = pylab.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = pylab.reshape(data[0], shape) -lat = pylab.reshape(data[1], shape) -glon, glat = bm(lon, lat) - -for i, value in enumerate(data[3:]): - value = pylab.reshape(value, shape) - pylab.figure(figsize=(4, 3)) - pylab.title("Column %d" % (i + 4)) - bm.drawcoastlines() - #bm.fillcontinents(color='coral',lake_color='aqua') - #bm.drawmapboundary(fill_color='aqua') - bm.drawmapboundary() - bm.drawparallels(pylab.arange(-90.,120.,30.)) - bm.drawmeridians(pylab.arange(0.,420.,60.)) - #bm.bluemarble() - bm.pcolor(glon, glat, value) - pylab.colorbar() - #bm.contour(glon, glat, value, 12, linewidth=3) - pylab.savefig('column%d.png' % (i + 4)) diff --git a/dep/tesseroids/cookbook/tess2prism/result.svg b/dep/tesseroids/cookbook/tess2prism/result.svg deleted file mode 100755 index 933e51a..0000000 --- a/dep/tesseroids/cookbook/tess2prism/result.svg +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/dep/tesseroids/cookbook/tess2prism/sample-prism-model.txt b/dep/tesseroids/cookbook/tess2prism/sample-prism-model.txt deleted file mode 100755 index 8880ce5..0000000 --- a/dep/tesseroids/cookbook/tess2prism/sample-prism-model.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Prisms converted from tesseroid model with tess2prism 1.1dev -# local time: Wed May 16 14:34:47 2012 -# tesseroids file: stdin -# conversion type: equal mass|spherical coordinates -# format: dx dy dz density lon lat r -# Test tesseroid model file -221766.31696055 169882.854778591 50000 499.977196258595 -76 -40 6378137 -221766.31696055 169882.854778591 50000 499.977196258595 -78 -40 6378137 -221766.31696055 169882.854778591 50000 499.977196258595 -80 -40 6378137 -221766.31696055 169882.854778591 50000 499.977196258595 -82 -40 6378137 -221766.31696055 169882.854778591 50000 499.977196258595 -84 -40 6378137 diff --git a/dep/tesseroids/cookbook/tess2prism/tess-model.txt b/dep/tesseroids/cookbook/tess2prism/tess-model.txt deleted file mode 100755 index b1f5dca..0000000 --- a/dep/tesseroids/cookbook/tess2prism/tess-model.txt +++ /dev/null @@ -1,6 +0,0 @@ -# Test tesseroid model file --77 -75 -41 -39 0 -50000 500 --79 -77 -41 -39 0 -50000 500 --81 -79 -41 -39 0 -50000 500 --83 -81 -41 -39 0 -50000 500 --85 -83 -41 -39 0 -50000 500 diff --git a/dep/tesseroids/cookbook/tess2prism/tess2prism.bat b/dep/tesseroids/cookbook/tess2prism/tess2prism.bat deleted file mode 100755 index a6bca88..0000000 --- a/dep/tesseroids/cookbook/tess2prism/tess2prism.bat +++ /dev/null @@ -1,21 +0,0 @@ - - -:: Generate a prism model from a tesseroid model. -:: Prisms will have the same mass as the tesseroids and -:: associated spherical coordinates of the center of -:: the top of the tesseroid. - -tess2prism.exe < tess-model.txt > prism-model.txt - -:: Generate a regular grid in spherical coordinates, -:: pipe the grid to the computation programs, -:: and dump the result on output.txt -:: prismpots calculates the potential in spherical -:: coordinates, prismgs calculates the full -:: gravity vector, and prismggts calculates the full -:: gravity gradient tensor. - -tessgrd -r-160/0/-80/0 -b100/100 -z250e03 | ^ -prismpots prism-model.txt | ^ -prismgs prism-model.txt | ^ -prismggts prism-model.txt -v > output.txt diff --git a/dep/tesseroids/cookbook/tess2prism/tess2prism.png b/dep/tesseroids/cookbook/tess2prism/tess2prism.png deleted file mode 100755 index afcb446..0000000 Binary files a/dep/tesseroids/cookbook/tess2prism/tess2prism.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/tess2prism/tess2prism.sh b/dep/tesseroids/cookbook/tess2prism/tess2prism.sh deleted file mode 100755 index b1e9f53..0000000 --- a/dep/tesseroids/cookbook/tess2prism/tess2prism.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# Generate a prism model from a tesseroid model. -# Prisms will have the same mass as the tesseroids and -# associated spherical coordinates of the center of -# the top of the tesseroid. - -tess2prism < tess-model.txt > prism-model.txt - -# Generate a regular grid in spherical coordinates, -# pipe the grid to the computation programs, -# and dump the result on output.txt -# prismpots calculates the potential in spherical -# coordinates, prismgs calculates the full -# gravity vector, and prismggts calculates the full -# gravity gradient tensor. - -tessgrd -r-160/0/-80/0 -b100/100 -z250e03 | \ -prismpots prism-model.txt | \ -prismgs prism-model.txt | \ -prismggts prism-model.txt -v > output.txt diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/plot.py b/dep/tesseroids/cookbook/tess2prism_flatten/plot.py deleted file mode 100755 index 28c0c34..0000000 --- a/dep/tesseroids/cookbook/tess2prism_flatten/plot.py +++ /dev/null @@ -1,25 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -import pylab - -data = pylab.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = pylab.reshape(data[0], shape)*0.001 -lat = pylab.reshape(data[1], shape)*0.001 -xmin, xmax = lon.min(), lon.max() -ymin, ymax = lat.min(), lat.max() -for i, value in enumerate(data[3:]): - value = pylab.reshape(value, shape) - pylab.figure(figsize=(4, 3)) - pylab.title("Column %d" % (i + 4)) - pylab.axis('scaled') - pylab.pcolor(lon, lat, value) - pylab.colorbar() - pylab.contour(lon, lat, value, 12, color='k') - #pylab.xlabel("Longitude") - #pylab.ylabel("Latitude") - pylab.xlim(xmin, xmax) - pylab.ylim(ymin, ymax) - pylab.savefig('column%d.png' % (i + 4)) diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/sample-prism-model.txt b/dep/tesseroids/cookbook/tess2prism_flatten/sample-prism-model.txt deleted file mode 100755 index ddd27d6..0000000 --- a/dep/tesseroids/cookbook/tess2prism_flatten/sample-prism-model.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Prisms converted from tesseroid model with tess2prism 1.1dev -# local time: Tue May 8 14:55:02 2012 -# tesseroids file: stdin -# conversion type: flatten -# format: x1 x2 y1 y2 z1 z2 density -# Test tesseroid model file -1111100 1666650 1111100 1666650 0 30000 487.534658568521 --1111100 1111100 -1666650 -1111100 0 50000 198.175508383774 --1777760 -1111100 -1666650 555550 0 30000 -291.9029748328 diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/tess-model.txt b/dep/tesseroids/cookbook/tess2prism_flatten/tess-model.txt deleted file mode 100755 index 72ef672..0000000 --- a/dep/tesseroids/cookbook/tess2prism_flatten/tess-model.txt +++ /dev/null @@ -1,4 +0,0 @@ -# Test tesseroid model file -10 15 10 15 0 -30000 500 --15 -10 -10 10 0 -50000 200 --15 5 -16 -10 0 -30000 -300 diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.bat b/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.bat deleted file mode 100755 index b1a1a87..0000000 --- a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.bat +++ /dev/null @@ -1,21 +0,0 @@ - - -:: Generate a prism model from a tesseroid model by -:: flattening the tesseroids (1 degree = 111.11 km). -:: This way the converted prisms can be used -:: with the prism* programs in Cartesian coordinates. - -tess2prism --flatten < tess-model.txt > prism-model.txt - -:: Generate a regular grid in Cartesian coordinates, -:: pipe the grid to the computation programs, -:: and dump the result on output.txt - -tessgrd -r-3e06/3e06/-3e06/3e06 -b50/50 -z250e03 | ^ -prismpot prism-model.txt | ^ -prismgx prism-model.txt | ^ -prismgy prism-model.txt | ^ -prismgz prism-model.txt | ^ -prismgxx prism-model.txt | prismgxy prism-model.txt | ^ -prismgxz prism-model.txt | prismgyy prism-model.txt | ^ -prismgyz prism-model.txt | prismgzz prism-model.txt > output.txt diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.png b/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.png deleted file mode 100755 index 9c34bbe..0000000 Binary files a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.sh b/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.sh deleted file mode 100755 index 94d4730..0000000 --- a/dep/tesseroids/cookbook/tess2prism_flatten/tess2prism_flatten.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# Generate a prism model from a tesseroid model by -# flattening the tesseroids (1 degree = 111.11 km). -# This way the converted prisms can be used -# with the prism* programs in Cartesian coordinates. - -tess2prism --flatten < tess-model.txt > prism-model.txt - -# Generate a regular grid in Cartesian coordinates, -# pipe the grid to the computation programs, -# and dump the result on output.txt - -tessgrd -r-3e06/3e06/-3e06/3e06 -b50/50 -z250e03 | \ -prismpot prism-model.txt | \ -prismgx prism-model.txt | \ -prismgy prism-model.txt | \ -prismgz prism-model.txt | \ -prismgxx prism-model.txt | prismgxy prism-model.txt | \ -prismgxz prism-model.txt | prismgyy prism-model.txt | \ -prismgyz prism-model.txt | prismgzz prism-model.txt > output.txt diff --git a/dep/tesseroids/cookbook/tesslayers/layers.png b/dep/tesseroids/cookbook/tesslayers/layers.png deleted file mode 100755 index cb3f5fc..0000000 Binary files a/dep/tesseroids/cookbook/tesslayers/layers.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/tesslayers/layers.txt b/dep/tesseroids/cookbook/tesslayers/layers.txt deleted file mode 100755 index e943571..0000000 --- a/dep/tesseroids/cookbook/tesslayers/layers.txt +++ /dev/null @@ -1,1683 +0,0 @@ -# Synthetic layer model of sediments and topography -# lon lat height thickness density --10 30 800 800.002 1900 --9.5 30 800 800.006 1900 --9 30 800 800.016 1900 --8.5 30 800 800.042 1900 --8 30 800 800.105 1900 --7.5 30 800 800.248 1900 --7 30 800 800.554 1900 --6.5 30 800 801.173 1900 --6 30 800 802.348 1900 --5.5 30 800 804.448 1900 --5 30 800 807.972 1900 --4.5 30 800 813.513 1900 --4 30 800 821.669 1900 --3.5 30 800 832.87 1900 --3 30 800 847.166 1900 --2.5 30 800 864.022 1900 --2 30 800 882.205 1900 --1.5 30 800 899.85 1900 --1 30 800 914.727 1900 --0.5 30 800 924.697 1900 -0 30 800 928.209 1900 -0.5 30 800 924.697 1900 -1 30 800 914.727 1900 -1.5 30 800 899.85 1900 -2 30 800 882.205 1900 -2.5 30 800 864.022 1900 -3 30 800 847.166 1900 -3.5 30 800 832.87 1900 -4 30 800 821.669 1900 -4.5 30 800 813.513 1900 -5 30 800 807.972 1900 -5.5 30 800 804.448 1900 -6 30 800 802.348 1900 -6.5 30 800 801.173 1900 -7 30 800 800.554 1900 -7.5 30 800 800.248 1900 -8 30 800 800.105 1900 -8.5 30 800 800.042 1900 -9 30 800 800.016 1900 -9.5 30 800 800.006 1900 -10 30 800 800.002 1900 --10 30.5 800 800.003 1900 --9.5 30.5 800 800.008 1900 --9 30.5 800 800.023 1900 --8.5 30.5 800 800.062 1900 --8 30.5 800 800.155 1900 --7.5 30.5 800 800.366 1900 --7 30.5 800 800.818 1900 --6.5 30.5 800 801.732 1900 --6 30.5 800 803.468 1900 --5.5 30.5 800 806.57 1900 --5 30.5 800 811.774 1900 --4.5 30.5 800 819.959 1900 --4 30.5 800 832.005 1900 --3.5 30.5 800 848.548 1900 --3 30.5 800 869.663 1900 --2.5 30.5 800 894.559 1900 --2 30.5 800 921.416 1900 --1.5 30.5 800 947.476 1900 --1 30.5 800 969.449 1900 --0.5 30.5 800 984.175 1900 -0 30.5 800 989.363 1900 -0.5 30.5 800 984.175 1900 -1 30.5 800 969.449 1900 -1.5 30.5 800 947.476 1900 -2 30.5 800 921.416 1900 -2.5 30.5 800 894.559 1900 -3 30.5 800 869.663 1900 -3.5 30.5 800 848.548 1900 -4 30.5 800 832.005 1900 -4.5 30.5 800 819.959 1900 -5 30.5 800 811.774 1900 -5.5 30.5 800 806.57 1900 -6 30.5 800 803.468 1900 -6.5 30.5 800 801.732 1900 -7 30.5 800 800.818 1900 -7.5 30.5 800 800.366 1900 -8 30.5 800 800.155 1900 -8.5 30.5 800 800.062 1900 -9 30.5 800 800.023 1900 -9.5 30.5 800 800.008 1900 -10 30.5 800 800.003 1900 --10 31 800 800.004 1900 --9.5 31 800 800.012 1900 --9 31 800 800.034 1900 --8.5 31 800 800.089 1900 --8 31 800 800.224 1900 --7.5 31 800 800.529 1900 --7 31 800 801.184 1900 --6.5 31 800 802.507 1900 --6 31 800 805.021 1900 --5.5 31 800 809.512 1900 --5 31 800 817.046 1900 --4.5 31 800 828.895 1900 --4 31 800 846.335 1900 --3.5 31 800 870.285 1900 --3 31 800 900.853 1900 --2.5 31 800 936.896 1900 --2 31 800 975.778 1900 --1.5 31 800 1013.51 1900 --1 31 800 1045.32 1900 --0.5 31 800 1066.64 1900 -0 31 800 1074.15 1900 -0.5 31 800 1066.64 1900 -1 31 800 1045.32 1900 -1.5 31 800 1013.51 1900 -2 31 800 975.778 1900 -2.5 31 800 936.896 1900 -3 31 800 900.853 1900 -3.5 31 800 870.285 1900 -4 31 800 846.335 1900 -4.5 31 800 828.895 1900 -5 31 800 817.046 1900 -5.5 31 800 809.512 1900 -6 31 800 805.021 1900 -6.5 31 800 802.507 1900 -7 31 800 801.184 1900 -7.5 31 800 800.529 1900 -8 31 800 800.224 1900 -8.5 31 800 800.089 1900 -9 31 800 800.034 1900 -9.5 31 800 800.012 1900 -10 31 800 800.004 1900 --10 31.5 800 800.006 1900 --9.5 31.5 800 800.017 1900 --9 31.5 800 800.048 1900 --8.5 31.5 800 800.127 1900 --8 31.5 800 800.317 1900 --7.5 31.5 800 800.751 1900 --7 31.5 800 801.681 1900 --6.5 31.5 800 803.558 1900 --6 31.5 800 807.125 1900 --5.5 31.5 800 813.498 1900 --5 31.5 800 824.189 1900 --4.5 31.5 800 841.004 1900 --4 31.5 800 865.752 1900 --3.5 31.5 800 899.739 1900 --3 31.5 800 943.117 1900 --2.5 31.5 800 994.265 1900 --2 31.5 800 1049.44 1900 --1.5 31.5 800 1102.98 1900 --1 31.5 800 1148.12 1900 --0.5 31.5 800 1178.38 1900 -0 31.5 800 1189.03 1900 -0.5 31.5 800 1178.38 1900 -1 31.5 800 1148.12 1900 -1.5 31.5 800 1102.98 1900 -2 31.5 800 1049.44 1900 -2.5 31.5 800 994.265 1900 -3 31.5 800 943.117 1900 -3.5 31.5 800 899.739 1900 -4 31.5 800 865.752 1900 -4.5 31.5 800 841.004 1900 -5 31.5 800 824.189 1900 -5.5 31.5 800 813.498 1900 -6 31.5 800 807.125 1900 -6.5 31.5 800 803.558 1900 -7 31.5 800 801.681 1900 -7.5 31.5 800 800.751 1900 -8 31.5 800 800.317 1900 -8.5 31.5 800 800.127 1900 -9 31.5 800 800.048 1900 -9.5 31.5 800 800.017 1900 -10 31.5 800 800.006 1900 --10 32 800 800.008 1900 --9.5 32 800 800.024 1900 --9 32 800 800.067 1900 --8.5 32 800 800.177 1900 --8 32 800 800.442 1900 --7.5 32 800 801.045 1900 --7 32 800 802.338 1900 --6.5 32 800 804.949 1900 --6 32 800 809.911 1900 --5.5 32 800 818.776 1900 --5 32 800 833.646 1900 --4.5 32 800 857.035 1900 --4 32 800 891.459 1900 --3.5 32 800 938.733 1900 --3 32 800 999.072 1900 --2.5 32 800 1070.22 1900 --2 32 800 1146.96 1900 --1.5 32 800 1221.43 1900 --1 32 800 1284.23 1900 --0.5 32 800 1326.31 1900 -0 32 800 1341.13 1900 -0.5 32 800 1326.31 1900 -1 32 800 1284.23 1900 -1.5 32 800 1221.43 1900 -2 32 800 1146.96 1900 -2.5 32 800 1070.22 1900 -3 32 800 999.072 1900 -3.5 32 800 938.733 1900 -4 32 800 891.459 1900 -4.5 32 800 857.035 1900 -5 32 800 833.646 1900 -5.5 32 800 818.776 1900 -6 32 800 809.911 1900 -6.5 32 800 804.949 1900 -7 32 800 802.338 1900 -7.5 32 800 801.045 1900 -8 32 800 800.442 1900 -8.5 32 800 800.177 1900 -9 32 800 800.067 1900 -9.5 32 800 800.024 1900 -10 32 800 800.008 1900 --10 32.5 800 800.011 1900 --9.5 32.5 800 800.033 1900 --9 32.5 800 800.091 1900 --8.5 32.5 800 800.241 1900 --8 32.5 800 800.602 1900 --7.5 32.5 800 801.424 1900 --7 32.5 800 803.187 1900 --6.5 32.5 800 806.748 1900 --6 32.5 800 813.513 1900 --5.5 32.5 800 825.599 1900 --5 32.5 800 845.874 1900 --4.5 32.5 800 877.763 1900 --4 32.5 800 924.697 1900 --3.5 32.5 800 989.153 1900 --3 32.5 800 1071.42 1900 --2.5 32.5 800 1168.42 1900 --2 32.5 800 1273.06 1900 --1.5 32.5 800 1374.59 1900 --1 32.5 800 1460.21 1900 --0.5 32.5 800 1517.58 1900 -0 32.5 800 1537.79 1900 -0.5 32.5 800 1517.58 1900 -1 32.5 800 1460.21 1900 -1.5 32.5 800 1374.59 1900 -2 32.5 800 1273.06 1900 -2.5 32.5 800 1168.42 1900 -3 32.5 800 1071.42 1900 -3.5 32.5 800 989.153 1900 -4 32.5 800 924.697 1900 -4.5 32.5 800 877.763 1900 -5 32.5 800 845.874 1900 -5.5 32.5 800 825.599 1900 -6 32.5 800 813.513 1900 -6.5 32.5 800 806.748 1900 -7 32.5 800 803.187 1900 -7.5 32.5 800 801.424 1900 -8 32.5 800 800.602 1900 -8.5 32.5 800 800.241 1900 -9 32.5 800 800.091 1900 -9.5 32.5 800 800.033 1900 -10 32.5 800 800.011 1900 --10 33 800 800.015 1900 --9.5 33 800 800.044 1900 --9 33 800 800.122 1900 --8.5 33 800 800.322 1900 --8 33 800 800.805 1900 --7.5 33 800 801.903 1900 --7 33 800 804.26 1900 --6.5 33 800 809.018 1900 --6 33 800 818.059 1900 --5.5 33 800 834.211 1900 --5 33 800 861.307 1900 --4.5 33 800 903.925 1900 --4 33 800 966.649 1900 --3.5 33 800 1052.79 1900 --3 33 800 1162.73 1900 --2.5 33 800 1292.37 1900 --2 33 800 1432.21 1900 --1.5 33 800 1567.9 1900 --1 33 800 1682.32 1900 --0.5 33 800 1759 1900 -0 33 800 1786.01 1900 -0.5 33 800 1759 1900 -1 33 800 1682.32 1900 -1.5 33 800 1567.9 1900 -2 33 800 1432.21 1900 -2.5 33 800 1292.37 1900 -3 33 800 1162.73 1900 -3.5 33 800 1052.79 1900 -4 33 800 966.649 1900 -4.5 33 800 903.925 1900 -5 33 800 861.307 1900 -5.5 33 800 834.211 1900 -6 33 800 818.059 1900 -6.5 33 800 809.018 1900 -7 33 800 804.26 1900 -7.5 33 800 801.903 1900 -8 33 800 800.805 1900 -8.5 33 800 800.322 1900 -9 33 800 800.122 1900 -9.5 33 800 800.044 1900 -10 33 800 800.015 1900 --10 33.5 800 800.019 1900 --9.5 33.5 800 800.057 1900 --9 33.5 800 800.159 1900 --8.5 33.5 800 800.421 1900 --8 33.5 800 801.054 1900 --7.5 33.5 800 802.493 1900 --7 33.5 800 805.58 1900 --6.5 33.5 800 811.813 1900 --6 33.5 800 823.657 1900 --5.5 33.5 800 844.815 1900 --5 33.5 800 880.309 1900 --4.5 33.5 799.999 936.137 1900 --4 33.5 799.999 1018.3 1900 --3.5 33.5 799.999 1131.14 1900 --3 33.5 799.998 1275.16 1900 --2.5 33.5 799.998 1444.98 1900 --2 33.5 799.997 1628.17 1900 --1.5 33.5 799.996 1805.92 1900 --1 33.5 799.996 1955.8 1900 --0.5 33.5 799.995 2056.25 1900 -0 33.5 799.995 2091.63 1900 -0.5 33.5 799.995 2056.25 1900 -1 33.5 799.996 1955.8 1900 -1.5 33.5 799.996 1805.92 1900 -2 33.5 799.997 1628.17 1900 -2.5 33.5 799.998 1444.98 1900 -3 33.5 799.998 1275.16 1900 -3.5 33.5 799.999 1131.14 1900 -4 33.5 799.999 1018.3 1900 -4.5 33.5 799.999 936.137 1900 -5 33.5 800 880.309 1900 -5.5 33.5 800 844.815 1900 -6 33.5 800 823.657 1900 -6.5 33.5 800 811.813 1900 -7 33.5 800 805.58 1900 -7.5 33.5 800 802.493 1900 -8 33.5 800 801.054 1900 -8.5 33.5 800 800.421 1900 -9 33.5 800 800.159 1900 -9.5 33.5 800 800.057 1900 -10 33.5 800 800.019 1900 --10 34 800 800.025 1900 --9.5 34 800 800.073 1900 --9 34 800 800.205 1900 --8.5 34 800 800.541 1900 --8 34 800 801.353 1900 --7.5 34 800 803.201 1900 --7 34 799.999 807.165 1900 --6.5 34 799.999 815.167 1900 --6 34 799.998 830.374 1900 --5.5 34 799.996 857.54 1900 --5 34 799.992 903.112 1900 --4.5 34 799.987 974.791 1900 --4 34 799.979 1080.29 1900 --3.5 34 799.968 1225.17 1900 --3 34 799.955 1410.08 1900 --2.5 34 799.938 1628.11 1900 --2 34 799.921 1863.31 1900 --1.5 34 799.904 2091.54 1900 --1 34 799.89 2283.98 1900 --0.5 34 799.88 2412.94 1900 -0 34 799.877 2458.37 1900 -0.5 34 799.88 2412.94 1900 -1 34 799.89 2283.98 1900 -1.5 34 799.904 2091.54 1900 -2 34 799.921 1863.31 1900 -2.5 34 799.938 1628.11 1900 -3 34 799.955 1410.08 1900 -3.5 34 799.968 1225.17 1900 -4 34 799.979 1080.29 1900 -4.5 34 799.987 974.791 1900 -5 34 799.992 903.112 1900 -5.5 34 799.996 857.54 1900 -6 34 799.998 830.374 1900 -6.5 34 799.999 815.167 1900 -7 34 799.999 807.165 1900 -7.5 34 800 803.201 1900 -8 34 800 801.353 1900 -8.5 34 800 800.541 1900 -9 34 800 800.205 1900 -9.5 34 800 800.073 1900 -10 34 800 800.025 1900 --10 34.5 800 800.031 1900 --9.5 34.5 800 800.092 1900 --9 34.5 800 800.257 1900 --8.5 34.5 799.999 800.68 1900 --8 34.5 799.998 801.702 1900 --7.5 34.5 799.996 804.026 1900 --7 34.5 799.992 809.01 1900 --6.5 34.5 799.982 819.073 1900 --6 34.5 799.965 838.196 1900 --5.5 34.5 799.933 872.358 1900 --5 34.5 799.88 929.666 1900 --4.5 34.5 799.797 1019.8 1900 --4 34.5 799.674 1152.47 1900 --3.5 34.5 799.505 1334.66 1900 --3 34.5 799.29 1567.19 1900 --2.5 34.5 799.036 1841.37 1900 --2 34.5 798.762 2137.15 1900 --1.5 34.5 798.497 2424.15 1900 --1 34.5 798.273 2666.14 1900 --0.5 34.5 798.122 2828.32 1900 -0 34.5 798.07 2885.45 1900 -0.5 34.5 798.122 2828.32 1900 -1 34.5 798.273 2666.14 1900 -1.5 34.5 798.497 2424.15 1900 -2 34.5 798.762 2137.15 1900 -2.5 34.5 799.036 1841.37 1900 -3 34.5 799.29 1567.19 1900 -3.5 34.5 799.505 1334.66 1900 -4 34.5 799.674 1152.47 1900 -4.5 34.5 799.797 1019.8 1900 -5 34.5 799.88 929.666 1900 -5.5 34.5 799.933 872.358 1900 -6 34.5 799.965 838.196 1900 -6.5 34.5 799.982 819.073 1900 -7 34.5 799.992 809.01 1900 -7.5 34.5 799.996 804.026 1900 -8 34.5 799.998 801.702 1900 -8.5 34.5 799.999 800.68 1900 -9 34.5 800 800.257 1900 -9.5 34.5 800 800.092 1900 -10 34.5 800 800.031 1900 --10 35 800 800.038 1900 --9.5 35 799.999 800.113 1900 --9 35 799.998 800.316 1900 --8.5 35 799.994 800.834 1900 --8 35 799.985 802.086 1900 --7.5 35 799.965 804.936 1900 --7 35 799.921 811.046 1900 --6.5 35 799.832 823.385 1900 --6 35 799.665 846.83 1900 --5.5 35 799.365 888.714 1900 --5 35 798.861 958.975 1900 --4.5 35 798.07 1069.49 1900 --4 35 796.904 1232.14 1900 --3.5 35 795.304 1455.51 1900 --3 35 793.262 1740.61 1900 --2.5 35 790.854 2076.76 1900 --2 35 788.256 2439.4 1900 --1.5 35 785.736 2791.27 1900 --1 35 783.61 3087.96 1900 --0.5 35 782.186 3286.79 1900 -0 35 781.684 3356.84 1900 -0.5 35 782.186 3286.79 1900 -1 35 783.61 3087.96 1900 -1.5 35 785.736 2791.27 1900 -2 35 788.256 2439.4 1900 -2.5 35 790.854 2076.76 1900 -3 35 793.262 1740.61 1900 -3.5 35 795.304 1455.51 1900 -4 35 796.904 1232.14 1900 -4.5 35 798.07 1069.49 1900 -5 35 798.861 958.975 1900 -5.5 35 799.365 888.714 1900 -6 35 799.665 846.83 1900 -6.5 35 799.832 823.385 1900 -7 35 799.921 811.046 1900 -7.5 35 799.965 804.936 1900 -8 35 799.985 802.086 1900 -8.5 35 799.994 800.834 1900 -9 35 799.998 800.316 1900 -9.5 35 799.999 800.113 1900 -10 35 800 800.038 1900 --10 35.5 799.998 800.045 1900 --9.5 35.5 799.995 800.133 1900 --9 35.5 799.987 800.371 1900 --8.5 35.5 799.966 800.982 1900 --8 35.5 799.914 802.455 1900 --7.5 35.5 799.797 805.808 1900 --7 35.5 799.545 812.998 1900 --6.5 35.5 799.036 827.517 1900 --6 35.5 798.07 855.105 1900 --5.5 35.5 796.343 904.389 1900 --5 35.5 793.447 987.065 1900 --4.5 35.5 788.891 1117.1 1900 --4 35.5 782.186 1308.49 1900 --3.5 35.5 772.978 1571.33 1900 --3 35.5 761.226 1906.8 1900 --2.5 35.5 747.369 2302.35 1900 --2 35.5 732.42 2729.06 1900 --1.5 35.5 717.915 3143.11 1900 --1 35.5 705.685 3492.22 1900 --0.5 35.5 697.488 3726.18 1900 -0 35.5 694.601 3808.61 1900 -0.5 35.5 697.488 3726.18 1900 -1 35.5 705.685 3492.22 1900 -1.5 35.5 717.915 3143.11 1900 -2 35.5 732.42 2729.06 1900 -2.5 35.5 747.369 2302.35 1900 -3 35.5 761.226 1906.8 1900 -3.5 35.5 772.978 1571.33 1900 -4 35.5 782.186 1308.49 1900 -4.5 35.5 788.891 1117.1 1900 -5 35.5 793.447 987.065 1900 -5.5 35.5 796.343 904.389 1900 -6 35.5 798.07 855.105 1900 -6.5 35.5 799.036 827.517 1900 -7 35.5 799.545 812.998 1900 -7.5 35.5 799.797 805.808 1900 -8 35.5 799.914 802.455 1900 -8.5 35.5 799.966 800.982 1900 -9 35.5 799.987 800.371 1900 -9.5 35.5 799.995 800.133 1900 -10 35.5 799.998 800.045 1900 --10 36 799.995 800.05 1900 --9.5 36 799.984 800.147 1900 --9 36 799.955 800.41 1900 --8.5 36 799.88 801.084 1900 --8 36 799.7 802.712 1900 --7.5 36 799.29 806.415 1900 --7 36 798.411 814.357 1900 --6.5 36 796.635 830.394 1900 --6 36 793.262 860.866 1900 --5.5 36 787.236 915.303 1900 --5 36 777.127 1006.62 1900 --4.5 36 761.226 1150.26 1900 --4 36 737.823 1361.66 1900 --3.5 36 705.685 1651.98 1900 --3 36 664.665 2022.53 1900 --2.5 36 616.299 2459.43 1900 --2 36 564.123 2930.75 1900 --1.5 36 513.495 3388.09 1900 --1 36 470.807 3773.7 1900 --0.5 36 442.199 4032.13 1900 -0 36 432.121 4123.17 1900 -0.5 36 442.199 4032.13 1900 -1 36 470.807 3773.7 1900 -1.5 36 513.495 3388.09 1900 -2 36 564.123 2930.75 1900 -2.5 36 616.299 2459.43 1900 -3 36 664.665 2022.53 1900 -3.5 36 705.685 1651.98 1900 -4 36 737.823 1361.66 1900 -4.5 36 761.226 1150.26 1900 -5 36 777.127 1006.62 1900 -5.5 36 787.236 915.303 1900 -6 36 793.262 860.866 1900 -6.5 36 796.635 830.394 1900 -7 36 798.411 814.357 1900 -7.5 36 799.29 806.415 1900 -8 36 799.7 802.712 1900 -8.5 36 799.88 801.084 1900 -9 36 799.955 800.41 1900 -9.5 36 799.984 800.147 1900 -10 36 799.995 800.05 1900 --10 36.5 799.988 800.052 1900 --9.5 36.5 799.966 800.155 1900 --9 36.5 799.904 800.433 1900 --8.5 36.5 799.746 801.145 1900 --8 36.5 799.365 802.864 1900 --7.5 36.5 798.497 806.775 1900 --7 36.5 796.635 815.162 1900 --6.5 36.5 792.877 832.098 1900 --6 36.5 785.736 864.28 1900 --5.5 36.5 772.978 921.771 1900 --5 36.5 751.577 1018.21 1900 --4.5 36.5 717.915 1169.91 1900 --4 36.5 668.372 1393.17 1900 --3.5 36.5 600.334 1699.77 1900 --3 36.5 513.495 2091.1 1900 --2.5 36.5 411.104 2552.52 1900 --2 36.5 300.648 3050.28 1900 --1.5 36.5 193.469 3533.27 1900 --1 36.5 103.098 3940.51 1900 --0.5 36.5 42.5349 4213.44 1900 -0 36.5 21.1992 4309.58 1900 -0.5 36.5 42.5349 4213.44 1900 -1 36.5 103.098 3940.51 1900 -1.5 36.5 193.469 3533.27 1900 -2 36.5 300.648 3050.28 1900 -2.5 36.5 411.104 2552.52 1900 -3 36.5 513.495 2091.1 1900 -3.5 36.5 600.334 1699.77 1900 -4 36.5 668.372 1393.17 1900 -4.5 36.5 717.915 1169.91 1900 -5 36.5 751.577 1018.21 1900 -5.5 36.5 772.978 921.771 1900 -6 36.5 785.736 864.28 1900 -6.5 36.5 792.877 832.098 1900 -7 36.5 796.635 815.162 1900 -7.5 36.5 798.497 806.775 1900 -8 36.5 799.365 802.864 1900 -8.5 36.5 799.746 801.145 1900 -9 36.5 799.904 800.433 1900 -9.5 36.5 799.966 800.155 1900 -10 36.5 799.988 800.052 1900 --10 37 799.985 800.058 1900 --9.5 37 799.956 800.171 1900 --9 37 799.877 800.479 1900 --8.5 37 799.674 801.267 1900 --8 37 799.184 803.169 1900 --7.5 37 798.07 807.497 1900 --7 37 795.68 816.779 1900 --6.5 37 790.854 835.52 1900 --6 37 781.684 871.133 1900 --5.5 37 765.303 934.753 1900 --5 37 737.823 1041.48 1900 --4.5 37 694.601 1209.34 1900 --4 37 630.987 1456.4 1900 --3.5 37 543.624 1795.7 1900 --3 37 432.121 2228.75 1900 --2.5 37 300.648 2739.35 1900 --2 37 158.82 3290.17 1900 --1.5 37 21.1992 3824.66 1900 --1 37 -94.8393 4275.32 1900 --0.5 37 -172.604 4577.34 1900 -0 37 -200 4683.73 1900 -0.5 37 -172.604 4577.34 1900 -1 37 -94.8393 4275.32 1900 -1.5 37 21.1992 3824.66 1900 -2 37 158.82 3290.17 1900 -2.5 37 300.648 2739.35 1900 -3 37 432.121 2228.75 1900 -3.5 37 543.624 1795.7 1900 -4 37 630.987 1456.4 1900 -4.5 37 694.601 1209.34 1900 -5 37 737.823 1041.48 1900 -5.5 37 765.303 934.753 1900 -6 37 781.684 871.133 1900 -6.5 37 790.854 835.52 1900 -7 37 795.68 816.779 1900 -7.5 37 798.07 807.497 1900 -8 37 799.184 803.169 1900 -8.5 37 799.674 801.267 1900 -9 37 799.877 800.479 1900 -9.5 37 799.956 800.171 1900 -10 37 799.985 800.058 1900 --10 37.5 799.988 800.07 1900 --9.5 37.5 799.966 800.206 1900 --9 37.5 799.904 800.577 1900 --8.5 37.5 799.746 801.525 1900 --8 37.5 799.365 803.813 1900 --7.5 37.5 798.497 809.021 1900 --7 37.5 796.635 820.188 1900 --6.5 37.5 792.877 842.737 1900 --6 37.5 785.736 885.585 1900 --5.5 37.5 772.978 962.131 1900 --5 37.5 751.577 1090.54 1900 --4.5 37.5 717.915 1292.51 1900 --4 37.5 668.372 1589.77 1900 --3.5 37.5 600.334 1997.99 1900 --3 37.5 513.495 2519.03 1900 --2.5 37.5 411.104 3133.37 1900 --2 37.5 300.648 3796.11 1900 --1.5 37.5 193.469 4439.18 1900 --1 37.5 103.098 4981.41 1900 --0.5 37.5 42.5349 5344.79 1900 -0 37.5 21.1992 5472.8 1900 -0.5 37.5 42.5349 5344.79 1900 -1 37.5 103.098 4981.41 1900 -1.5 37.5 193.469 4439.18 1900 -2 37.5 300.648 3796.11 1900 -2.5 37.5 411.104 3133.37 1900 -3 37.5 513.495 2519.03 1900 -3.5 37.5 600.334 1997.99 1900 -4 37.5 668.372 1589.77 1900 -4.5 37.5 717.915 1292.51 1900 -5 37.5 751.577 1090.54 1900 -5.5 37.5 772.978 962.131 1900 -6 37.5 785.736 885.585 1900 -6.5 37.5 792.877 842.737 1900 -7 37.5 796.635 820.188 1900 -7.5 37.5 798.497 809.021 1900 -8 37.5 799.365 803.813 1900 -8.5 37.5 799.746 801.525 1900 -9 37.5 799.904 800.577 1900 -9.5 37.5 799.966 800.206 1900 -10 37.5 799.988 800.07 1900 --10 38 799.995 800.084 1900 --9.5 38 799.984 800.247 1900 --9 38 799.955 800.691 1900 --8.5 38 799.88 801.826 1900 --8 38 799.7 804.567 1900 --7.5 38 799.29 810.805 1900 --7 38 798.411 824.181 1900 --6.5 38 796.635 851.191 1900 --6 38 793.262 902.515 1900 --5.5 38 787.236 994.202 1900 --5 38 777.127 1148.01 1900 --4.5 38 761.226 1389.93 1900 --4 38 737.823 1745.99 1900 --3.5 38 705.685 2234.97 1900 --3 38 664.665 2859.07 1900 --2.5 38 616.299 3594.94 1900 --2 38 564.123 4388.77 1900 --1.5 38 513.495 5159.05 1900 --1 38 470.807 5808.53 1900 --0.5 38 442.199 6243.79 1900 -0 38 432.121 6397.13 1900 -0.5 38 442.199 6243.79 1900 -1 38 470.807 5808.53 1900 -1.5 38 513.495 5159.05 1900 -2 38 564.123 4388.77 1900 -2.5 38 616.299 3594.94 1900 -3 38 664.665 2859.07 1900 -3.5 38 705.685 2234.97 1900 -4 38 737.823 1745.99 1900 -4.5 38 761.226 1389.93 1900 -5 38 777.127 1148.01 1900 -5.5 38 787.236 994.202 1900 -6 38 793.262 902.515 1900 -6.5 38 796.635 851.191 1900 -7 38 798.411 824.181 1900 -7.5 38 799.29 810.805 1900 -8 38 799.7 804.567 1900 -8.5 38 799.88 801.826 1900 -9 38 799.955 800.691 1900 -9.5 38 799.984 800.247 1900 -10 38 799.995 800.084 1900 --10 38.5 799.998 800.094 1900 --9.5 38.5 799.995 800.278 1900 --9 38.5 799.987 800.777 1900 --8.5 38.5 799.966 802.053 1900 --8 38.5 799.914 805.134 1900 --7.5 38.5 799.797 812.147 1900 --7 38.5 799.545 827.183 1900 --6.5 38.5 799.036 857.547 1900 --6 38.5 798.07 915.244 1900 --5.5 38.5 796.343 1018.32 1900 --5 38.5 793.447 1191.22 1900 --4.5 38.5 788.891 1463.18 1900 --4 38.5 782.186 1863.45 1900 --3.5 38.5 772.978 2413.15 1900 --3 38.5 761.226 3114.74 1900 --2.5 38.5 747.369 3941.98 1900 --2 38.5 732.42 4834.38 1900 --1.5 38.5 717.915 5700.31 1900 --1 38.5 705.685 6430.44 1900 --0.5 38.5 697.488 6919.74 1900 -0 38.5 694.601 7092.12 1900 -0.5 38.5 697.488 6919.74 1900 -1 38.5 705.685 6430.44 1900 -1.5 38.5 717.915 5700.31 1900 -2 38.5 732.42 4834.38 1900 -2.5 38.5 747.369 3941.98 1900 -3 38.5 761.226 3114.74 1900 -3.5 38.5 772.978 2413.15 1900 -4 38.5 782.186 1863.45 1900 -4.5 38.5 788.891 1463.18 1900 -5 38.5 793.447 1191.22 1900 -5.5 38.5 796.343 1018.32 1900 -6 38.5 798.07 915.244 1900 -6.5 38.5 799.036 857.547 1900 -7 38.5 799.545 827.183 1900 -7.5 38.5 799.797 812.147 1900 -8 38.5 799.914 805.134 1900 -8.5 38.5 799.966 802.053 1900 -9 38.5 799.987 800.777 1900 -9.5 38.5 799.995 800.278 1900 -10 38.5 799.998 800.094 1900 --10 39 800 800.1 1900 --9.5 39 799.999 800.296 1900 --9 39 799.998 800.828 1900 --8.5 39 799.994 802.188 1900 --8 39 799.985 805.473 1900 --7.5 39 799.965 812.948 1900 --7 39 799.921 828.977 1900 --6.5 39 799.832 861.344 1900 --6 39 799.665 922.847 1900 --5.5 39 799.365 1032.72 1900 --5 39 798.861 1217.03 1900 --4.5 39 798.07 1506.93 1900 --4 39 796.904 1933.61 1900 --3.5 39 795.304 2519.57 1900 --3 39 793.262 3267.44 1900 --2.5 39 790.854 4149.26 1900 --2 39 788.256 5100.53 1900 --1.5 39 785.736 6023.58 1900 --1 39 783.61 6801.88 1900 --0.5 39 782.186 7323.46 1900 -0 39 781.684 7507.21 1900 -0.5 39 782.186 7323.46 1900 -1 39 783.61 6801.88 1900 -1.5 39 785.736 6023.58 1900 -2 39 788.256 5100.53 1900 -2.5 39 790.854 4149.26 1900 -3 39 793.262 3267.44 1900 -3.5 39 795.304 2519.57 1900 -4 39 796.904 1933.61 1900 -4.5 39 798.07 1506.93 1900 -5 39 798.861 1217.03 1900 -5.5 39 799.365 1032.72 1900 -6 39 799.665 922.847 1900 -6.5 39 799.832 861.344 1900 -7 39 799.921 828.977 1900 -7.5 39 799.965 812.948 1900 -8 39 799.985 805.473 1900 -8.5 39 799.994 802.188 1900 -9 39 799.998 800.828 1900 -9.5 39 799.999 800.296 1900 -10 39 800 800.1 1900 --10 39.5 800 800.104 1900 --9.5 39.5 800 800.306 1900 --9 39.5 800 800.855 1900 --8.5 39.5 799.999 802.261 1900 --8 39.5 799.998 805.654 1900 --7.5 39.5 799.996 813.375 1900 --7 39.5 799.992 829.932 1900 --6.5 39.5 799.982 863.367 1900 --6 39.5 799.965 926.898 1900 --5.5 39.5 799.933 1040.39 1900 --5 39.5 799.88 1230.78 1900 --4.5 39.5 799.797 1530.25 1900 --4 39.5 799.674 1970.99 1900 --3.5 39.5 799.505 2576.28 1900 --3 39.5 799.29 3348.82 1900 --2.5 39.5 799.036 4259.72 1900 --2 39.5 798.762 5242.37 1900 --1.5 39.5 798.497 6195.86 1900 --1 39.5 798.273 6999.82 1900 --0.5 39.5 798.122 7538.61 1900 -0 39.5 798.07 7728.42 1900 -0.5 39.5 798.122 7538.61 1900 -1 39.5 798.273 6999.82 1900 -1.5 39.5 798.497 6195.86 1900 -2 39.5 798.762 5242.37 1900 -2.5 39.5 799.036 4259.72 1900 -3 39.5 799.29 3348.82 1900 -3.5 39.5 799.505 2576.28 1900 -4 39.5 799.674 1970.99 1900 -4.5 39.5 799.797 1530.25 1900 -5 39.5 799.88 1230.78 1900 -5.5 39.5 799.933 1040.39 1900 -6 39.5 799.965 926.898 1900 -6.5 39.5 799.982 863.367 1900 -7 39.5 799.992 829.932 1900 -7.5 39.5 799.996 813.375 1900 -8 39.5 799.998 805.654 1900 -8.5 39.5 799.999 802.261 1900 -9 39.5 800 800.855 1900 -9.5 39.5 800 800.306 1900 -10 39.5 800 800.104 1900 --10 40 800 800.105 1900 --9.5 40 800 800.309 1900 --9 40 800 800.864 1900 --8.5 40 800 802.284 1900 --8 40 800 805.712 1900 --7.5 40 800 813.513 1900 --7 40 799.999 830.241 1900 --6.5 40 799.999 864.021 1900 --6 40 799.998 928.207 1900 --5.5 40 799.996 1042.87 1900 --5 40 799.992 1235.23 1900 --4.5 40 799.987 1537.78 1900 --4 40 799.979 1983.07 1900 --3.5 40 799.968 2594.6 1900 --3 40 799.955 3375.11 1900 --2.5 40 799.938 4295.4 1900 --2 40 799.921 5288.18 1900 --1.5 40 799.904 6251.51 1900 --1 40 799.89 7063.76 1900 --0.5 40 799.88 7608.11 1900 -0 40 799.877 7799.88 1900 -0.5 40 799.88 7608.11 1900 -1 40 799.89 7063.76 1900 -1.5 40 799.904 6251.51 1900 -2 40 799.921 5288.18 1900 -2.5 40 799.938 4295.4 1900 -3 40 799.955 3375.11 1900 -3.5 40 799.968 2594.6 1900 -4 40 799.979 1983.07 1900 -4.5 40 799.987 1537.78 1900 -5 40 799.992 1235.23 1900 -5.5 40 799.996 1042.87 1900 -6 40 799.998 928.207 1900 -6.5 40 799.999 864.021 1900 -7 40 799.999 830.241 1900 -7.5 40 800 813.513 1900 -8 40 800 805.712 1900 -8.5 40 800 802.284 1900 -9 40 800 800.864 1900 -9.5 40 800 800.309 1900 -10 40 800 800.105 1900 --10 40.5 800 800.104 1900 --9.5 40.5 800 800.306 1900 --9 40.5 800 800.855 1900 --8.5 40.5 800 802.261 1900 --8 40.5 800 805.655 1900 --7.5 40.5 800 813.379 1900 --7 40.5 800 829.941 1900 --6.5 40.5 800 863.385 1900 --6 40.5 800 926.934 1900 --5.5 40.5 800 1040.46 1900 --5 40.5 800 1230.9 1900 --4.5 40.5 799.999 1530.45 1900 --4 40.5 799.999 1971.32 1900 --3.5 40.5 799.999 2576.77 1900 --3 40.5 799.998 3349.53 1900 --2.5 40.5 799.998 4260.68 1900 --2 40.5 799.997 5243.6 1900 --1.5 40.5 799.996 6197.36 1900 --1 40.5 799.996 7001.54 1900 --0.5 40.5 799.995 7540.48 1900 -0 40.5 799.995 7730.34 1900 -0.5 40.5 799.995 7540.48 1900 -1 40.5 799.996 7001.54 1900 -1.5 40.5 799.996 6197.36 1900 -2 40.5 799.997 5243.6 1900 -2.5 40.5 799.998 4260.68 1900 -3 40.5 799.998 3349.53 1900 -3.5 40.5 799.999 2576.77 1900 -4 40.5 799.999 1971.32 1900 -4.5 40.5 799.999 1530.45 1900 -5 40.5 800 1230.9 1900 -5.5 40.5 800 1040.46 1900 -6 40.5 800 926.934 1900 -6.5 40.5 800 863.385 1900 -7 40.5 800 829.941 1900 -7.5 40.5 800 813.379 1900 -8 40.5 800 805.655 1900 -8.5 40.5 800 802.261 1900 -9 40.5 800 800.855 1900 -9.5 40.5 800 800.306 1900 -10 40.5 800 800.104 1900 --10 41 800 800.101 1900 --9.5 41 800 800.297 1900 --9 41 800 800.83 1900 --8.5 41 800 802.194 1900 --8 41 800 805.488 1900 --7.5 41 800 812.983 1900 --7 41 800 829.056 1900 --6.5 41 800 861.511 1900 --6 41 800 923.182 1900 --5.5 41 800 1033.35 1900 --5 41 800 1218.17 1900 --4.5 41 800 1508.87 1900 --4 41 800 1936.7 1900 --3.5 41 800 2524.26 1900 --3 41 800 3274.18 1900 --2.5 41 800 4158.4 1900 --2 41 800 5112.28 1900 --1.5 41 800 6037.84 1900 --1 41 800 6818.27 1900 --0.5 41 800 7341.28 1900 -0 41 800 7525.53 1900 -0.5 41 800 7341.28 1900 -1 41 800 6818.27 1900 -1.5 41 800 6037.84 1900 -2 41 800 5112.28 1900 -2.5 41 800 4158.4 1900 -3 41 800 3274.18 1900 -3.5 41 800 2524.26 1900 -4 41 800 1936.7 1900 -4.5 41 800 1508.87 1900 -5 41 800 1218.17 1900 -5.5 41 800 1033.35 1900 -6 41 800 923.182 1900 -6.5 41 800 861.511 1900 -7 41 800 829.056 1900 -7.5 41 800 812.983 1900 -8 41 800 805.488 1900 -8.5 41 800 802.194 1900 -9 41 800 800.83 1900 -9.5 41 800 800.297 1900 -10 41 800 800.101 1900 --10 41.5 800 800.096 1900 --9.5 41.5 800 800.282 1900 --9 41.5 800 800.79 1900 --8.5 41.5 800 802.087 1900 --8 41.5 800 805.22 1900 --7.5 41.5 800 812.35 1900 --7 41.5 800 827.639 1900 --6.5 41.5 800 858.511 1900 --6 41.5 800 917.175 1900 --5.5 41.5 800 1021.97 1900 --5 41.5 800 1197.78 1900 --4.5 41.5 800 1474.29 1900 --4 41.5 800 1881.27 1900 --3.5 41.5 800 2440.17 1900 --3 41.5 800 3153.52 1900 --2.5 41.5 800 3994.61 1900 --2 41.5 800 4901.96 1900 --1.5 41.5 800 5782.39 1900 --1 41.5 800 6524.75 1900 --0.5 41.5 800 7022.25 1900 -0 41.5 800 7197.52 1900 -0.5 41.5 800 7022.25 1900 -1 41.5 800 6524.75 1900 -1.5 41.5 800 5782.39 1900 -2 41.5 800 4901.96 1900 -2.5 41.5 800 3994.61 1900 -3 41.5 800 3153.52 1900 -3.5 41.5 800 2440.17 1900 -4 41.5 800 1881.27 1900 -4.5 41.5 800 1474.29 1900 -5 41.5 800 1197.78 1900 -5.5 41.5 800 1021.97 1900 -6 41.5 800 917.175 1900 -6.5 41.5 800 858.511 1900 -7 41.5 800 827.639 1900 -7.5 41.5 800 812.35 1900 -8 41.5 800 805.22 1900 -8.5 41.5 800 802.087 1900 -9 41.5 800 800.79 1900 -9.5 41.5 800 800.282 1900 -10 41.5 800 800.096 1900 --10 42 800 800.089 1900 --9.5 42 800 800.263 1900 --9 42 800 800.736 1900 --8.5 42 800 801.946 1900 --8 42 800 804.867 1900 --7.5 42 800 811.515 1900 --7 42 800 825.77 1900 --6.5 42 800 854.556 1900 --6 42 800 909.253 1900 --5.5 42 800 1006.97 1900 --5 42 800 1170.88 1900 --4.5 42 800 1428.71 1900 --4 42 800 1808.17 1900 --3.5 42 800 2329.28 1900 --3 42 800 2994.4 1900 --2.5 42 800 3778.64 1900 --2 42 800 4624.65 1900 --1.5 42 800 5445.55 1900 --1 42 800 6137.72 1900 --0.5 42 800 6601.59 1900 -0 42 800 6765.01 1900 -0.5 42 800 6601.59 1900 -1 42 800 6137.72 1900 -1.5 42 800 5445.55 1900 -2 42 800 4624.65 1900 -2.5 42 800 3778.64 1900 -3 42 800 2994.4 1900 -3.5 42 800 2329.28 1900 -4 42 800 1808.17 1900 -4.5 42 800 1428.71 1900 -5 42 800 1170.88 1900 -5.5 42 800 1006.97 1900 -6 42 800 909.253 1900 -6.5 42 800 854.556 1900 -7 42 800 825.77 1900 -7.5 42 800 811.515 1900 -8 42 800 804.867 1900 -8.5 42 800 801.946 1900 -9 42 800 800.736 1900 -9.5 42 800 800.263 1900 -10 42 800 800.089 1900 --10 42.5 800 800.081 1900 --9.5 42.5 800 800.241 1900 --9 42.5 800 800.673 1900 --8.5 42.5 800 801.779 1900 --8 42.5 800 804.448 1900 --7.5 42.5 800 810.524 1900 --7 42.5 800 823.552 1900 --6.5 42.5 800 849.86 1900 --6 42.5 800 899.85 1900 --5.5 42.5 800 989.153 1900 --5 42.5 800 1138.96 1900 --4.5 42.5 800 1374.59 1900 --4 42.5 800 1721.39 1900 --3.5 42.5 800 2197.66 1900 --3 42.5 800 2805.53 1900 --2.5 42.5 800 3522.27 1900 --2 42.5 800 4295.46 1900 --1.5 42.5 800 5045.71 1900 --1 42.5 800 5678.31 1900 --0.5 42.5 800 6102.26 1900 -0 42.5 800 6251.61 1900 -0.5 42.5 800 6102.26 1900 -1 42.5 800 5678.31 1900 -1.5 42.5 800 5045.71 1900 -2 42.5 800 4295.46 1900 -2.5 42.5 800 3522.27 1900 -3 42.5 800 2805.53 1900 -3.5 42.5 800 2197.66 1900 -4 42.5 800 1721.39 1900 -4.5 42.5 800 1374.59 1900 -5 42.5 800 1138.96 1900 -5.5 42.5 800 989.153 1900 -6 42.5 800 899.85 1900 -6.5 42.5 800 849.86 1900 -7 42.5 800 823.552 1900 -7.5 42.5 800 810.524 1900 -8 42.5 800 804.448 1900 -8.5 42.5 800 801.779 1900 -9 42.5 800 800.673 1900 -9.5 42.5 800 800.241 1900 -10 42.5 800 800.081 1900 --10 43 800 800.073 1900 --9.5 43 800 800.216 1900 --9 43 800 800.603 1900 --8.5 43 800 801.593 1900 --8 43 800 803.985 1900 --7.5 43 800 809.428 1900 --7 43 800 821.099 1900 --6.5 43 800 844.666 1900 --6 43 800 889.449 1900 --5.5 43 800 969.449 1900 --5 43 800 1103.65 1900 --4.5 43 800 1314.74 1900 --4 43 800 1625.42 1900 --3.5 43 800 2052.07 1900 --3 43 800 2596.63 1900 --2.5 43 800 3238.7 1900 --2 43 800 3931.35 1900 --1.5 43 800 4603.46 1900 --1 43 800 5170.16 1900 --0.5 43 800 5549.94 1900 -0 43 800 5683.73 1900 -0.5 43 800 5549.94 1900 -1 43 800 5170.16 1900 -1.5 43 800 4603.46 1900 -2 43 800 3931.35 1900 -2.5 43 800 3238.7 1900 -3 43 800 2596.63 1900 -3.5 43 800 2052.07 1900 -4 43 800 1625.42 1900 -4.5 43 800 1314.74 1900 -5 43 800 1103.65 1900 -5.5 43 800 969.449 1900 -6 43 800 889.449 1900 -6.5 43 800 844.666 1900 -7 43 800 821.099 1900 -7.5 43 800 809.428 1900 -8 43 800 803.985 1900 -8.5 43 800 801.593 1900 -9 43 800 800.603 1900 -9.5 43 800 800.216 1900 -10 43 800 800.073 1900 --10 43.5 800 800.064 1900 --9.5 43.5 800 800.189 1900 --9 43.5 800 800.529 1900 --8.5 43.5 800 801.399 1900 --8 43.5 800 803.499 1900 --7.5 43.5 800 808.279 1900 --7 43.5 800 818.527 1900 --6.5 43.5 800 839.221 1900 --6 43.5 800 878.545 1900 --5.5 43.5 800 948.793 1900 --5 43.5 800 1066.64 1900 --4.5 43.5 800 1251.99 1900 --4 43.5 800 1524.79 1900 --3.5 43.5 800 1899.44 1900 --3 43.5 800 2377.61 1900 --2.5 43.5 800 2941.41 1900 --2 43.5 800 3549.63 1900 --1.5 43.5 800 4139.8 1900 --1 43.5 800 4637.42 1900 --0.5 43.5 800 4970.9 1900 -0 43.5 800 5088.38 1900 -0.5 43.5 800 4970.9 1900 -1 43.5 800 4637.42 1900 -1.5 43.5 800 4139.8 1900 -2 43.5 800 3549.63 1900 -2.5 43.5 800 2941.41 1900 -3 43.5 800 2377.61 1900 -3.5 43.5 800 1899.44 1900 -4 43.5 800 1524.79 1900 -4.5 43.5 800 1251.99 1900 -5 43.5 800 1066.64 1900 -5.5 43.5 800 948.793 1900 -6 43.5 800 878.545 1900 -6.5 43.5 800 839.221 1900 -7 43.5 800 818.527 1900 -7.5 43.5 800 808.279 1900 -8 43.5 800 803.499 1900 -8.5 43.5 800 801.399 1900 -9 43.5 800 800.529 1900 -9.5 43.5 800 800.189 1900 -10 43.5 800 800.064 1900 --10 44 800 800.055 1900 --9.5 44 800 800.163 1900 --9 44 800 800.456 1900 --8.5 44 800 801.204 1900 --8 44 800 803.012 1900 --7.5 44 800 807.125 1900 --7 44 800 815.946 1900 --6.5 44 800 833.758 1900 --6 44 800 867.604 1900 --5.5 44 800 928.067 1900 --5 44 800 1029.5 1900 --4.5 44 800 1189.03 1900 --4 44 800 1423.84 1900 --3.5 44 800 1746.29 1900 --3 44 800 2157.86 1900 --2.5 44 800 2643.13 1900 --2 44 800 3166.63 1900 --1.5 44 800 3674.59 1900 --1 44 800 4102.89 1900 --0.5 44 800 4389.93 1900 -0 44 800 4491.05 1900 -0.5 44 800 4389.93 1900 -1 44 800 4102.89 1900 -1.5 44 800 3674.59 1900 -2 44 800 3166.63 1900 -2.5 44 800 2643.13 1900 -3 44 800 2157.86 1900 -3.5 44 800 1746.29 1900 -4 44 800 1423.84 1900 -4.5 44 800 1189.03 1900 -5 44 800 1029.5 1900 -5.5 44 800 928.067 1900 -6 44 800 867.604 1900 -6.5 44 800 833.758 1900 -7 44 800 815.946 1900 -7.5 44 800 807.125 1900 -8 44 800 803.012 1900 -8.5 44 800 801.204 1900 -9 44 800 800.456 1900 -9.5 44 800 800.163 1900 -10 44 800 800.055 1900 --10 44.5 800 800.047 1900 --9.5 44.5 800 800.138 1900 --9 44.5 800 800.384 1900 --8.5 44.5 800 801.016 1900 --8 44.5 800 802.541 1900 --7.5 44.5 800 806.011 1900 --7 44.5 800 813.453 1900 --6.5 44.5 800 828.481 1900 --6 44.5 800 857.035 1900 --5.5 44.5 800 908.046 1900 --5 44.5 800 993.618 1900 --4.5 44.5 800 1128.21 1900 --4 44.5 800 1326.31 1900 --3.5 44.5 800 1598.36 1900 --3 44.5 800 1945.58 1900 --2.5 44.5 800 2354.98 1900 --2 44.5 800 2796.64 1900 --1.5 44.5 800 3225.19 1900 --1 44.5 800 3586.54 1900 --0.5 44.5 800 3828.7 1900 -0 44.5 800 3914.01 1900 -0.5 44.5 800 3828.7 1900 -1 44.5 800 3586.54 1900 -1.5 44.5 800 3225.19 1900 -2 44.5 800 2796.64 1900 -2.5 44.5 800 2354.98 1900 -3 44.5 800 1945.58 1900 -3.5 44.5 800 1598.36 1900 -4 44.5 800 1326.31 1900 -4.5 44.5 800 1128.21 1900 -5 44.5 800 993.618 1900 -5.5 44.5 800 908.046 1900 -6 44.5 800 857.035 1900 -6.5 44.5 800 828.481 1900 -7 44.5 800 813.453 1900 -7.5 44.5 800 806.011 1900 -8 44.5 800 802.541 1900 -8.5 44.5 800 801.016 1900 -9 44.5 800 800.384 1900 -9.5 44.5 800 800.138 1900 -10 44.5 800 800.047 1900 --10 45 800 800.038 1900 --9.5 45 800 800.114 1900 --9 45 800 800.318 1900 --8.5 45 800 800.84 1900 --8 45 800 802.101 1900 --7.5 45 800 804.971 1900 --7 45 800 811.125 1900 --6.5 45 800 823.552 1900 --6 45 800 847.166 1900 --5.5 45 800 889.349 1900 --5 45 800 960.114 1900 --4.5 45 800 1071.42 1900 --4 45 800 1235.24 1900 --3.5 45 800 1460.21 1900 --3 45 800 1747.35 1900 --2.5 45 800 2085.91 1900 --2 45 800 2451.14 1900 --1.5 45 800 2805.53 1900 --1 45 800 3104.35 1900 --0.5 45 800 3304.61 1900 -0 45 800 3375.16 1900 -0.5 45 800 3304.61 1900 -1 45 800 3104.35 1900 -1.5 45 800 2805.53 1900 -2 45 800 2451.14 1900 -2.5 45 800 2085.91 1900 -3 45 800 1747.35 1900 -3.5 45 800 1460.21 1900 -4 45 800 1235.24 1900 -4.5 45 800 1071.42 1900 -5 45 800 960.114 1900 -5.5 45 800 889.349 1900 -6 45 800 847.166 1900 -6.5 45 800 823.552 1900 -7 45 800 811.125 1900 -7.5 45 800 804.971 1900 -8 45 800 802.101 1900 -8.5 45 800 800.84 1900 -9 45 800 800.318 1900 -9.5 45 800 800.114 1900 -10 45 800 800.038 1900 --10 45.5 800 800.031 1900 --9.5 45.5 800 800.092 1900 --9 45.5 800 800.258 1900 --8.5 45.5 800 800.681 1900 --8 45.5 800 801.703 1900 --7.5 45.5 800 804.03 1900 --7 45.5 800 809.018 1900 --6.5 45.5 800 819.091 1900 --6 45.5 800 838.232 1900 --5.5 45.5 800 872.425 1900 --5 45.5 800 929.786 1900 --4.5 45.5 800 1020.01 1900 --4 45.5 800 1152.8 1900 --3.5 45.5 800 1335.15 1900 --3 45.5 800 1567.9 1900 --2.5 45.5 800 1842.34 1900 --2 45.5 800 2138.39 1900 --1.5 45.5 800 2425.65 1900 --1 45.5 800 2667.87 1900 --0.5 45.5 800 2830.2 1900 -0 45.5 800 2887.38 1900 -0.5 45.5 800 2830.2 1900 -1 45.5 800 2667.87 1900 -1.5 45.5 800 2425.65 1900 -2 45.5 800 2138.39 1900 -2.5 45.5 800 1842.34 1900 -3 45.5 800 1567.9 1900 -3.5 45.5 800 1335.15 1900 -4 45.5 800 1152.8 1900 -4.5 45.5 800 1020.01 1900 -5 45.5 800 929.786 1900 -5.5 45.5 800 872.425 1900 -6 45.5 800 838.232 1900 -6.5 45.5 800 819.091 1900 -7 45.5 800 809.018 1900 -7.5 45.5 800 804.03 1900 -8 45.5 800 801.703 1900 -8.5 45.5 800 800.681 1900 -9 45.5 800 800.258 1900 -9.5 45.5 800 800.092 1900 -10 45.5 800 800.031 1900 --10 46 800 800.025 1900 --9.5 46 800 800.073 1900 --9 46 800 800.205 1900 --8.5 46 800 800.541 1900 --8 46 800 801.353 1900 --7.5 46 800 803.202 1900 --7 46 800 807.165 1900 --6.5 46 800 815.169 1900 --6 46 800 830.376 1900 --5.5 46 800 857.544 1900 --5 46 800 903.119 1900 --4.5 46 800 974.804 1900 --4 46 800 1080.31 1900 --3.5 46 800 1225.2 1900 --3 46 800 1410.13 1900 --2.5 46 800 1628.17 1900 --2 46 800 1863.39 1900 --1.5 46 800 2091.64 1900 --1 46 800 2284.09 1900 --0.5 46 800 2413.06 1900 -0 46 800 2458.49 1900 -0.5 46 800 2413.06 1900 -1 46 800 2284.09 1900 -1.5 46 800 2091.64 1900 -2 46 800 1863.39 1900 -2.5 46 800 1628.17 1900 -3 46 800 1410.13 1900 -3.5 46 800 1225.2 1900 -4 46 800 1080.31 1900 -4.5 46 800 974.804 1900 -5 46 800 903.119 1900 -5.5 46 800 857.544 1900 -6 46 800 830.376 1900 -6.5 46 800 815.169 1900 -7 46 800 807.165 1900 -7.5 46 800 803.202 1900 -8 46 800 801.353 1900 -8.5 46 800 800.541 1900 -9 46 800 800.205 1900 -9.5 46 800 800.073 1900 -10 46 800 800.025 1900 --10 46.5 800 800.019 1900 --9.5 46.5 800 800.057 1900 --9 46.5 800 800.159 1900 --8.5 46.5 800 800.421 1900 --8 46.5 800 801.054 1900 --7.5 46.5 800 802.493 1900 --7 46.5 800 805.58 1900 --6.5 46.5 800 811.813 1900 --6 46.5 800 823.657 1900 --5.5 46.5 800 844.816 1900 --5 46.5 800 880.309 1900 --4.5 46.5 800 936.138 1900 --4 46.5 800 1018.3 1900 --3.5 46.5 800 1131.14 1900 --3 46.5 800 1275.17 1900 --2.5 46.5 800 1444.98 1900 --2 46.5 800 1628.17 1900 --1.5 46.5 800 1805.93 1900 --1 46.5 800 1955.81 1900 --0.5 46.5 800 2056.25 1900 -0 46.5 800 2091.64 1900 -0.5 46.5 800 2056.25 1900 -1 46.5 800 1955.81 1900 -1.5 46.5 800 1805.93 1900 -2 46.5 800 1628.17 1900 -2.5 46.5 800 1444.98 1900 -3 46.5 800 1275.17 1900 -3.5 46.5 800 1131.14 1900 -4 46.5 800 1018.3 1900 -4.5 46.5 800 936.138 1900 -5 46.5 800 880.309 1900 -5.5 46.5 800 844.816 1900 -6 46.5 800 823.657 1900 -6.5 46.5 800 811.813 1900 -7 46.5 800 805.58 1900 -7.5 46.5 800 802.493 1900 -8 46.5 800 801.054 1900 -8.5 46.5 800 800.421 1900 -9 46.5 800 800.159 1900 -9.5 46.5 800 800.057 1900 -10 46.5 800 800.019 1900 --10 47 800 800.015 1900 --9.5 47 800 800.044 1900 --9 47 800 800.122 1900 --8.5 47 800 800.322 1900 --8 47 800 800.805 1900 --7.5 47 800 801.903 1900 --7 47 800 804.26 1900 --6.5 47 800 809.018 1900 --6 47 800 818.059 1900 --5.5 47 800 834.211 1900 --5 47 800 861.307 1900 --4.5 47 800 903.925 1900 --4 47 800 966.649 1900 --3.5 47 800 1052.79 1900 --3 47 800 1162.73 1900 --2.5 47 800 1292.37 1900 --2 47 800 1432.21 1900 --1.5 47 800 1567.9 1900 --1 47 800 1682.32 1900 --0.5 47 800 1759 1900 -0 47 800 1786.01 1900 -0.5 47 800 1759 1900 -1 47 800 1682.32 1900 -1.5 47 800 1567.9 1900 -2 47 800 1432.21 1900 -2.5 47 800 1292.37 1900 -3 47 800 1162.73 1900 -3.5 47 800 1052.79 1900 -4 47 800 966.649 1900 -4.5 47 800 903.925 1900 -5 47 800 861.307 1900 -5.5 47 800 834.211 1900 -6 47 800 818.059 1900 -6.5 47 800 809.018 1900 -7 47 800 804.26 1900 -7.5 47 800 801.903 1900 -8 47 800 800.805 1900 -8.5 47 800 800.322 1900 -9 47 800 800.122 1900 -9.5 47 800 800.044 1900 -10 47 800 800.015 1900 --10 47.5 800 800.011 1900 --9.5 47.5 800 800.033 1900 --9 47.5 800 800.091 1900 --8.5 47.5 800 800.241 1900 --8 47.5 800 800.602 1900 --7.5 47.5 800 801.424 1900 --7 47.5 800 803.187 1900 --6.5 47.5 800 806.748 1900 --6 47.5 800 813.513 1900 --5.5 47.5 800 825.599 1900 --5 47.5 800 845.874 1900 --4.5 47.5 800 877.763 1900 --4 47.5 800 924.697 1900 --3.5 47.5 800 989.153 1900 --3 47.5 800 1071.42 1900 --2.5 47.5 800 1168.42 1900 --2 47.5 800 1273.06 1900 --1.5 47.5 800 1374.59 1900 --1 47.5 800 1460.21 1900 --0.5 47.5 800 1517.58 1900 -0 47.5 800 1537.79 1900 -0.5 47.5 800 1517.58 1900 -1 47.5 800 1460.21 1900 -1.5 47.5 800 1374.59 1900 -2 47.5 800 1273.06 1900 -2.5 47.5 800 1168.42 1900 -3 47.5 800 1071.42 1900 -3.5 47.5 800 989.153 1900 -4 47.5 800 924.697 1900 -4.5 47.5 800 877.763 1900 -5 47.5 800 845.874 1900 -5.5 47.5 800 825.599 1900 -6 47.5 800 813.513 1900 -6.5 47.5 800 806.748 1900 -7 47.5 800 803.187 1900 -7.5 47.5 800 801.424 1900 -8 47.5 800 800.602 1900 -8.5 47.5 800 800.241 1900 -9 47.5 800 800.091 1900 -9.5 47.5 800 800.033 1900 -10 47.5 800 800.011 1900 --10 48 800 800.008 1900 --9.5 48 800 800.024 1900 --9 48 800 800.067 1900 --8.5 48 800 800.177 1900 --8 48 800 800.442 1900 --7.5 48 800 801.045 1900 --7 48 800 802.338 1900 --6.5 48 800 804.949 1900 --6 48 800 809.911 1900 --5.5 48 800 818.776 1900 --5 48 800 833.646 1900 --4.5 48 800 857.035 1900 --4 48 800 891.459 1900 --3.5 48 800 938.733 1900 --3 48 800 999.072 1900 --2.5 48 800 1070.22 1900 --2 48 800 1146.96 1900 --1.5 48 800 1221.43 1900 --1 48 800 1284.23 1900 --0.5 48 800 1326.31 1900 -0 48 800 1341.13 1900 -0.5 48 800 1326.31 1900 -1 48 800 1284.23 1900 -1.5 48 800 1221.43 1900 -2 48 800 1146.96 1900 -2.5 48 800 1070.22 1900 -3 48 800 999.072 1900 -3.5 48 800 938.733 1900 -4 48 800 891.459 1900 -4.5 48 800 857.035 1900 -5 48 800 833.646 1900 -5.5 48 800 818.776 1900 -6 48 800 809.911 1900 -6.5 48 800 804.949 1900 -7 48 800 802.338 1900 -7.5 48 800 801.045 1900 -8 48 800 800.442 1900 -8.5 48 800 800.177 1900 -9 48 800 800.067 1900 -9.5 48 800 800.024 1900 -10 48 800 800.008 1900 --10 48.5 800 800.006 1900 --9.5 48.5 800 800.017 1900 --9 48.5 800 800.048 1900 --8.5 48.5 800 800.127 1900 --8 48.5 800 800.317 1900 --7.5 48.5 800 800.751 1900 --7 48.5 800 801.681 1900 --6.5 48.5 800 803.558 1900 --6 48.5 800 807.125 1900 --5.5 48.5 800 813.498 1900 --5 48.5 800 824.189 1900 --4.5 48.5 800 841.004 1900 --4 48.5 800 865.752 1900 --3.5 48.5 800 899.739 1900 --3 48.5 800 943.117 1900 --2.5 48.5 800 994.265 1900 --2 48.5 800 1049.44 1900 --1.5 48.5 800 1102.98 1900 --1 48.5 800 1148.12 1900 --0.5 48.5 800 1178.38 1900 -0 48.5 800 1189.03 1900 -0.5 48.5 800 1178.38 1900 -1 48.5 800 1148.12 1900 -1.5 48.5 800 1102.98 1900 -2 48.5 800 1049.44 1900 -2.5 48.5 800 994.265 1900 -3 48.5 800 943.117 1900 -3.5 48.5 800 899.739 1900 -4 48.5 800 865.752 1900 -4.5 48.5 800 841.004 1900 -5 48.5 800 824.189 1900 -5.5 48.5 800 813.498 1900 -6 48.5 800 807.125 1900 -6.5 48.5 800 803.558 1900 -7 48.5 800 801.681 1900 -7.5 48.5 800 800.751 1900 -8 48.5 800 800.317 1900 -8.5 48.5 800 800.127 1900 -9 48.5 800 800.048 1900 -9.5 48.5 800 800.017 1900 -10 48.5 800 800.006 1900 --10 49 800 800.004 1900 --9.5 49 800 800.012 1900 --9 49 800 800.034 1900 --8.5 49 800 800.089 1900 --8 49 800 800.224 1900 --7.5 49 800 800.529 1900 --7 49 800 801.184 1900 --6.5 49 800 802.507 1900 --6 49 800 805.021 1900 --5.5 49 800 809.512 1900 --5 49 800 817.046 1900 --4.5 49 800 828.895 1900 --4 49 800 846.335 1900 --3.5 49 800 870.285 1900 --3 49 800 900.853 1900 --2.5 49 800 936.896 1900 --2 49 800 975.778 1900 --1.5 49 800 1013.51 1900 --1 49 800 1045.32 1900 --0.5 49 800 1066.64 1900 -0 49 800 1074.15 1900 -0.5 49 800 1066.64 1900 -1 49 800 1045.32 1900 -1.5 49 800 1013.51 1900 -2 49 800 975.778 1900 -2.5 49 800 936.896 1900 -3 49 800 900.853 1900 -3.5 49 800 870.285 1900 -4 49 800 846.335 1900 -4.5 49 800 828.895 1900 -5 49 800 817.046 1900 -5.5 49 800 809.512 1900 -6 49 800 805.021 1900 -6.5 49 800 802.507 1900 -7 49 800 801.184 1900 -7.5 49 800 800.529 1900 -8 49 800 800.224 1900 -8.5 49 800 800.089 1900 -9 49 800 800.034 1900 -9.5 49 800 800.012 1900 -10 49 800 800.004 1900 --10 49.5 800 800.003 1900 --9.5 49.5 800 800.008 1900 --9 49.5 800 800.023 1900 --8.5 49.5 800 800.062 1900 --8 49.5 800 800.155 1900 --7.5 49.5 800 800.366 1900 --7 49.5 800 800.818 1900 --6.5 49.5 800 801.732 1900 --6 49.5 800 803.468 1900 --5.5 49.5 800 806.57 1900 --5 49.5 800 811.774 1900 --4.5 49.5 800 819.959 1900 --4 49.5 800 832.005 1900 --3.5 49.5 800 848.548 1900 --3 49.5 800 869.663 1900 --2.5 49.5 800 894.559 1900 --2 49.5 800 921.416 1900 --1.5 49.5 800 947.476 1900 --1 49.5 800 969.449 1900 --0.5 49.5 800 984.175 1900 -0 49.5 800 989.363 1900 -0.5 49.5 800 984.175 1900 -1 49.5 800 969.449 1900 -1.5 49.5 800 947.476 1900 -2 49.5 800 921.416 1900 -2.5 49.5 800 894.559 1900 -3 49.5 800 869.663 1900 -3.5 49.5 800 848.548 1900 -4 49.5 800 832.005 1900 -4.5 49.5 800 819.959 1900 -5 49.5 800 811.774 1900 -5.5 49.5 800 806.57 1900 -6 49.5 800 803.468 1900 -6.5 49.5 800 801.732 1900 -7 49.5 800 800.818 1900 -7.5 49.5 800 800.366 1900 -8 49.5 800 800.155 1900 -8.5 49.5 800 800.062 1900 -9 49.5 800 800.023 1900 -9.5 49.5 800 800.008 1900 -10 49.5 800 800.003 1900 --10 50 800 800.002 1900 --9.5 50 800 800.006 1900 --9 50 800 800.016 1900 --8.5 50 800 800.042 1900 --8 50 800 800.105 1900 --7.5 50 800 800.248 1900 --7 50 800 800.554 1900 --6.5 50 800 801.173 1900 --6 50 800 802.348 1900 --5.5 50 800 804.448 1900 --5 50 800 807.972 1900 --4.5 50 800 813.513 1900 --4 50 800 821.669 1900 --3.5 50 800 832.87 1900 --3 50 800 847.166 1900 --2.5 50 800 864.022 1900 --2 50 800 882.205 1900 --1.5 50 800 899.85 1900 --1 50 800 914.727 1900 --0.5 50 800 924.697 1900 -0 50 800 928.209 1900 -0.5 50 800 924.697 1900 -1 50 800 914.727 1900 -1.5 50 800 899.85 1900 -2 50 800 882.205 1900 -2.5 50 800 864.022 1900 -3 50 800 847.166 1900 -3.5 50 800 832.87 1900 -4 50 800 821.669 1900 -4.5 50 800 813.513 1900 -5 50 800 807.972 1900 -5.5 50 800 804.448 1900 -6 50 800 802.348 1900 -6.5 50 800 801.173 1900 -7 50 800 800.554 1900 -7.5 50 800 800.248 1900 -8 50 800 800.105 1900 -8.5 50 800 800.042 1900 -9 50 800 800.016 1900 -9.5 50 800 800.006 1900 -10 50 800 800.002 1900 diff --git a/dep/tesseroids/cookbook/tesslayers/makelayers.py b/dep/tesseroids/cookbook/tesslayers/makelayers.py deleted file mode 100755 index d4342d2..0000000 --- a/dep/tesseroids/cookbook/tesslayers/makelayers.py +++ /dev/null @@ -1,34 +0,0 @@ -import numpy as np -import fatiando as ft - -shape = (41, 41) -x, y = ft.grd.regular((-10, 10, 30, 50), shape) -height = 800 - 1000*ft.utils.gaussian2d(x, y, 3, 1, x0=0, y0=37) -rel = -7000*ft.utils.gaussian2d(x, y, 3, 5, x0=0, y0=40) -thick = height - rel -dens = 1900*np.ones_like(thick) -data = np.transpose([x, y, height, thick, dens]) -with open('layers.txt', 'w') as f: - f.write("# Synthetic layer model of sediments and topography\n") - f.write("# Columns are:\n") - f.write("# lon lat height thickness density\n") - np.savetxt(f, data, fmt='%g') -ft.vis.figure(figsize=(4, 3)) -ft.vis.title('Depth of sediments [m]') -ft.vis.axis('scaled') -ft.vis.pcolor(x, y, rel, shape) -ft.vis.colorbar() -ft.vis.savefig('depth.png') -ft.vis.figure(figsize=(4, 3)) -ft.vis.title('Topography [m]') -ft.vis.axis('scaled') -ft.vis.pcolor(x, y, height, shape) -ft.vis.colorbar() -ft.vis.savefig('topography.png') -ft.vis.figure(figsize=(4, 3)) -ft.vis.title('Thickness of sediment layer [m]') -ft.vis.axis('scaled') -ft.vis.pcolor(x, y, thick, shape) -ft.vis.colorbar() -ft.vis.savefig('thickness.png') -ft.vis.show() diff --git a/dep/tesseroids/cookbook/tesslayers/plot.py b/dep/tesseroids/cookbook/tesslayers/plot.py deleted file mode 100755 index bdbef0b..0000000 --- a/dep/tesseroids/cookbook/tesslayers/plot.py +++ /dev/null @@ -1,20 +0,0 @@ -""" -Plot the columns of the output files -""" -import sys -import pylab - -data = pylab.loadtxt(sys.argv[1], unpack=True) -shape = (int(sys.argv[2]), int(sys.argv[3])) -lon = pylab.reshape(data[0], shape) -lat = pylab.reshape(data[1], shape) -for i, value in enumerate(data[3:]): - value = pylab.reshape(value, shape) - pylab.figure(figsize=(4, 3)) - pylab.axis('scaled') - pylab.title("Column %d" % (i + 4)) - pylab.pcolor(lon, lat, value) - pylab.colorbar() - pylab.xlim(lon.min(), lon.max()) - pylab.ylim(lat.min(), lat.max()) - pylab.savefig('column%d.png' % (i + 4)) diff --git a/dep/tesseroids/cookbook/tesslayers/sample-tessmodel.txt b/dep/tesseroids/cookbook/tesslayers/sample-tessmodel.txt deleted file mode 100755 index 8a871dc..0000000 --- a/dep/tesseroids/cookbook/tesslayers/sample-tessmodel.txt +++ /dev/null @@ -1,1684 +0,0 @@ -# Tesseroid model generated by tesslayers 1.1dev: -# local time: Fri Jul 20 18:02:45 2012 -# grid spacing (size of tesseroids): 0.5 deg lon / 0.5 deg lat --10.25 -9.75 29.75 30.25 800 -0.00200000032782555 1900 --9.75 -9.25 29.75 30.25 800 -0.00600000005215406 1900 --9.25 -8.75 29.75 30.25 800 -0.0159999998286366 1900 --8.75 -8.25 29.75 30.25 800 -0.0420000003650784 1900 --8.25 -7.75 29.75 30.25 800 -0.105000000447035 1900 --7.75 -7.25 29.75 30.25 800 -0.247999999672174 1900 --7.25 -6.75 29.75 30.25 800 -0.553999999538064 1900 --6.75 -6.25 29.75 30.25 800 -1.17300000041723 1900 --6.25 -5.75 29.75 30.25 800 -2.34800000023097 1900 --5.75 -5.25 29.75 30.25 800 -4.44799999985844 1900 --5.25 -4.75 29.75 30.25 800 -7.97200000006706 1900 --4.75 -4.25 29.75 30.25 800 -13.5130000002682 1900 --4.25 -3.75 29.75 30.25 800 -21.6689999997616 1900 --3.75 -3.25 29.75 30.25 800 -32.8700000001118 1900 --3.25 -2.75 29.75 30.25 800 -47.1660000002012 1900 --2.75 -2.25 29.75 30.25 800 -64.0219999998808 1900 --2.25 -1.75 29.75 30.25 800 -82.2050000000745 1900 --1.75 -1.25 29.75 30.25 800 -99.8499999996275 1900 --1.25 -0.75 29.75 30.25 800 -114.726999999955 1900 --0.75 -0.25 29.75 30.25 800 -124.696999999695 1900 --0.25 0.25 29.75 30.25 800 -128.208999999799 1900 -0.25 0.75 29.75 30.25 800 -124.696999999695 1900 -0.75 1.25 29.75 30.25 800 -114.726999999955 1900 -1.25 1.75 29.75 30.25 800 -99.8499999996275 1900 -1.75 2.25 29.75 30.25 800 -82.2050000000745 1900 -2.25 2.75 29.75 30.25 800 -64.0219999998808 1900 -2.75 3.25 29.75 30.25 800 -47.1660000002012 1900 -3.25 3.75 29.75 30.25 800 -32.8700000001118 1900 -3.75 4.25 29.75 30.25 800 -21.6689999997616 1900 -4.25 4.75 29.75 30.25 800 -13.5130000002682 1900 -4.75 5.25 29.75 30.25 800 -7.97200000006706 1900 -5.25 5.75 29.75 30.25 800 -4.44799999985844 1900 -5.75 6.25 29.75 30.25 800 -2.34800000023097 1900 -6.25 6.75 29.75 30.25 800 -1.17300000041723 1900 -6.75 7.25 29.75 30.25 800 -0.553999999538064 1900 -7.25 7.75 29.75 30.25 800 -0.247999999672174 1900 -7.75 8.25 29.75 30.25 800 -0.105000000447035 1900 -8.25 8.75 29.75 30.25 800 -0.0420000003650784 1900 -8.75 9.25 29.75 30.25 800 -0.0159999998286366 1900 -9.25 9.75 29.75 30.25 800 -0.00600000005215406 1900 -9.75 10.25 29.75 30.25 800 -0.00200000032782555 1900 --10.25 -9.75 30.25 30.75 800 -0.00299999956041574 1900 --9.75 -9.25 30.25 30.75 800 -0.00800000037997961 1900 --9.25 -8.75 30.25 30.75 800 -0.0230000000447035 1900 --8.75 -8.25 30.25 30.75 800 -0.0619999999180436 1900 --8.25 -7.75 30.25 30.75 800 -0.15500000026077 1900 --7.75 -7.25 30.25 30.75 800 -0.36600000038743 1900 --7.25 -6.75 30.25 30.75 800 -0.817999999970198 1900 --6.75 -6.25 30.25 30.75 800 -1.73199999984354 1900 --6.25 -5.75 30.25 30.75 800 -3.46800000034273 1900 --5.75 -5.25 30.25 30.75 800 -6.57000000029802 1900 --5.25 -4.75 30.25 30.75 800 -11.7740000002086 1900 --4.75 -4.25 30.25 30.75 800 -19.9589999997988 1900 --4.25 -3.75 30.25 30.75 800 -32.0049999998882 1900 --3.75 -3.25 30.25 30.75 800 -48.5480000004172 1900 --3.25 -2.75 30.25 30.75 800 -69.6629999997094 1900 --2.75 -2.25 30.25 30.75 800 -94.5590000003576 1900 --2.25 -1.75 30.25 30.75 800 -121.416000000201 1900 --1.75 -1.25 30.25 30.75 800 -147.475999999791 1900 --1.25 -0.75 30.25 30.75 800 -169.449000000022 1900 --0.75 -0.25 30.25 30.75 800 -184.174999999814 1900 --0.25 0.25 30.25 30.75 800 -189.362999999896 1900 -0.25 0.75 30.25 30.75 800 -184.174999999814 1900 -0.75 1.25 30.25 30.75 800 -169.449000000022 1900 -1.25 1.75 30.25 30.75 800 -147.475999999791 1900 -1.75 2.25 30.25 30.75 800 -121.416000000201 1900 -2.25 2.75 30.25 30.75 800 -94.5590000003576 1900 -2.75 3.25 30.25 30.75 800 -69.6629999997094 1900 -3.25 3.75 30.25 30.75 800 -48.5480000004172 1900 -3.75 4.25 30.25 30.75 800 -32.0049999998882 1900 -4.25 4.75 30.25 30.75 800 -19.9589999997988 1900 -4.75 5.25 30.25 30.75 800 -11.7740000002086 1900 -5.25 5.75 30.25 30.75 800 -6.57000000029802 1900 -5.75 6.25 30.25 30.75 800 -3.46800000034273 1900 -6.25 6.75 30.25 30.75 800 -1.73199999984354 1900 -6.75 7.25 30.25 30.75 800 -0.817999999970198 1900 -7.25 7.75 30.25 30.75 800 -0.36600000038743 1900 -7.75 8.25 30.25 30.75 800 -0.15500000026077 1900 -8.25 8.75 30.25 30.75 800 -0.0619999999180436 1900 -8.75 9.25 30.25 30.75 800 -0.0230000000447035 1900 -9.25 9.75 30.25 30.75 800 -0.00800000037997961 1900 -9.75 10.25 30.25 30.75 800 -0.00299999956041574 1900 --10.25 -9.75 30.75 31.25 800 -0.00399999972432852 1900 --9.75 -9.25 30.75 31.25 800 -0.0120000001043081 1900 --9.25 -8.75 30.75 31.25 800 -0.0339999999850988 1900 --8.75 -8.25 30.75 31.25 800 -0.0889999996870756 1900 --8.25 -7.75 30.75 31.25 800 -0.224000000394881 1900 --7.75 -7.25 30.75 31.25 800 -0.529000000096858 1900 --7.25 -6.75 30.75 31.25 800 -1.18400000035763 1900 --6.75 -6.25 30.75 31.25 800 -2.50700000021607 1900 --6.25 -5.75 30.75 31.25 800 -5.02099999971688 1900 --5.75 -5.25 30.75 31.25 800 -9.51200000010431 1900 --5.25 -4.75 30.75 31.25 800 -17.0460000000894 1900 --4.75 -4.25 30.75 31.25 800 -28.894999999553 1900 --4.25 -3.75 30.75 31.25 800 -46.3349999999627 1900 --3.75 -3.25 30.75 31.25 800 -70.285000000149 1900 --3.25 -2.75 30.75 31.25 800 -100.853000000119 1900 --2.75 -2.25 30.75 31.25 800 -136.895999999717 1900 --2.25 -1.75 30.75 31.25 800 -175.777999999933 1900 --1.75 -1.25 30.75 31.25 800 -213.509999999776 1900 --1.25 -0.75 30.75 31.25 800 -245.320000000298 1900 --0.75 -0.25 30.75 31.25 800 -266.639999999665 1900 --0.25 0.25 30.75 31.25 800 -274.150000000373 1900 -0.25 0.75 30.75 31.25 800 -266.639999999665 1900 -0.75 1.25 30.75 31.25 800 -245.320000000298 1900 -1.25 1.75 30.75 31.25 800 -213.509999999776 1900 -1.75 2.25 30.75 31.25 800 -175.777999999933 1900 -2.25 2.75 30.75 31.25 800 -136.895999999717 1900 -2.75 3.25 30.75 31.25 800 -100.853000000119 1900 -3.25 3.75 30.75 31.25 800 -70.285000000149 1900 -3.75 4.25 30.75 31.25 800 -46.3349999999627 1900 -4.25 4.75 30.75 31.25 800 -28.894999999553 1900 -4.75 5.25 30.75 31.25 800 -17.0460000000894 1900 -5.25 5.75 30.75 31.25 800 -9.51200000010431 1900 -5.75 6.25 30.75 31.25 800 -5.02099999971688 1900 -6.25 6.75 30.75 31.25 800 -2.50700000021607 1900 -6.75 7.25 30.75 31.25 800 -1.18400000035763 1900 -7.25 7.75 30.75 31.25 800 -0.529000000096858 1900 -7.75 8.25 30.75 31.25 800 -0.224000000394881 1900 -8.25 8.75 30.75 31.25 800 -0.0889999996870756 1900 -8.75 9.25 30.75 31.25 800 -0.0339999999850988 1900 -9.25 9.75 30.75 31.25 800 -0.0120000001043081 1900 -9.75 10.25 30.75 31.25 800 -0.00399999972432852 1900 --10.25 -9.75 31.25 31.75 800 -0.00600000005215406 1900 --9.75 -9.25 31.25 31.75 800 -0.0169999999925494 1900 --9.25 -8.75 31.25 31.75 800 -0.0480000004172325 1900 --8.75 -8.25 31.25 31.75 800 -0.127000000327826 1900 --8.25 -7.75 31.25 31.75 800 -0.316999999806285 1900 --7.75 -7.25 31.25 31.75 800 -0.751000000163913 1900 --7.25 -6.75 31.25 31.75 800 -1.68099999986589 1900 --6.75 -6.25 31.25 31.75 800 -3.55800000019372 1900 --6.25 -5.75 31.25 31.75 800 -7.125 1900 --5.75 -5.25 31.25 31.75 800 -13.4979999996722 1900 --5.25 -4.75 31.25 31.75 800 -24.1890000002459 1900 --4.75 -4.25 31.25 31.75 800 -41.0039999997243 1900 --4.25 -3.75 31.25 31.75 800 -65.7520000003278 1900 --3.75 -3.25 31.25 31.75 800 -99.7390000000596 1900 --3.25 -2.75 31.25 31.75 800 -143.11699999962 1900 --2.75 -2.25 31.25 31.75 800 -194.264999999665 1900 --2.25 -1.75 31.25 31.75 800 -249.44000000041 1900 --1.75 -1.25 31.25 31.75 800 -302.980000000447 1900 --1.25 -0.75 31.25 31.75 800 -348.120000000112 1900 --0.75 -0.25 31.25 31.75 800 -378.379999999888 1900 --0.25 0.25 31.25 31.75 800 -389.030000000261 1900 -0.25 0.75 31.25 31.75 800 -378.379999999888 1900 -0.75 1.25 31.25 31.75 800 -348.120000000112 1900 -1.25 1.75 31.25 31.75 800 -302.980000000447 1900 -1.75 2.25 31.25 31.75 800 -249.44000000041 1900 -2.25 2.75 31.25 31.75 800 -194.264999999665 1900 -2.75 3.25 31.25 31.75 800 -143.11699999962 1900 -3.25 3.75 31.25 31.75 800 -99.7390000000596 1900 -3.75 4.25 31.25 31.75 800 -65.7520000003278 1900 -4.25 4.75 31.25 31.75 800 -41.0039999997243 1900 -4.75 5.25 31.25 31.75 800 -24.1890000002459 1900 -5.25 5.75 31.25 31.75 800 -13.4979999996722 1900 -5.75 6.25 31.25 31.75 800 -7.125 1900 -6.25 6.75 31.25 31.75 800 -3.55800000019372 1900 -6.75 7.25 31.25 31.75 800 -1.68099999986589 1900 -7.25 7.75 31.25 31.75 800 -0.751000000163913 1900 -7.75 8.25 31.25 31.75 800 -0.316999999806285 1900 -8.25 8.75 31.25 31.75 800 -0.127000000327826 1900 -8.75 9.25 31.25 31.75 800 -0.0480000004172325 1900 -9.25 9.75 31.25 31.75 800 -0.0169999999925494 1900 -9.75 10.25 31.25 31.75 800 -0.00600000005215406 1900 --10.25 -9.75 31.75 32.25 800 -0.00800000037997961 1900 --9.75 -9.25 31.75 32.25 800 -0.0240000002086163 1900 --9.25 -8.75 31.75 32.25 800 -0.0669999998062849 1900 --8.75 -8.25 31.75 32.25 800 -0.177000000141561 1900 --8.25 -7.75 31.75 32.25 800 -0.441999999806285 1900 --7.75 -7.25 31.75 32.25 800 -1.04499999992549 1900 --7.25 -6.75 31.75 32.25 800 -2.33800000045449 1900 --6.75 -6.25 31.75 32.25 800 -4.94900000002235 1900 --6.25 -5.75 31.75 32.25 800 -9.91100000031292 1900 --5.75 -5.25 31.75 32.25 800 -18.7759999996051 1900 --5.25 -4.75 31.75 32.25 800 -33.6459999997169 1900 --4.75 -4.25 31.75 32.25 800 -57.035000000149 1900 --4.25 -3.75 31.75 32.25 800 -91.4589999997988 1900 --3.75 -3.25 31.75 32.25 800 -138.733000000007 1900 --3.25 -2.75 31.75 32.25 800 -199.071999999695 1900 --2.75 -2.25 31.75 32.25 800 -270.219999999739 1900 --2.25 -1.75 31.75 32.25 800 -346.959999999963 1900 --1.75 -1.25 31.75 32.25 800 -421.429999999702 1900 --1.25 -0.75 31.75 32.25 800 -484.230000000447 1900 --0.75 -0.25 31.75 32.25 800 -526.30999999959 1900 --0.25 0.25 31.75 32.25 800 -541.129999999888 1900 -0.25 0.75 31.75 32.25 800 -526.30999999959 1900 -0.75 1.25 31.75 32.25 800 -484.230000000447 1900 -1.25 1.75 31.75 32.25 800 -421.429999999702 1900 -1.75 2.25 31.75 32.25 800 -346.959999999963 1900 -2.25 2.75 31.75 32.25 800 -270.219999999739 1900 -2.75 3.25 31.75 32.25 800 -199.071999999695 1900 -3.25 3.75 31.75 32.25 800 -138.733000000007 1900 -3.75 4.25 31.75 32.25 800 -91.4589999997988 1900 -4.25 4.75 31.75 32.25 800 -57.035000000149 1900 -4.75 5.25 31.75 32.25 800 -33.6459999997169 1900 -5.25 5.75 31.75 32.25 800 -18.7759999996051 1900 -5.75 6.25 31.75 32.25 800 -9.91100000031292 1900 -6.25 6.75 31.75 32.25 800 -4.94900000002235 1900 -6.75 7.25 31.75 32.25 800 -2.33800000045449 1900 -7.25 7.75 31.75 32.25 800 -1.04499999992549 1900 -7.75 8.25 31.75 32.25 800 -0.441999999806285 1900 -8.25 8.75 31.75 32.25 800 -0.177000000141561 1900 -8.75 9.25 31.75 32.25 800 -0.0669999998062849 1900 -9.25 9.75 31.75 32.25 800 -0.0240000002086163 1900 -9.75 10.25 31.75 32.25 800 -0.00800000037997961 1900 --10.25 -9.75 32.25 32.75 800 -0.0109999999403954 1900 --9.75 -9.25 32.25 32.75 800 -0.0329999998211861 1900 --9.25 -8.75 32.25 32.75 800 -0.0910000000149012 1900 --8.75 -8.25 32.25 32.75 800 -0.24100000038743 1900 --8.25 -7.75 32.25 32.75 800 -0.601999999955297 1900 --7.75 -7.25 32.25 32.75 800 -1.42399999964982 1900 --7.25 -6.75 32.25 32.75 800 -3.18699999991804 1900 --6.75 -6.25 32.25 32.75 800 -6.74799999967217 1900 --6.25 -5.75 32.25 32.75 800 -13.5130000002682 1900 --5.75 -5.25 32.25 32.75 800 -25.5990000003949 1900 --5.25 -4.75 32.25 32.75 800 -45.8739999998361 1900 --4.75 -4.25 32.25 32.75 800 -77.7630000002682 1900 --4.25 -3.75 32.25 32.75 800 -124.696999999695 1900 --3.75 -3.25 32.25 32.75 800 -189.152999999933 1900 --3.25 -2.75 32.25 32.75 800 -271.419999999925 1900 --2.75 -2.25 32.25 32.75 800 -368.419999999925 1900 --2.25 -1.75 32.25 32.75 800 -473.05999999959 1900 --1.75 -1.25 32.25 32.75 800 -574.589999999851 1900 --1.25 -0.75 32.25 32.75 800 -660.209999999963 1900 --0.75 -0.25 32.25 32.75 800 -717.580000000075 1900 --0.25 0.25 32.25 32.75 800 -737.790000000037 1900 -0.25 0.75 32.25 32.75 800 -717.580000000075 1900 -0.75 1.25 32.25 32.75 800 -660.209999999963 1900 -1.25 1.75 32.25 32.75 800 -574.589999999851 1900 -1.75 2.25 32.25 32.75 800 -473.05999999959 1900 -2.25 2.75 32.25 32.75 800 -368.419999999925 1900 -2.75 3.25 32.25 32.75 800 -271.419999999925 1900 -3.25 3.75 32.25 32.75 800 -189.152999999933 1900 -3.75 4.25 32.25 32.75 800 -124.696999999695 1900 -4.25 4.75 32.25 32.75 800 -77.7630000002682 1900 -4.75 5.25 32.25 32.75 800 -45.8739999998361 1900 -5.25 5.75 32.25 32.75 800 -25.5990000003949 1900 -5.75 6.25 32.25 32.75 800 -13.5130000002682 1900 -6.25 6.75 32.25 32.75 800 -6.74799999967217 1900 -6.75 7.25 32.25 32.75 800 -3.18699999991804 1900 -7.25 7.75 32.25 32.75 800 -1.42399999964982 1900 -7.75 8.25 32.25 32.75 800 -0.601999999955297 1900 -8.25 8.75 32.25 32.75 800 -0.24100000038743 1900 -8.75 9.25 32.25 32.75 800 -0.0910000000149012 1900 -9.25 9.75 32.25 32.75 800 -0.0329999998211861 1900 -9.75 10.25 32.25 32.75 800 -0.0109999999403954 1900 --10.25 -9.75 32.75 33.25 800 -0.0149999996647239 1900 --9.75 -9.25 32.75 33.25 800 -0.0439999997615814 1900 --9.25 -8.75 32.75 33.25 800 -0.122000000439584 1900 --8.75 -8.25 32.75 33.25 800 -0.321999999694526 1900 --8.25 -7.75 32.75 33.25 800 -0.804999999701977 1900 --7.75 -7.25 32.75 33.25 800 -1.90299999993294 1900 --7.25 -6.75 32.75 33.25 800 -4.25999999977648 1900 --6.75 -6.25 32.75 33.25 800 -9.01800000015646 1900 --6.25 -5.75 32.75 33.25 800 -18.0590000003576 1900 --5.75 -5.25 32.75 33.25 800 -34.2110000001267 1900 --5.25 -4.75 32.75 33.25 800 -61.3070000000298 1900 --4.75 -4.25 32.75 33.25 800 -103.924999999814 1900 --4.25 -3.75 32.75 33.25 800 -166.649000000209 1900 --3.75 -3.25 32.75 33.25 800 -252.790000000037 1900 --3.25 -2.75 32.75 33.25 800 -362.730000000447 1900 --2.75 -2.25 32.75 33.25 800 -492.370000000112 1900 --2.25 -1.75 32.75 33.25 800 -632.209999999963 1900 --1.75 -1.25 32.75 33.25 800 -767.900000000373 1900 --1.25 -0.75 32.75 33.25 800 -882.320000000298 1900 --0.75 -0.25 32.75 33.25 800 -959 1900 --0.25 0.25 32.75 33.25 800 -986.009999999776 1900 -0.25 0.75 32.75 33.25 800 -959 1900 -0.75 1.25 32.75 33.25 800 -882.320000000298 1900 -1.25 1.75 32.75 33.25 800 -767.900000000373 1900 -1.75 2.25 32.75 33.25 800 -632.209999999963 1900 -2.25 2.75 32.75 33.25 800 -492.370000000112 1900 -2.75 3.25 32.75 33.25 800 -362.730000000447 1900 -3.25 3.75 32.75 33.25 800 -252.790000000037 1900 -3.75 4.25 32.75 33.25 800 -166.649000000209 1900 -4.25 4.75 32.75 33.25 800 -103.924999999814 1900 -4.75 5.25 32.75 33.25 800 -61.3070000000298 1900 -5.25 5.75 32.75 33.25 800 -34.2110000001267 1900 -5.75 6.25 32.75 33.25 800 -18.0590000003576 1900 -6.25 6.75 32.75 33.25 800 -9.01800000015646 1900 -6.75 7.25 32.75 33.25 800 -4.25999999977648 1900 -7.25 7.75 32.75 33.25 800 -1.90299999993294 1900 -7.75 8.25 32.75 33.25 800 -0.804999999701977 1900 -8.25 8.75 32.75 33.25 800 -0.321999999694526 1900 -8.75 9.25 32.75 33.25 800 -0.122000000439584 1900 -9.25 9.75 32.75 33.25 800 -0.0439999997615814 1900 -9.75 10.25 32.75 33.25 800 -0.0149999996647239 1900 --10.25 -9.75 33.25 33.75 800 -0.019000000320375 1900 --9.75 -9.25 33.25 33.75 800 -0.0570000000298023 1900 --9.25 -8.75 33.25 33.75 800 -0.158999999985099 1900 --8.75 -8.25 33.25 33.75 800 -0.421000000089407 1900 --8.25 -7.75 33.25 33.75 800 -1.05399999953806 1900 --7.75 -7.25 33.25 33.75 800 -2.49299999978393 1900 --7.25 -6.75 33.25 33.75 800 -5.58000000007451 1900 --6.75 -6.25 33.25 33.75 800 -11.813000000082 1900 --6.25 -5.75 33.25 33.75 800 -23.6569999996573 1900 --5.75 -5.25 33.25 33.75 800 -44.8150000004098 1900 --5.25 -4.75 33.25 33.75 800 -80.3090000003576 1900 --4.75 -4.25 33.25 33.75 799.998999999836 -136.138000000268 1900 --4.25 -3.75 33.25 33.75 799.998999999836 -218.300999999978 1900 --3.75 -3.25 33.25 33.75 799.998999999836 -331.140999999829 1900 --3.25 -2.75 33.25 33.75 799.997999999672 -475.162000000477 1900 --2.75 -2.25 33.25 33.75 799.997999999672 -644.982000000775 1900 --2.25 -1.75 33.25 33.75 799.99700000044 -828.172999999486 1900 --1.75 -1.25 33.25 33.75 799.996000000276 -1005.92399999965 1900 --1.25 -0.75 33.25 33.75 799.996000000276 -1155.80399999954 1900 --0.75 -0.25 33.25 33.75 799.995000000112 -1256.25499999989 1900 --0.25 0.25 33.25 33.75 799.995000000112 -1291.63499999978 1900 -0.25 0.75 33.25 33.75 799.995000000112 -1256.25499999989 1900 -0.75 1.25 33.25 33.75 799.996000000276 -1155.80399999954 1900 -1.25 1.75 33.25 33.75 799.996000000276 -1005.92399999965 1900 -1.75 2.25 33.25 33.75 799.99700000044 -828.172999999486 1900 -2.25 2.75 33.25 33.75 799.997999999672 -644.982000000775 1900 -2.75 3.25 33.25 33.75 799.997999999672 -475.162000000477 1900 -3.25 3.75 33.25 33.75 799.998999999836 -331.140999999829 1900 -3.75 4.25 33.25 33.75 799.998999999836 -218.300999999978 1900 -4.25 4.75 33.25 33.75 799.998999999836 -136.138000000268 1900 -4.75 5.25 33.25 33.75 800 -80.3090000003576 1900 -5.25 5.75 33.25 33.75 800 -44.8150000004098 1900 -5.75 6.25 33.25 33.75 800 -23.6569999996573 1900 -6.25 6.75 33.25 33.75 800 -11.813000000082 1900 -6.75 7.25 33.25 33.75 800 -5.58000000007451 1900 -7.25 7.75 33.25 33.75 800 -2.49299999978393 1900 -7.75 8.25 33.25 33.75 800 -1.05399999953806 1900 -8.25 8.75 33.25 33.75 800 -0.421000000089407 1900 -8.75 9.25 33.25 33.75 800 -0.158999999985099 1900 -9.25 9.75 33.25 33.75 800 -0.0570000000298023 1900 -9.75 10.25 33.25 33.75 800 -0.019000000320375 1900 --10.25 -9.75 33.75 34.25 800 -0.025000000372529 1900 --9.75 -9.25 33.75 34.25 800 -0.072999999858439 1900 --9.25 -8.75 33.75 34.25 800 -0.205000000074506 1900 --8.75 -8.25 33.75 34.25 800 -0.541000000201166 1900 --8.25 -7.75 33.75 34.25 800 -1.35300000011921 1900 --7.75 -7.25 33.75 34.25 800 -3.20100000035018 1900 --7.25 -6.75 33.75 34.25 799.998999999836 -7.16600000020117 1900 --6.75 -6.25 33.75 34.25 799.998999999836 -15.168000000529 1900 --6.25 -5.75 33.75 34.25 799.997999999672 -30.3760000001639 1900 --5.75 -5.25 33.75 34.25 799.996000000276 -57.5439999997616 1900 --5.25 -4.75 33.75 34.25 799.99199999962 -103.120000000112 1900 --4.75 -4.25 33.75 34.25 799.986999999732 -174.804000000469 1900 --4.25 -3.75 33.75 34.25 799.979000000283 -280.310999999754 1900 --3.75 -3.25 33.75 34.25 799.968000000343 -425.201999999583 1900 --3.25 -2.75 33.75 34.25 799.955000000075 -610.125 1900 --2.75 -2.25 33.75 34.25 799.938000000082 -828.172000000253 1900 --2.25 -1.75 33.75 34.25 799.921000000089 -1063.3889999995 1900 --1.75 -1.25 33.75 34.25 799.904000000097 -1291.63599999994 1900 --1.25 -0.75 33.75 34.25 799.889999999665 -1484.09000000078 1900 --0.75 -0.25 33.75 34.25 799.879999999888 -1613.06000000052 1900 --0.25 0.25 33.75 34.25 799.877000000328 -1658.49299999978 1900 -0.25 0.75 33.75 34.25 799.879999999888 -1613.06000000052 1900 -0.75 1.25 33.75 34.25 799.889999999665 -1484.09000000078 1900 -1.25 1.75 33.75 34.25 799.904000000097 -1291.63599999994 1900 -1.75 2.25 33.75 34.25 799.921000000089 -1063.3889999995 1900 -2.25 2.75 33.75 34.25 799.938000000082 -828.172000000253 1900 -2.75 3.25 33.75 34.25 799.955000000075 -610.125 1900 -3.25 3.75 33.75 34.25 799.968000000343 -425.201999999583 1900 -3.75 4.25 33.75 34.25 799.979000000283 -280.310999999754 1900 -4.25 4.75 33.75 34.25 799.986999999732 -174.804000000469 1900 -4.75 5.25 33.75 34.25 799.99199999962 -103.120000000112 1900 -5.25 5.75 33.75 34.25 799.996000000276 -57.5439999997616 1900 -5.75 6.25 33.75 34.25 799.997999999672 -30.3760000001639 1900 -6.25 6.75 33.75 34.25 799.998999999836 -15.168000000529 1900 -6.75 7.25 33.75 34.25 799.998999999836 -7.16600000020117 1900 -7.25 7.75 33.75 34.25 800 -3.20100000035018 1900 -7.75 8.25 33.75 34.25 800 -1.35300000011921 1900 -8.25 8.75 33.75 34.25 800 -0.541000000201166 1900 -8.75 9.25 33.75 34.25 800 -0.205000000074506 1900 -9.25 9.75 33.75 34.25 800 -0.072999999858439 1900 -9.75 10.25 33.75 34.25 800 -0.025000000372529 1900 --10.25 -9.75 34.25 34.75 800 -0.0310000004246831 1900 --9.75 -9.25 34.25 34.75 800 -0.0920000001788139 1900 --9.25 -8.75 34.25 34.75 800 -0.257000000216067 1900 --8.75 -8.25 34.25 34.75 799.998999999836 -0.68099999986589 1900 --8.25 -7.75 34.25 34.75 799.997999999672 -1.70399999991059 1900 --7.75 -7.25 34.25 34.75 799.996000000276 -4.02999999932945 1900 --7.25 -6.75 34.25 34.75 799.99199999962 -9.01800000015646 1900 --6.75 -6.25 34.25 34.75 799.981999999844 -19.0910000000149 1900 --6.25 -5.75 34.25 34.75 799.964999999851 -38.2310000006109 1900 --5.75 -5.25 34.25 34.75 799.933000000194 -72.4249999998137 1900 --5.25 -4.75 34.25 34.75 799.879999999888 -129.786000000313 1900 --4.75 -4.25 34.25 34.75 799.797000000253 -220.00299999956 1900 --4.25 -3.75 34.25 34.75 799.67399999965 -352.796000000089 1900 --3.75 -3.25 34.25 34.75 799.504999999888 -535.155000000261 1900 --3.25 -2.75 34.25 34.75 799.290000000037 -767.900000000373 1900 --2.75 -2.25 34.25 34.75 799.036000000313 -1042.3339999998 1900 --2.25 -1.75 34.25 34.75 798.762000000104 -1338.38800000027 1900 --1.75 -1.25 34.25 34.75 798.49700000044 -1625.65299999993 1900 --1.25 -0.75 34.25 34.75 798.273000000045 -1867.86699999962 1900 --0.75 -0.25 34.25 34.75 798.12200000044 -2030.19799999986 1900 --0.25 0.25 34.25 34.75 798.070000000298 -2087.37999999989 1900 -0.25 0.75 34.25 34.75 798.12200000044 -2030.19799999986 1900 -0.75 1.25 34.25 34.75 798.273000000045 -1867.86699999962 1900 -1.25 1.75 34.25 34.75 798.49700000044 -1625.65299999993 1900 -1.75 2.25 34.25 34.75 798.762000000104 -1338.38800000027 1900 -2.25 2.75 34.25 34.75 799.036000000313 -1042.3339999998 1900 -2.75 3.25 34.25 34.75 799.290000000037 -767.900000000373 1900 -3.25 3.75 34.25 34.75 799.504999999888 -535.155000000261 1900 -3.75 4.25 34.25 34.75 799.67399999965 -352.796000000089 1900 -4.25 4.75 34.25 34.75 799.797000000253 -220.00299999956 1900 -4.75 5.25 34.25 34.75 799.879999999888 -129.786000000313 1900 -5.25 5.75 34.25 34.75 799.933000000194 -72.4249999998137 1900 -5.75 6.25 34.25 34.75 799.964999999851 -38.2310000006109 1900 -6.25 6.75 34.25 34.75 799.981999999844 -19.0910000000149 1900 -6.75 7.25 34.25 34.75 799.99199999962 -9.01800000015646 1900 -7.25 7.75 34.25 34.75 799.996000000276 -4.02999999932945 1900 -7.75 8.25 34.25 34.75 799.997999999672 -1.70399999991059 1900 -8.25 8.75 34.25 34.75 799.998999999836 -0.68099999986589 1900 -8.75 9.25 34.25 34.75 800 -0.257000000216067 1900 -9.25 9.75 34.25 34.75 800 -0.0920000001788139 1900 -9.75 10.25 34.25 34.75 800 -0.0310000004246831 1900 --10.25 -9.75 34.75 35.25 800 -0.0379999997094274 1900 --9.75 -9.25 34.75 35.25 799.998999999836 -0.114000000059605 1900 --9.25 -8.75 34.75 35.25 799.997999999672 -0.317999999970198 1900 --8.75 -8.25 34.75 35.25 799.993999999948 -0.839999999850988 1900 --8.25 -7.75 34.75 35.25 799.985000000335 -2.10099999979138 1900 --7.75 -7.25 34.75 35.25 799.964999999851 -4.97099999990314 1900 --7.25 -6.75 34.75 35.25 799.921000000089 -11.125 1900 --6.75 -6.25 34.75 35.25 799.832000000402 -23.5529999993742 1900 --6.25 -5.75 34.75 35.25 799.665000000037 -47.1650000000373 1900 --5.75 -5.25 34.75 35.25 799.365000000224 -89.3489999994636 1900 --5.25 -4.75 34.75 35.25 798.860999999568 -160.11400000006 1900 --4.75 -4.25 34.75 35.25 798.070000000298 -271.419999999925 1900 --4.25 -3.75 34.75 35.25 796.904000000097 -435.235999999568 1900 --3.75 -3.25 34.75 35.25 795.303999999538 -660.206000000238 1900 --3.25 -2.75 34.75 35.25 793.262000000104 -947.348000000231 1900 --2.75 -2.25 34.75 35.25 790.854000000283 -1285.90599999949 1900 --2.25 -1.75 34.75 35.25 788.256000000052 -1651.14400000032 1900 --1.75 -1.25 34.75 35.25 785.735999999568 -2005.53399999999 1900 --1.25 -0.75 34.75 35.25 783.610000000335 -2304.34999999963 1900 --0.75 -0.25 34.75 35.25 782.185999999754 -2504.60400000028 1900 --0.25 0.25 34.75 35.25 781.684000000358 -2575.15599999949 1900 -0.25 0.75 34.75 35.25 782.185999999754 -2504.60400000028 1900 -0.75 1.25 34.75 35.25 783.610000000335 -2304.34999999963 1900 -1.25 1.75 34.75 35.25 785.735999999568 -2005.53399999999 1900 -1.75 2.25 34.75 35.25 788.256000000052 -1651.14400000032 1900 -2.25 2.75 34.75 35.25 790.854000000283 -1285.90599999949 1900 -2.75 3.25 34.75 35.25 793.262000000104 -947.348000000231 1900 -3.25 3.75 34.75 35.25 795.303999999538 -660.206000000238 1900 -3.75 4.25 34.75 35.25 796.904000000097 -435.235999999568 1900 -4.25 4.75 34.75 35.25 798.070000000298 -271.419999999925 1900 -4.75 5.25 34.75 35.25 798.860999999568 -160.11400000006 1900 -5.25 5.75 34.75 35.25 799.365000000224 -89.3489999994636 1900 -5.75 6.25 34.75 35.25 799.665000000037 -47.1650000000373 1900 -6.25 6.75 34.75 35.25 799.832000000402 -23.5529999993742 1900 -6.75 7.25 34.75 35.25 799.921000000089 -11.125 1900 -7.25 7.75 34.75 35.25 799.964999999851 -4.97099999990314 1900 -7.75 8.25 34.75 35.25 799.985000000335 -2.10099999979138 1900 -8.25 8.75 34.75 35.25 799.993999999948 -0.839999999850988 1900 -8.75 9.25 34.75 35.25 799.997999999672 -0.317999999970198 1900 -9.25 9.75 34.75 35.25 799.998999999836 -0.114000000059605 1900 -9.75 10.25 34.75 35.25 800 -0.0379999997094274 1900 --10.25 -9.75 35.25 35.75 799.997999999672 -0.0470000002533197 1900 --9.75 -9.25 35.25 35.75 799.995000000112 -0.138000000268221 1900 --9.25 -8.75 35.25 35.75 799.986999999732 -0.384000000543892 1900 --8.75 -8.25 35.25 35.75 799.966000000015 -1.01599999982864 1900 --8.25 -7.75 35.25 35.75 799.913999999873 -2.54100000020117 1900 --7.75 -7.25 35.25 35.75 799.797000000253 -6.0109999999404 1900 --7.25 -6.75 35.25 35.75 799.544999999925 -13.4529999997467 1900 --6.75 -6.25 35.25 35.75 799.036000000313 -28.4809999996796 1900 --6.25 -5.75 35.25 35.75 798.070000000298 -57.035000000149 1900 --5.75 -5.25 35.25 35.75 796.343000000343 -108.046000000089 1900 --5.25 -4.75 35.25 35.75 793.446999999695 -193.618000000715 1900 --4.75 -4.25 35.25 35.75 788.890999999829 -328.208999999799 1900 --4.25 -3.75 35.25 35.75 782.185999999754 -526.304000000469 1900 --3.75 -3.25 35.25 35.75 772.978000000119 -798.351999999955 1900 --3.25 -2.75 35.25 35.75 761.225999999791 -1145.57400000002 1900 --2.75 -2.25 35.25 35.75 747.368999999948 -1554.98099999968 1900 --2.25 -1.75 35.25 35.75 732.419999999925 -1996.63999999966 1900 --1.75 -1.25 35.25 35.75 717.915000000037 -2425.1950000003 1900 --1.25 -0.75 35.25 35.75 705.68499999959 -2786.53500000015 1900 --0.75 -0.25 35.25 35.75 697.487999999896 -3028.69199999981 1900 --0.25 0.25 35.25 35.75 694.600999999791 -3114.00900000054 1900 -0.25 0.75 35.25 35.75 697.487999999896 -3028.69199999981 1900 -0.75 1.25 35.25 35.75 705.68499999959 -2786.53500000015 1900 -1.25 1.75 35.25 35.75 717.915000000037 -2425.1950000003 1900 -1.75 2.25 35.25 35.75 732.419999999925 -1996.63999999966 1900 -2.25 2.75 35.25 35.75 747.368999999948 -1554.98099999968 1900 -2.75 3.25 35.25 35.75 761.225999999791 -1145.57400000002 1900 -3.25 3.75 35.25 35.75 772.978000000119 -798.351999999955 1900 -3.75 4.25 35.25 35.75 782.185999999754 -526.304000000469 1900 -4.25 4.75 35.25 35.75 788.890999999829 -328.208999999799 1900 -4.75 5.25 35.25 35.75 793.446999999695 -193.618000000715 1900 -5.25 5.75 35.25 35.75 796.343000000343 -108.046000000089 1900 -5.75 6.25 35.25 35.75 798.070000000298 -57.035000000149 1900 -6.25 6.75 35.25 35.75 799.036000000313 -28.4809999996796 1900 -6.75 7.25 35.25 35.75 799.544999999925 -13.4529999997467 1900 -7.25 7.75 35.25 35.75 799.797000000253 -6.0109999999404 1900 -7.75 8.25 35.25 35.75 799.913999999873 -2.54100000020117 1900 -8.25 8.75 35.25 35.75 799.966000000015 -1.01599999982864 1900 -8.75 9.25 35.25 35.75 799.986999999732 -0.384000000543892 1900 -9.25 9.75 35.25 35.75 799.995000000112 -0.138000000268221 1900 -9.75 10.25 35.25 35.75 799.997999999672 -0.0470000002533197 1900 --10.25 -9.75 35.75 36.25 799.995000000112 -0.0549999997019768 1900 --9.75 -9.25 35.75 36.25 799.984000000171 -0.162999999709427 1900 --9.25 -8.75 35.75 36.25 799.955000000075 -0.455000000074506 1900 --8.75 -8.25 35.75 36.25 799.879999999888 -1.20399999991059 1900 --8.25 -7.75 35.75 36.25 799.700000000186 -3.01200000010431 1900 --7.75 -7.25 35.75 36.25 799.290000000037 -7.125 1900 --7.25 -6.75 35.75 36.25 798.411000000313 -15.9459999995306 1900 --6.75 -6.25 35.75 36.25 796.634999999776 -33.7590000005439 1900 --6.25 -5.75 35.75 36.25 793.262000000104 -67.6040000002831 1900 --5.75 -5.25 35.75 36.25 787.235999999568 -128.067000000738 1900 --5.25 -4.75 35.75 36.25 777.127000000328 -229.492999999784 1900 --4.75 -4.25 35.75 36.25 761.225999999791 -389.033999999985 1900 --4.25 -3.75 35.75 36.25 737.822999999858 -623.837000000291 1900 --3.75 -3.25 35.75 36.25 705.68499999959 -946.295000000857 1900 --3.25 -2.75 35.75 36.25 664.665000000037 -1357.86500000022 1900 --2.75 -2.25 35.75 36.25 616.29899999965 -1843.13100000005 1900 --2.25 -1.75 35.75 36.25 564.122999999672 -2366.62700000033 1900 --1.75 -1.25 35.75 36.25 513.495000000112 -2874.59499999974 1900 --1.25 -0.75 35.75 36.25 470.80700000003 -3302.89300000016 1900 --0.75 -0.25 35.75 36.25 442.199000000022 -3589.93099999987 1900 --0.25 0.25 35.75 36.25 432.121000000276 -3691.04899999965 1900 -0.25 0.75 35.75 36.25 442.199000000022 -3589.93099999987 1900 -0.75 1.25 35.75 36.25 470.80700000003 -3302.89300000016 1900 -1.25 1.75 35.75 36.25 513.495000000112 -2874.59499999974 1900 -1.75 2.25 35.75 36.25 564.122999999672 -2366.62700000033 1900 -2.25 2.75 35.75 36.25 616.29899999965 -1843.13100000005 1900 -2.75 3.25 35.75 36.25 664.665000000037 -1357.86500000022 1900 -3.25 3.75 35.75 36.25 705.68499999959 -946.295000000857 1900 -3.75 4.25 35.75 36.25 737.822999999858 -623.837000000291 1900 -4.25 4.75 35.75 36.25 761.225999999791 -389.033999999985 1900 -4.75 5.25 35.75 36.25 777.127000000328 -229.492999999784 1900 -5.25 5.75 35.75 36.25 787.235999999568 -128.067000000738 1900 -5.75 6.25 35.75 36.25 793.262000000104 -67.6040000002831 1900 -6.25 6.75 35.75 36.25 796.634999999776 -33.7590000005439 1900 -6.75 7.25 35.75 36.25 798.411000000313 -15.9459999995306 1900 -7.25 7.75 35.75 36.25 799.290000000037 -7.125 1900 -7.75 8.25 35.75 36.25 799.700000000186 -3.01200000010431 1900 -8.25 8.75 35.75 36.25 799.879999999888 -1.20399999991059 1900 -8.75 9.25 35.75 36.25 799.955000000075 -0.455000000074506 1900 -9.25 9.75 35.75 36.25 799.984000000171 -0.162999999709427 1900 -9.75 10.25 35.75 36.25 799.995000000112 -0.0549999997019768 1900 --10.25 -9.75 36.25 36.75 799.987999999896 -0.0640000002458692 1900 --9.75 -9.25 36.25 36.75 799.966000000015 -0.189000000245869 1900 --9.25 -8.75 36.25 36.75 799.904000000097 -0.529000000096858 1900 --8.75 -8.25 36.25 36.75 799.746000000276 -1.39899999927729 1900 --8.25 -7.75 36.25 36.75 799.365000000224 -3.49899999983609 1900 --7.75 -7.25 36.25 36.75 798.49700000044 -8.27799999993294 1900 --7.25 -6.75 36.25 36.75 796.634999999776 -18.526999999769 1900 --6.75 -6.25 36.25 36.75 792.877000000328 -39.2209999999031 1900 --6.25 -5.75 36.25 36.75 785.735999999568 -78.5440000006929 1900 --5.75 -5.25 36.25 36.75 772.978000000119 -148.792999999598 1900 --5.25 -4.75 36.25 36.75 751.576999999583 -266.63300000038 1900 --4.75 -4.25 36.25 36.75 717.915000000037 -451.995000000112 1900 --4.25 -3.75 36.25 36.75 668.37200000044 -724.797999999486 1900 --3.75 -3.25 36.25 36.75 600.333999999799 -1099.43599999975 1900 --3.25 -2.75 36.25 36.75 513.495000000112 -1577.60499999952 1900 --2.75 -2.25 36.25 36.75 411.104000000283 -2141.41599999927 1900 --2.25 -1.75 36.25 36.75 300.648000000045 -2749.63200000022 1900 --1.75 -1.25 36.25 36.75 193.468999999575 -3339.80099999998 1900 --1.25 -0.75 36.25 36.75 103.098000000231 -3837.41199999955 1900 --0.75 -0.25 36.25 36.75 42.5349000003189 -4170.90510000009 1900 --0.25 0.25 36.25 36.75 21.1991999996826 -4288.38080000039 1900 -0.25 0.75 36.25 36.75 42.5349000003189 -4170.90510000009 1900 -0.75 1.25 36.25 36.75 103.098000000231 -3837.41199999955 1900 -1.25 1.75 36.25 36.75 193.468999999575 -3339.80099999998 1900 -1.75 2.25 36.25 36.75 300.648000000045 -2749.63200000022 1900 -2.25 2.75 36.25 36.75 411.104000000283 -2141.41599999927 1900 -2.75 3.25 36.25 36.75 513.495000000112 -1577.60499999952 1900 -3.25 3.75 36.25 36.75 600.333999999799 -1099.43599999975 1900 -3.75 4.25 36.25 36.75 668.37200000044 -724.797999999486 1900 -4.25 4.75 36.25 36.75 717.915000000037 -451.995000000112 1900 -4.75 5.25 36.25 36.75 751.576999999583 -266.63300000038 1900 -5.25 5.75 36.25 36.75 772.978000000119 -148.792999999598 1900 -5.75 6.25 36.25 36.75 785.735999999568 -78.5440000006929 1900 -6.25 6.75 36.25 36.75 792.877000000328 -39.2209999999031 1900 -6.75 7.25 36.25 36.75 796.634999999776 -18.526999999769 1900 -7.25 7.75 36.25 36.75 798.49700000044 -8.27799999993294 1900 -7.75 8.25 36.25 36.75 799.365000000224 -3.49899999983609 1900 -8.25 8.75 36.25 36.75 799.746000000276 -1.39899999927729 1900 -8.75 9.25 36.25 36.75 799.904000000097 -0.529000000096858 1900 -9.25 9.75 36.25 36.75 799.966000000015 -0.189000000245869 1900 -9.75 10.25 36.25 36.75 799.987999999896 -0.0640000002458692 1900 --10.25 -9.75 36.75 37.25 799.985000000335 -0.072999999858439 1900 --9.75 -9.25 36.75 37.25 799.956000000238 -0.214999999850988 1900 --9.25 -8.75 36.75 37.25 799.877000000328 -0.601999999955297 1900 --8.75 -8.25 36.75 37.25 799.67399999965 -1.59300000034273 1900 --8.25 -7.75 36.75 37.25 799.184000000358 -3.98499999940395 1900 --7.75 -7.25 36.75 37.25 798.070000000298 -9.42700000014156 1900 --7.25 -6.75 36.75 37.25 795.679999999702 -21.0990000003949 1900 --6.75 -6.25 36.75 37.25 790.854000000283 -44.6659999992698 1900 --6.25 -5.75 36.75 37.25 781.684000000358 -89.4490000000224 1900 --5.75 -5.25 36.75 37.25 765.303000000305 -169.449999999255 1900 --5.25 -4.75 36.75 37.25 737.822999999858 -303.657000000589 1900 --4.75 -4.25 36.75 37.25 694.600999999791 -514.73900000006 1900 --4.25 -3.75 36.75 37.25 630.986999999732 -825.413000000641 1900 --3.75 -3.25 36.75 37.25 543.623999999836 -1252.07600000035 1900 --3.25 -2.75 36.75 37.25 432.121000000276 -1796.62899999972 1900 --2.75 -2.25 36.75 37.25 300.648000000045 -2438.70199999958 1900 --2.25 -1.75 36.75 37.25 158.820000000298 -3131.34999999963 1900 --1.75 -1.25 36.75 37.25 21.1991999996826 -3803.46080000047 1900 --1.25 -0.75 36.75 37.25 -94.8393000001088 -4370.15930000041 1900 --0.75 -0.25 36.75 37.25 -172.604000000283 -4749.94400000013 1900 --0.25 0.25 36.75 37.25 -200 -4883.73000000045 1900 -0.25 0.75 36.75 37.25 -172.604000000283 -4749.94400000013 1900 -0.75 1.25 36.75 37.25 -94.8393000001088 -4370.15930000041 1900 -1.25 1.75 36.75 37.25 21.1991999996826 -3803.46080000047 1900 -1.75 2.25 36.75 37.25 158.820000000298 -3131.34999999963 1900 -2.25 2.75 36.75 37.25 300.648000000045 -2438.70199999958 1900 -2.75 3.25 36.75 37.25 432.121000000276 -1796.62899999972 1900 -3.25 3.75 36.75 37.25 543.623999999836 -1252.07600000035 1900 -3.75 4.25 36.75 37.25 630.986999999732 -825.413000000641 1900 -4.25 4.75 36.75 37.25 694.600999999791 -514.73900000006 1900 -4.75 5.25 36.75 37.25 737.822999999858 -303.657000000589 1900 -5.25 5.75 36.75 37.25 765.303000000305 -169.449999999255 1900 -5.75 6.25 36.75 37.25 781.684000000358 -89.4490000000224 1900 -6.25 6.75 36.75 37.25 790.854000000283 -44.6659999992698 1900 -6.75 7.25 36.75 37.25 795.679999999702 -21.0990000003949 1900 -7.25 7.75 36.75 37.25 798.070000000298 -9.42700000014156 1900 -7.75 8.25 36.75 37.25 799.184000000358 -3.98499999940395 1900 -8.25 8.75 36.75 37.25 799.67399999965 -1.59300000034273 1900 -8.75 9.25 36.75 37.25 799.877000000328 -0.601999999955297 1900 -9.25 9.75 36.75 37.25 799.956000000238 -0.214999999850988 1900 -9.75 10.25 36.75 37.25 799.985000000335 -0.072999999858439 1900 --10.25 -9.75 37.25 37.75 799.987999999896 -0.0820000004023314 1900 --9.75 -9.25 37.25 37.75 799.966000000015 -0.240000000223517 1900 --9.25 -8.75 37.25 37.75 799.904000000097 -0.67299999948591 1900 --8.75 -8.25 37.25 37.75 799.746000000276 -1.77900000009686 1900 --8.25 -7.75 37.25 37.75 799.365000000224 -4.44799999985844 1900 --7.75 -7.25 37.25 37.75 798.49700000044 -10.5239999992773 1900 --7.25 -6.75 37.25 37.75 796.634999999776 -23.5530000003055 1900 --6.75 -6.25 37.25 37.75 792.877000000328 -49.859999999404 1900 --6.25 -5.75 37.25 37.75 785.735999999568 -99.8490000003949 1900 --5.75 -5.25 37.25 37.75 772.978000000119 -189.152999999933 1900 --5.25 -4.75 37.25 37.75 751.576999999583 -338.963000000454 1900 --4.75 -4.25 37.25 37.75 717.915000000037 -574.594999999739 1900 --4.25 -3.75 37.25 37.75 668.37200000044 -921.397999999113 1900 --3.75 -3.25 37.25 37.75 600.333999999799 -1397.65600000042 1900 --3.25 -2.75 37.25 37.75 513.495000000112 -2005.53500000015 1900 --2.75 -2.25 37.25 37.75 411.104000000283 -2722.26599999983 1900 --2.25 -1.75 37.25 37.75 300.648000000045 -3495.46200000029 1900 --1.75 -1.25 37.25 37.75 193.468999999575 -4245.71100000013 1900 --1.25 -0.75 37.25 37.75 103.098000000231 -4878.31199999992 1900 --0.75 -0.25 37.25 37.75 42.5349000003189 -5302.25509999972 1900 --0.25 0.25 37.25 37.75 21.1991999996826 -5451.60080000013 1900 -0.25 0.75 37.25 37.75 42.5349000003189 -5302.25509999972 1900 -0.75 1.25 37.25 37.75 103.098000000231 -4878.31199999992 1900 -1.25 1.75 37.25 37.75 193.468999999575 -4245.71100000013 1900 -1.75 2.25 37.25 37.75 300.648000000045 -3495.46200000029 1900 -2.25 2.75 37.25 37.75 411.104000000283 -2722.26599999983 1900 -2.75 3.25 37.25 37.75 513.495000000112 -2005.53500000015 1900 -3.25 3.75 37.25 37.75 600.333999999799 -1397.65600000042 1900 -3.75 4.25 37.25 37.75 668.37200000044 -921.397999999113 1900 -4.25 4.75 37.25 37.75 717.915000000037 -574.594999999739 1900 -4.75 5.25 37.25 37.75 751.576999999583 -338.963000000454 1900 -5.25 5.75 37.25 37.75 772.978000000119 -189.152999999933 1900 -5.75 6.25 37.25 37.75 785.735999999568 -99.8490000003949 1900 -6.25 6.75 37.25 37.75 792.877000000328 -49.859999999404 1900 -6.75 7.25 37.25 37.75 796.634999999776 -23.5530000003055 1900 -7.25 7.75 37.25 37.75 798.49700000044 -10.5239999992773 1900 -7.75 8.25 37.25 37.75 799.365000000224 -4.44799999985844 1900 -8.25 8.75 37.25 37.75 799.746000000276 -1.77900000009686 1900 -8.75 9.25 37.25 37.75 799.904000000097 -0.67299999948591 1900 -9.25 9.75 37.25 37.75 799.966000000015 -0.240000000223517 1900 -9.75 10.25 37.25 37.75 799.987999999896 -0.0820000004023314 1900 --10.25 -9.75 37.75 38.25 799.995000000112 -0.0889999996870756 1900 --9.75 -9.25 37.75 38.25 799.984000000171 -0.263000000268221 1900 --9.25 -8.75 37.75 38.25 799.955000000075 -0.735999999567866 1900 --8.75 -8.25 37.75 38.25 799.879999999888 -1.94600000046194 1900 --8.25 -7.75 37.75 38.25 799.700000000186 -4.86699999962002 1900 --7.75 -7.25 37.75 38.25 799.290000000037 -11.5149999996647 1900 --7.25 -6.75 37.75 38.25 798.411000000313 -25.769999999553 1900 --6.75 -6.25 37.75 38.25 796.634999999776 -54.5559999998659 1900 --6.25 -5.75 37.75 38.25 793.262000000104 -109.25299999956 1900 --5.75 -5.25 37.75 38.25 787.235999999568 -206.966000000015 1900 --5.25 -4.75 37.75 38.25 777.127000000328 -370.882999999449 1900 --4.75 -4.25 37.75 38.25 761.225999999791 -628.703999999911 1900 --4.25 -3.75 37.75 38.25 737.822999999858 -1008.16700000037 1900 --3.75 -3.25 37.75 38.25 705.68499999959 -1529.28500000015 1900 --3.25 -2.75 37.75 38.25 664.665000000037 -2194.40500000026 1900 --2.75 -2.25 37.75 38.25 616.29899999965 -2978.64100000076 1900 --2.25 -1.75 37.75 38.25 564.122999999672 -3824.64699999988 1900 --1.75 -1.25 37.75 38.25 513.495000000112 -4645.5549999997 1900 --1.25 -0.75 37.75 38.25 470.80700000003 -5337.72300000023 1900 --0.75 -0.25 37.75 38.25 442.199000000022 -5801.59100000001 1900 --0.25 0.25 37.75 38.25 432.121000000276 -5965.00899999961 1900 -0.25 0.75 37.75 38.25 442.199000000022 -5801.59100000001 1900 -0.75 1.25 37.75 38.25 470.80700000003 -5337.72300000023 1900 -1.25 1.75 37.75 38.25 513.495000000112 -4645.5549999997 1900 -1.75 2.25 37.75 38.25 564.122999999672 -3824.64699999988 1900 -2.25 2.75 37.75 38.25 616.29899999965 -2978.64100000076 1900 -2.75 3.25 37.75 38.25 664.665000000037 -2194.40500000026 1900 -3.25 3.75 37.75 38.25 705.68499999959 -1529.28500000015 1900 -3.75 4.25 37.75 38.25 737.822999999858 -1008.16700000037 1900 -4.25 4.75 37.75 38.25 761.225999999791 -628.703999999911 1900 -4.75 5.25 37.75 38.25 777.127000000328 -370.882999999449 1900 -5.25 5.75 37.75 38.25 787.235999999568 -206.966000000015 1900 -5.75 6.25 37.75 38.25 793.262000000104 -109.25299999956 1900 -6.25 6.75 37.75 38.25 796.634999999776 -54.5559999998659 1900 -6.75 7.25 37.75 38.25 798.411000000313 -25.769999999553 1900 -7.25 7.75 37.75 38.25 799.290000000037 -11.5149999996647 1900 -7.75 8.25 37.75 38.25 799.700000000186 -4.86699999962002 1900 -8.25 8.75 37.75 38.25 799.879999999888 -1.94600000046194 1900 -8.75 9.25 37.75 38.25 799.955000000075 -0.735999999567866 1900 -9.25 9.75 37.75 38.25 799.984000000171 -0.263000000268221 1900 -9.75 10.25 37.75 38.25 799.995000000112 -0.0889999996870756 1900 --10.25 -9.75 38.25 38.75 799.997999999672 -0.0959999999031425 1900 --9.75 -9.25 38.25 38.75 799.995000000112 -0.282999999821186 1900 --9.25 -8.75 38.25 38.75 799.986999999732 -0.790000000037253 1900 --8.75 -8.25 38.25 38.75 799.966000000015 -2.08700000029057 1900 --8.25 -7.75 38.25 38.75 799.913999999873 -5.21999999973923 1900 --7.75 -7.25 38.25 38.75 799.797000000253 -12.3499999996275 1900 --7.25 -6.75 38.25 38.75 799.544999999925 -27.6380000002682 1900 --6.75 -6.25 38.25 38.75 799.036000000313 -58.5109999999404 1900 --6.25 -5.75 38.25 38.75 798.070000000298 -117.17399999965 1900 --5.75 -5.25 38.25 38.75 796.343000000343 -221.976999999955 1900 --5.25 -4.75 38.25 38.75 793.446999999695 -397.773000000045 1900 --4.75 -4.25 38.25 38.75 788.890999999829 -674.288999999873 1900 --4.25 -3.75 38.25 38.75 782.185999999754 -1081.26400000043 1900 --3.75 -3.25 38.25 38.75 772.978000000119 -1640.17200000025 1900 --3.25 -2.75 38.25 38.75 761.225999999791 -2353.51400000043 1900 --2.75 -2.25 38.25 38.75 747.368999999948 -3194.6110000005 1900 --2.25 -1.75 38.25 38.75 732.419999999925 -4101.95999999996 1900 --1.75 -1.25 38.25 38.75 717.915000000037 -4982.39499999955 1900 --1.25 -0.75 38.25 38.75 705.68499999959 -5724.75500000082 1900 --0.75 -0.25 38.25 38.75 697.487999999896 -6222.25200000033 1900 --0.25 0.25 38.25 38.75 694.600999999791 -6397.51900000032 1900 -0.25 0.75 38.25 38.75 697.487999999896 -6222.25200000033 1900 -0.75 1.25 38.25 38.75 705.68499999959 -5724.75500000082 1900 -1.25 1.75 38.25 38.75 717.915000000037 -4982.39499999955 1900 -1.75 2.25 38.25 38.75 732.419999999925 -4101.95999999996 1900 -2.25 2.75 38.25 38.75 747.368999999948 -3194.6110000005 1900 -2.75 3.25 38.25 38.75 761.225999999791 -2353.51400000043 1900 -3.25 3.75 38.25 38.75 772.978000000119 -1640.17200000025 1900 -3.75 4.25 38.25 38.75 782.185999999754 -1081.26400000043 1900 -4.25 4.75 38.25 38.75 788.890999999829 -674.288999999873 1900 -4.75 5.25 38.25 38.75 793.446999999695 -397.773000000045 1900 -5.25 5.75 38.25 38.75 796.343000000343 -221.976999999955 1900 -5.75 6.25 38.25 38.75 798.070000000298 -117.17399999965 1900 -6.25 6.75 38.25 38.75 799.036000000313 -58.5109999999404 1900 -6.75 7.25 38.25 38.75 799.544999999925 -27.6380000002682 1900 -7.25 7.75 38.25 38.75 799.797000000253 -12.3499999996275 1900 -7.75 8.25 38.25 38.75 799.913999999873 -5.21999999973923 1900 -8.25 8.75 38.25 38.75 799.966000000015 -2.08700000029057 1900 -8.75 9.25 38.25 38.75 799.986999999732 -0.790000000037253 1900 -9.25 9.75 38.25 38.75 799.995000000112 -0.282999999821186 1900 -9.75 10.25 38.25 38.75 799.997999999672 -0.0959999999031425 1900 --10.25 -9.75 38.75 39.25 800 -0.099999999627471 1900 --9.75 -9.25 38.75 39.25 799.998999999836 -0.29700000025332 1900 --9.25 -8.75 38.75 39.25 799.997999999672 -0.830000000074506 1900 --8.75 -8.25 38.75 39.25 799.993999999948 -2.19400000013411 1900 --8.25 -7.75 38.75 39.25 799.985000000335 -5.48799999989569 1900 --7.75 -7.25 38.75 39.25 799.964999999851 -12.9830000000075 1900 --7.25 -6.75 38.75 39.25 799.921000000089 -29.0559999998659 1900 --6.75 -6.25 38.75 39.25 799.832000000402 -61.511999999173 1900 --6.25 -5.75 38.75 39.25 799.665000000037 -123.18200000003 1900 --5.75 -5.25 38.75 39.25 799.365000000224 -233.354999999516 1900 --5.25 -4.75 38.75 39.25 798.860999999568 -418.169000000693 1900 --4.75 -4.25 38.75 39.25 798.070000000298 -708.859999999404 1900 --4.25 -3.75 38.75 39.25 796.904000000097 -1136.70600000024 1900 --3.75 -3.25 38.75 39.25 795.303999999538 -1724.26600000076 1900 --3.25 -2.75 38.75 39.25 793.262000000104 -2474.17800000031 1900 --2.75 -2.25 38.75 39.25 790.854000000283 -3358.40599999949 1900 --2.25 -1.75 38.75 39.25 788.256000000052 -4312.27400000021 1900 --1.75 -1.25 38.75 39.25 785.735999999568 -5237.84400000051 1900 --1.25 -0.75 38.75 39.25 783.610000000335 -6018.26999999955 1900 --0.75 -0.25 38.75 39.25 782.185999999754 -6541.27400000021 1900 --0.25 0.25 38.75 39.25 781.684000000358 -6725.52599999961 1900 -0.25 0.75 38.75 39.25 782.185999999754 -6541.27400000021 1900 -0.75 1.25 38.75 39.25 783.610000000335 -6018.26999999955 1900 -1.25 1.75 38.75 39.25 785.735999999568 -5237.84400000051 1900 -1.75 2.25 38.75 39.25 788.256000000052 -4312.27400000021 1900 -2.25 2.75 38.75 39.25 790.854000000283 -3358.40599999949 1900 -2.75 3.25 38.75 39.25 793.262000000104 -2474.17800000031 1900 -3.25 3.75 38.75 39.25 795.303999999538 -1724.26600000076 1900 -3.75 4.25 38.75 39.25 796.904000000097 -1136.70600000024 1900 -4.25 4.75 38.75 39.25 798.070000000298 -708.859999999404 1900 -4.75 5.25 38.75 39.25 798.860999999568 -418.169000000693 1900 -5.25 5.75 38.75 39.25 799.365000000224 -233.354999999516 1900 -5.75 6.25 38.75 39.25 799.665000000037 -123.18200000003 1900 -6.25 6.75 38.75 39.25 799.832000000402 -61.511999999173 1900 -6.75 7.25 38.75 39.25 799.921000000089 -29.0559999998659 1900 -7.25 7.75 38.75 39.25 799.964999999851 -12.9830000000075 1900 -7.75 8.25 38.75 39.25 799.985000000335 -5.48799999989569 1900 -8.25 8.75 38.75 39.25 799.993999999948 -2.19400000013411 1900 -8.75 9.25 38.75 39.25 799.997999999672 -0.830000000074506 1900 -9.25 9.75 38.75 39.25 799.998999999836 -0.29700000025332 1900 -9.75 10.25 38.75 39.25 800 -0.099999999627471 1900 --10.25 -9.75 39.25 39.75 800 -0.104000000283122 1900 --9.75 -9.25 39.25 39.75 800 -0.30599999986589 1900 --9.25 -8.75 39.25 39.75 800 -0.855000000447035 1900 --8.75 -8.25 39.25 39.75 799.998999999836 -2.26200000010431 1900 --8.25 -7.75 39.25 39.75 799.997999999672 -5.65600000042468 1900 --7.75 -7.25 39.25 39.75 799.996000000276 -13.3789999997243 1900 --7.25 -6.75 39.25 39.75 799.99199999962 -29.9400000004098 1900 --6.75 -6.25 39.25 39.75 799.981999999844 -63.3849999997765 1900 --6.25 -5.75 39.25 39.75 799.964999999851 -126.933000000194 1900 --5.75 -5.25 39.25 39.75 799.933000000194 -240.456999999471 1900 --5.25 -4.75 39.25 39.75 799.879999999888 -430.900000000373 1900 --4.75 -4.25 39.25 39.75 799.797000000253 -730.452999999747 1900 --4.25 -3.75 39.25 39.75 799.67399999965 -1171.31600000057 1900 --3.75 -3.25 39.25 39.75 799.504999999888 -1776.77500000037 1900 --3.25 -2.75 39.25 39.75 799.290000000037 -2549.53000000026 1900 --2.75 -2.25 39.25 39.75 799.036000000313 -3460.68399999943 1900 --2.25 -1.75 39.25 39.75 798.762000000104 -4443.60800000001 1900 --1.75 -1.25 39.25 39.75 798.49700000044 -5397.3629999999 1900 --1.25 -0.75 39.25 39.75 798.273000000045 -6201.54700000025 1900 --0.75 -0.25 39.25 39.75 798.12200000044 -6740.4879999999 1900 --0.25 0.25 39.25 39.75 798.070000000298 -6930.34999999963 1900 -0.25 0.75 39.25 39.75 798.12200000044 -6740.4879999999 1900 -0.75 1.25 39.25 39.75 798.273000000045 -6201.54700000025 1900 -1.25 1.75 39.25 39.75 798.49700000044 -5397.3629999999 1900 -1.75 2.25 39.25 39.75 798.762000000104 -4443.60800000001 1900 -2.25 2.75 39.25 39.75 799.036000000313 -3460.68399999943 1900 -2.75 3.25 39.25 39.75 799.290000000037 -2549.53000000026 1900 -3.25 3.75 39.25 39.75 799.504999999888 -1776.77500000037 1900 -3.75 4.25 39.25 39.75 799.67399999965 -1171.31600000057 1900 -4.25 4.75 39.25 39.75 799.797000000253 -730.452999999747 1900 -4.75 5.25 39.25 39.75 799.879999999888 -430.900000000373 1900 -5.25 5.75 39.25 39.75 799.933000000194 -240.456999999471 1900 -5.75 6.25 39.25 39.75 799.964999999851 -126.933000000194 1900 -6.25 6.75 39.25 39.75 799.981999999844 -63.3849999997765 1900 -6.75 7.25 39.25 39.75 799.99199999962 -29.9400000004098 1900 -7.25 7.75 39.25 39.75 799.996000000276 -13.3789999997243 1900 -7.75 8.25 39.25 39.75 799.997999999672 -5.65600000042468 1900 -8.25 8.75 39.25 39.75 799.998999999836 -2.26200000010431 1900 -8.75 9.25 39.25 39.75 800 -0.855000000447035 1900 -9.25 9.75 39.25 39.75 800 -0.30599999986589 1900 -9.75 10.25 39.25 39.75 800 -0.104000000283122 1900 --10.25 -9.75 39.75 40.25 800 -0.105000000447035 1900 --9.75 -9.25 39.75 40.25 800 -0.309000000357628 1900 --9.25 -8.75 39.75 40.25 800 -0.864000000059605 1900 --8.75 -8.25 39.75 40.25 800 -2.2839999999851 1900 --8.25 -7.75 39.75 40.25 800 -5.71200000029057 1900 --7.75 -7.25 39.75 40.25 800 -13.5130000002682 1900 --7.25 -6.75 39.75 40.25 799.998999999836 -30.2420000005513 1900 --6.75 -6.25 39.75 40.25 799.998999999836 -64.0219999998808 1900 --6.25 -5.75 39.75 40.25 799.997999999672 -128.20900000073 1900 --5.75 -5.25 39.75 40.25 799.996000000276 -242.873999999836 1900 --5.25 -4.75 39.75 40.25 799.99199999962 -435.238000000827 1900 --4.75 -4.25 39.75 40.25 799.986999999732 -737.793000000529 1900 --4.25 -3.75 39.75 40.25 799.979000000283 -1183.09100000001 1900 --3.75 -3.25 39.75 40.25 799.968000000343 -1794.63199999928 1900 --3.25 -2.75 39.75 40.25 799.955000000075 -2575.15500000026 1900 --2.75 -2.25 39.75 40.25 799.938000000082 -3495.46200000029 1900 --2.25 -1.75 39.75 40.25 799.921000000089 -4488.25899999961 1900 --1.75 -1.25 39.75 40.25 799.904000000097 -5451.60599999968 1900 --1.25 -0.75 39.75 40.25 799.889999999665 -6263.87000000011 1900 --0.75 -0.25 39.75 40.25 799.879999999888 -6808.23000000045 1900 --0.25 0.25 39.75 40.25 799.877000000328 -7000.00299999956 1900 -0.25 0.75 39.75 40.25 799.879999999888 -6808.23000000045 1900 -0.75 1.25 39.75 40.25 799.889999999665 -6263.87000000011 1900 -1.25 1.75 39.75 40.25 799.904000000097 -5451.60599999968 1900 -1.75 2.25 39.75 40.25 799.921000000089 -4488.25899999961 1900 -2.25 2.75 39.75 40.25 799.938000000082 -3495.46200000029 1900 -2.75 3.25 39.75 40.25 799.955000000075 -2575.15500000026 1900 -3.25 3.75 39.75 40.25 799.968000000343 -1794.63199999928 1900 -3.75 4.25 39.75 40.25 799.979000000283 -1183.09100000001 1900 -4.25 4.75 39.75 40.25 799.986999999732 -737.793000000529 1900 -4.75 5.25 39.75 40.25 799.99199999962 -435.238000000827 1900 -5.25 5.75 39.75 40.25 799.996000000276 -242.873999999836 1900 -5.75 6.25 39.75 40.25 799.997999999672 -128.20900000073 1900 -6.25 6.75 39.75 40.25 799.998999999836 -64.0219999998808 1900 -6.75 7.25 39.75 40.25 799.998999999836 -30.2420000005513 1900 -7.25 7.75 39.75 40.25 800 -13.5130000002682 1900 -7.75 8.25 39.75 40.25 800 -5.71200000029057 1900 -8.25 8.75 39.75 40.25 800 -2.2839999999851 1900 -8.75 9.25 39.75 40.25 800 -0.864000000059605 1900 -9.25 9.75 39.75 40.25 800 -0.309000000357628 1900 -9.75 10.25 39.75 40.25 800 -0.105000000447035 1900 --10.25 -9.75 40.25 40.75 800 -0.104000000283122 1900 --9.75 -9.25 40.25 40.75 800 -0.30599999986589 1900 --9.25 -8.75 40.25 40.75 800 -0.855000000447035 1900 --8.75 -8.25 40.25 40.75 800 -2.2609999999404 1900 --8.25 -7.75 40.25 40.75 800 -5.65500000026077 1900 --7.75 -7.25 40.25 40.75 800 -13.3789999997243 1900 --7.25 -6.75 40.25 40.75 800 -29.9409999996424 1900 --6.75 -6.25 40.25 40.75 800 -63.3849999997765 1900 --6.25 -5.75 40.25 40.75 800 -126.934000000358 1900 --5.75 -5.25 40.25 40.75 800 -240.459999999963 1900 --5.25 -4.75 40.25 40.75 800 -430.900000000373 1900 --4.75 -4.25 40.25 40.75 799.998999999836 -730.45100000035 1900 --4.25 -3.75 40.25 40.75 799.998999999836 -1171.32100000046 1900 --3.75 -3.25 40.25 40.75 799.998999999836 -1776.77099999972 1900 --3.25 -2.75 40.25 40.75 799.997999999672 -2549.53200000059 1900 --2.75 -2.25 40.25 40.75 799.997999999672 -3460.68200000003 1900 --2.25 -1.75 40.25 40.75 799.99700000044 -4443.60299999919 1900 --1.75 -1.25 40.25 40.75 799.996000000276 -5397.36400000006 1900 --1.25 -0.75 40.25 40.75 799.996000000276 -6201.54399999976 1900 --0.75 -0.25 40.25 40.75 799.995000000112 -6740.48500000034 1900 --0.25 0.25 40.25 40.75 799.995000000112 -6930.34499999974 1900 -0.25 0.75 40.25 40.75 799.995000000112 -6740.48500000034 1900 -0.75 1.25 40.25 40.75 799.996000000276 -6201.54399999976 1900 -1.25 1.75 40.25 40.75 799.996000000276 -5397.36400000006 1900 -1.75 2.25 40.25 40.75 799.99700000044 -4443.60299999919 1900 -2.25 2.75 40.25 40.75 799.997999999672 -3460.68200000003 1900 -2.75 3.25 40.25 40.75 799.997999999672 -2549.53200000059 1900 -3.25 3.75 40.25 40.75 799.998999999836 -1776.77099999972 1900 -3.75 4.25 40.25 40.75 799.998999999836 -1171.32100000046 1900 -4.25 4.75 40.25 40.75 799.998999999836 -730.45100000035 1900 -4.75 5.25 40.25 40.75 800 -430.900000000373 1900 -5.25 5.75 40.25 40.75 800 -240.459999999963 1900 -5.75 6.25 40.25 40.75 800 -126.934000000358 1900 -6.25 6.75 40.25 40.75 800 -63.3849999997765 1900 -6.75 7.25 40.25 40.75 800 -29.9409999996424 1900 -7.25 7.75 40.25 40.75 800 -13.3789999997243 1900 -7.75 8.25 40.25 40.75 800 -5.65500000026077 1900 -8.25 8.75 40.25 40.75 800 -2.2609999999404 1900 -8.75 9.25 40.25 40.75 800 -0.855000000447035 1900 -9.25 9.75 40.25 40.75 800 -0.30599999986589 1900 -9.75 10.25 40.25 40.75 800 -0.104000000283122 1900 --10.25 -9.75 40.75 41.25 800 -0.100999999791384 1900 --9.75 -9.25 40.75 41.25 800 -0.29700000025332 1900 --9.25 -8.75 40.75 41.25 800 -0.830000000074506 1900 --8.75 -8.25 40.75 41.25 800 -2.19400000013411 1900 --8.25 -7.75 40.75 41.25 800 -5.48799999989569 1900 --7.75 -7.25 40.75 41.25 800 -12.9830000000075 1900 --7.25 -6.75 40.75 41.25 800 -29.0559999998659 1900 --6.75 -6.25 40.75 41.25 800 -61.5109999999404 1900 --6.25 -5.75 40.75 41.25 800 -123.18200000003 1900 --5.75 -5.25 40.75 41.25 800 -233.349999999627 1900 --5.25 -4.75 40.75 41.25 800 -418.169999999925 1900 --4.75 -4.25 40.75 41.25 800 -708.870000000112 1900 --4.25 -3.75 40.75 41.25 800 -1136.70000000019 1900 --3.75 -3.25 40.75 41.25 800 -1724.25999999978 1900 --3.25 -2.75 40.75 41.25 800 -2474.1799999997 1900 --2.75 -2.25 40.75 41.25 800 -3358.40000000037 1900 --2.25 -1.75 40.75 41.25 800 -4312.28000000026 1900 --1.75 -1.25 40.75 41.25 800 -5237.83999999985 1900 --1.25 -0.75 40.75 41.25 800 -6018.26999999955 1900 --0.75 -0.25 40.75 41.25 800 -6541.28000000026 1900 --0.25 0.25 40.75 41.25 800 -6725.53000000026 1900 -0.25 0.75 40.75 41.25 800 -6541.28000000026 1900 -0.75 1.25 40.75 41.25 800 -6018.26999999955 1900 -1.25 1.75 40.75 41.25 800 -5237.83999999985 1900 -1.75 2.25 40.75 41.25 800 -4312.28000000026 1900 -2.25 2.75 40.75 41.25 800 -3358.40000000037 1900 -2.75 3.25 40.75 41.25 800 -2474.1799999997 1900 -3.25 3.75 40.75 41.25 800 -1724.25999999978 1900 -3.75 4.25 40.75 41.25 800 -1136.70000000019 1900 -4.25 4.75 40.75 41.25 800 -708.870000000112 1900 -4.75 5.25 40.75 41.25 800 -418.169999999925 1900 -5.25 5.75 40.75 41.25 800 -233.349999999627 1900 -5.75 6.25 40.75 41.25 800 -123.18200000003 1900 -6.25 6.75 40.75 41.25 800 -61.5109999999404 1900 -6.75 7.25 40.75 41.25 800 -29.0559999998659 1900 -7.25 7.75 40.75 41.25 800 -12.9830000000075 1900 -7.75 8.25 40.75 41.25 800 -5.48799999989569 1900 -8.25 8.75 40.75 41.25 800 -2.19400000013411 1900 -8.75 9.25 40.75 41.25 800 -0.830000000074506 1900 -9.25 9.75 40.75 41.25 800 -0.29700000025332 1900 -9.75 10.25 40.75 41.25 800 -0.100999999791384 1900 --10.25 -9.75 41.25 41.75 800 -0.0959999999031425 1900 --9.75 -9.25 41.25 41.75 800 -0.281999999657273 1900 --9.25 -8.75 41.25 41.75 800 -0.790000000037253 1900 --8.75 -8.25 41.25 41.75 800 -2.08700000029057 1900 --8.25 -7.75 41.25 41.75 800 -5.21999999973923 1900 --7.75 -7.25 41.25 41.75 800 -12.3499999996275 1900 --7.25 -6.75 41.25 41.75 800 -27.6390000004321 1900 --6.75 -6.25 41.25 41.75 800 -58.5109999999404 1900 --6.25 -5.75 41.25 41.75 800 -117.174999999814 1900 --5.75 -5.25 41.25 41.75 800 -221.969999999739 1900 --5.25 -4.75 41.25 41.75 800 -397.780000000261 1900 --4.75 -4.25 41.25 41.75 800 -674.290000000037 1900 --4.25 -3.75 41.25 41.75 800 -1081.26999999955 1900 --3.75 -3.25 41.25 41.75 800 -1640.16999999993 1900 --3.25 -2.75 41.25 41.75 800 -2353.51999999955 1900 --2.75 -2.25 41.25 41.75 800 -3194.61000000034 1900 --2.25 -1.75 41.25 41.75 800 -4101.95999999996 1900 --1.75 -1.25 41.25 41.75 800 -4982.38999999966 1900 --1.25 -0.75 41.25 41.75 800 -5724.75 1900 --0.75 -0.25 41.25 41.75 800 -6222.25 1900 --0.25 0.25 41.25 41.75 800 -6397.51999999955 1900 -0.25 0.75 41.25 41.75 800 -6222.25 1900 -0.75 1.25 41.25 41.75 800 -5724.75 1900 -1.25 1.75 41.25 41.75 800 -4982.38999999966 1900 -1.75 2.25 41.25 41.75 800 -4101.95999999996 1900 -2.25 2.75 41.25 41.75 800 -3194.61000000034 1900 -2.75 3.25 41.25 41.75 800 -2353.51999999955 1900 -3.25 3.75 41.25 41.75 800 -1640.16999999993 1900 -3.75 4.25 41.25 41.75 800 -1081.26999999955 1900 -4.25 4.75 41.25 41.75 800 -674.290000000037 1900 -4.75 5.25 41.25 41.75 800 -397.780000000261 1900 -5.25 5.75 41.25 41.75 800 -221.969999999739 1900 -5.75 6.25 41.25 41.75 800 -117.174999999814 1900 -6.25 6.75 41.25 41.75 800 -58.5109999999404 1900 -6.75 7.25 41.25 41.75 800 -27.6390000004321 1900 -7.25 7.75 41.25 41.75 800 -12.3499999996275 1900 -7.75 8.25 41.25 41.75 800 -5.21999999973923 1900 -8.25 8.75 41.25 41.75 800 -2.08700000029057 1900 -8.75 9.25 41.25 41.75 800 -0.790000000037253 1900 -9.25 9.75 41.25 41.75 800 -0.281999999657273 1900 -9.75 10.25 41.25 41.75 800 -0.0959999999031425 1900 --10.25 -9.75 41.75 42.25 800 -0.0889999996870756 1900 --9.75 -9.25 41.75 42.25 800 -0.263000000268221 1900 --9.25 -8.75 41.75 42.25 800 -0.735999999567866 1900 --8.75 -8.25 41.75 42.25 800 -1.94600000046194 1900 --8.25 -7.75 41.75 42.25 800 -4.86699999962002 1900 --7.75 -7.25 41.75 42.25 800 -11.5149999996647 1900 --7.25 -6.75 41.75 42.25 800 -25.769999999553 1900 --6.75 -6.25 41.75 42.25 800 -54.5559999998659 1900 --6.25 -5.75 41.75 42.25 800 -109.25299999956 1900 --5.75 -5.25 41.75 42.25 800 -206.969999999739 1900 --5.25 -4.75 41.75 42.25 800 -370.879999999888 1900 --4.75 -4.25 41.75 42.25 800 -628.709999999963 1900 --4.25 -3.75 41.75 42.25 800 -1008.16999999993 1900 --3.75 -3.25 41.75 42.25 800 -1529.28000000026 1900 --3.25 -2.75 41.75 42.25 800 -2194.40000000037 1900 --2.75 -2.25 41.75 42.25 800 -2978.63999999966 1900 --2.25 -1.75 41.75 42.25 800 -3824.65000000037 1900 --1.75 -1.25 41.75 42.25 800 -4645.54999999981 1900 --1.25 -0.75 41.75 42.25 800 -5337.71999999974 1900 --0.75 -0.25 41.75 42.25 800 -5801.58999999985 1900 --0.25 0.25 41.75 42.25 800 -5965.00999999978 1900 -0.25 0.75 41.75 42.25 800 -5801.58999999985 1900 -0.75 1.25 41.75 42.25 800 -5337.71999999974 1900 -1.25 1.75 41.75 42.25 800 -4645.54999999981 1900 -1.75 2.25 41.75 42.25 800 -3824.65000000037 1900 -2.25 2.75 41.75 42.25 800 -2978.63999999966 1900 -2.75 3.25 41.75 42.25 800 -2194.40000000037 1900 -3.25 3.75 41.75 42.25 800 -1529.28000000026 1900 -3.75 4.25 41.75 42.25 800 -1008.16999999993 1900 -4.25 4.75 41.75 42.25 800 -628.709999999963 1900 -4.75 5.25 41.75 42.25 800 -370.879999999888 1900 -5.25 5.75 41.75 42.25 800 -206.969999999739 1900 -5.75 6.25 41.75 42.25 800 -109.25299999956 1900 -6.25 6.75 41.75 42.25 800 -54.5559999998659 1900 -6.75 7.25 41.75 42.25 800 -25.769999999553 1900 -7.25 7.75 41.75 42.25 800 -11.5149999996647 1900 -7.75 8.25 41.75 42.25 800 -4.86699999962002 1900 -8.25 8.75 41.75 42.25 800 -1.94600000046194 1900 -8.75 9.25 41.75 42.25 800 -0.735999999567866 1900 -9.25 9.75 41.75 42.25 800 -0.263000000268221 1900 -9.75 10.25 41.75 42.25 800 -0.0889999996870756 1900 --10.25 -9.75 42.25 42.75 800 -0.0810000002384186 1900 --9.75 -9.25 42.25 42.75 800 -0.24100000038743 1900 --9.25 -8.75 42.25 42.75 800 -0.673000000417233 1900 --8.75 -8.25 42.25 42.75 800 -1.77900000009686 1900 --8.25 -7.75 42.25 42.75 800 -4.44799999985844 1900 --7.75 -7.25 42.25 42.75 800 -10.5240000002086 1900 --7.25 -6.75 42.25 42.75 800 -23.5520000001416 1900 --6.75 -6.25 42.25 42.75 800 -49.8600000003353 1900 --6.25 -5.75 42.25 42.75 800 -99.8499999996275 1900 --5.75 -5.25 42.25 42.75 800 -189.152999999933 1900 --5.25 -4.75 42.25 42.75 800 -338.959999999963 1900 --4.75 -4.25 42.25 42.75 800 -574.589999999851 1900 --4.25 -3.75 42.25 42.75 800 -921.389999999665 1900 --3.75 -3.25 42.25 42.75 800 -1397.66000000015 1900 --3.25 -2.75 42.25 42.75 800 -2005.53000000026 1900 --2.75 -2.25 42.25 42.75 800 -2722.26999999955 1900 --2.25 -1.75 42.25 42.75 800 -3495.45999999996 1900 --1.75 -1.25 42.25 42.75 800 -4245.70999999996 1900 --1.25 -0.75 42.25 42.75 800 -4878.30999999959 1900 --0.75 -0.25 42.25 42.75 800 -5302.25999999978 1900 --0.25 0.25 42.25 42.75 800 -5451.61000000034 1900 -0.25 0.75 42.25 42.75 800 -5302.25999999978 1900 -0.75 1.25 42.25 42.75 800 -4878.30999999959 1900 -1.25 1.75 42.25 42.75 800 -4245.70999999996 1900 -1.75 2.25 42.25 42.75 800 -3495.45999999996 1900 -2.25 2.75 42.25 42.75 800 -2722.26999999955 1900 -2.75 3.25 42.25 42.75 800 -2005.53000000026 1900 -3.25 3.75 42.25 42.75 800 -1397.66000000015 1900 -3.75 4.25 42.25 42.75 800 -921.389999999665 1900 -4.25 4.75 42.25 42.75 800 -574.589999999851 1900 -4.75 5.25 42.25 42.75 800 -338.959999999963 1900 -5.25 5.75 42.25 42.75 800 -189.152999999933 1900 -5.75 6.25 42.25 42.75 800 -99.8499999996275 1900 -6.25 6.75 42.25 42.75 800 -49.8600000003353 1900 -6.75 7.25 42.25 42.75 800 -23.5520000001416 1900 -7.25 7.75 42.25 42.75 800 -10.5240000002086 1900 -7.75 8.25 42.25 42.75 800 -4.44799999985844 1900 -8.25 8.75 42.25 42.75 800 -1.77900000009686 1900 -8.75 9.25 42.25 42.75 800 -0.673000000417233 1900 -9.25 9.75 42.25 42.75 800 -0.24100000038743 1900 -9.75 10.25 42.25 42.75 800 -0.0810000002384186 1900 --10.25 -9.75 42.75 43.25 800 -0.072999999858439 1900 --9.75 -9.25 42.75 43.25 800 -0.216000000014901 1900 --9.25 -8.75 42.75 43.25 800 -0.603000000119209 1900 --8.75 -8.25 42.75 43.25 800 -1.59300000034273 1900 --8.25 -7.75 42.75 43.25 800 -3.98500000033528 1900 --7.75 -7.25 42.75 43.25 800 -9.42800000030547 1900 --7.25 -6.75 42.75 43.25 800 -21.0990000003949 1900 --6.75 -6.25 42.75 43.25 800 -44.6660000002012 1900 --6.25 -5.75 42.75 43.25 800 -89.4490000000224 1900 --5.75 -5.25 42.75 43.25 800 -169.449000000022 1900 --5.25 -4.75 42.75 43.25 800 -303.650000000373 1900 --4.75 -4.25 42.75 43.25 800 -514.740000000224 1900 --4.25 -3.75 42.75 43.25 800 -825.419999999925 1900 --3.75 -3.25 42.75 43.25 800 -1252.0700000003 1900 --3.25 -2.75 42.75 43.25 800 -1796.62999999989 1900 --2.75 -2.25 42.75 43.25 800 -2438.70000000019 1900 --2.25 -1.75 42.75 43.25 800 -3131.34999999963 1900 --1.75 -1.25 42.75 43.25 800 -3803.45999999996 1900 --1.25 -0.75 42.75 43.25 800 -4370.16000000015 1900 --0.75 -0.25 42.75 43.25 800 -4749.94000000041 1900 --0.25 0.25 42.75 43.25 800 -4883.73000000045 1900 -0.25 0.75 42.75 43.25 800 -4749.94000000041 1900 -0.75 1.25 42.75 43.25 800 -4370.16000000015 1900 -1.25 1.75 42.75 43.25 800 -3803.45999999996 1900 -1.75 2.25 42.75 43.25 800 -3131.34999999963 1900 -2.25 2.75 42.75 43.25 800 -2438.70000000019 1900 -2.75 3.25 42.75 43.25 800 -1796.62999999989 1900 -3.25 3.75 42.75 43.25 800 -1252.0700000003 1900 -3.75 4.25 42.75 43.25 800 -825.419999999925 1900 -4.25 4.75 42.75 43.25 800 -514.740000000224 1900 -4.75 5.25 42.75 43.25 800 -303.650000000373 1900 -5.25 5.75 42.75 43.25 800 -169.449000000022 1900 -5.75 6.25 42.75 43.25 800 -89.4490000000224 1900 -6.25 6.75 42.75 43.25 800 -44.6660000002012 1900 -6.75 7.25 42.75 43.25 800 -21.0990000003949 1900 -7.25 7.75 42.75 43.25 800 -9.42800000030547 1900 -7.75 8.25 42.75 43.25 800 -3.98500000033528 1900 -8.25 8.75 42.75 43.25 800 -1.59300000034273 1900 -8.75 9.25 42.75 43.25 800 -0.603000000119209 1900 -9.25 9.75 42.75 43.25 800 -0.216000000014901 1900 -9.75 10.25 42.75 43.25 800 -0.072999999858439 1900 --10.25 -9.75 43.25 43.75 800 -0.0640000002458692 1900 --9.75 -9.25 43.25 43.75 800 -0.189000000245869 1900 --9.25 -8.75 43.25 43.75 800 -0.529000000096858 1900 --8.75 -8.25 43.25 43.75 800 -1.39900000020862 1900 --8.25 -7.75 43.25 43.75 800 -3.49899999983609 1900 --7.75 -7.25 43.25 43.75 800 -8.27900000009686 1900 --7.25 -6.75 43.25 43.75 800 -18.526999999769 1900 --6.75 -6.25 43.25 43.75 800 -39.2209999999031 1900 --6.25 -5.75 43.25 43.75 800 -78.5449999999255 1900 --5.75 -5.25 43.25 43.75 800 -148.792999999598 1900 --5.25 -4.75 43.25 43.75 800 -266.639999999665 1900 --4.75 -4.25 43.25 43.75 800 -451.990000000224 1900 --4.25 -3.75 43.25 43.75 800 -724.790000000037 1900 --3.75 -3.25 43.25 43.75 800 -1099.44000000041 1900 --3.25 -2.75 43.25 43.75 800 -1577.61000000034 1900 --2.75 -2.25 43.25 43.75 800 -2141.41000000015 1900 --2.25 -1.75 43.25 43.75 800 -2749.62999999989 1900 --1.75 -1.25 43.25 43.75 800 -3339.79999999981 1900 --1.25 -0.75 43.25 43.75 800 -3837.41999999993 1900 --0.75 -0.25 43.25 43.75 800 -4170.90000000037 1900 --0.25 0.25 43.25 43.75 800 -4288.37999999989 1900 -0.25 0.75 43.25 43.75 800 -4170.90000000037 1900 -0.75 1.25 43.25 43.75 800 -3837.41999999993 1900 -1.25 1.75 43.25 43.75 800 -3339.79999999981 1900 -1.75 2.25 43.25 43.75 800 -2749.62999999989 1900 -2.25 2.75 43.25 43.75 800 -2141.41000000015 1900 -2.75 3.25 43.25 43.75 800 -1577.61000000034 1900 -3.25 3.75 43.25 43.75 800 -1099.44000000041 1900 -3.75 4.25 43.25 43.75 800 -724.790000000037 1900 -4.25 4.75 43.25 43.75 800 -451.990000000224 1900 -4.75 5.25 43.25 43.75 800 -266.639999999665 1900 -5.25 5.75 43.25 43.75 800 -148.792999999598 1900 -5.75 6.25 43.25 43.75 800 -78.5449999999255 1900 -6.25 6.75 43.25 43.75 800 -39.2209999999031 1900 -6.75 7.25 43.25 43.75 800 -18.526999999769 1900 -7.25 7.75 43.25 43.75 800 -8.27900000009686 1900 -7.75 8.25 43.25 43.75 800 -3.49899999983609 1900 -8.25 8.75 43.25 43.75 800 -1.39900000020862 1900 -8.75 9.25 43.25 43.75 800 -0.529000000096858 1900 -9.25 9.75 43.25 43.75 800 -0.189000000245869 1900 -9.75 10.25 43.25 43.75 800 -0.0640000002458692 1900 --10.25 -9.75 43.75 44.25 800 -0.0549999997019768 1900 --9.75 -9.25 43.75 44.25 800 -0.162999999709427 1900 --9.25 -8.75 43.75 44.25 800 -0.456000000238419 1900 --8.75 -8.25 43.75 44.25 800 -1.20399999991059 1900 --8.25 -7.75 43.75 44.25 800 -3.01200000010431 1900 --7.75 -7.25 43.75 44.25 800 -7.125 1900 --7.25 -6.75 43.75 44.25 800 -15.9460000004619 1900 --6.75 -6.25 43.75 44.25 800 -33.75800000038 1900 --6.25 -5.75 43.75 44.25 800 -67.6040000002831 1900 --5.75 -5.25 43.75 44.25 800 -128.066999999806 1900 --5.25 -4.75 43.75 44.25 800 -229.5 1900 --4.75 -4.25 43.75 44.25 800 -389.030000000261 1900 --4.25 -3.75 43.75 44.25 800 -623.839999999851 1900 --3.75 -3.25 43.75 44.25 800 -946.290000000037 1900 --3.25 -2.75 43.75 44.25 800 -1357.86000000034 1900 --2.75 -2.25 43.75 44.25 800 -1843.12999999989 1900 --2.25 -1.75 43.75 44.25 800 -2366.62999999989 1900 --1.75 -1.25 43.75 44.25 800 -2874.58999999985 1900 --1.25 -0.75 43.75 44.25 800 -3302.88999999966 1900 --0.75 -0.25 43.75 44.25 800 -3589.9299999997 1900 --0.25 0.25 43.75 44.25 800 -3691.04999999981 1900 -0.25 0.75 43.75 44.25 800 -3589.9299999997 1900 -0.75 1.25 43.75 44.25 800 -3302.88999999966 1900 -1.25 1.75 43.75 44.25 800 -2874.58999999985 1900 -1.75 2.25 43.75 44.25 800 -2366.62999999989 1900 -2.25 2.75 43.75 44.25 800 -1843.12999999989 1900 -2.75 3.25 43.75 44.25 800 -1357.86000000034 1900 -3.25 3.75 43.75 44.25 800 -946.290000000037 1900 -3.75 4.25 43.75 44.25 800 -623.839999999851 1900 -4.25 4.75 43.75 44.25 800 -389.030000000261 1900 -4.75 5.25 43.75 44.25 800 -229.5 1900 -5.25 5.75 43.75 44.25 800 -128.066999999806 1900 -5.75 6.25 43.75 44.25 800 -67.6040000002831 1900 -6.25 6.75 43.75 44.25 800 -33.75800000038 1900 -6.75 7.25 43.75 44.25 800 -15.9460000004619 1900 -7.25 7.75 43.75 44.25 800 -7.125 1900 -7.75 8.25 43.75 44.25 800 -3.01200000010431 1900 -8.25 8.75 43.75 44.25 800 -1.20399999991059 1900 -8.75 9.25 43.75 44.25 800 -0.456000000238419 1900 -9.25 9.75 43.75 44.25 800 -0.162999999709427 1900 -9.75 10.25 43.75 44.25 800 -0.0549999997019768 1900 --10.25 -9.75 44.25 44.75 800 -0.0470000002533197 1900 --9.75 -9.25 44.25 44.75 800 -0.138000000268221 1900 --9.25 -8.75 44.25 44.75 800 -0.38399999961257 1900 --8.75 -8.25 44.25 44.75 800 -1.01599999982864 1900 --8.25 -7.75 44.25 44.75 800 -2.54100000020117 1900 --7.75 -7.25 44.25 44.75 800 -6.0109999999404 1900 --7.25 -6.75 44.25 44.75 800 -13.4529999997467 1900 --6.75 -6.25 44.25 44.75 800 -28.4809999996796 1900 --6.25 -5.75 44.25 44.75 800 -57.035000000149 1900 --5.75 -5.25 44.25 44.75 800 -108.046000000089 1900 --5.25 -4.75 44.25 44.75 800 -193.617999999784 1900 --4.75 -4.25 44.25 44.75 800 -328.209999999963 1900 --4.25 -3.75 44.25 44.75 800 -526.30999999959 1900 --3.75 -3.25 44.25 44.75 800 -798.360000000335 1900 --3.25 -2.75 44.25 44.75 800 -1145.58000000007 1900 --2.75 -2.25 44.25 44.75 800 -1554.98000000045 1900 --2.25 -1.75 44.25 44.75 800 -1996.63999999966 1900 --1.75 -1.25 44.25 44.75 800 -2425.19000000041 1900 --1.25 -0.75 44.25 44.75 800 -2786.54000000004 1900 --0.75 -0.25 44.25 44.75 800 -3028.70000000019 1900 --0.25 0.25 44.25 44.75 800 -3114.00999999978 1900 -0.25 0.75 44.25 44.75 800 -3028.70000000019 1900 -0.75 1.25 44.25 44.75 800 -2786.54000000004 1900 -1.25 1.75 44.25 44.75 800 -2425.19000000041 1900 -1.75 2.25 44.25 44.75 800 -1996.63999999966 1900 -2.25 2.75 44.25 44.75 800 -1554.98000000045 1900 -2.75 3.25 44.25 44.75 800 -1145.58000000007 1900 -3.25 3.75 44.25 44.75 800 -798.360000000335 1900 -3.75 4.25 44.25 44.75 800 -526.30999999959 1900 -4.25 4.75 44.25 44.75 800 -328.209999999963 1900 -4.75 5.25 44.25 44.75 800 -193.617999999784 1900 -5.25 5.75 44.25 44.75 800 -108.046000000089 1900 -5.75 6.25 44.25 44.75 800 -57.035000000149 1900 -6.25 6.75 44.25 44.75 800 -28.4809999996796 1900 -6.75 7.25 44.25 44.75 800 -13.4529999997467 1900 -7.25 7.75 44.25 44.75 800 -6.0109999999404 1900 -7.75 8.25 44.25 44.75 800 -2.54100000020117 1900 -8.25 8.75 44.25 44.75 800 -1.01599999982864 1900 -8.75 9.25 44.25 44.75 800 -0.38399999961257 1900 -9.25 9.75 44.25 44.75 800 -0.138000000268221 1900 -9.75 10.25 44.25 44.75 800 -0.0470000002533197 1900 --10.25 -9.75 44.75 45.25 800 -0.0379999997094274 1900 --9.75 -9.25 44.75 45.25 800 -0.114000000059605 1900 --9.25 -8.75 44.75 45.25 800 -0.317999999970198 1900 --8.75 -8.25 44.75 45.25 800 -0.839999999850988 1900 --8.25 -7.75 44.75 45.25 800 -2.10099999979138 1900 --7.75 -7.25 44.75 45.25 800 -4.97099999990314 1900 --7.25 -6.75 44.75 45.25 800 -11.125 1900 --6.75 -6.25 44.75 45.25 800 -23.5520000001416 1900 --6.25 -5.75 44.75 45.25 800 -47.1660000002012 1900 --5.75 -5.25 44.75 45.25 800 -89.3490000003949 1900 --5.25 -4.75 44.75 45.25 800 -160.11400000006 1900 --4.75 -4.25 44.75 45.25 800 -271.419999999925 1900 --4.25 -3.75 44.75 45.25 800 -435.240000000224 1900 --3.75 -3.25 44.75 45.25 800 -660.209999999963 1900 --3.25 -2.75 44.75 45.25 800 -947.349999999627 1900 --2.75 -2.25 44.75 45.25 800 -1285.91000000015 1900 --2.25 -1.75 44.75 45.25 800 -1651.13999999966 1900 --1.75 -1.25 44.75 45.25 800 -2005.53000000026 1900 --1.25 -0.75 44.75 45.25 800 -2304.34999999963 1900 --0.75 -0.25 44.75 45.25 800 -2504.61000000034 1900 --0.25 0.25 44.75 45.25 800 -2575.16000000015 1900 -0.25 0.75 44.75 45.25 800 -2504.61000000034 1900 -0.75 1.25 44.75 45.25 800 -2304.34999999963 1900 -1.25 1.75 44.75 45.25 800 -2005.53000000026 1900 -1.75 2.25 44.75 45.25 800 -1651.13999999966 1900 -2.25 2.75 44.75 45.25 800 -1285.91000000015 1900 -2.75 3.25 44.75 45.25 800 -947.349999999627 1900 -3.25 3.75 44.75 45.25 800 -660.209999999963 1900 -3.75 4.25 44.75 45.25 800 -435.240000000224 1900 -4.25 4.75 44.75 45.25 800 -271.419999999925 1900 -4.75 5.25 44.75 45.25 800 -160.11400000006 1900 -5.25 5.75 44.75 45.25 800 -89.3490000003949 1900 -5.75 6.25 44.75 45.25 800 -47.1660000002012 1900 -6.25 6.75 44.75 45.25 800 -23.5520000001416 1900 -6.75 7.25 44.75 45.25 800 -11.125 1900 -7.25 7.75 44.75 45.25 800 -4.97099999990314 1900 -7.75 8.25 44.75 45.25 800 -2.10099999979138 1900 -8.25 8.75 44.75 45.25 800 -0.839999999850988 1900 -8.75 9.25 44.75 45.25 800 -0.317999999970198 1900 -9.25 9.75 44.75 45.25 800 -0.114000000059605 1900 -9.75 10.25 44.75 45.25 800 -0.0379999997094274 1900 --10.25 -9.75 45.25 45.75 800 -0.0310000004246831 1900 --9.75 -9.25 45.25 45.75 800 -0.0920000001788139 1900 --9.25 -8.75 45.25 45.75 800 -0.25800000037998 1900 --8.75 -8.25 45.25 45.75 800 -0.68099999986589 1900 --8.25 -7.75 45.25 45.75 800 -1.70299999974668 1900 --7.75 -7.25 45.25 45.75 800 -4.03000000026077 1900 --7.25 -6.75 45.25 45.75 800 -9.01800000015646 1900 --6.75 -6.25 45.25 45.75 800 -19.0910000000149 1900 --6.25 -5.75 45.25 45.75 800 -38.2319999998435 1900 --5.75 -5.25 45.25 45.75 800 -72.4249999998137 1900 --5.25 -4.75 45.25 45.75 800 -129.786000000313 1900 --4.75 -4.25 45.25 45.75 800 -220.009999999776 1900 --4.25 -3.75 45.25 45.75 800 -352.799999999814 1900 --3.75 -3.25 45.25 45.75 800 -535.150000000373 1900 --3.25 -2.75 45.25 45.75 800 -767.900000000373 1900 --2.75 -2.25 45.25 45.75 800 -1042.33999999985 1900 --2.25 -1.75 45.25 45.75 800 -1338.38999999966 1900 --1.75 -1.25 45.25 45.75 800 -1625.65000000037 1900 --1.25 -0.75 45.25 45.75 800 -1867.87000000011 1900 --0.75 -0.25 45.25 45.75 800 -2030.20000000019 1900 --0.25 0.25 45.25 45.75 800 -2087.37999999989 1900 -0.25 0.75 45.25 45.75 800 -2030.20000000019 1900 -0.75 1.25 45.25 45.75 800 -1867.87000000011 1900 -1.25 1.75 45.25 45.75 800 -1625.65000000037 1900 -1.75 2.25 45.25 45.75 800 -1338.38999999966 1900 -2.25 2.75 45.25 45.75 800 -1042.33999999985 1900 -2.75 3.25 45.25 45.75 800 -767.900000000373 1900 -3.25 3.75 45.25 45.75 800 -535.150000000373 1900 -3.75 4.25 45.25 45.75 800 -352.799999999814 1900 -4.25 4.75 45.25 45.75 800 -220.009999999776 1900 -4.75 5.25 45.25 45.75 800 -129.786000000313 1900 -5.25 5.75 45.25 45.75 800 -72.4249999998137 1900 -5.75 6.25 45.25 45.75 800 -38.2319999998435 1900 -6.25 6.75 45.25 45.75 800 -19.0910000000149 1900 -6.75 7.25 45.25 45.75 800 -9.01800000015646 1900 -7.25 7.75 45.25 45.75 800 -4.03000000026077 1900 -7.75 8.25 45.25 45.75 800 -1.70299999974668 1900 -8.25 8.75 45.25 45.75 800 -0.68099999986589 1900 -8.75 9.25 45.25 45.75 800 -0.25800000037998 1900 -9.25 9.75 45.25 45.75 800 -0.0920000001788139 1900 -9.75 10.25 45.25 45.75 800 -0.0310000004246831 1900 --10.25 -9.75 45.75 46.25 800 -0.025000000372529 1900 --9.75 -9.25 45.75 46.25 800 -0.072999999858439 1900 --9.25 -8.75 45.75 46.25 800 -0.205000000074506 1900 --8.75 -8.25 45.75 46.25 800 -0.541000000201166 1900 --8.25 -7.75 45.75 46.25 800 -1.35300000011921 1900 --7.75 -7.25 45.75 46.25 800 -3.20199999958277 1900 --7.25 -6.75 45.75 46.25 800 -7.16500000003725 1900 --6.75 -6.25 45.75 46.25 800 -15.1689999997616 1900 --6.25 -5.75 45.75 46.25 800 -30.3760000001639 1900 --5.75 -5.25 45.75 46.25 800 -57.5439999997616 1900 --5.25 -4.75 45.75 46.25 800 -103.118999999948 1900 --4.75 -4.25 45.75 46.25 800 -174.803999999538 1900 --4.25 -3.75 45.75 46.25 800 -280.30999999959 1900 --3.75 -3.25 45.75 46.25 800 -425.200000000186 1900 --3.25 -2.75 45.75 46.25 800 -610.129999999888 1900 --2.75 -2.25 45.75 46.25 800 -828.169999999925 1900 --2.25 -1.75 45.75 46.25 800 -1063.38999999966 1900 --1.75 -1.25 45.75 46.25 800 -1291.63999999966 1900 --1.25 -0.75 45.75 46.25 800 -1484.08999999985 1900 --0.75 -0.25 45.75 46.25 800 -1613.05999999959 1900 --0.25 0.25 45.75 46.25 800 -1658.49000000022 1900 -0.25 0.75 45.75 46.25 800 -1613.05999999959 1900 -0.75 1.25 45.75 46.25 800 -1484.08999999985 1900 -1.25 1.75 45.75 46.25 800 -1291.63999999966 1900 -1.75 2.25 45.75 46.25 800 -1063.38999999966 1900 -2.25 2.75 45.75 46.25 800 -828.169999999925 1900 -2.75 3.25 45.75 46.25 800 -610.129999999888 1900 -3.25 3.75 45.75 46.25 800 -425.200000000186 1900 -3.75 4.25 45.75 46.25 800 -280.30999999959 1900 -4.25 4.75 45.75 46.25 800 -174.803999999538 1900 -4.75 5.25 45.75 46.25 800 -103.118999999948 1900 -5.25 5.75 45.75 46.25 800 -57.5439999997616 1900 -5.75 6.25 45.75 46.25 800 -30.3760000001639 1900 -6.25 6.75 45.75 46.25 800 -15.1689999997616 1900 -6.75 7.25 45.75 46.25 800 -7.16500000003725 1900 -7.25 7.75 45.75 46.25 800 -3.20199999958277 1900 -7.75 8.25 45.75 46.25 800 -1.35300000011921 1900 -8.25 8.75 45.75 46.25 800 -0.541000000201166 1900 -8.75 9.25 45.75 46.25 800 -0.205000000074506 1900 -9.25 9.75 45.75 46.25 800 -0.072999999858439 1900 -9.75 10.25 45.75 46.25 800 -0.025000000372529 1900 --10.25 -9.75 46.25 46.75 800 -0.019000000320375 1900 --9.75 -9.25 46.25 46.75 800 -0.0570000000298023 1900 --9.25 -8.75 46.25 46.75 800 -0.158999999985099 1900 --8.75 -8.25 46.25 46.75 800 -0.421000000089407 1900 --8.25 -7.75 46.25 46.75 800 -1.05399999953806 1900 --7.75 -7.25 46.25 46.75 800 -2.49299999978393 1900 --7.25 -6.75 46.25 46.75 800 -5.58000000007451 1900 --6.75 -6.25 46.25 46.75 800 -11.813000000082 1900 --6.25 -5.75 46.25 46.75 800 -23.6569999996573 1900 --5.75 -5.25 46.25 46.75 800 -44.8159999996424 1900 --5.25 -4.75 46.25 46.75 800 -80.3090000003576 1900 --4.75 -4.25 46.25 46.75 800 -136.138000000268 1900 --4.25 -3.75 46.25 46.75 800 -218.299999999814 1900 --3.75 -3.25 46.25 46.75 800 -331.139999999665 1900 --3.25 -2.75 46.25 46.75 800 -475.169999999925 1900 --2.75 -2.25 46.25 46.75 800 -644.980000000447 1900 --2.25 -1.75 46.25 46.75 800 -828.169999999925 1900 --1.75 -1.25 46.25 46.75 800 -1005.9299999997 1900 --1.25 -0.75 46.25 46.75 800 -1155.80999999959 1900 --0.75 -0.25 46.25 46.75 800 -1256.25 1900 --0.25 0.25 46.25 46.75 800 -1291.63999999966 1900 -0.25 0.75 46.25 46.75 800 -1256.25 1900 -0.75 1.25 46.25 46.75 800 -1155.80999999959 1900 -1.25 1.75 46.25 46.75 800 -1005.9299999997 1900 -1.75 2.25 46.25 46.75 800 -828.169999999925 1900 -2.25 2.75 46.25 46.75 800 -644.980000000447 1900 -2.75 3.25 46.25 46.75 800 -475.169999999925 1900 -3.25 3.75 46.25 46.75 800 -331.139999999665 1900 -3.75 4.25 46.25 46.75 800 -218.299999999814 1900 -4.25 4.75 46.25 46.75 800 -136.138000000268 1900 -4.75 5.25 46.25 46.75 800 -80.3090000003576 1900 -5.25 5.75 46.25 46.75 800 -44.8159999996424 1900 -5.75 6.25 46.25 46.75 800 -23.6569999996573 1900 -6.25 6.75 46.25 46.75 800 -11.813000000082 1900 -6.75 7.25 46.25 46.75 800 -5.58000000007451 1900 -7.25 7.75 46.25 46.75 800 -2.49299999978393 1900 -7.75 8.25 46.25 46.75 800 -1.05399999953806 1900 -8.25 8.75 46.25 46.75 800 -0.421000000089407 1900 -8.75 9.25 46.25 46.75 800 -0.158999999985099 1900 -9.25 9.75 46.25 46.75 800 -0.0570000000298023 1900 -9.75 10.25 46.25 46.75 800 -0.019000000320375 1900 --10.25 -9.75 46.75 47.25 800 -0.0149999996647239 1900 --9.75 -9.25 46.75 47.25 800 -0.0439999997615814 1900 --9.25 -8.75 46.75 47.25 800 -0.122000000439584 1900 --8.75 -8.25 46.75 47.25 800 -0.321999999694526 1900 --8.25 -7.75 46.75 47.25 800 -0.804999999701977 1900 --7.75 -7.25 46.75 47.25 800 -1.90299999993294 1900 --7.25 -6.75 46.75 47.25 800 -4.25999999977648 1900 --6.75 -6.25 46.75 47.25 800 -9.01800000015646 1900 --6.25 -5.75 46.75 47.25 800 -18.0590000003576 1900 --5.75 -5.25 46.75 47.25 800 -34.2110000001267 1900 --5.25 -4.75 46.75 47.25 800 -61.3070000000298 1900 --4.75 -4.25 46.75 47.25 800 -103.924999999814 1900 --4.25 -3.75 46.75 47.25 800 -166.649000000209 1900 --3.75 -3.25 46.75 47.25 800 -252.790000000037 1900 --3.25 -2.75 46.75 47.25 800 -362.730000000447 1900 --2.75 -2.25 46.75 47.25 800 -492.370000000112 1900 --2.25 -1.75 46.75 47.25 800 -632.209999999963 1900 --1.75 -1.25 46.75 47.25 800 -767.900000000373 1900 --1.25 -0.75 46.75 47.25 800 -882.320000000298 1900 --0.75 -0.25 46.75 47.25 800 -959 1900 --0.25 0.25 46.75 47.25 800 -986.009999999776 1900 -0.25 0.75 46.75 47.25 800 -959 1900 -0.75 1.25 46.75 47.25 800 -882.320000000298 1900 -1.25 1.75 46.75 47.25 800 -767.900000000373 1900 -1.75 2.25 46.75 47.25 800 -632.209999999963 1900 -2.25 2.75 46.75 47.25 800 -492.370000000112 1900 -2.75 3.25 46.75 47.25 800 -362.730000000447 1900 -3.25 3.75 46.75 47.25 800 -252.790000000037 1900 -3.75 4.25 46.75 47.25 800 -166.649000000209 1900 -4.25 4.75 46.75 47.25 800 -103.924999999814 1900 -4.75 5.25 46.75 47.25 800 -61.3070000000298 1900 -5.25 5.75 46.75 47.25 800 -34.2110000001267 1900 -5.75 6.25 46.75 47.25 800 -18.0590000003576 1900 -6.25 6.75 46.75 47.25 800 -9.01800000015646 1900 -6.75 7.25 46.75 47.25 800 -4.25999999977648 1900 -7.25 7.75 46.75 47.25 800 -1.90299999993294 1900 -7.75 8.25 46.75 47.25 800 -0.804999999701977 1900 -8.25 8.75 46.75 47.25 800 -0.321999999694526 1900 -8.75 9.25 46.75 47.25 800 -0.122000000439584 1900 -9.25 9.75 46.75 47.25 800 -0.0439999997615814 1900 -9.75 10.25 46.75 47.25 800 -0.0149999996647239 1900 --10.25 -9.75 47.25 47.75 800 -0.0109999999403954 1900 --9.75 -9.25 47.25 47.75 800 -0.0329999998211861 1900 --9.25 -8.75 47.25 47.75 800 -0.0910000000149012 1900 --8.75 -8.25 47.25 47.75 800 -0.24100000038743 1900 --8.25 -7.75 47.25 47.75 800 -0.601999999955297 1900 --7.75 -7.25 47.25 47.75 800 -1.42399999964982 1900 --7.25 -6.75 47.25 47.75 800 -3.18699999991804 1900 --6.75 -6.25 47.25 47.75 800 -6.74799999967217 1900 --6.25 -5.75 47.25 47.75 800 -13.5130000002682 1900 --5.75 -5.25 47.25 47.75 800 -25.5990000003949 1900 --5.25 -4.75 47.25 47.75 800 -45.8739999998361 1900 --4.75 -4.25 47.25 47.75 800 -77.7630000002682 1900 --4.25 -3.75 47.25 47.75 800 -124.696999999695 1900 --3.75 -3.25 47.25 47.75 800 -189.152999999933 1900 --3.25 -2.75 47.25 47.75 800 -271.419999999925 1900 --2.75 -2.25 47.25 47.75 800 -368.419999999925 1900 --2.25 -1.75 47.25 47.75 800 -473.05999999959 1900 --1.75 -1.25 47.25 47.75 800 -574.589999999851 1900 --1.25 -0.75 47.25 47.75 800 -660.209999999963 1900 --0.75 -0.25 47.25 47.75 800 -717.580000000075 1900 --0.25 0.25 47.25 47.75 800 -737.790000000037 1900 -0.25 0.75 47.25 47.75 800 -717.580000000075 1900 -0.75 1.25 47.25 47.75 800 -660.209999999963 1900 -1.25 1.75 47.25 47.75 800 -574.589999999851 1900 -1.75 2.25 47.25 47.75 800 -473.05999999959 1900 -2.25 2.75 47.25 47.75 800 -368.419999999925 1900 -2.75 3.25 47.25 47.75 800 -271.419999999925 1900 -3.25 3.75 47.25 47.75 800 -189.152999999933 1900 -3.75 4.25 47.25 47.75 800 -124.696999999695 1900 -4.25 4.75 47.25 47.75 800 -77.7630000002682 1900 -4.75 5.25 47.25 47.75 800 -45.8739999998361 1900 -5.25 5.75 47.25 47.75 800 -25.5990000003949 1900 -5.75 6.25 47.25 47.75 800 -13.5130000002682 1900 -6.25 6.75 47.25 47.75 800 -6.74799999967217 1900 -6.75 7.25 47.25 47.75 800 -3.18699999991804 1900 -7.25 7.75 47.25 47.75 800 -1.42399999964982 1900 -7.75 8.25 47.25 47.75 800 -0.601999999955297 1900 -8.25 8.75 47.25 47.75 800 -0.24100000038743 1900 -8.75 9.25 47.25 47.75 800 -0.0910000000149012 1900 -9.25 9.75 47.25 47.75 800 -0.0329999998211861 1900 -9.75 10.25 47.25 47.75 800 -0.0109999999403954 1900 --10.25 -9.75 47.75 48.25 800 -0.00800000037997961 1900 --9.75 -9.25 47.75 48.25 800 -0.0240000002086163 1900 --9.25 -8.75 47.75 48.25 800 -0.0669999998062849 1900 --8.75 -8.25 47.75 48.25 800 -0.177000000141561 1900 --8.25 -7.75 47.75 48.25 800 -0.441999999806285 1900 --7.75 -7.25 47.75 48.25 800 -1.04499999992549 1900 --7.25 -6.75 47.75 48.25 800 -2.33800000045449 1900 --6.75 -6.25 47.75 48.25 800 -4.94900000002235 1900 --6.25 -5.75 47.75 48.25 800 -9.91100000031292 1900 --5.75 -5.25 47.75 48.25 800 -18.7759999996051 1900 --5.25 -4.75 47.75 48.25 800 -33.6459999997169 1900 --4.75 -4.25 47.75 48.25 800 -57.035000000149 1900 --4.25 -3.75 47.75 48.25 800 -91.4589999997988 1900 --3.75 -3.25 47.75 48.25 800 -138.733000000007 1900 --3.25 -2.75 47.75 48.25 800 -199.071999999695 1900 --2.75 -2.25 47.75 48.25 800 -270.219999999739 1900 --2.25 -1.75 47.75 48.25 800 -346.959999999963 1900 --1.75 -1.25 47.75 48.25 800 -421.429999999702 1900 --1.25 -0.75 47.75 48.25 800 -484.230000000447 1900 --0.75 -0.25 47.75 48.25 800 -526.30999999959 1900 --0.25 0.25 47.75 48.25 800 -541.129999999888 1900 -0.25 0.75 47.75 48.25 800 -526.30999999959 1900 -0.75 1.25 47.75 48.25 800 -484.230000000447 1900 -1.25 1.75 47.75 48.25 800 -421.429999999702 1900 -1.75 2.25 47.75 48.25 800 -346.959999999963 1900 -2.25 2.75 47.75 48.25 800 -270.219999999739 1900 -2.75 3.25 47.75 48.25 800 -199.071999999695 1900 -3.25 3.75 47.75 48.25 800 -138.733000000007 1900 -3.75 4.25 47.75 48.25 800 -91.4589999997988 1900 -4.25 4.75 47.75 48.25 800 -57.035000000149 1900 -4.75 5.25 47.75 48.25 800 -33.6459999997169 1900 -5.25 5.75 47.75 48.25 800 -18.7759999996051 1900 -5.75 6.25 47.75 48.25 800 -9.91100000031292 1900 -6.25 6.75 47.75 48.25 800 -4.94900000002235 1900 -6.75 7.25 47.75 48.25 800 -2.33800000045449 1900 -7.25 7.75 47.75 48.25 800 -1.04499999992549 1900 -7.75 8.25 47.75 48.25 800 -0.441999999806285 1900 -8.25 8.75 47.75 48.25 800 -0.177000000141561 1900 -8.75 9.25 47.75 48.25 800 -0.0669999998062849 1900 -9.25 9.75 47.75 48.25 800 -0.0240000002086163 1900 -9.75 10.25 47.75 48.25 800 -0.00800000037997961 1900 --10.25 -9.75 48.25 48.75 800 -0.00600000005215406 1900 --9.75 -9.25 48.25 48.75 800 -0.0169999999925494 1900 --9.25 -8.75 48.25 48.75 800 -0.0480000004172325 1900 --8.75 -8.25 48.25 48.75 800 -0.127000000327826 1900 --8.25 -7.75 48.25 48.75 800 -0.316999999806285 1900 --7.75 -7.25 48.25 48.75 800 -0.751000000163913 1900 --7.25 -6.75 48.25 48.75 800 -1.68099999986589 1900 --6.75 -6.25 48.25 48.75 800 -3.55800000019372 1900 --6.25 -5.75 48.25 48.75 800 -7.125 1900 --5.75 -5.25 48.25 48.75 800 -13.4979999996722 1900 --5.25 -4.75 48.25 48.75 800 -24.1890000002459 1900 --4.75 -4.25 48.25 48.75 800 -41.0039999997243 1900 --4.25 -3.75 48.25 48.75 800 -65.7520000003278 1900 --3.75 -3.25 48.25 48.75 800 -99.7390000000596 1900 --3.25 -2.75 48.25 48.75 800 -143.11699999962 1900 --2.75 -2.25 48.25 48.75 800 -194.264999999665 1900 --2.25 -1.75 48.25 48.75 800 -249.44000000041 1900 --1.75 -1.25 48.25 48.75 800 -302.980000000447 1900 --1.25 -0.75 48.25 48.75 800 -348.120000000112 1900 --0.75 -0.25 48.25 48.75 800 -378.379999999888 1900 --0.25 0.25 48.25 48.75 800 -389.030000000261 1900 -0.25 0.75 48.25 48.75 800 -378.379999999888 1900 -0.75 1.25 48.25 48.75 800 -348.120000000112 1900 -1.25 1.75 48.25 48.75 800 -302.980000000447 1900 -1.75 2.25 48.25 48.75 800 -249.44000000041 1900 -2.25 2.75 48.25 48.75 800 -194.264999999665 1900 -2.75 3.25 48.25 48.75 800 -143.11699999962 1900 -3.25 3.75 48.25 48.75 800 -99.7390000000596 1900 -3.75 4.25 48.25 48.75 800 -65.7520000003278 1900 -4.25 4.75 48.25 48.75 800 -41.0039999997243 1900 -4.75 5.25 48.25 48.75 800 -24.1890000002459 1900 -5.25 5.75 48.25 48.75 800 -13.4979999996722 1900 -5.75 6.25 48.25 48.75 800 -7.125 1900 -6.25 6.75 48.25 48.75 800 -3.55800000019372 1900 -6.75 7.25 48.25 48.75 800 -1.68099999986589 1900 -7.25 7.75 48.25 48.75 800 -0.751000000163913 1900 -7.75 8.25 48.25 48.75 800 -0.316999999806285 1900 -8.25 8.75 48.25 48.75 800 -0.127000000327826 1900 -8.75 9.25 48.25 48.75 800 -0.0480000004172325 1900 -9.25 9.75 48.25 48.75 800 -0.0169999999925494 1900 -9.75 10.25 48.25 48.75 800 -0.00600000005215406 1900 --10.25 -9.75 48.75 49.25 800 -0.00399999972432852 1900 --9.75 -9.25 48.75 49.25 800 -0.0120000001043081 1900 --9.25 -8.75 48.75 49.25 800 -0.0339999999850988 1900 --8.75 -8.25 48.75 49.25 800 -0.0889999996870756 1900 --8.25 -7.75 48.75 49.25 800 -0.224000000394881 1900 --7.75 -7.25 48.75 49.25 800 -0.529000000096858 1900 --7.25 -6.75 48.75 49.25 800 -1.18400000035763 1900 --6.75 -6.25 48.75 49.25 800 -2.50700000021607 1900 --6.25 -5.75 48.75 49.25 800 -5.02099999971688 1900 --5.75 -5.25 48.75 49.25 800 -9.51200000010431 1900 --5.25 -4.75 48.75 49.25 800 -17.0460000000894 1900 --4.75 -4.25 48.75 49.25 800 -28.894999999553 1900 --4.25 -3.75 48.75 49.25 800 -46.3349999999627 1900 --3.75 -3.25 48.75 49.25 800 -70.285000000149 1900 --3.25 -2.75 48.75 49.25 800 -100.853000000119 1900 --2.75 -2.25 48.75 49.25 800 -136.895999999717 1900 --2.25 -1.75 48.75 49.25 800 -175.777999999933 1900 --1.75 -1.25 48.75 49.25 800 -213.509999999776 1900 --1.25 -0.75 48.75 49.25 800 -245.320000000298 1900 --0.75 -0.25 48.75 49.25 800 -266.639999999665 1900 --0.25 0.25 48.75 49.25 800 -274.150000000373 1900 -0.25 0.75 48.75 49.25 800 -266.639999999665 1900 -0.75 1.25 48.75 49.25 800 -245.320000000298 1900 -1.25 1.75 48.75 49.25 800 -213.509999999776 1900 -1.75 2.25 48.75 49.25 800 -175.777999999933 1900 -2.25 2.75 48.75 49.25 800 -136.895999999717 1900 -2.75 3.25 48.75 49.25 800 -100.853000000119 1900 -3.25 3.75 48.75 49.25 800 -70.285000000149 1900 -3.75 4.25 48.75 49.25 800 -46.3349999999627 1900 -4.25 4.75 48.75 49.25 800 -28.894999999553 1900 -4.75 5.25 48.75 49.25 800 -17.0460000000894 1900 -5.25 5.75 48.75 49.25 800 -9.51200000010431 1900 -5.75 6.25 48.75 49.25 800 -5.02099999971688 1900 -6.25 6.75 48.75 49.25 800 -2.50700000021607 1900 -6.75 7.25 48.75 49.25 800 -1.18400000035763 1900 -7.25 7.75 48.75 49.25 800 -0.529000000096858 1900 -7.75 8.25 48.75 49.25 800 -0.224000000394881 1900 -8.25 8.75 48.75 49.25 800 -0.0889999996870756 1900 -8.75 9.25 48.75 49.25 800 -0.0339999999850988 1900 -9.25 9.75 48.75 49.25 800 -0.0120000001043081 1900 -9.75 10.25 48.75 49.25 800 -0.00399999972432852 1900 --10.25 -9.75 49.25 49.75 800 -0.00299999956041574 1900 --9.75 -9.25 49.25 49.75 800 -0.00800000037997961 1900 --9.25 -8.75 49.25 49.75 800 -0.0230000000447035 1900 --8.75 -8.25 49.25 49.75 800 -0.0619999999180436 1900 --8.25 -7.75 49.25 49.75 800 -0.15500000026077 1900 --7.75 -7.25 49.25 49.75 800 -0.36600000038743 1900 --7.25 -6.75 49.25 49.75 800 -0.817999999970198 1900 --6.75 -6.25 49.25 49.75 800 -1.73199999984354 1900 --6.25 -5.75 49.25 49.75 800 -3.46800000034273 1900 --5.75 -5.25 49.25 49.75 800 -6.57000000029802 1900 --5.25 -4.75 49.25 49.75 800 -11.7740000002086 1900 --4.75 -4.25 49.25 49.75 800 -19.9589999997988 1900 --4.25 -3.75 49.25 49.75 800 -32.0049999998882 1900 --3.75 -3.25 49.25 49.75 800 -48.5480000004172 1900 --3.25 -2.75 49.25 49.75 800 -69.6629999997094 1900 --2.75 -2.25 49.25 49.75 800 -94.5590000003576 1900 --2.25 -1.75 49.25 49.75 800 -121.416000000201 1900 --1.75 -1.25 49.25 49.75 800 -147.475999999791 1900 --1.25 -0.75 49.25 49.75 800 -169.449000000022 1900 --0.75 -0.25 49.25 49.75 800 -184.174999999814 1900 --0.25 0.25 49.25 49.75 800 -189.362999999896 1900 -0.25 0.75 49.25 49.75 800 -184.174999999814 1900 -0.75 1.25 49.25 49.75 800 -169.449000000022 1900 -1.25 1.75 49.25 49.75 800 -147.475999999791 1900 -1.75 2.25 49.25 49.75 800 -121.416000000201 1900 -2.25 2.75 49.25 49.75 800 -94.5590000003576 1900 -2.75 3.25 49.25 49.75 800 -69.6629999997094 1900 -3.25 3.75 49.25 49.75 800 -48.5480000004172 1900 -3.75 4.25 49.25 49.75 800 -32.0049999998882 1900 -4.25 4.75 49.25 49.75 800 -19.9589999997988 1900 -4.75 5.25 49.25 49.75 800 -11.7740000002086 1900 -5.25 5.75 49.25 49.75 800 -6.57000000029802 1900 -5.75 6.25 49.25 49.75 800 -3.46800000034273 1900 -6.25 6.75 49.25 49.75 800 -1.73199999984354 1900 -6.75 7.25 49.25 49.75 800 -0.817999999970198 1900 -7.25 7.75 49.25 49.75 800 -0.36600000038743 1900 -7.75 8.25 49.25 49.75 800 -0.15500000026077 1900 -8.25 8.75 49.25 49.75 800 -0.0619999999180436 1900 -8.75 9.25 49.25 49.75 800 -0.0230000000447035 1900 -9.25 9.75 49.25 49.75 800 -0.00800000037997961 1900 -9.75 10.25 49.25 49.75 800 -0.00299999956041574 1900 --10.25 -9.75 49.75 50.25 800 -0.00200000032782555 1900 --9.75 -9.25 49.75 50.25 800 -0.00600000005215406 1900 --9.25 -8.75 49.75 50.25 800 -0.0159999998286366 1900 --8.75 -8.25 49.75 50.25 800 -0.0420000003650784 1900 --8.25 -7.75 49.75 50.25 800 -0.105000000447035 1900 --7.75 -7.25 49.75 50.25 800 -0.247999999672174 1900 --7.25 -6.75 49.75 50.25 800 -0.553999999538064 1900 --6.75 -6.25 49.75 50.25 800 -1.17300000041723 1900 --6.25 -5.75 49.75 50.25 800 -2.34800000023097 1900 --5.75 -5.25 49.75 50.25 800 -4.44799999985844 1900 --5.25 -4.75 49.75 50.25 800 -7.97200000006706 1900 --4.75 -4.25 49.75 50.25 800 -13.5130000002682 1900 --4.25 -3.75 49.75 50.25 800 -21.6689999997616 1900 --3.75 -3.25 49.75 50.25 800 -32.8700000001118 1900 --3.25 -2.75 49.75 50.25 800 -47.1660000002012 1900 --2.75 -2.25 49.75 50.25 800 -64.0219999998808 1900 --2.25 -1.75 49.75 50.25 800 -82.2050000000745 1900 --1.75 -1.25 49.75 50.25 800 -99.8499999996275 1900 --1.25 -0.75 49.75 50.25 800 -114.726999999955 1900 --0.75 -0.25 49.75 50.25 800 -124.696999999695 1900 --0.25 0.25 49.75 50.25 800 -128.208999999799 1900 -0.25 0.75 49.75 50.25 800 -124.696999999695 1900 -0.75 1.25 49.75 50.25 800 -114.726999999955 1900 -1.25 1.75 49.75 50.25 800 -99.8499999996275 1900 -1.75 2.25 49.75 50.25 800 -82.2050000000745 1900 -2.25 2.75 49.75 50.25 800 -64.0219999998808 1900 -2.75 3.25 49.75 50.25 800 -47.1660000002012 1900 -3.25 3.75 49.75 50.25 800 -32.8700000001118 1900 -3.75 4.25 49.75 50.25 800 -21.6689999997616 1900 -4.25 4.75 49.75 50.25 800 -13.5130000002682 1900 -4.75 5.25 49.75 50.25 800 -7.97200000006706 1900 -5.25 5.75 49.75 50.25 800 -4.44799999985844 1900 -5.75 6.25 49.75 50.25 800 -2.34800000023097 1900 -6.25 6.75 49.75 50.25 800 -1.17300000041723 1900 -6.75 7.25 49.75 50.25 800 -0.553999999538064 1900 -7.25 7.75 49.75 50.25 800 -0.247999999672174 1900 -7.75 8.25 49.75 50.25 800 -0.105000000447035 1900 -8.25 8.75 49.75 50.25 800 -0.0420000003650784 1900 -8.75 9.25 49.75 50.25 800 -0.0159999998286366 1900 -9.25 9.75 49.75 50.25 800 -0.00600000005215406 1900 -9.75 10.25 49.75 50.25 800 -0.00200000032782555 1900 diff --git a/dep/tesseroids/cookbook/tesslayers/tesslayers.bat b/dep/tesseroids/cookbook/tesslayers/tesslayers.bat deleted file mode 100755 index 8ca99ac..0000000 --- a/dep/tesseroids/cookbook/tesslayers/tesslayers.bat +++ /dev/null @@ -1,13 +0,0 @@ - - -:: Convert the layer grids in layers.txt to tesseroids. -:: The grid spacing passed to -s is used as the size of the tesseroids, -:: so be careful! -tesslayers.exe -s0.5/0.5 -v < layers.txt > tessmodel.txt - -:: Now calculate the gz and tensor effect of this model at 100km height -tessgrd -r-8/8/32/48 -b50/50 -z100000 | ^ -tessgz tessmodel.txt | ^ -tessgxx tessmodel.txt | tessgxy tessmodel.txt | ^ -tessgxz tessmodel.txt | tessgyy tessmodel.txt | ^ -tessgyz tessmodel.txt | tessgzz tessmodel.txt -v > output.txt diff --git a/dep/tesseroids/cookbook/tesslayers/tesslayers.png b/dep/tesseroids/cookbook/tesslayers/tesslayers.png deleted file mode 100755 index a01ac96..0000000 Binary files a/dep/tesseroids/cookbook/tesslayers/tesslayers.png and /dev/null differ diff --git a/dep/tesseroids/cookbook/tesslayers/tesslayers.sh b/dep/tesseroids/cookbook/tesslayers/tesslayers.sh deleted file mode 100755 index a1ef878..0000000 --- a/dep/tesseroids/cookbook/tesslayers/tesslayers.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -# Convert the layer grids in layers.txt to tesseroids. -# The grid spacing passed to -s is used as the size of the tesseroids, -# so be careful! -tesslayers -s0.5/0.5 -v < layers.txt > tessmodel.txt - -# Now calculate the gz and tensor effect of this model at 100km height -tessgrd -r-8/8/32/48 -b50/50 -z100000 | \ -tessgz tessmodel.txt | \ -tessgxx tessmodel.txt | tessgxy tessmodel.txt | \ -tessgxz tessmodel.txt | tessgyy tessmodel.txt | \ -tessgyz tessmodel.txt | tessgzz tessmodel.txt -v > output.txt diff --git a/dep/tesseroids/lib/CMakeLists.txt b/dep/tesseroids/lib/CMakeLists.txt deleted file mode 100644 index ee32688..0000000 --- a/dep/tesseroids/lib/CMakeLists.txt +++ /dev/null @@ -1,66 +0,0 @@ -# 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm") -endif() - -# 设置库文件的输出地址 -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) - -# 设定库源文件 -aux_source_directory(. LIBTESS_SRC) - -# 以下部分为库的编译 -# 注意目标名必须唯一 所以不能直接生成相同名称的动态库与静态库 -# 注意此处不必为目标名称添加lib前缀和相应后缀,cmake会自行添加 -add_library(tess SHARED ${LIBTESS_SRC}) -# 首先添加静态库的生成命令 -add_library(tess_static STATIC ${LIBTESS_SRC}) -# 设置静态库的输出名称从而获得与动态库名称相同的静态库 -set_target_properties(tess_static PROPERTIES OUTPUT_NAME "tess") -# 设置输出目标属性以同时输出动态库与静态库 -set_target_properties(tess PROPERTIES CLEAN_DIRECT_OUTPUT 1) -set_target_properties(tess_static PROPERTIES CLEAN_DIRECT_OUTPUT 1) -# 设置动态库的版本号 -set_target_properties(tess PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) -# 设置动态库的运行搜索地址 -set_target_properties(tess PROPERTIES INSTALL_RPATH /usr/local/lib) -set_target_properties(tess_static PROPERTIES INSTALL_RPATH /usr/local/lib) - -# 链接动态库 -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - target_link_libraries(tess PUBLIC m) - target_link_libraries(tess_static m.a) -endif() - -set(CONFIG_FILE_PATH lib/cmake/${PROJECT_NAME}) - -configure_package_config_file(${PROJECT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake - INSTALL_DESTINATION ${CONFIG_FILE_PATH}) - -write_basic_package_version_file(${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - VERSION ${PROJECT_VERSION} - COMPATIBILITY SameMajorVersion) - -# 库的安装命令 安装到/opt/lib -if(WIN32) - install(TARGETS tess DESTINATION lib) - install(TARGETS tess_static DESTINATION lib) -else() - install(TARGETS tess tess_static - EXPORT ${PROJECT_NAME}Targets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib) - install(EXPORT ${PROJECT_NAME}Targets - DESTINATION ${CONFIG_FILE_PATH}) - install(FILES - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}Config.cmake - ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake - DESTINATION ${CONFIG_FILE_PATH}) -endif() - -# 头文件安装命令 -file(GLOB LIBTESS_HEAD *.h) -# 安装到include/tess -install(FILES ${LIBTESS_HEAD} DESTINATION include/tess) \ No newline at end of file diff --git a/dep/tesseroids/lib/constants.c b/dep/tesseroids/lib/constants.c deleted file mode 100644 index 07543ac..0000000 --- a/dep/tesseroids/lib/constants.c +++ /dev/null @@ -1,39 +0,0 @@ -/* -Define constants used, like the gravitational constant and unit conversions. - -All values are in SI units! -*/ - -#include "constants.h" - -/* Mean Earth radius [\f$ m \f$] */ -const double MEAN_EARTH_RADIUS = 6378137.0; - -/* The gravitational constant [\f$ m^3*kg^{-1}*s^{-1} \f$] */ -const double G = 0.00000000006673; - -/* Conversion factor from SI units to Eotvos -[\f$ \frac{1}{s^2} = 10^9\ Eotvos \f$] */ -const double SI2EOTVOS = 1000000000.0; - -/* Conversion factor from SI units to mGal -[\f$ 1 \frac{m}{s^2} = 10^5\ mGal \f$] */ -const double SI2MGAL = 100000.0; - -/* Pi */ -const double PI = 3.1415926535897932384626433832795; - -/* minimum distance-to-size ratio for potential computations to be accurate */ -const double TESSEROID_POT_SIZE_RATIO = 1; -/* Minimum distance-to-size ratio for gravity computations to be accurate */ -const double TESSEROID_GX_SIZE_RATIO = 1.5; -const double TESSEROID_GY_SIZE_RATIO = 1.5; -const double TESSEROID_GZ_SIZE_RATIO = 1.5; -/* Minimum distance-to-size ratio for gravity gradient computations to be -accurate */ -const double TESSEROID_GXX_SIZE_RATIO = 8; -const double TESSEROID_GXY_SIZE_RATIO = 8; -const double TESSEROID_GXZ_SIZE_RATIO = 8; -const double TESSEROID_GYY_SIZE_RATIO = 8; -const double TESSEROID_GYZ_SIZE_RATIO = 8; -const double TESSEROID_GZZ_SIZE_RATIO = 8; diff --git a/dep/tesseroids/lib/constants.h b/dep/tesseroids/lib/constants.h deleted file mode 100644 index 441767e..0000000 --- a/dep/tesseroids/lib/constants.h +++ /dev/null @@ -1,44 +0,0 @@ -/* -Define constants used, like the gravitational constant and unit conversions. - -Values are assigned in file constants.c - -All values are in SI units! -*/ - -#ifndef _TESSEROIDS_CONSTANTS_H_ -#define _TESSEROIDS_CONSTANTS_H_ - -/* Mean Earth radius [\f$ m \f$] */ -extern const double MEAN_EARTH_RADIUS; - -/* The gravitational constant [\f$ m^3*kg^{-1}*s^{-1} \f$] */ -extern const double G; - -/* Conversion factor from SI units to Eotvos -[\f$ \frac{1}{s^2} = 10^9\ Eotvos \f$] */ -extern const double SI2EOTVOS; - -/* Conversion factor from SI units to mGal -[\f$ 1 \frac{m}{s^2} = 10^5\ mGal \f$] */ -extern const double SI2MGAL; - -/* Pi */ -extern const double PI; - -/* Minimum distance-to-size ratio for potential computations to be accurate */ -extern const double TESSEROID_POT_SIZE_RATIO; -/* Minimum distance-to-size ratio for gravity computations to be accurate */ -extern const double TESSEROID_GX_SIZE_RATIO; -extern const double TESSEROID_GY_SIZE_RATIO; -extern const double TESSEROID_GZ_SIZE_RATIO; -/* Minimum distance-to-size ratio for gravity gradient computations to be -accurate */ -extern const double TESSEROID_GXX_SIZE_RATIO; -extern const double TESSEROID_GXY_SIZE_RATIO; -extern const double TESSEROID_GXZ_SIZE_RATIO; -extern const double TESSEROID_GYY_SIZE_RATIO; -extern const double TESSEROID_GYZ_SIZE_RATIO; -extern const double TESSEROID_GZZ_SIZE_RATIO; - -#endif diff --git a/dep/tesseroids/lib/geometry.c b/dep/tesseroids/lib/geometry.c deleted file mode 100644 index e9dff7c..0000000 --- a/dep/tesseroids/lib/geometry.c +++ /dev/null @@ -1,175 +0,0 @@ -/* -Data structures for geometric elements and functions that operate on them. -Defines the TESSEROID, SPHERE, and PRISM structures. -*/ - - -#include -#include -#include -#include -#include "constants.h" -#include "logger.h" -#include "geometry.h" - - -/* Split a tesseroid. */ -int split_tess(TESSEROID tess, int nlon, int nlat, int nr, TESSEROID *split) -{ - double dlon, dlat, dr, w, s, r1; - int i, j, k, t = 0; - - dlon = (double)(tess.e - tess.w)/nlon; - dlat = (double)(tess.n - tess.s)/nlat; - dr = (double)(tess.r2 - tess.r1)/nr; - for(r1=tess.r1, k=0; r1 + dr <= tess.r2 || k < nr; r1 += dr, k++) - { - for(s=tess.s, j=0; s + dlat <= tess.n || j < nlat; s += dlat, j++) - { - for(w=tess.w, i=0; w + dlon <= tess.e || i < nlon; w += dlon, i++) - { - split[t].w = w; - split[t].e = w + dlon; - split[t].s = s; - split[t].n = s + dlat; - split[t].r1 = r1; - split[t].r2 = r1 + dr; - split[t].density = tess.density; - t++; - } - } - } - return t; -} - - -/* Calculate the total mass of a tesseroid model. */ -double tess_total_mass(TESSEROID *model, int size) -{ - double mass; - int i; - - for(mass = 0, i = 0; i < size; i++) - { - mass += model[i].density*tess_volume(model[i]); - } - - return mass; -} - - -/* Calculate the mass of a tesseroid model within a density range. */ -double tess_range_mass(TESSEROID *model, int size, double low_dens, - double high_dens) -{ - double mass; - int i; - - for(mass = 0, i = 0; i < size; i++) - { - if(model[i].density >= low_dens && model[i].density <= high_dens) - { - mass += model[i].density*tess_volume(model[i]); - } - } - - return mass; -} - - -/* Convert a tesseroid to a rectangular prism of equal volume and append - * the spherical coordinates of the center top surface (needed to calculate - * the effect in spherical coordinates). */ -void tess2prism(TESSEROID tess, PRISM *prism) -{ - double deg2rad = PI/180., r0, dx, dy; - - r0 = 0.5*(tess.r1 + tess.r2); - dx = r0*deg2rad*(tess.n - tess.s); - dy = r0*cos(deg2rad*0.5*(tess.n + tess.s))*deg2rad*(tess.e - tess.w); - prism->x1 = -0.5*dx; - prism->x2 = 0.5*dx; - prism->y1 = -0.5*dy; - prism->y2 = 0.5*dy; - /* z1 = 0 because the center of the top face of the prism is the origin of - the coordiante system */ - prism->z1 = 0.; - prism->z2 = tess.r2 - tess.r1; - /* Calculate the density of the prism so that they will have exactly - the same mass */ - prism->density = (double)tess.density* - tess_volume(tess)/prism_volume(*prism); - /* Set the coordinates of the center of the prisms top face */ - prism->lon = 0.5*(tess.e + tess.w); - prism->lat = 0.5*(tess.n + tess.s); - prism->r = tess.r2; /* The top face */ -} - - -/* Convert a tesseroid to a rectangular prism of equal volume by approximating - * 1 degree by 111.11 km. */ -void tess2prism_flatten(TESSEROID tess, PRISM *prism) -{ - prism->x1 = tess.s*111110.; - prism->x2 = tess.n*111110.; - prism->y1 = tess.w*111110.; - prism->y2 = tess.e*111110.; - /* r1 is not z1 because r1 is the bottom face (because Nagy et al., 2000, - use z->Down) */ - prism->z1 = MEAN_EARTH_RADIUS - tess.r2; - prism->z2 = MEAN_EARTH_RADIUS - tess.r1; - /* Calculate the density of the prism so that they will have exactly - the same mass */ - prism->density = (double)tess.density* - tess_volume(tess)/prism_volume(*prism); -} - - -/* Convert a tesseroid to a sphere of equal volume. */ -void tess2sphere(TESSEROID tess, SPHERE *sphere) -{ - sphere->density = tess.density; - sphere->lonc = 0.5*(tess.e + tess.w); - sphere->latc = 0.5*(tess.n + tess.s); - sphere->rc = 0.5*(tess.r1 + tess.r2); - sphere->r = pow(3*tess_volume(tess)/(4.*PI), (double)1./3.); -} - - -/* Convert a rectangular prism into a sphere of equal volume. */ -void prism2sphere(PRISM prism, double lonc, double latc, double rc, - SPHERE *sphere) -{ - sphere->density = prism.density; - sphere->lonc = lonc; - sphere->latc = latc; - sphere->rc = rc; - sphere->r = pow(3*prism_volume(prism)/(4.*PI), (double)1./3.); -} - - -/* Calculate the volume of a tesseroid */ -double tess_volume(TESSEROID tess) -{ - double d2r = PI/180., vol; - - vol = d2r*(tess.e - tess.w)*(pow(tess.r2, 3) - pow(tess.r1, 3))* - (sin(d2r*tess.n) - sin(d2r*tess.s))/3.; - - return vol; -} - - -/* Calculate the volume of a sphere */ -double sphere_volume(SPHERE sphere) -{ - return 4.*PI*pow(sphere.r, 3)/3.; -} - - -/* Calculate the volume of a prism */ -double prism_volume(PRISM prism) -{ - return (prism.x2 - prism.x1)*(prism.y2 - prism.y1)*(prism.z2 - prism.z1); -} - diff --git a/dep/tesseroids/lib/geometry.h b/dep/tesseroids/lib/geometry.h deleted file mode 100644 index a543976..0000000 --- a/dep/tesseroids/lib/geometry.h +++ /dev/null @@ -1,168 +0,0 @@ -/* -Data structures for geometric elements and functions that operate on them. -Defines the TESSEROID, SPHERE, and PRISM structures. -*/ - -#ifndef _TESSEROIDS_GEOMETRY_H_ -#define _TESSEROIDS_GEOMETRY_H_ - - -/* Store information on a tesseroid */ -typedef struct tess_struct { - /* s, n, w, e in degrees. r1 and r2 are the smaller and larger radius */ - double density; /* in SI units */ - double w; /* western longitude border in degrees */ - double e; /* eastern longitude border in degrees */ - double s; /* southern latitude border in degrees */ - double n; /* northern latitude border in degrees */ - double r1; /* smallest radius border in SI units */ - double r2; /* largest radius border in SI units */ -} TESSEROID; - - -/* Store information on a rectangular prism */ -typedef struct prism_struct { - double density; /* in SI units */ - double x1; /* in SI units */ - double x2; /* in SI units */ - double y1; /* in SI units */ - double y2; /* in SI units */ - double z1; /* in SI units */ - double z2; /* in SI units */ - /* Geodetic coordinates of the center of the top face of the prism */ - double lon, lat, r; -} PRISM; - - -/* Store information on a sphere */ -typedef struct sphere_struct { - double density; /* in SI units */ - double r; /* radius of the sphere in SI units */ - double lonc; /* longitude of the center of the sphere in degrees */ - double latc; /* latitude of the center of the sphere in degrees */ - double rc; /* radial coordinate of the center of the sphere in SI units */ -} SPHERE; - - -/* Split a tesseroid. - -@param tess tesseroid that will be split -@param split array of nlon*nlat*nr tesseroids with memory allocated. - -Returns: - Number of tesseroids in split. -*/ -extern int split_tess(TESSEROID tess, int nlon, int nlat, int nr, - TESSEROID *split); - - - -/* Calculate the total mass of a tesseroid model. - -Give all in SI units and degrees! - -@param model array of tesseroids -@param size size of the model - -@return The calculated mass -*/ -extern double tess_total_mass(TESSEROID *model, int size); - - -/* Calculate the mass of a tesseroid model within a density range. - -Give all in SI units and degrees! - -@param model array of tesseroids -@param size size of the model -@param low_dens lower bound of the density range -@param high_dens upper bound of the density range - -@return The calculated mass -*/ -extern double tess_range_mass(TESSEROID *model, int size, double low_dens, - double high_dens); - - -/* Convert a tesseroid into a rectangular prism of equal volume (Wild-Pfeiffer, 2008). - -\f[ -\Delta x = \frac{r_1 + r_2}{2} \Delta \phi, -\f] -\f[ -\Delta y = \frac{r_1 + r_2}{2} \cos\left(\frac{\phi_1 + \phi_2}{2}\right) \Delta\lambda, -\f] -\f[ -\Delta z = \Delta r, -\f] - -References - -- Wild-Pfeiffer, F. (2008). A comparison of different mass elements for use in -gravity gradiometry. Journal of Geodesy, 82(10), 637-653. - -@param tess tesseroid to convert -@param prism prism with equal volume of the tesseroid (used to return) -*/ -extern void tess2prism(TESSEROID tess, PRISM *prism); - - -/* Convert a tesseroid into a rectangular prism of equal volume by -approximating 1 degree by 111.11 km. - -@param tess tesseroid to convert -@param prism prism with equal volume of the tesseroid (used to return) -*/ -extern void tess2prism_flatten(TESSEROID tess, PRISM *prism); - - -/* Convert a tesseroid into a sphere of equal volume. - -Parameters: -@param tess tesseroid to convert -@param sphere sphere with equal volume of the tesseroid (used to return) -*/ -extern void tess2sphere(TESSEROID tess, SPHERE *sphere); - - -/* Convert a rectangular prism into a sphere of equal volume. - -Parameters: -@param prism prism to convert -@param lonc longitude of the desired center of the sphere, in degrees -@param latc latitude of the desired center of the sphere, in degrees -@param rc radial coordinate of the desired center of the sphere, in SI units -@param sphere sphere with equal volume of the prism (used to return) -*/ -extern void prism2sphere(PRISM prism, double lonc, double latc, double rc, - SPHERE *sphere); - - -/* Calculate the volume of a tesseroid. - -@param tess the tesseroid whose volume will be calculated - -@return the volume in the respective units -*/ -extern double tess_volume(TESSEROID tess); - - -/* Calculate the volume of a sphere. - -@param sphere the sphere whose volume will be calculated - -@return the volume in the respective units -*/ -extern double sphere_volume(SPHERE sphere); - - -/* Calculate the volume of a prism - -@param prism the prism whose volume will be calculated - -@return the volume in the respective units -*/ -extern double prism_volume(PRISM prism); - - -#endif diff --git a/dep/tesseroids/lib/glq.c b/dep/tesseroids/lib/glq.c deleted file mode 100644 index 4d0818d..0000000 --- a/dep/tesseroids/lib/glq.c +++ /dev/null @@ -1,308 +0,0 @@ -/* -Functions for implementing a Gauss-Legendre Quadrature numerical integration. -*/ - - -#include -#include -#include "constants.h" -#include "logger.h" -#include "glq.h" - - -/** \var GLQ_MAXIT -Max iterations of the root-finder algorithm */ -const int GLQ_MAXIT = 1000; - - -/** \var GLQ_MAXERROR -Max error allowed for the root-finder algorithm */ -const double GLQ_MAXERROR = 0.000000000000001; - - -/* Make a new GLQ structure and set all the parameters needed */ -GLQ * glq_new(int order, double lower, double upper) -{ - GLQ *glq; - int rc; - - glq = (GLQ *)malloc(sizeof(GLQ)); - if(glq == NULL) - { - return NULL; - } - glq->order = order; - glq->nodes = (double *)malloc(sizeof(double)*order); - if(glq->nodes == NULL) - { - free(glq); - return NULL; - } - glq->nodes_unscaled = (double *)malloc(sizeof(double)*order); - if(glq->nodes_unscaled == NULL) - { - free(glq); - free(glq->nodes); - return NULL; - } - glq->weights = (double *)malloc(sizeof(double)*order); - if(glq->weights == NULL) - { - free(glq); - free(glq->nodes); - free(glq->nodes_unscaled); - return NULL; - } - glq->nodes_sin = (double *)malloc(sizeof(double)*order); - if(glq->nodes_sin == NULL) - { - free(glq); - free(glq->nodes); - free(glq->nodes_unscaled); - free(glq->weights); - return NULL; - } - glq->nodes_cos = (double *)malloc(sizeof(double)*order); - if(glq->nodes_cos == NULL) - { - free(glq); - free(glq->nodes); - free(glq->nodes_unscaled); - free(glq->weights); - free(glq->nodes_sin); - return NULL; - } - rc = glq_nodes(order, glq->nodes_unscaled); - if(rc != 0 && rc != 3) - { - switch(rc) - { - case 1: - log_error("glq_nodes invalid GLQ order %d. Should be >= 2.", - order); - break; - case 2: - log_error("glq_nodes NULL pointer for nodes"); - break; - default: - log_error("glq_nodes unknown error code %g", rc); - break; - } - glq_free(glq); - return NULL; - } - else if(rc == 3) - { - log_warning("glq_nodes max iterations reached in root finder"); - log_warning("nodes might not have desired accuracy %g", GLQ_MAXERROR); - } - rc = glq_weights(order, glq->nodes_unscaled, glq->weights); - if(rc != 0) - { - switch(rc) - { - case 1: - log_error("glq_weights invalid GLQ order %d. Should be >= 2.", - order); - break; - case 2: - log_error("glq_weights NULL pointer for nodes"); - break; - case 3: - log_error("glq_weights NULL pointer for weights"); - break; - default: - log_error("glq_weights unknown error code %d\n", rc); - break; - } - glq_free(glq); - return NULL; - } - if(glq_set_limits(lower, upper, glq) != 0) - { - glq_free(glq); - return NULL; - } - return glq; -} - - -/* Free the memory allocated to make a GLQ structure */ -void glq_free(GLQ *glq) -{ - free(glq->nodes); - free(glq->nodes_unscaled); - free(glq->weights); - free(glq->nodes_sin); - free(glq->nodes_cos); - free(glq); -} - - -/* Calculates the GLQ nodes using glq_next_root. */ -int glq_nodes(int order, double *nodes) -{ - register int i; - int rc = 0; - double initial; - - if(order < 2) - { - return 1; - } - if(nodes == NULL) - { - return 2; - } - for(i = 0; i < order; i++) - { - initial = cos(PI*(order - i - 0.25)/(order + 0.5)); - if(glq_next_root(initial, i, order, nodes) == 3) - { - rc = 3; - } - } - return rc; -} - - -/* Put the GLQ nodes to the integration limits IN PLACE. */ -int glq_set_limits(double lower, double upper, GLQ *glq) -{ - /* Only calculate once to optimize the code */ - double tmpplus = 0.5*(upper + lower), tmpminus = 0.5*(upper - lower); - register int i; - - if(glq->order < 2) - { - return 1; - } - if(glq->nodes == NULL) - { - return 2; - } - if(glq->nodes_unscaled == NULL) - { - return 2; - } - for(i = 0; i < glq->order; i++) - { - glq->nodes[i] = tmpminus*glq->nodes_unscaled[i] + tmpplus; - } - return 0; -} - - -/* Calculate the next Legendre polynomial root given the previous root found. - * Uses the method of Barrera-Figueroa et al. (2006). */ -int glq_next_root(double initial, int root_index, int order, double *roots) -{ - double x1, x0, pn, pn_2, pn_1, pn_line, sum; - int it = 0; - register int n; - - if(order < 2) - { - return 1; - } - if(root_index < 0 || root_index >= order) - { - return 2; - } - x1 = initial; - do - { - x0 = x1; - - /* Calculate Pn(x0) */ - /* Starting from P0(x) and P1(x), */ - /* find the others using the recursive relation: */ - /* Pn(x)=(2n-1)xPn_1(x)/n - (n-1)Pn_2(x)/n */ - pn_1 = 1.; /* This is Po(x) */ - pn = x0; /* and this P1(x) */ - for(n = 2; n <= order; n++) - { - pn_2 = pn_1; - pn_1 = pn; - pn = ( ((2*n - 1)*x0*pn_1) - ((n - 1)*pn_2) )/n; - } - /* Now calculate Pn'(x0) using another recursive relation: */ - /* Pn'(x)=n(xPn(x)-Pn_1(x))/(x*x-1) */ - pn_line = order*(x0*pn - pn_1)/(x0*x0 - 1); - /* Sum the roots found so far */ - for(n = 0, sum = 0; n < root_index; n++) - { - sum += 1./(x0 - roots[n]); - } - /* Update the estimate for the root */ - x1 = x0 - (double)pn/(pn_line - pn*sum); - - /** Compute the absolute value of x */ - #define GLQ_ABS(x) ((x) < 0 ? -1*(x) : (x)) - } while(GLQ_ABS(x1 - x0) > GLQ_MAXERROR && ++it <= GLQ_MAXIT); - #undef GLQ_ABS - - roots[root_index] = x1; - - /* Tell the user if stagnation occurred */ - if(it > GLQ_MAXIT) - { - return 3; - } - return 0; -} - - -/* Calculates the weighting coefficients for the GLQ integration. */ -int glq_weights(int order, double *nodes, double *weights) -{ - register int i, n; - double xi, pn, pn_2, pn_1, pn_line; - - if(order < 2) - { - return 1; - } - if(nodes == NULL) - { - return 2; - } - if(weights == NULL) - { - return 3; - } - for(i = 0; i < order; i++){ - - xi = nodes[i]; - - /* Find Pn'(xi) with the recursive relation to find Pn and Pn-1: */ - /* Pn(x)=(2n-1)xPn_1(x)/n - (n-1)Pn_2(x)/n */ - /* Then use: Pn'(x)=n(xPn(x)-Pn_1(x))/(x*x-1) */ - - /* Find Pn and Pn-1 stating from P0 and P1 */ - pn_1 = 1; /* This is Po(x) */ - pn = xi; /* and this P1(x) */ - for(n = 2; n <= order; n++) - { - pn_2 = pn_1; - pn_1 = pn; - pn = ((2*n - 1)*xi*pn_1 - (n - 1)*pn_2)/n; - } - pn_line = order*(xi*pn - pn_1)/(xi*xi - 1.); - /* ith weight is: wi = 2/(1 - xi^2)(Pn'(xi)^2) */ - weights[i] = 2./((1 - xi*xi)*pn_line*pn_line); - } - return 0; -} - - -void glq_precompute_sincos(GLQ *glq) -{ - double d2r = PI/180.; - register int i; - for(i = 0; i < glq->order; i++) - { - glq->nodes_sin[i] = sin(d2r*glq->nodes[i]); - glq->nodes_cos[i] = cos(d2r*glq->nodes[i]); - } -} diff --git a/dep/tesseroids/lib/glq.h b/dep/tesseroids/lib/glq.h deleted file mode 100644 index 250f146..0000000 --- a/dep/tesseroids/lib/glq.h +++ /dev/null @@ -1,192 +0,0 @@ -/* -Functions for implementing a Gauss-Legendre Quadrature numerical integration -(Hildebrand, 1987). - -Usage example -------------- - -To integrate the cossine function from 0 to 90 degrees: - - #include - #include - #include - #include "src/c/glq.h" - - int main(){ - // Create a new glq structure - GLQ *glq; - double result = 0, a = 0, b = 0.5*3.14; - int i; - - glq = glq_new(5, a, b); - - if(glq == NULL){ - printf("malloc error"); - return 1; - } - - // Calculate the integral - for(i = 0; i < glq->order; i++) - result += glq->weights[i]*cos(glq->nodes[i]); - - // Need to multiply by a scale factor of the integration limits - result *= 0.5*(b - a); - - printf("Integral of cossine from 0 to 90 degrees = %lf\n", result); - - // Free allocated memory - glq_free(glq); - - return 0; - } - -References ----------- - -* Hildebrand, F.B (1987): Introduction to numerical analysis. - Courier Dover Publications, 2. ed. -*/ - -#ifndef _TESSEROIDS_GLQ_H_ -#define _TESSEROIDS_GLQ_H_ - - -/** \var GLQ_MAXIT -Max iterations of the root-finder algorithm */ -extern const int GLQ_MAXIT; - - -/** \var GLQ_MAXERROR -Max error allowed for the root-finder algorithm */ -extern const double GLQ_MAXERROR; - - -/** Store the nodes and weights needed for a GLQ integration */ -typedef struct glq_struct -{ - int order; /**< order of the quadrature, ie number of nodes */ - double *nodes; /**< abscissas or discretization points of the quadrature */ - double *weights; /**< weighting coefficients of the quadrature */ - double *nodes_unscaled; /**< nodes in [-1,1] interval */ - /* Used to store the pre-computed sine and cossine of the nodes, if needed. - * Can be useful for the latitude, which is always used as sin and cos */ - double *nodes_sin; - double *nodes_cos; -} GLQ; - - -/** Make a new GLQ structure and set all the parameters needed - -WARNING: Don't forget to free the memory malloced by this function using -glq_free()! - -Prints error and warning messages using the logging.h module. - -@param order order of the quadrature, ie number of nodes -@param lower lower integration limit -@param upper upper integration limit - -@return GLQ data structure with the nodes and weights calculated. NULL if there - was an error with allocation. -*/ -extern GLQ * glq_new(int order, double lower, double upper); - - -/** Free the memory allocated to make a GLQ structure - -@param glq pointer to the allocated memory -*/ -extern void glq_free(GLQ *glq); - - -/** Put the GLQ nodes to the integration limits IN PLACE. - -Will replace the values of glq.nodes with ones in the specified integration -limits. - -In case the GLQ structure was created with glq_new(), the integration limits can -be reset using this function. - -@param lower lower integration limit -@param upper upper integration limit -@param glq pointer to a GLQ structure created with glq_new() and with all - necessary memory allocated - -@return Return code: - - 0: if everything went OK - - 1: if invalid order - - 2: if NULL pointer for nodes or nodes_unscaled -*/ -extern int glq_set_limits(double lower, double upper, GLQ *glq); - - -/** Calculates the GLQ nodes using glq_next_root. - -Nodes will be in the [-1,1] interval. To convert them to the integration limits -use glq_scale_nodes - -@param order order of the quadrature, ie how many nodes. Must be >= 2. -@param nodes pre-allocated array to return the nodes. - -@return Return code: - - 0: if everything went OK - - 1: if invalid order - - 2: if NULL pointer for nodes - - 3: if number of maximum iterations was reached when calculating the root. - This usually means that the desired accuracy was not achieved. Default - desired accuracy is GLQ_MAXERROR. Default maximum iterations is - GLQ_MAXIT. -*/ -extern int glq_nodes(int order, double *nodes); - - -/** Calculate the next Legendre polynomial root given the previous root found. - -Uses the root-finder algorithm of: - - Barrera-Figueroa, V., Sosa-Pedroza, J. and López-Bonilla, J., 2006, - "Multiple root finder algorithm for Legendre and Chebyshev polynomials via - Newton's method", 2006, Annales mathematicae et Informaticae, 33, pp 3-13 - -@param initial initial estimate of the next root. I recommend the use of - \f$ \cos\left(\pi\frac{(N - i - 0.25)}{N + 0.5}\right) \f$, - where \f$ i \f$ is the index of the desired root -@param root_index index of the desired root, starting from 0 -@param order order of the Legendre polynomial, ie number of roots. -@param roots array with the roots found so far. Will return the next root in - roots[root_index], so make sure to malloc enough space. - -@return Return code: - - 0: if everything went OK - - 1: if order is not valid - - 2: if root_index is not valid (negative) - - 3: if number of maximum iterations was reached when calculating the root. - This usually means that the desired accuracy was not achieved. Default - desired accuracy is GLQ_MAXERROR. Default maximum iterations is - GLQ_MAXIT. -*/ -extern int glq_next_root(double initial, int root_index, int order, - double *roots); - - -/** Calculates the weighting coefficients for the GLQ integration. - -@param order order of the quadrature, ie number of nodes and weights. -@param nodes array containing the GLQ nodes calculated by glq_nodes. - IMPORTANT: needs the nodes in [-1,1] interval! Scaled nodes - will result in wrong weights! -@param weights pre-allocated array to return the weights - -@return Return code: - - 0: if everything went OK - - 1: if order is not valid - - 2: if nodes is a NULL pointer - - 3: if weights is a NULL pointer -*/ -extern int glq_weights(int order, double *nodes, double *weights); - - -/* Precompute the sine and cossine of the GLQ nodes and store them in the - * structure */ -extern void glq_precompute_sincos(GLQ *glq); -#endif diff --git a/dep/tesseroids/lib/grav_prism.c b/dep/tesseroids/lib/grav_prism.c deleted file mode 100644 index 4043fe3..0000000 --- a/dep/tesseroids/lib/grav_prism.c +++ /dev/null @@ -1,469 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the rectangular prism using the formulas in Nagy et al. (2000). - -The coordinate system used is that of the article, ie: - -x -> North y -> East z -> Down - -References ----------- - -* Nagy, D., Papp, G., Benedek, J. (2000): The gravitational potential and its - derivatives for the prism. Journal of Geodesy, 74, 552–560. -*/ - - -#include -#include -#include "geometry.h" -#include "constants.h" -#include "grav_prism.h" - -double safe_atan2(double y, double x) -{ - if(y == 0) - { - return 0; - } - if((y > 0) && (x < 0)) - { - return atan2(y, x) - PI; - } - if((y < 0) && (x < 0)) - { - return atan2(y, x) + PI; - } - return atan2(y, x); -} - -double safe_log(double x) -{ - if(x == 0) - { - return 0; - } - else - { - return log(x); - } -} - -/* Calculates the potential cause by a prism. */ -double prism_pot(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - kernel = (x[i]*y[j]*safe_log(z[k] + r) - + y[j]*z[k]*safe_log(x[i] + r) - + x[i]*z[k]*safe_log(y[j] + r) - - 0.5*x[i]*x[i]*safe_atan2(z[k]*y[j], x[i]*r) - - 0.5*y[j]*y[j]*safe_atan2(z[k]*x[i], y[j]*r) - - 0.5*z[k]*z[k]*safe_atan2(x[i]*y[j], z[k]*r)); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density */ - res *= G*prism.density; - - return res; -} - - -/* Calculates the x component of gravitational attraction cause by a prism. */ -double prism_gx(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - - kernel = -(y[j]*safe_log(z[k] + r) + z[k]*safe_log(y[j] + r) - - x[i]*safe_atan2(z[k]*y[j], x[i]*r)); - - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to mGal units */ - res *= G*SI2MGAL*prism.density; - - return res; -} - - -/* Calculates the y component of gravitational attraction cause by a prism. */ -double prism_gy(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - - kernel = -(z[k]*safe_log(x[i] + r) + x[i]*safe_log(z[k] + r) - - y[j]*safe_atan2(z[k]*x[i], y[j]*r)); - - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to mGal units */ - res *= G*SI2MGAL*prism.density; - - return res; -} - - -/* Calculates the z component of gravitational attraction cause by a prism. */ -double prism_gz(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - - kernel = -(x[i]*safe_log(y[j] + r) + y[j]*safe_log(x[i] + r) - - z[k]*safe_atan2(x[i]*y[j], z[k]*r)); - - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to mGal units */ - res *= G*SI2MGAL*prism.density; - - return res; -} - - -/* Calculates the gxx gravity gradient tensor component cause by a prism. */ -double prism_gxx(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - kernel = -safe_atan2(z[k]*y[j], x[i]*r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} - -/* Calculates the gxy gravity gradient tensor component cause by a prism. */ -double prism_gxy(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r, xtmp, ytmp; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - if(x[i] == 0 && y[j] == 0 && z[k] < 0) - { - xtmp = 0.0001*(prism.x2 - prism.x1); - ytmp = 0.0001*(prism.y2 - prism.y1); - r = sqrt(xtmp*xtmp + ytmp*ytmp + z[k]*z[k]); - } - else - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - } - kernel = safe_log(z[k] + r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} - - -/* Calculates the gxz gravity gradient tensor component cause by a prism. */ -double prism_gxz(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r, xtmp, ztmp; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - if(x[i] == 0 && z[k] == 0 && y[j] < 0) - { - xtmp = 0.0001*(prism.x2 - prism.x1); - ztmp = 0.0001*(prism.z2 - prism.z1); - r = sqrt(xtmp*xtmp + ztmp*ztmp + y[j]*y[j]); - } - else - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - } - kernel = safe_log(y[j] + r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} - - -/* Calculates the gyy gravity gradient tensor component cause by a prism. */ -double prism_gyy(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - kernel = -safe_atan2(z[k]*x[i], y[j]*r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} - - -/* Calculates the gyz gravity gradient tensor component cause by a prism. */ -double prism_gyz(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r, ytmp, ztmp; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - if(z[k] == 0 && y[j] == 0 && x[i] < 0) - { - ytmp = 0.0001*(prism.y2 - prism.y1); - ztmp = 0.0001*(prism.z2 - prism.z1); - r = sqrt(ztmp*ztmp + ytmp*ytmp + x[i]*x[i]); - } - else - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - } - kernel = safe_log(x[i] + r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} - - -/* Calculates the gzz gravity gradient tensor component cause by a prism. */ -double prism_gzz(PRISM prism, double xp, double yp, double zp) -{ - double x[2], y[2], z[2], kernel, res, r; - register int i, j, k; - - /* First thing to do is make P the origin of the coordinate system */ - x[0] = prism.x2 - xp; - x[1] = prism.x1 - xp; - y[0] = prism.y2 - yp; - y[1] = prism.y1 - yp; - z[0] = prism.z2 - zp; - z[1] = prism.z1 - zp; - - res = 0; - - /* Evaluate the integration limits */ - for(k=0; k<=1; k++) - { - for(j=0; j<=1; j++) - { - for(i=0; i<=1; i++) - { - r = sqrt(x[i]*x[i] + y[j]*y[j] + z[k]*z[k]); - kernel = -safe_atan2(x[i]*y[j], z[k]*r); - res += pow(-1, i + j + k)*kernel; - } - } - } - - /* Now all that is left is to multiply res by the gravitational constant and - density and convert it to Eotvos units */ - res *= G*SI2EOTVOS*prism.density; - - return res; -} diff --git a/dep/tesseroids/lib/grav_prism.h b/dep/tesseroids/lib/grav_prism.h deleted file mode 100644 index f4e6b49..0000000 --- a/dep/tesseroids/lib/grav_prism.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the rectangular prism using the formulas in Nagy et al. (2000). - -The coordinate system used is that of the article, ie: - -x -> North y -> East z -> Down - -References ----------- - -* Nagy, D., Papp, G., Benedek, J. (2000): The gravitational potential and its - derivatives for the prism. Journal of Geodesy, 74, 552–560. -*/ - - -#ifndef _TESSEROIDS_GRAV_PRISM_H_ -#define _TESSEROIDS_GRAV_PRISM_H_ - - -/* Needed for definition of PRISM */ -#include "geometry.h" - -extern double safe_atan2(double y, double x); -extern double prism_pot(PRISM prism, double xp, double yp, double zp); -extern double prism_gx(PRISM prism, double xp, double yp, double zp); -extern double prism_gy(PRISM prism, double xp, double yp, double zp); -extern double prism_gz(PRISM prism, double xp, double yp, double zp); -extern double prism_gxx(PRISM prism, double xp, double yp, double zp); -extern double prism_gxy(PRISM prism, double xp, double yp, double zp); -extern double prism_gxz(PRISM prism, double xp, double yp, double zp); -extern double prism_gyy(PRISM prism, double xp, double yp, double zp); -extern double prism_gyz(PRISM prism, double xp, double yp, double zp); -extern double prism_gzz(PRISM prism, double xp, double yp, double zp); - -#endif diff --git a/dep/tesseroids/lib/grav_prism_sph.c b/dep/tesseroids/lib/grav_prism_sph.c deleted file mode 100644 index e9e2752..0000000 --- a/dep/tesseroids/lib/grav_prism_sph.c +++ /dev/null @@ -1,219 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the rectangular prism in spherical coordinates. -Uses the formulas in Nagy et al. (2000). - -References ----------- - -* Nagy, D., Papp, G., Benedek, J. (2000): The gravitational potential and its - derivatives for the prism. Journal of Geodesy, 74, 552–560. -*/ - - -#include -#include "geometry.h" -#include "constants.h" -#include "grav_prism_sph.h" -#include "grav_prism.h" - - -/* Transform spherical coordinates to local Cartesian coordinates of the prism*/ -int global2local(double lon, double lat, double r, PRISM prism, double *x, - double *y, double *z) -{ - double cosa, cosb, sina, sinb, d2r, X, Y, Z; - - /* degrees to radians */ - d2r = PI/180.; - - X = r*cos(d2r*lat)*cos(d2r*lon) - - prism.r*cos(d2r*prism.lat)*cos(d2r*prism.lon); - Y = r*cos(d2r*lat)*sin(d2r*lon) - - prism.r*cos(d2r*prism.lat)*sin(d2r*prism.lon); - Z = r*sin(d2r*lat) - prism.r*sin(d2r*prism.lat); - - cosa = cos(d2r*(90 - prism.lat)); - sina = sin(d2r*(90 - prism.lat)); - cosb = cos(d2r*(180 - prism.lon)); - sinb = sin(d2r*(180 - prism.lon)); - - *x = X*cosa*cosb - Y*cosa*sinb + Z*sina; - *y = -X*sinb - Y*cosb; - /* -1 because Nagy et al. (2000) use z->down */ - *z = -1*(-X*sina*cosb + Y*sina*sinb + Z*cosa); - - return 0; -} - - -/* Rotate the gravity vector from the prisms coordinate system to the local -system of the computation point. */ -int g_prism2point(double *atprism, PRISM prism, double lon, double lat, - double r, double *atpoint) -{ - #define POS(x, y, cols) (((x)*(cols))+(y)) - - register int i, k; - double R[9], d2r, cosbeta, sinbeta, cosphi, sinphi, cosphil, sinphil; - - /* degrees to radians */ - d2r = PI/180.; - - cosbeta = cos(d2r*(prism.lon - lon)); - sinbeta = sin(d2r*(prism.lon - lon)); - cosphi = cos(d2r*lat); - sinphi = sin(d2r*lat); - cosphil = cos(d2r*prism.lat); - sinphil = sin(d2r*prism.lat); - - /* The transformation matrix */ - R[0] = cosbeta*sinphi*sinphil + cosphi*cosphil; - R[1] = sinbeta*sinphi; - R[2] = -cosbeta*sinphi*cosphil + cosphi*sinphil; - R[3] = -sinbeta*sinphil; - R[4] = cosbeta; - R[5] = sinbeta*cosphil; - R[6] = -cosbeta*cosphi*sinphil + sinphi*cosphil; - R[7] = -sinbeta*cosphi; - R[8] = cosbeta*cosphi*cosphil + sinphi*sinphil; - - /* Matrix-vector multiplication */ - for(i = 0; i < 3; i++) - { - atpoint[i] = 0; - for(k = 0; k < 3; k++) - { - atpoint[i] += R[POS(i, k, 3)]*atprism[k]; - } - } - #undef POS - return 0; -} - - -/* Rotate the gravity tensor from the prisms coordinate system to the local -system of the computation point. */ -int ggt_prism2point(double *atprism, PRISM prism, double lon, double lat, - double r, double *atpoint) -{ - #define POS(x, y, cols) (((x)*(cols))+(y)) - - register int i, j, k; - double R[9], tmp[9], d2r, cosbeta, sinbeta, cosphi, sinphi, cosphil, sinphil; - - /* degrees to radians */ - d2r = PI/180.; - - cosbeta = cos(d2r*(prism.lon - lon)); - sinbeta = sin(d2r*(prism.lon - lon)); - cosphi = cos(d2r*lat); - sinphi = sin(d2r*lat); - cosphil = cos(d2r*prism.lat); - sinphil = sin(d2r*prism.lat); - - /* The transformation matrix */ - R[0] = cosbeta*sinphi*sinphil + cosphi*cosphil; - R[1] = sinbeta*sinphi; - R[2] = -cosbeta*sinphi*cosphil + cosphi*sinphil; - R[3] = -sinbeta*sinphil; - R[4] = cosbeta; - R[5] = sinbeta*cosphil; - R[6] = -cosbeta*cosphi*sinphil + sinphi*cosphil; - R[7] = -sinbeta*cosphi; - R[8] = cosbeta*cosphi*cosphil + sinphi*sinphil; - - /* Multiply tmp = R*Tensor */ - for(i = 0; i < 3; i++) - { - for(j = 0; j < 3; j++) - { - tmp[POS(i, j, 3)] = 0; - for(k = 0; k < 3; k++) - { - tmp[POS(i, j, 3)] += R[POS(i, k, 3)]*atprism[POS(k, j, 3)]; - } - } - } - - /* Multiply tmp*R^T */ - for(i = 0; i < 3; i++) - { - for(j = 0; j < 3; j++) - { - atpoint[POS(i, j, 3)] = 0; - for(k = 0; k < 3; k++) - { - atpoint[POS(i, j, 3)] += tmp[POS(i, k, 3)]*R[POS(j, k, 3)]; - } - } - } - - #undef POS - return 0; -} - - -/* Calculates the gravity gradient tensor caused by a prism. */ -int prism_ggt_sph(PRISM prism, double lonp, double latp, double rp, double *ggt) -{ - double x = 0, y = 0, z = 0, ggtprism[9], ggtpoint[9]; - - global2local(lonp, latp, rp, prism, &x, &y, &z); - ggtprism[0] = prism_gxx(prism, x, y, z); - ggtprism[1] = prism_gxy(prism, x, y, z); - /* -1 because the prisms z is Down, but transformation assumes z is Up */ - /* z -> Up is the system of the tesseroid */ - ggtprism[2] = -1*prism_gxz(prism, x, y, z); - ggtprism[3] = ggtprism[1]; - ggtprism[4] = prism_gyy(prism, x, y, z); - /* Same as xz */ - ggtprism[5] = -1*prism_gyz(prism, x, y, z); - ggtprism[6] = ggtprism[2]; - ggtprism[7] = ggtprism[5]; - ggtprism[8] = -(ggtprism[0] + ggtprism[4]); - ggt_prism2point(ggtprism, prism, lonp, latp, rp, ggtpoint); - ggt[0] = ggtpoint[0]; - ggt[1] = ggtpoint[1]; - ggt[2] = ggtpoint[2]; - ggt[3] = ggtpoint[4]; - ggt[4] = ggtpoint[5]; - ggt[5] = ggtpoint[8]; - - return 0; -} - - -/* Calculates the gravitational attraction caused by a prism. */ -int prism_g_sph(PRISM prism, double lonp, double latp, double rp, double *gx, - double *gy, double *gz) -{ - double x = 0, y = 0, z = 0, gprism[3], gpoint[3]; - - global2local(lonp, latp, rp, prism, &x, &y, &z); - gprism[0] = prism_gx(prism, x, y, z); - gprism[1] = prism_gy(prism, x, y, z); - /* Nagy wants z down, but the transformation assumes z up */ - gprism[2] = -prism_gz(prism, x, y, z); - g_prism2point(gprism, prism, lonp, latp, rp, gpoint); - *gx = gpoint[0]; - *gy = gpoint[1]; - /* Put z back down again to maintain the normal convention for gz */ - *gz = -gpoint[2]; - - return 0; -} - -/* Calculates the potential caused by a prism. */ -double prism_pot_sph(PRISM prism, double lonp, double latp, double rp) -{ - double x = 0, y = 0, z = 0, res; - - global2local(lonp, latp, rp, prism, &x, &y, &z); - res = prism_pot(prism, x, y, z); - - return res; -} - - - diff --git a/dep/tesseroids/lib/grav_prism_sph.h b/dep/tesseroids/lib/grav_prism_sph.h deleted file mode 100644 index 68a0111..0000000 --- a/dep/tesseroids/lib/grav_prism_sph.h +++ /dev/null @@ -1,100 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the rectangular prism in spherical coordinates. -Uses the formulas in Nagy et al. (2000). - -References ----------- - -* Nagy, D., Papp, G., Benedek, J. (2000): The gravitational potential and its - derivatives for the prism. Journal of Geodesy, 74, 552–560. -*/ - - -#ifndef _TESSEROIDS_GRAV_PRISM_SPH_H_ -#define _TESSEROIDS_GRAV_PRISM_SPH_H_ - - -/* Needed for definition of PRISM */ -#include "geometry.h" - -/* Transform spherical coordinates to local Cartesian coordinates of the prism - -Parameters: - -* lon, lat, r: spherical coordinates of the point. -* prism: a prism whose lon, lat, r values will be used as the origin of the - local coordinate system. -* x, y, z: used to return the x, y, z Cartesian coordinates of the point. -*/ -extern int global2local(double lon, double lat, double r, PRISM prism, - double *x, double *y, double *z); - - -/* Rotate the g vector from the prisms coordinate system to the local -system of the computation point. - -Parameters: - -* atprism: the 3 component gravity vector in the coordinates of the prism. -* prism: the prism used to calculate atprism. -* lon, lat, r: coordinates of the computation point. -* atpoint: used to return the 3 component gravity vector in the coordinates of - the computation point. -*/ -extern int g_prism2point(double *atprism, PRISM prism, double lon, double lat, - double r, double *atpoint); - - -/* Rotate the g vector from the prisms coordinate system to the local -system of the computation point. - -Parameters: - -* atprism: the 9 component gravity tensor in the coordinates of the prism. - The order is: gxx, gxy, gxz, gyx, gyy, gyz, gzx, gzy, gzz -* prism: the prism used to calculate atprism. -* lon, lat, r: coordinates of the computation point. -* atpoint: used to return the 9 component gravity tensor in the coordinates of - the computation point. -*/ -extern int ggt_prism2point(double *atprism, PRISM prism, double lon, double lat, - double r, double *atpoint); - - -/* Calculates the gravity gradient tensor caused by a prism. - -Parameters: - -* prism: the prism whose effect will be calculated. -* lonp, latp, rp: coordinates of the computation point. -* ggt: 6 element array used to return the gradient tensor. The order is: - gxx, gxy, gxz, gyy, gyz, gzz -*/ -extern int prism_ggt_sph(PRISM prism, double lonp, double latp, double rp, - double *ggt); - -/* Calculates the gravitational attraction caused by a prism. - -Parameters: - -* prism: the prism whose effect will be calculated. -* lonp, latp, rp: coordinates of the computation point. -* gx, gy, gz: used to return the 3 components of the gravity vector -*/ -extern int prism_g_sph(PRISM prism, double lonp, double latp, double rp, - double *gx, double *gy, double *gz); - -/* Calculates the potential caused by a prism. - -Parameters: - -* prism: the prism whose effect will be calculated. -* lonp, latp, rp: coordinates of the computation point. - -Returns: - -* the calculated potential -*/ -extern double prism_pot_sph(PRISM prism, double lonp, double latp, double rp); -#endif diff --git a/dep/tesseroids/lib/grav_sphere.c b/dep/tesseroids/lib/grav_sphere.c deleted file mode 100644 index 411e925..0000000 --- a/dep/tesseroids/lib/grav_sphere.c +++ /dev/null @@ -1,252 +0,0 @@ -/* -This module contains a set of functions that calculate the gravitational -potential and its first and second derivatives for the sphere in spherical -coordinates. - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out. So it would be normal for a sphere of positive -density to have negative gz - -References ----------- - -* Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - - -#include -#include "geometry.h" -#include "constants.h" -#include "grav_sphere.h" - - -/* Calculates the potential caused by a sphere */ -double sphere_pot(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., coslatp, coslatc, sinlatp, sinlatc, - coslon; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*( - sinlatp*sinlatc + coslatp*coslatc*coslon); - - return G*mass/sqrt(l_sqr); -} - - -/* Calculates the gx component of gravitational attraction caused by a sphere */ -double sphere_gx(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*( - sinlatp*sinlatc + coslatp*coslatc*coslon); - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - return G*SI2MGAL*mass*(sphere.rc*kphi)/pow(l_sqr, 1.5); -} - - -/* Calculates the gy component of gravitational attraction caused by a sphere */ -double sphere_gy(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., cospsi, coslatc, kern; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatc = cos(d2r*sphere.latc); - - cospsi = sin(d2r*latp)*sin(d2r*sphere.latc) + cos(d2r*latp)*coslatc* - cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - kern = (sphere.rc*coslatc*sin(d2r*(sphere.lonc - lonp)))/pow(l_sqr, 1.5); - - return G*SI2MGAL*mass*kern; -} - - -/* Calculates the gz component of gravitational attraction caused by a sphere */ -double sphere_gz(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., cospsi; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - cospsi = sin(d2r*latp)*sin(d2r*sphere.latc) + cos(d2r*latp)* - cos(d2r*sphere.latc)*cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - return G*SI2MGAL*mass*(sphere.rc*cospsi - rp)/pow(l_sqr, 1.5); -} - - -/* Calculate the xx component of gravity gradient tensor cause by a sphere */ -double sphere_gxx(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, kern; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*(sinlatp*sinlatc + - coslatp*coslatc*coslon); - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kern = (3*sphere.rc*kphi*sphere.rc*kphi - l_sqr)/pow(l_sqr, 2.5); - - return G*SI2EOTVOS*mass*kern; -} - - -/* Calculate the xy component of gravity gradient tensor cause by a sphere */ -double sphere_gxy(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, kern; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*(sinlatp*sinlatc + - coslatp*coslatc*coslon); - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kern = (3*sphere.rc*sphere.rc*kphi*coslatp*sin(d2r*(sphere.lonc - lonp)))/ - pow(l_sqr, 2.5); - - return G*SI2EOTVOS*mass*kern; -} - - -/* Calculate the xz component of gravity gradient tensor cause by a sphere */ -double sphere_gxz(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, kern, cospsi; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - - kern = 3*sphere.rc*kphi*(sphere.rc*cospsi - rp)/pow(l_sqr, 2.5); - - return G*SI2EOTVOS*mass*kern; -} - - -/* Calculate the yy component of gravity gradient tensor cause by a sphere */ -double sphere_gyy(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, kern, cospsi; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - sinlon = sin(d2r*(sphere.lonc - lonp)); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - kern = (3*sphere.rc*sphere.rc*coslatc*coslatc*sinlon*sinlon - l_sqr)/ - pow(l_sqr, 2.5); - - return G*SI2EOTVOS*mass*kern; -} - - -/* Calculate the yz component of gravity gradient tensor cause by a sphere */ -double sphere_gyz(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, kern, cospsi; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - coslatp = cos(d2r*latp); - coslatc = cos(d2r*sphere.latc); - sinlatp = sin(d2r*latp); - sinlatc = sin(d2r*sphere.latc); - coslon = cos(d2r*(lonp - sphere.lonc)); - sinlon = sin(d2r*(sphere.lonc - lonp)); - - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - kern = 3*sphere.rc*coslatc*sinlon*(sphere.rc*cospsi - rp)/pow(l_sqr, 2.5); - - return G*SI2EOTVOS*mass*kern; -} - - -/* Calculate the zz component of gravity gradient tensor cause by a sphere */ -double sphere_gzz(SPHERE sphere, double lonp, double latp, double rp) -{ - double mass, l_sqr, d2r = PI/180., deltaz, cospsi; - - mass = (double)(sphere.density*4.*PI*sphere.r*sphere.r*sphere.r)/3.; - - cospsi = sin(d2r*latp)*sin(d2r*sphere.latc) + cos(d2r*latp)* - cos(d2r*sphere.latc)*cos(d2r*(lonp - sphere.lonc)); - - l_sqr = rp*rp + sphere.rc*sphere.rc - 2*rp*sphere.rc*cospsi; - - deltaz = sphere.rc*cospsi - rp; - - return G*SI2EOTVOS*mass*(3*deltaz*deltaz - l_sqr)/pow(l_sqr, 2.5); -} diff --git a/dep/tesseroids/lib/grav_sphere.h b/dep/tesseroids/lib/grav_sphere.h deleted file mode 100644 index 97d5246..0000000 --- a/dep/tesseroids/lib/grav_sphere.h +++ /dev/null @@ -1,267 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the sphere in spherical coordinates. - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out. So it would be normal for a sphere of -positive density to have negative gz. - -Used the generic formula for gravity gradient computation of tesseroids by -Grombein et al. (2010). - -References ----------- - -* Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - -#ifndef _TESSEROIDS_GRAV_SPHERE_H_ -#define _TESSEROIDS_GRAV_SPHERE_H_ - - -/* Needed for definition of SPHERE */ -#include "geometry.h" - - -/** Calculates potential caused by a sphere. - -\f[ -V(r_p,\phi_p,\lambda_p) = \frac{G M}{\ell} -\f] - -The position of the sphere and computation point should be in spherical -coordinates. - -Input and output values in SI units and degrees - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_pot(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gx caused by a sphere (Grombein et al., 2010). - -\f[ -g_x(r_p,\phi_p,\lambda_p) = G M \frac{r_c K_{\phi}}{\ell^3} -\f] - -The position of the sphere and computation point should be in spherical -coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gx(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gy caused by a sphere (Grombein et al., 2010). - -\f[ -g_y(r_p,\phi_p,\lambda_p) = G M \frac{r_c\cos\phi_c\sin(\phi_c-\phi_p)}{\ell^3} -\f] - -The position of the sphere and computation point should be in spherical -coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gy(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gz caused by a sphere (Grombein et al., 2010). - -\f[ -g_z(r_p,\phi_p,\lambda_p) = G M \frac{r_c\cos\psi - r_p}{\ell^3} -\f] - -The position of the sphere and computation point should be in spherical -coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gz(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gxx caused by a sphere (Grombein et al., 2010). - -\f[ -g_{xx}(r_p,\phi_p,\lambda_p) = G M \frac{3(r_c K_{\phi})^2 - \ell^2}{\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gxx(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gxy caused by a sphere (Grombein et al., 2010). - -\f[ -g_{xy}(r_p,\phi_p,\lambda_p) = G M \frac{3r_c^2 K_{\phi}\cos\phi_c - \sin(\lambda_c - \lambda_p)}{\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gxy(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gxz caused by a sphere (Grombein et al., 2010). - -\f[ -g_{xz}(r_p,\phi_p,\lambda_p) = G M \frac{3 r_c K_{\phi}(r_c \cos\psi - r_p)} - {\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gxz(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gyy caused by a sphere (Grombein et al., 2010). - -\f[ -g_{yy}(r_p,\phi_p,\lambda_p) = G M \frac{3(r_c\cos\phi_c - \sin(\lambda_c - \lambda_p))^2 - \ell^2}{\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gyy(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gyz caused by a sphere (Grombein et al., 2010). - -\f[ -g_{yz}(r_p,\phi_p,\lambda_p) = G M \frac{3 r_c \cos\phi_c \sin(\lambda_c - - \lambda_p)(r_c\cos\psi - r_p)}{\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gyz(SPHERE sphere, double lonp, double latp, double rp); - - -/** Calculates gzz caused by a sphere (Grombein et al., 2010). - -\f[ -g_{zz}(r_p,\phi_p,\lambda_p) = G M \frac{3(r_c\cos\psi-r_p)^2 - \ell^2}{\ell^5} -\f] - -The position of the sphere and computation point are in spherical coordinates. - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -@param sphere data structure describing the sphere -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P - -@return field calculated at P -*/ -extern double sphere_gzz(SPHERE sphere, double lonp, double latp, double rp); - - -#endif diff --git a/dep/tesseroids/lib/grav_tess.c b/dep/tesseroids/lib/grav_tess.c deleted file mode 100644 index 3aeac39..0000000 --- a/dep/tesseroids/lib/grav_tess.c +++ /dev/null @@ -1,580 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the tesseroid. - -References ----------- - -* Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - - -#include -#include "logger.h" -#include "geometry.h" -#include "glq.h" -#include "constants.h" -#include "grav_tess.h" - -#define STKSIZE 10000 - - -/* Calculates the field of a tesseroid model at a given point. */ -double calc_tess_model(TESSEROID *model, int size, double lonp, double latp, - double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ)) -{ - double res; - int tess; - - res = 0; - for(tess = 0; tess < size; tess++) - { - glq_set_limits(model[tess].w, model[tess].e, glq_lon); - glq_set_limits(model[tess].s, model[tess].n, glq_lat); - glq_set_limits(model[tess].r1, model[tess].r2, glq_r); - glq_precompute_sincos(glq_lat); - res += field(model[tess], lonp, latp, rp, *glq_lon, *glq_lat, *glq_r); - } - return res; -} - - -/* Adaptatively calculate the field of a tesseroid model at a given point */ -double calc_tess_model_adapt(TESSEROID *model, int size, double lonp, - double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ), - double ratio) -{ - double res, distance, lont, latt, rt, d2r = PI/180., - coslatp, sinlatp, rp_sqr, rlonp, - Llon, Llat, Lr, - sinlatt, coslatt; - int t, n, nlon, nlat, nr, stktop = 0; - TESSEROID stack[STKSIZE], tess; - - #define SQ(x) (x)*(x) - /* Pre-compute these things out of the loop */ - rlonp = d2r*lonp; - rp_sqr = SQ(rp); - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - res = 0; - for(t = 0; t < size; t++) - { - /* Initialize the tesseroid division stack (a LIFO structure) */ - stack[0] = model[t]; - stktop = 0; - while(stktop >= 0) - { - /* Pop the stack */ - tess = stack[stktop]; - stktop--; - /* Compute the distance from the computation point to the - * geometric center of the tesseroid. */ - rt = 0.5*(tess.r2 + tess.r1); - lont = d2r*0.5*(tess.w + tess.e); - latt = d2r*0.5*(tess.s + tess.n); - sinlatt = sin(latt); - coslatt = cos(latt); - distance = sqrt(rp_sqr + SQ(rt) - 2*rp*rt*( - sinlatp*sinlatt + coslatp*coslatt*cos(rlonp - lont))); - /* Get the size of each dimension of the tesseroid in meters */ - Llon = tess.r2*acos( - SQ(sinlatt) + SQ(coslatt)*cos(d2r*(tess.e - tess.w))); - Llat = tess.r2*acos( - sin(d2r*tess.n)*sin(d2r*tess.s) + - cos(d2r*tess.n)*cos(d2r*tess.s)); - Lr = tess.r2 - tess.r1; - /* Number of times to split the tesseroid in each dimension */ - nlon = 1; - nlat = 1; - nr = 1; - /* Check if the tesseroid is at a suitable distance (defined - * the value of "ratio"). If not, mark that dimension for - * division. */ - if(distance < ratio*Llon) - { - nlon = 2; - } - if(distance < ratio*Llat) - { - nlat = 2; - } - if(distance < ratio*Lr) - { - nr = 2; - } - /* In case none of the dimensions need dividing, - * put the GLQ roots in the proper scale and compute the - * gravitational field of the tesseroid. */ - /* Also compute the effect if the tesseroid stack if full - * (but warn the user that the computation might not be very - * precise). */ - if((nlon == 1 && nlat == 1 && nr == 1) - || (nlon*nlat*nr + stktop >= STKSIZE)) - { - if(nlon*nlat*nr + stktop >= STKSIZE) - { - log_error( - "Stack overflow: " - "tesseroid %d in the model file on " - "lon=%lf lat=%lf height=%lf." - "\n Calculated without fully dividing the tesseroid. " - "Accuracy of the solution cannot be guaranteed." - "\n This is probably caused by a computation point " - "too close to the tesseroid." - "\n Try increasing the computation height." - "\n *Expert users* can try modifying the " - "distance-size ratio." - "\n *Beware* that this might affect " - "the accuracy of the solution.", - t + 1, lonp, latp, rp); - } - glq_set_limits(tess.w, tess.e, glq_lon); - glq_set_limits(tess.s, tess.n, glq_lat); - glq_set_limits(tess.r1, tess.r2, glq_r); - glq_precompute_sincos(glq_lat); - res += field(tess, lonp, latp, rp, *glq_lon, *glq_lat, *glq_r); - } - else - { - /* Divide the tesseroid in each dimension that needs dividing - * Put each of the smaller tesseroids on the stack for - * computing in the next iteration. */ - n = split_tess(tess, nlon, nlat, nr, &stack[stktop + 1]); - stktop += n; - /* Sanity check */ - if(n != nlon*nlat*nr) - { - log_error("Splitting into %d instead of %d", n, - nlon*nlat*nr); - } - } - } - } - #undef SQ - return res; -} - - -/* Calculates potential caused by a tesseroid. */ -double tess_pot(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, rc, kappa, res, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - res += wlon*wlat*wr*kappa/sqrt(l_sqr); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= G*tess.density*scale; - return res; -} - - -/* Calculates gx caused by a tesseroid. */ -double tess_gx(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, rc, kappa, res, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - res += wlon*wlat*wr*kappa*(rc*kphi)/pow(l_sqr, 1.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2MGAL*G*tess.density*scale; - return res; -} - - -/* Calculates gy caused by a tesseroid. */ -double tess_gy(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, rc, kappa, res, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - res += wlon*wlat*wr*kappa*(rc*coslatc*sinlon)/pow(l_sqr, 1.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2MGAL*G*tess.density*scale; - return res; -} - - -/* Calculates gz caused by a tesseroid. */ -double tess_gz(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, cospsi, rc, kappa, res, - wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - res += wlon*wlat*wr*kappa*(rc*cospsi - rp)/pow(l_sqr, 1.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2MGAL*G*tess.density*scale; - /* Used this to make z point down */ - return -1*res; -} - - -/* Calculates gxx caused by a tesseroid. */ -double tess_gxx(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, rc, kappa, res, l5, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - l5 = pow(l_sqr, 2.5); - kappa = rc*rc*coslatc; - res += wlon*wlat*wr*kappa*(3*rc*kphi*rc*kphi - l_sqr)/l5; - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} - - -/* Calculates gxy caused by a tesseroid. */ -double tess_gxy(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, rc, kappa, deltax, deltay, res, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - deltax = rc*kphi; - deltay = rc*coslatc*sinlon; - res += wlon*wlat*wr*kappa*(3*deltax*deltay)/pow(l_sqr, 2.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} - - -/* Calculates gxz caused by a tesseroid. */ -double tess_gxz(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, kphi, coslatp, coslatc, sinlatp, sinlatc, - coslon, cospsi, rc, kappa, deltax, deltaz, res, - wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - kphi = coslatp*sinlatc - sinlatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - deltax = rc*kphi; - deltaz = rc*cospsi - rp; - res += wlon*wlat*wr*kappa*(3*deltax*deltaz)/pow(l_sqr, 2.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} - - -/* Calculates gyy caused by a tesseroid. */ -double tess_gyy(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, rc, kappa, deltay, res, l5, - cospsi, wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - l5 = pow(l_sqr, 2.5); - kappa = rc*rc*coslatc; - deltay = rc*coslatc*sinlon; - res += wlon*wlat*wr*kappa*(3*deltay*deltay - l_sqr)/l5; - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} - - -/* Calculates gyz caused by a tesseroid. */ -double tess_gyz(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, sinlon, cospsi, rc, kappa, deltay, deltaz, res, - wlon, wlat, wr, scale; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - sinlon = sin(d2r*(glq_lon.nodes[k] - lonp)); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - kappa = rc*rc*coslatc; - deltay = rc*coslatc*sinlon; - deltaz = rc*cospsi - rp; - res += wlon*wlat*wr*kappa*(3*deltay*deltaz)/pow(l_sqr, 2.5); - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} - - -/* Calculates gzz caused by a tesseroid. */ -double tess_gzz(TESSEROID tess, double lonp, double latp, double rp, GLQ glq_lon, - GLQ glq_lat, GLQ glq_r) -{ - double d2r = PI/180., l_sqr, coslatp, coslatc, sinlatp, sinlatc, - coslon, cospsi, rc, kappa, deltaz, res, - wlon, wlat, wr, scale, l5; - register int i, j, k; - - coslatp = cos(d2r*latp); - sinlatp = sin(d2r*latp); - - res = 0; - - for(k = 0; k < glq_lon.order; k++) - { - coslon = cos(d2r*(lonp - glq_lon.nodes[k])); - wlon = glq_lon.weights[k]; - for(j = 0; j < glq_lat.order; j++) - { - sinlatc = glq_lat.nodes_sin[j]; - coslatc = glq_lat.nodes_cos[j]; - cospsi = sinlatp*sinlatc + coslatp*coslatc*coslon; - wlat = glq_lat.weights[j]; - for(i = 0; i < glq_r.order; i++) - { - wr = glq_r.weights[i]; - rc = glq_r.nodes[i]; - l_sqr = rp*rp + rc*rc - 2*rp*rc*cospsi; - l5 = pow(l_sqr, 2.5); - kappa = rc*rc*coslatc; - deltaz = rc*cospsi - rp; - res += wlon*wlat*wr*kappa*(3*deltaz*deltaz - l_sqr)/l5; - } - } - } - scale = d2r*(tess.e - tess.w)*d2r*(tess.n - tess.s)*(tess.r2 - tess.r1)/8.; - res *= SI2EOTVOS*G*tess.density*scale; - return res; -} diff --git a/dep/tesseroids/lib/grav_tess.h b/dep/tesseroids/lib/grav_tess.h deleted file mode 100644 index 1534c15..0000000 --- a/dep/tesseroids/lib/grav_tess.h +++ /dev/null @@ -1,503 +0,0 @@ -/* -Functions that calculate the gravitational potential and its first and second -derivatives for the tesseroid. - -The gravity gradients can be calculated using the general formula of -Grombein et al. (2010). -The integrals are solved using the Gauss-Legendre Quadrature rule -(Asgharzadeh et al., 2007). - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->Up (away from center of the Earth). - -To maintain the standard convention, only for component gz the z axis is -inverted, so a positive density results in positive gz. - -Example (Revised by Dr. Yi Zhang at 2021-05-05) -------- - -To calculate the gzz component due to a tesseroid on a regular grid: - - #include "stdio.h" - #include "tess/glq.h" - #include "tess/constants.h" - #include "tess/grav_tess.h" - - int main() - { - TESSEROID tess = {1000, -1, 1, 44, 46, MEAN_EARTH_RADIUS - 100000, MEAN_EARTH_RADIUS}; - GLQ *glqlon, *glqlat, *glqr; - double lon, lat, res, r = MEAN_EARTH_RADIUS + 150000; - int order = 8; - - glqlon = glq_new(order, tess.w, tess.e); - glqlat = glq_new(order, tess.s, tess.n); - glqr = glq_new(order, tess.r1, tess.r2); - glq_precompute_sincos(glqlon); - glq_precompute_sincos(glqlat); - glq_precompute_sincos(glqr); - - for(lat = 20; lat <= 70; lat += 0.5) - { - for(lon = -25; lon <= 25; lon += 0.5) - { - res = tess_gzz(tess, lon, lat, r, *glqlon, *glqlat, *glqr); - printf("%g %g %g\n", lon, lat, res); - } - } - - glq_free(glqlon); - glq_free(glqlat); - glq_free(glqr); - - return 0; - } - -References ----------- - -Asgharzadeh, M.F., von Frese, R.R.B., Kim, H.R., Leftwich, T.E. & Kim, J.W. -(2007): Spherical prism gravity effects by Gauss-Legendre quadrature integration. -Geophysical Journal International, 169, 1-11. - -Grombein, T.; Seitz, K.; Heck, B. (2010): Untersuchungen zur effizienten -Berechnung topographischer Effekte auf den Gradiententensor am Fallbeispiel der -Satellitengradiometriemission GOCE. -KIT Scientific Reports 7547, ISBN 978-3-86644-510-9, KIT Scientific Publishing, -Karlsruhe, Germany. -*/ - -#ifndef _TESSEROIDS_GRAV_TESS_H_ -#define _TESSEROIDS_GRAV_TESS_H_ - - -/* Needed for definition of TESSEROID */ -#include "geometry.h" -/* Needed for definition of GLQ */ -#include "glq.h" - - -/** Calculates the field of a tesseroid model at a given point. - -Uses a function pointer to call one of the apropriate field calculating -functions: - - tess_gx() - - tess_gy() - - tess_gz() - - tess_gxx() - - tess_gxy() - - tess_gxz() - - tess_gyy() - - tess_gyz() - - tess_gzz() - -To pass a function pointer to a function use something like: - -\verbatim -calc_tess_model(my_model, 10, 0, 10, 1, glqlon, glqlat, glqr, &tess_gx); -\endverbatim - -This would calculate the gx effect of the model my_model with 10 tesseroids -at lon=0 lat=10 r=1. - -Will re-use the same GLQ structures, and therefore the same order, for all -the tesseroids. - -@param model TESSEROID array defining the model -@param size number of tesseroids in the model -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon pointer to GLQ structure used for the longitudinal integration -@param glq_lat pointer to GLQ structure used for the latitudinal integration -@param glq_r pointer to GLQ structure used for the radial integration -@param field pointer to one of the field calculating functions - -@return the sum of the fields of all the tesseroids in the model -*/ -extern double calc_tess_model(TESSEROID *model, int size, double lonp, - double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ)); - - -/** Adaptatively calculate the field of a tesseroid model at a given point by -splitting the tesseroids if necessary to maintain GLQ stability. - -See calc_tess_model() for more details. - -Will re-use the same GLQ structures, and therefore the same order, for all -the tesseroids. - -@param model TESSEROID array defining the model -@param size number of tesseroids in the model -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon pointer to GLQ structure used for the longitudinal integration -@param glq_lat pointer to GLQ structure used for the latitudinal integration -@param glq_r pointer to GLQ structure used for the radial integration -@param field pointer to one of the field calculating functions -@param ratio distance-to-size ratio for doing adaptative resizing - -@return the sum of the fields of all the tesseroids in the model -*/ -extern double calc_tess_model_adapt(TESSEROID *model, int size, double lonp, - double latp, double rp, GLQ *glq_lon, GLQ *glq_lat, GLQ *glq_r, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ), - double ratio); - - -/** Calculates potential caused by a tesseroid. - -\f[ -V(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{1}{\ell}\kappa \ d r' d \phi' d \lambda' -\f] - -Input and output values in SI units and degrees! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_pot(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - - -/** Calculates gx caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_x(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{r'K_{\phi}}{\ell^3}\kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gx(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gy caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_y(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{r'\cos\phi'\sin(\lambda'-\lambda)}{\ell^3}\kappa - \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gy(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gz caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_z(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{r'\cos\psi - r_p}{\ell^3}\kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in mGal! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gz(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gxx caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{xx}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3(r' K_{\phi})^2 - \ell^2}{\ell^5}\kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gxx(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gxy caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{xy}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3{r'}^2 K_{\phi}\cos\phi'\sin(\lambda' - \lambda_p)}{\ell^5} - \kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gxy(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gxz caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{xz}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3 r' K_{\phi}(r' \cos\psi - r_p)}{\ell^5}\kappa - \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gxz(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gyy caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{yy}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3(r'\cos\phi'\sin(\lambda' - \lambda_p))^2 - \ell^2}{\ell^5} - \kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gyy(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gyz caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{yz}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3 r' \cos\phi' \sin(\lambda' - \lambda_p)(r'\cos\psi - r_p)}{\ell^5} - \kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gyz(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -/** Calculates gzz caused by a tesseroid (Grombein et al., 2010). - -\f[ -g_{zz}(r_p,\phi_p,\lambda_p) = G \rho \displaystyle\int_{\lambda_1}^{\lambda_2} - \displaystyle\int_{\phi_1}^{\phi_2} \displaystyle\int_{r_1}^{r_2} - \frac{3(r'\cos\psi-r_p)^2 - \ell^2}{\ell^5}\kappa \ d r' d \phi' d \lambda' -\f] - -The derivatives of the potential are made with respect to the local coordinate -system x->North, y->East, z->out - -Input values in SI units and degrees and returns values in Eotvos! - -Use function glq_new() to create the GLQ parameters required. The integration -limits should be set to: - - glq_lon: lower = tess.w and upper = tess.e (in degrees) - - glq_lat: lower = tess.s and upper = tess.n (in degrees) - - glq_r: lower = tess.r1 and upper = tess.r2 - -@param tess data structure describing the tesseroid -@param lonp longitude of the computation point P -@param latp latitude of the computation point P -@param rp radial coordinate of the computation point P -@param glq_lon GLQ structure with the nodes, weights and integration limits set - for the longitudinal integration -@param glq_lat GLQ structure with the nodes, weights and integration limits set - for the latitudinal integration -@param glq_r GLQ structure with the nodes, weights and integration limits set - for the radial integration - -@return field calculated at P -*/ -extern double tess_gzz(TESSEROID tess, double lonp, double latp, double rp, - GLQ glq_lon, GLQ glq_lat, GLQ glq_r); - -#endif diff --git a/dep/tesseroids/lib/logger.c b/dep/tesseroids/lib/logger.c deleted file mode 100644 index f3f2c62..0000000 --- a/dep/tesseroids/lib/logger.c +++ /dev/null @@ -1,110 +0,0 @@ -/* -Functions to set up logging. -*/ - - -#include -#include -#include -#include "logger.h" - -/* Initialize the logger so that it doesn't print by default */ -LOGGER logger = {100, 0, 100, NULL}; - - -/* Setup logging to stderr.*/ -void log_init(int level) -{ - logger.level = level; -} - - -/* Set logging to a file. */ -void log_tofile(FILE *logfile, int level) -{ - logger.filelogging = 1; - logger.logfile = logfile; - logger.file_level = level; -} - - -/* Log a message at debug level */ -/* These messages are always printed to stderr and the log file */ -void log_debug(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - fprintf(stderr, "DEBUG: %s\n", msg); - - if(logger.filelogging) - { - fprintf(logger.logfile, "DEBUG: %s\n", msg); - } -} - - -/* Log a message at info level */ -void log_info(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_INFO) - { - fprintf(stderr, "%s\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_INFO) - { - fprintf(logger.logfile, "%s\n", msg); - } -} - - -/* Log a message at warning level */ -void log_warning(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_WARNING) - { - fprintf(stderr, "WARNING: %s\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_WARNING) - { - fprintf(logger.logfile, "WARNING: %s\n", msg); - } -} - - -/* Log a message at error level */ -void log_error(const char *fmt, ...) -{ - char msg[10000]; - va_list args; - va_start(args, fmt); - vsprintf(msg, fmt, args); - va_end(args); - - if(logger.level <= LOG_ERROR) - { - fprintf(stderr, "\nERROR: %s\n\n", msg); - } - - if(logger.filelogging && logger.file_level <= LOG_ERROR) - { - fprintf(logger.logfile, "\nERROR: %s\n\n", msg); - } -} diff --git a/dep/tesseroids/lib/logger.h b/dep/tesseroids/lib/logger.h deleted file mode 100644 index 600764d..0000000 --- a/dep/tesseroids/lib/logger.h +++ /dev/null @@ -1,166 +0,0 @@ -/* -Functions to set up logging. - -Examples --------- - -Logging to stderr: - - #include "logger.h" - - void my_func(){ - log_info("From my_func!\n"); - } - - int main(){ - // Enable logging to stderr in debug level - // will only print messages of level DEBUG or higher - log_init(LOG_DEBUG); - log_debug("debug line. The code is %d", LOG_DEBUG); - log_info("info line. The code is %d", LOG_INFO); - log_warning("warning line. The code is %d", LOG_WARNING); - log_error("error line. The code is %d", LOG_ERROR); - my_func(); - return 0; - } - -will print: - - DEBUG: debug line. The code is 0 - info line. The code is 1 - WARNING: warning line. The code is 2 - ERROR: error line. The code is 3 - From my_func! - -If function log_init() is not called than logging to stderr is disabled and no -messages will be printed. - -Logging to a file: - - #include - #include "logger.h" - - void my_func(){ - log_info("From my_func!\n"); - log_debug("Should not appear in log file\n"); - } - - int main(){ - // Enable logging to file "log.txt" in info level - // will not print DEBUG level messages - // since log_init was not called, there is no logging to stderr - FILE *logfile = fopen("log.txt", "w"); - log_tofile(logfile, LOG_INFO); - log_debug("debug line. The code is %d", LOG_DEBUG); - log_info("info line. The code is %d", LOG_INFO); - log_warning("warning line. The code is %d", LOG_WARNING); - log_error("error line. The code is %d", LOG_ERROR); - my_func(); - return 0; - } - -File log.txt will look like: - - info line. The code is 1 - WARNING: warning line. The code is 2 - ERROR: error line. The code is 3 - From my_func! - -Note that you can combine loggin to stderr and to a file with different -levels in the same program. -*/ - -#ifndef _TESSEROIDS_LOGGER_H_ -#define _TESSEROIDS_LOGGER_H_ - -/* Needed for definition of FILE */ -#include - - -/** Logging level for debug messages */ -#define LOG_DEBUG 1 -/** Logging level for general information */ -#define LOG_INFO 2 -/** Logging level for warning messages */ -#define LOG_WARNING 3 -/** Logging level for error messages */ -#define LOG_ERROR 4 - - -/** Keep the information on the global logger */ -typedef struct logger_struct -{ - int level; /**< level of logging */ - int filelogging; /**< flag to know wether loggint to a file is enabled */ - int file_level; /**< logging level for the file */ - FILE *logfile; /**< file to log to */ - -} LOGGER; - - -/** Global logger struct. Only declare in the main program! */ -extern LOGGER logger; - - -/** Setup logging to stderr. - -@param level level of logging to be made. Can be one of: - - LOG_DEBUG - - LOG_INFO - - LOG_WARNING - - LOG_ERROR -*/ -extern void log_init(int level); - - -/** Set logging to a file. - -@param logfile FILE pointer to the already open file to log to. -@param level level of logging to be made to the file. Can be one of: - - LOG_DEBUG - - LOG_INFO - - LOG_WARNING - - LOG_ERROR -*/ -extern void log_tofile(FILE *logfile, int level); - - -/** Log a message at debug level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -extern void log_debug(const char *fmt, ...); - - -/** Log a message at info level. - -Pass parameters in the same format as printf() - -Does not print "INFO: " in front of the message when logging - -Prints a newline at the end. -*/ -extern void log_info(const char *fmt, ...); - - -/** Log a message at warning level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -extern void log_warning(const char *fmt, ...); - - -/** Log a message at error level. - -Pass parameters in the same format as printf() - -Prints a newline at the end. -*/ -extern void log_error(const char *fmt, ...); - - -#endif diff --git a/dep/tesseroids/lib/parsers.c b/dep/tesseroids/lib/parsers.c deleted file mode 100644 index a51f189..0000000 --- a/dep/tesseroids/lib/parsers.c +++ /dev/null @@ -1,1410 +0,0 @@ -/* -Input and output parsing tools. -*/ - - -#include -#include -#include -#include -#include "logger.h" -#include "version.h" -#include "parsers.h" -#include "constants.h" -#include "geometry.h" - - -/* Parse basic command line arguments for programs */ -int parse_basic_args(int argc, char **argv, const char *progname, - BASIC_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, i; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->inputfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->inputfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - return 1; - } - if(parsed_args < total_args) - { - return 3; - } - return 0; -} - - -/* Parse command line arguments for tess2prism program */ -int parse_tess2prism_args(int argc, char **argv, const char *progname, - TESS2PRISM_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, i; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - args->flatten = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(!strcmp(params, "version")) - { - print_version(progname); - return 2; - } - else if(!strcmp(params, "flatten")) - { - args->flatten = 1; - } - else - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->inputfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->inputfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - return 1; - } - if(parsed_args < total_args) - { - return 3; - } - return 0; -} - - -/* Parse command line arguments for tessmass program */ -int parse_tessmass_args(int argc, char **argv, const char *progname, - TESSMASS_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, parsed_r = 0, i, nchar, - nread; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - args->use_range = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 'r': - { - if(parsed_r) - { - log_error("repeated argument -r"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf/%lf%n", &(args->low_dens), - &(args->high_dens), &nchar); - if(nread != 2 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_r = 1; - args->use_range = 1; - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->inputfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->inputfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - return 1; - } - if(parsed_args < total_args) - { - return 3; - } - return 0; -} - - -/* Parse command line arguments for tessmodgen program */ -int parse_tessmodgen_args(int argc, char **argv, const char *progname, - TESSMODGEN_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 2, parsed_s = 0, - parsed_z = 0, parsed_d = 0, i, nchar, nread; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - args->fix_density = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 's': - { - if(parsed_s) - { - log_error("repeated argument -s"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf/%lf%n", &(args->dlon), - &(args->dlat), &nchar); - if(nread != 2 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_s = 1; - parsed_args++; - break; - } - case 'z': - { - if(parsed_z) - { - log_error("repeated argument -z"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->ref), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_z = 1; - parsed_args++; - break; - } - case 'd': - { - if(parsed_d) - { - log_error("repeated argument -d"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->dens), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_d = 1; - args->fix_density = 1; - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - } - /* Check if parsing went well */ - if(bad_args > 0 || parsed_args != total_args) - { - if(parsed_args < total_args) - { - log_error("%s: missing input arguments. given %d out of %d.", - progname, parsed_args, total_args); - } - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - } - return 1; - } - return 0; -} - - -/* Parse command line arguments for tesslayers program */ -int parse_tesslayers_args(int argc, char **argv, const char *progname, - TESSLAYERS_ARGS *args, void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, parsed_s = 0, - i, nchar, nread; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 's': - { - if(parsed_s) - { - log_error("repeated argument -s"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf/%lf%n", &(args->dlon), - &(args->dlat), &nchar); - if(nread != 2 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_s = 1; - parsed_args++; - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - } - /* Check if parsing went well */ - if(bad_args > 0 || parsed_args != total_args) - { - if(parsed_args < total_args) - { - log_error("%s: missing input arguments. given %d out of %d.", - progname, parsed_args, total_args); - } - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - } - return 1; - } - return 0; -} - - -/* Parse command line arguments for tessg* programs */ -int parse_tessg_args(int argc, char **argv, const char *progname, - TESSG_ARGS *args, void (*print_help)(const char *)) -{ - int bad_args = 0, parsed_args = 0, total_args = 1, parsed_order = 0, - parsed_ratio = 0, i, nchar, nread; - char *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - args->lon_order = 2; - args->lat_order = 2; - args->r_order = 2; - args->adaptative = 1; - args->ratio = 0; /* zero means use the default for the program */ - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(progname); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 'a': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(!args->adaptative) - { - log_error("repeated option -a"); - bad_args++; - break; - } - args->adaptative = 0; - break; - case 'o': - { - if(parsed_order) - { - log_error("repeated option -o"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%d/%d/%d%n", &(args->lon_order), - &(args->lat_order), &(args->r_order), &nchar); - if(nread != 3 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_order = 1; - break; - } - case 't': - { - if(parsed_ratio) - { - log_error("repeated option -t"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->ratio), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_ratio = 1; - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - if(parsed_args == 0) - { - args->modelfname = argv[i]; - parsed_args++; - } - else - { - log_error("invalid argument '%s'. Already given model file %s", - argv[i], args->modelfname); - bad_args++; - } - } - } - /* Check if parsing went well */ - if(bad_args > 0 || parsed_args != total_args) - { - if(parsed_args < total_args) - { - log_error("%s: missing input file.", - progname, parsed_args, total_args); - } - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - } - return 1; - } - return 0; -} - - -/* Parse command line arguments for tessgrd program */ -int parse_tessgrd_args(int argc, char **argv, TESSGRD_ARGS *args, - void (*print_help)(void)) -{ - int bad_args = 0, parsed_args = 0, total_args = 3, parsed_r = 0, - parsed_b = 0, parsed_z = 0, i, nchar, nread; - char progname[] = "tessgrd", *params; - - /* Default values for options */ - args->verbose = 0; - args->logtofile = 0; - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 2; - case 'v': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - if(args->verbose) - { - log_error("repeated option -v"); - bad_args++; - break; - } - args->verbose = 1; - break; - - case 'l': - { - if(args->logtofile) - { - log_error("repeated option -l"); - bad_args++; - break; - } - params = &argv[i][2]; - if(strlen(params) == 0) - { - log_error("bad input argument -l. Missing filename."); - bad_args++; - } - else - { - args->logtofile = 1; - args->logfname = params; - } - break; - } - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 2; - } - break; - } - case 'r': - { - if(parsed_r) - { - log_error("repeated argument -r"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf/%lf/%lf/%lf%n", &(args->w), - &(args->e), &(args->s), &(args->n), &nchar); - if(nread != 4 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_args++; - parsed_r = 1; - break; - } - case 'b': - { - if(parsed_b) - { - log_error("repeated argument -b"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%d/%d%n", &(args->nlon), - &(args->nlat), &nchar); - if(nread != 2 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_args++; - parsed_b = 1; - break; - } - case 'z': - { - if(parsed_z) - { - log_error("repeated argument -z"); - bad_args++; - break; - } - params = &argv[i][2]; - nchar = 0; - nread = sscanf(params, "%lf%n", &(args->height), &nchar); - if(nread != 1 || *(params + nchar) != '\0') - { - log_error("bad input argument '%s'", argv[i]); - bad_args++; - } - parsed_args++; - parsed_z = 1; - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - } - /* Check if parsing went well */ - if(bad_args > 0 || parsed_args != total_args) - { - if(parsed_args < total_args) - { - log_error("%s: missing input arguments. given %d out of %d.", - progname, parsed_args, total_args); - } - if(parsed_args > total_args) - { - log_error("%s: too many input arguments. given %d, max %d.", - progname, parsed_args, total_args); - } - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - } - return 1; - } - return 0; -} - - -/* Strip trailing spaces and newlines from the end of a string */ -void strstrip(char *str) -{ - int i; - for(i = strlen(str) - 1; i >= 0; i--) - { - if(str[i] != ' ' && str[i] != '\n' && str[i] != '\r' && str[i] != '\0') - break; - } - str[i + 1] = '\0'; -} - - -/* Read a single tesseroid from a string */ -int gets_tess(const char *str, TESSEROID *tess) -{ - double w, e, s, n, top, bot, dens; - int nread, nchars; - - nread = sscanf(str, "%lf %lf %lf %lf %lf %lf %lf%n", &w, &e, &s, - &n, &top, &bot, &dens, &nchars); - if(nread != 7 || str[nchars] != '\0') - { - /* Something wrong with the tesseroid string */ - return 1; - } - if((w > e) || (s > n) || (top < bot)) - { - /* Model bounds in wrong order */ - return 2; - } - if((w == e) || (s == n) || (top == bot)) - { - /* Tesseroid has zero volume */ - return 3; - } - tess->w = w; - tess->e = e; - tess->s = s; - tess->n = n; - tess->r1 = MEAN_EARTH_RADIUS + bot; - tess->r2 = MEAN_EARTH_RADIUS + top; - tess->density = dens; - return 0; -} - - -/* Read tesseroids from an open file and store them in an array */ -TESSEROID * read_tess_model(FILE *modelfile, int *size) -{ - TESSEROID *model, *tmp; - int buffsize = 100, line, badinput = 0, error_exit = 0, gets_error; - char sbuff[10000]; - - /* Start with a single buffer allocation and expand later if necessary */ - model = (TESSEROID *)malloc(buffsize*sizeof(TESSEROID)); - if(model == NULL) - { - log_error("problem allocating initial memory to load tesseroid model."); - return NULL; - } - *size = 0; - for(line = 1; !feof(modelfile); line++) - { - if(fgets(sbuff, 10000, modelfile) == NULL) - { - if(ferror(modelfile)) - { - log_error("problem encountered reading line %d.", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(sbuff[0] == '#' || sbuff[0] == '\r' || sbuff[0] == '\n') - { - continue; - } - if(*size == buffsize) - { - buffsize += buffsize; - tmp = (TESSEROID *)realloc(model, buffsize*sizeof(TESSEROID)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem expanding memory for tesseroid model. Model is too big."); - return NULL; - } - model = tmp; - } - /* Remove any trailing spaces or newlines */ - strstrip(sbuff); - gets_error = gets_tess(sbuff, &model[*size]); - if(gets_error == 1) - { - log_error("bad/invalid tesseroid at line %d.", line); - badinput = 1; - continue; - } - if(gets_error == 2) - { - log_error("invalid tesseroid dimensions at line %d. Must be w < e, s < n, top > bottom.", line); - badinput = 1; - continue; - } - if(gets_error == 3) - { - log_warning("ignoring tesseroid with zero volume at line %d. This should not impact the computations.", line); - continue; - } - (*size)++; - } - } - if(badinput || error_exit) - { - free(model); - return NULL; - } - /* Adjust the size of the model */ - if(*size != 0) - { - tmp = (TESSEROID *)realloc(model, (*size)*sizeof(TESSEROID)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem freeing excess memory for tesseroid model."); - return NULL; - } - model = tmp; - } - return model; -} - - -/* Read a single rectangular prism from a string */ -int gets_prism(const char *str, PRISM *prism) -{ - double x1, x2, y1, y2, z1, z2, dens; - int nread, nchars; - - nread = sscanf(str, "%lf %lf %lf %lf %lf %lf %lf%n", &x1, &x2, &y1, &y2, - &z1, &z2, &dens, &nchars); - /* Check if there are extra characters in the line. This indicates - * that the model is wrong or was generated by tess2prism without the - * --flatten flag */ - if(nread != 7 || str[nchars] != '\0') - { - return 1; - } - prism->x1 = x1; - prism->x2 = x2; - prism->y1 = y1; - prism->y2 = y2; - prism->z1 = z1; - prism->z2 = z2; - prism->density = dens; - return 0; -} - - -/* Read a single rectangular prism and the spherical coordinates of its top -from a string */ -int gets_prism_sph(const char *str, PRISM *prism) -{ - double dx, dy, dz, dens, lon, lat, r; - int nread, nchars; - - nread = sscanf(str, "%lf %lf %lf %lf %lf %lf %lf%n", - &dx, &dy, &dz, &dens, &lon, &lat, &r, &nchars); - /* Check if there are extra characters in the line. This indicates - * that the model is wrong or was generated by tess2prism without the - * --flatten flag */ - if(nread != 7 || str[nchars] != '\0') - { - return 1; - } - prism->x1 = -0.5*dx; - prism->x2 = 0.5*dx; - prism->y1 = -0.5*dy; - prism->y2 = 0.5*dy; - prism->z1 = 0.; - prism->z2 = dz; - prism->density = dens; - prism->lon = lon; - prism->lat = lat; - prism->r = r; - return 0; -} - - -/* Read rectangular prisms from an open file and store them in an array. */ -PRISM * read_prism_model(FILE *modelfile, int pos, int *size) -{ - PRISM *model, *tmp; - int buffsize = 100, line, badinput = 0, error_exit = 0; - char sbuff[10000]; - - /* Start with a single buffer allocation and expand later if necessary */ - model = (PRISM *)malloc(buffsize*sizeof(PRISM)); - if(model == NULL) - { - log_error("problem allocating initial memory to load prism model."); - return NULL; - } - *size = 0; - for(line = 1; !feof(modelfile); line++) - { - if(fgets(sbuff, 10000, modelfile) == NULL) - { - if(ferror(modelfile)) - { - log_error("problem encountered reading line %d.", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(sbuff[0] == '#' || sbuff[0] == '\r' || sbuff[0] == '\n') - { - continue; - } - if(*size == buffsize) - { - buffsize += buffsize; - tmp = (PRISM *)realloc(model, buffsize*sizeof(PRISM)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem expanding memory for prism model.\nModel is too big."); - return NULL; - } - model = tmp; - } - /* Remove any trailing spaces or newlines */ - strstrip(sbuff); - /* Check if r, lon, lat are expected as well */ - if(pos) - { - if(gets_prism_sph(sbuff, &model[*size])) - { - log_warning( - "bad/invalid prism at line %d.", - line); - badinput = 1; - continue; - } - } - else - { - if(gets_prism(sbuff, &model[*size])) - { - log_warning("bad/invalid prism at line %d", line); - badinput = 1; - continue; - } - } - (*size)++; - } - } - if(badinput || error_exit) - { - free(model); - return NULL; - } - /* Adjust the size of the model */ - if(*size != 0) - { - tmp = (PRISM *)realloc(model, (*size)*sizeof(PRISM)); - if(tmp == NULL) - { - /* Need to free because realloc leaves unchanged in case of - error */ - free(model); - log_error("problem freeing excess memory for prism model"); - return NULL; - } - model = tmp; - } - return model; -} - - -/* Read the coordinates, height, thickness and densities of the layers */ -int gets_layers(const char *str, double dlon, double dlat, - TESSEROID *tessbuff, int buffsize) -{ - int nlayers, end, nchars, argsread; - double lon, lat, height, top, thickness, density; - - argsread = sscanf(str, "%lf %lf %lf%n", &lon, &lat, &height, &nchars); - if(argsread != 3) - { - log_error("failed to read lon, lat, and height"); - return -1; - } - if(str[nchars] == '\0') - { - log_error("missing thickness and density values"); - return -1; - } - - top = height + MEAN_EARTH_RADIUS; - end = nchars; - for(nlayers = 0; str[end] != '\0'; nlayers++) - { - if(nlayers == buffsize) - { - log_error("too many layers! Max = %d", buffsize); - return -1; - } - argsread = sscanf(str + end, "%lf %lf%n", &thickness, &density, - &nchars); - if(argsread != 2) - { - log_error("missing thickness or density value"); - return -1; - } - if(thickness < 0) - { - log_error("can't have negative thickness"); - return -1; - } - - tessbuff[nlayers].density = density; - tessbuff[nlayers].w = lon - 0.5*dlon; - tessbuff[nlayers].e = lon + 0.5*dlon; - tessbuff[nlayers].s = lat - 0.5*dlat; - tessbuff[nlayers].n = lat + 0.5*dlat; - tessbuff[nlayers].r2 = top; - tessbuff[nlayers].r1 = top - thickness; - - top -= thickness; - end += nchars; - } - return nlayers; -} - diff --git a/dep/tesseroids/lib/parsers.h b/dep/tesseroids/lib/parsers.h deleted file mode 100644 index 16a7b01..0000000 --- a/dep/tesseroids/lib/parsers.h +++ /dev/null @@ -1,316 +0,0 @@ -/* -Input and output parsing tools. -*/ - - -#ifndef _TESSEROIDS_PARSERS_H_ -#define _TESSEROIDS_PARSERS_H_ - -/* Needed for definition of TESSEROID and PRISM */ -#include "geometry.h" -/* Need for the definition of FILE */ -#include - -/** Store basic input arguments and option flags */ -typedef struct basic_args -{ - char *inputfname; /**< name of the input file */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ -} BASIC_ARGS; - - -/** Store input arguments and option flags for tessmass program */ -typedef struct tessmass_args -{ - char *inputfname; /**< name of the input file */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - int use_range; /**< flag to indicate wether to use a density range or not */ - double low_dens; /**< lower bound for density range */ - double high_dens; /**< upper bound for density range */ -} TESSMASS_ARGS; - - -/** Store input arguments and option flags for tess2prism program */ -typedef struct tess2prism_args -{ - char *inputfname; /**< name of the input file */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - int flatten; /**< flag to indicate wether to use a flattened tesseroid or - a prism in spherical coordinates */ -} TESS2PRISM_ARGS; - - -/** Store input arguments and option flags for tessmodgen program */ -typedef struct tessmodgen_args -{ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - double dlon; /**< grid spacing in longitude */ - double dlat; /**< grid spacing in latitude */ - double ref; /**< depth of the reference level */ - double dens; /**< density of the tesseroids */ - int fix_density; /**< flag to tell wether using value passed by -d */ -} TESSMODGEN_ARGS; - - -/** Store input arguments and option flags for tesslayers program */ -typedef struct tesslayers_args -{ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - double dlon; /**< grid spacing in longitude */ - double dlat; /**< grid spacing in latitude */ -} TESSLAYERS_ARGS; - - -/** Store input arguments and option flags for tessg* programs */ -typedef struct tessg_args -{ - int lon_order; /**< glq order in longitude integration */ - int lat_order; /**< glq order in latitude integration */ - int r_order; /**< glq order in radial integration */ - char *modelfname; /**< name of the file with the tesseroid model */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ - int adaptative; /**< flat to indicate wether to use the adaptative size - of tesseroid algorithm */ - double ratio; /**< distance-size ratio used for recusive division */ -} TESSG_ARGS; - - -/** Store input arguments and option flags for tessgrd program */ -typedef struct tessgrd_args -{ - double w; /**< western border of the grid */ - double e; /**< eastern border of the grid */ - double s; /**< southern border of the grid */ - double n; /**< northern border of the grid */ - int nlon; /**< number of grid points in the longitudinal direction */ - int nlat; /**< number of grid points in the latitudinal direction */ - double height; /**< height above geoid of the grid */ - int verbose; /**< flag to indicate if verbose printing is enabled */ - int logtofile; /**< flag to indicate if logging to a file is enabled */ - char *logfname; /**< name of the log file */ -} TESSGRD_ARGS; - - -/** Parse basic command line arguments for programs - -Basic arguments are: -h (for help msg), -v (for verbose), -l (for log file), ---version and an input file. - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the specific program -@param args to return the parsed arguments -@param print_help pointer to a function that prints the help message for the - program - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit - - 3: if input file was missing (doesn't log an error) -*/ -extern int parse_basic_args(int argc, char **argv, const char *progname, - BASIC_ARGS *args, void (*print_help)(void)); - - -/** Parse command line arguments for tessmass program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the program -@param args to return the parsed arguments -@param print_help pointer to a function that prints the help message for the - program - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit - - 3: if input file was missing (doesn't log an error) -*/ -extern int parse_tessmass_args(int argc, char **argv, const char *progname, - TESSMASS_ARGS *args, void (*print_help)(void)); - - -/** Parse command line arguments for tess2prism program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the program -@param args to return the parsed arguments -@param print_help pointer to a function that prints the help message for the - program - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit - - 3: if input file was missing (doesn't log an error) -*/ -extern int parse_tess2prism_args(int argc, char **argv, const char *progname, - TESS2PRISM_ARGS *args, void (*print_help)(void)); - - -/** Parse command line arguments for tessmodgen program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the program -@param args to return the parsed arguments -@param print_help pointer to a function that prints the help message for the - program - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit -*/ -extern int parse_tessmodgen_args(int argc, char **argv, const char *progname, - TESSMODGEN_ARGS *args, void (*print_help)(void)); - - -/** Parse command line arguments for tesslayers program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the program -@param args to return the parsed arguments -@param print_help pointer to a function that prints the help message for the - program - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit -*/ -extern int parse_tesslayers_args(int argc, char **argv, const char *progname, - TESSLAYERS_ARGS *args, void (*print_help)(void)); - - -/** Parse command line arguments for tessg* programs - -logs the bad argument warnings using logger.h - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the specific program -@param args to return the parsed arguments - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit -*/ -extern int parse_tessg_args(int argc, char **argv, const char *progname, - TESSG_ARGS *args, void (*print_help)(const char *)); - - -/** Parse command line arguments for tessgrd program - -logs the bad argument warnings using logger.h - -@param argc number of command line arguments -@param argv command line arguments -@param args to return the parsed arguments - -@return Return code: - - 0: if all went well - - 1: if there were bad arguments and program should exit - - 2: if printed help or version info and program should exit -*/ -extern int parse_tessgrd_args(int argc, char **argv, TESSGRD_ARGS *args, - void (*print_help)(void)); - - -/** Strip trailing spaces and newlines from the end of a string - -Done IN PLACE! - -@param str string to strip -*/ -extern void strstrip(char *str); - - -/** Read a single tesseroid from a string - -@param str string with the tesseroid parameters -@param tess used to return the read tesseroid - -@return 0 if all went well, 1 if failed to read. -*/ -extern int gets_tess(const char *str, TESSEROID *tess); - - -/** Read tesseroids from an open file and store them in an array. - -Allocates memory. Don't forget to free 'model'! - -@param modelfile open FILE for reading with the tesseroid model -@param size used to return the size of the model read - -@return pointer to array with the model. NULL if there was an error -*/ -extern TESSEROID * read_tess_model(FILE *modelfile, int *size); - - -/** Read a single rectangular prism from a string - -@param str string with the tesseroid parameters -@param prism used to return the read prism - -@return 0 if all went well, 1 if failed to read. -*/ -extern int gets_prism(const char *str, PRISM *prism); - - -/** Read a single rectangular prism and the spherical coordinates of its top -from a string - -@param str string with the tesseroid parameters -@param prism used to return the read prism - -@return 0 if all went well, 1 if failed to read. -*/ -extern int gets_prism_sph(const char *str, PRISM *prism); - - -/** Read rectangular prisms from an open file and store them in an array. - -Allocates memory. Don't forget to free 'model'! - -@param modelfile open FILE for reading with the model -@param pos if not 0 (true) will read the spherical coordinates of the top as -well -@param size used to return the size of the model read - -@return pointer to array with the model. NULL if there was an error -*/ -extern PRISM * read_prism_model(FILE *modelfile, int pos, int *size); - - -/** Read the coordinates, height, thickness and densities of the layers and -convert it to tesseroids. - -@param str string with the coordinates and layer parameters -@param dlon the size of the tesseroid in the longitudinal direction -@param dlat the size of the tesseroid in the latitudinal direction -@param tessbuff buffer used to return the tesseroids corresponding to the layer -@param buffsize the size of the buffer - -@return the number of layers read and converted, -1 if there was an error -*/ -extern int gets_layers(const char *str, double dlon, double dlat, - TESSEROID *tessbuff, int buffsize); -#endif diff --git a/dep/tesseroids/lib/prismg_main.c b/dep/tesseroids/lib/prismg_main.c deleted file mode 100644 index 1a651ba..0000000 --- a/dep/tesseroids/lib/prismg_main.c +++ /dev/null @@ -1,241 +0,0 @@ -/* -Generic main function for the prismg* programs. -*/ - - -#include -#include -#include -#include -#include "logger.h" -#include "version.h" -#include "grav_prism.h" -#include "geometry.h" -#include "parsers.h" -#include "prismg_main.h" - - -char global_progname[100]; - - -/* Print the help message */ -void print_help() -{ - printf("Usage: %s MODELFILE [OPTIONS]\n\n", global_progname); - if(strcmp(global_progname + 5, "pot") == 0) - { - printf("Calculate the potential due to a rectangular prism model on\n"); - } - else - { - printf("Calculate the %s component due to a rectangular prism model on\n", - global_progname + 5); - } - printf("specified observation points using Cartesian coordinates.\n\n"); - printf("All input units are SI! Output is SI, mGal or Eotvos.\n\n"); - printf("Coordinate system:\n"); - printf(" The coordinate system for the prism is x->North, y->East\n"); - printf(" and z->Down\n\n"); - printf("Input:\n"); - printf(" Computation points passed through standard input (stdin).\n"); - printf(" Reads 3 or more values per line and inteprets the first 3 as:\n"); - printf(" Easting(y) Northing(x) height \n"); - printf(" (the coordinates of a computation point in meters).\n"); - printf(" Other values in the line are ignored.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the form:\n"); - printf(" y x height ... result\n"); - printf(" ... represents any values that were read from input and\n"); - printf(" ignored. In other words, the result is appended to the last\n"); - printf(" column of the input. Use this to pipe prism* programs\n"); - printf(" together.\n\n"); - printf(" Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("MODELFILE: File containing the prism model\n"); - printf(" * Each prism is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * The file should contain one prism per line\n"); - printf(" * If a line starts with # it will be considered a comment and\n"); - printf(" will be ignored.\n"); - printf(" * Each line should have the following column format:\n"); - printf(" X1 X2 Y1 Y2 Z1 Z2 Density\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/* Run the main for a generic prismg* program */ -int run_prismg_main(int argc, char **argv, const char *progname, - double (*field)(PRISM, double, double, double)) -{ - BASIC_ARGS args; - PRISM *model; - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0, i; - char buff[10000]; - double x, y, height, res; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - log_init(LOG_INFO); - strcpy(global_progname, progname); - rc = parse_basic_args(argc, argv, progname, &args, &print_help); - if(rc == 3) - { - log_error("%s: missing input file", progname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* Read the model file */ - log_info("Reading prism model from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_prism_model(modelfile, 0, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("prism file %s is empty", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d prism(s) read", modelsize); - - /* Print a header on the output with provenance information */ - if(strcmp(progname + 5, "pot") == 0) - { - printf("# Potential calculated with %s %s:\n", progname, - tesseroids_version); - } - else - { - printf("# %s component calculated with %s %s:\n", progname+5, progname, - tesseroids_version); - } - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d prisms)\n", args.inputfname, modelsize); - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - if(sscanf(buff, "%lf %lf %lf", &y, &x, &height) != 3) - { - log_warning("bad/invalid computation point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - for(res = 0, i = 0; i < modelsize; i++) - { - res += field(model[i], x, y, -height); - } - printf("%s %.15g\n", buff, res); - points++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/lib/prismg_main.h b/dep/tesseroids/lib/prismg_main.h deleted file mode 100644 index c8d4c27..0000000 --- a/dep/tesseroids/lib/prismg_main.h +++ /dev/null @@ -1,31 +0,0 @@ -/* -Generic main function for the prismg* programs. -*/ - - -#ifndef _TESSEROIDS_PRISMG_MAIN_H_ -#define _TESSEROIDS_PRISMG_MAIN_H_ - - -/* For the definitions of PRISM */ -#include "geometry.h" - - -/** Print the help message -*/ -extern void print_help(); - - -/** Run the main for a generic prismg* program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the specific program -@param field pointer to function that calculates the field of a single prism - -@return 0 is all went well. 1 if failed. -*/ -extern int run_prismg_main(int argc, char **argv, const char *progname, - double (*field)(PRISM, double, double, double)); - -#endif diff --git a/dep/tesseroids/lib/tessg_main.c b/dep/tesseroids/lib/tessg_main.c deleted file mode 100644 index e0bf2d2..0000000 --- a/dep/tesseroids/lib/tessg_main.c +++ /dev/null @@ -1,292 +0,0 @@ -/* -Generic main function for the tessg* programs. -*/ - - -#include -#include -#include -#include -#include "logger.h" -#include "version.h" -#include "grav_tess.h" -#include "glq.h" -#include "constants.h" -#include "geometry.h" -#include "parsers.h" -#include "tessg_main.h" - - -/* Print the help message for tessg* programs */ -void print_tessg_help(const char *progname) -{ - printf("Usage: %s MODELFILE [OPTIONS]\n\n", progname); - if(strcmp(progname + 4, "pot") == 0) - { - printf("Calculate the potential due to a tesseroid model on\n"); - } - else - { - printf("Calculate the %s component due to a tesseroid model on\n", - progname + 4); - } - printf("specified observation points.\n\n"); - printf("Values are calculated in the local coordinate system of the\n"); - printf("observation point: x-> North y-> East z-> Up (away from the\n"); - printf("center of the Earth).\n"); - printf("In order to maintain mainstream convention, component gz is\n"); - printf("calculated with z-> Down.\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("The computation of the gravitational effect of the tesseroids\n"); - printf("is done using the Gauss-Legendre Quadrature (GLQ) numerical\n"); - printf("integration method.\n\n"); - printf("WARNING: Avoid computing directly on top or inside the\n"); - printf(" tesseroids! This will break the GLQ and the formulas!\n"); - printf("\n"); - printf("Input:\n"); - printf(" Computation points passed through standard input (stdin).\n"); - printf(" Reads 3 or more values per line and inteprets the first 3 as:\n"); - printf(" longitude, latitude and height\n"); - printf(" of a computation points. Height should be in meters.\n"); - printf(" Othervalues in the line are ignored.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf("\n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the form:\n"); - printf(" lon lat height ... result\n"); - printf(" ... represents any values that were read from input and\n"); - printf(" ignored. In other words, the result is appended to the last\n"); - printf(" column of the input. Use this to pipe tessg* programs\n"); - printf(" together.\n"); - printf(" * Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("MODELFILE: File containing the tesseroid model\n"); - printf(" * Each tesseroid is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * The file should contain one tesseroid per line\n"); - printf(" * Each line should have the following column format:\n"); - printf(" West East South North Top Bottom Density\n"); - printf(" * Top and Bottom should be read as 'height to top' and \n"); - printf(" 'height to bottom' from the mean Earth radius. Use negative\n"); - printf(" values if bellow the surface, for example when modeling\n"); - printf(" deep structures, and positive if above the surface, for\n"); - printf(" example when modeling topography.\n"); - printf(" * If a line starts with # it will be considered a comment and\n"); - printf(" will be ignored.\n\n"); - printf("Options:\n"); - printf(" -a Disable the automatic subdividing of\n"); - printf(" tesseroids. Subdividing is done to ensure the\n"); - printf(" GLQ gives accurate results. ONLY USE THIS\n"); - printf(" OPTION IF YOU KNOW WHAT YOU ARE DOING!\n"); - printf(" -tRATIO Use a custom distance-size ratio for the\n"); - printf(" automatic subdivision of tesseroids. ONLY USE\n"); - printf(" THIS OPTION IF YOU KNOW WHAT YOU ARE DOING!\n"); - printf(" -oOLON/OLAT/OR GLQ order to use in the longitudinal,\n"); - printf(" latitudinal and radial integrations,\n"); - printf(" respectively. Defaults to 2/2/2.\n"); - printf(" Subdividing of tesseroids works best with the\n"); - printf(" default order.\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/* Run the main for a generic tessg* program */ -int run_tessg_main(int argc, char **argv, const char *progname, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ), - double ratio) -{ - TESSG_ARGS args; - GLQ *glq_lon, *glq_lat, *glq_r; - TESSEROID *model; - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0; - char buff[10000]; - double lon, lat, height, res; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - log_init(LOG_INFO); - - rc = parse_tessg_args(argc, argv, progname, &args, &print_tessg_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - - return 1; - } - - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_DEBUG); - } - - /* Check if a custom distance-size ratio is given */ - if(args.ratio != 0) - { - ratio = args.ratio; - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - log_info("Use recursive division of tesseroids: %s", - args.adaptative ? "True" : "False"); - log_info("Distance-size ratio for recusive division: %g", ratio); - - /* Make the necessary GLQ structures */ - log_info("Using GLQ orders: %d lon / %d lat / %d r", args.lon_order, - args.lat_order, args.r_order); - glq_lon = glq_new(args.lon_order, -1, 1); - glq_lat = glq_new(args.lat_order, -1, 1); - glq_r = glq_new(args.r_order, -1, 1); - if(glq_lon == NULL || glq_lat == NULL || glq_r == NULL) - { - log_error("failed to create required GLQ structures"); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - - /* Read the tesseroid model file */ - log_info("Reading tesseroid model from file %s", args.modelfname); - modelfile = fopen(args.modelfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_tess_model(modelfile, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("tesseroid file %s is empty", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.modelfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d tesseroid(s) read", modelsize); - - /* Print a header on the output with provenance information */ - if(strcmp(progname + 4, "pot") == 0) - { - printf("# Potential calculated with %s %s:\n", progname, - tesseroids_version); - } - else - { - printf("# %s component calculated with %s %s:\n", progname+4, progname, - tesseroids_version); - } - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d tesseroids)\n", args.modelfname, modelsize); - printf("# GLQ order: %d lon / %d lat / %d r\n", args.lon_order, - args.lat_order, args.r_order); - printf("# Use recursive division of tesseroids: %s\n", - args.adaptative ? "True" : "False"); - printf("# Distance-size ratio for recusive division: %g\n", ratio); - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - for(line = 1; fgets(buff, 10000, stdin) != NULL; line++) - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - if(sscanf(buff, "%lf %lf %lf", &lon, &lat, &height) != 3) - { - log_warning("bad/invalid computation point at line %d:", line); - log_warning(" '%s'", buff); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - if(args.adaptative) - { - res = calc_tess_model_adapt(model, modelsize, lon, lat, - height + MEAN_EARTH_RADIUS, glq_lon, - glq_lat, glq_r, field, ratio); - } - else - { - res = calc_tess_model(model, modelsize, lon, lat, - height + MEAN_EARTH_RADIUS, glq_lon, - glq_lat, glq_r, field); - } - printf("%s %.15g\n", buff, res); - points++; - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - glq_free(glq_lon); - glq_free(glq_lat); - glq_free(glq_r); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/lib/tessg_main.h b/dep/tesseroids/lib/tessg_main.h deleted file mode 100644 index bfaf683..0000000 --- a/dep/tesseroids/lib/tessg_main.h +++ /dev/null @@ -1,36 +0,0 @@ -/* -Generic main function for the tessg* programs. -*/ - - -#ifndef _TESSEROIDS_TESSG_MAIN_H_ -#define _TESSEROIDS_TESSG_MAIN_H_ - - -/* For the definitions of GLQ and TESSEROID */ -#include "glq.h" -#include "geometry.h" - - -/** Print the help message for tessg* programs - -@param progname name of the specific tessg* program -*/ -extern void print_tessg_help(const char *progname); - - -/** Run the main for a generic tessg* program - -@param argc number of command line arguments -@param argv command line arguments -@param progname name of the specific program -@param field pointer to function that calculates the field of a single tesseroid -@param ratio distance-to-size ratio for doing adaptative resizing - -@return 0 is all went well. 1 if failed. -*/ -extern int run_tessg_main(int argc, char **argv, const char *progname, - double (*field)(TESSEROID, double, double, double, GLQ, GLQ, GLQ), - double ratio); - -#endif diff --git a/dep/tesseroids/lib/version.c b/dep/tesseroids/lib/version.c deleted file mode 100644 index 707159b..0000000 --- a/dep/tesseroids/lib/version.c +++ /dev/null @@ -1,32 +0,0 @@ -#include "version.h" - -/* - * The following definitions are copied from the original version.template file. - * And the version number is set to tesseroids-1.6 directly. - * - * By Yi Zhang. 2021-05-05 -*/ - -/* Current project version number */ -const char tesseroids_version[] = "tesseroids-1.6"; - -/* Print version number*/ -void print_version(const char* version_num) -{ - printf("%s", version_num); -} - -/* Print a copyright notice */ -void print_copyright() -{ - printf("\nPart of the Tesseroids package (v%s).\n", tesseroids_version); - printf("\nProject site: \n"); - printf("Report bugs at: "); - printf("\n"); - printf("\nCopyright (C) 2011-$YEAR, Leonardo Uieda.\n"); - printf("This software is distributed under the terms of the BSD License:\n"); - printf("\n"); - printf("This is free software: "); - printf("you are free to change and redistribute it.\n"); - printf("There is NO WARRANTY, to the extent permitted by law.\n"); -} \ No newline at end of file diff --git a/dep/tesseroids/lib/version.h b/dep/tesseroids/lib/version.h deleted file mode 100644 index 3730540..0000000 --- a/dep/tesseroids/lib/version.h +++ /dev/null @@ -1,19 +0,0 @@ -/* -Hold the version number of the project. -*/ - -#ifndef _TESSEROIDS_VERSION_H_ -#define _TESSEROIDS_VERSION_H_ - -#include "stdio.h" - -/** Current project version number */ -extern const char tesseroids_version[]; - -/** Print version number */ -extern void print_version(const char* version_num); - -/** Print version number */ -extern void print_copyright(); - -#endif // _TESSEROIDS_VERSION_H_ diff --git a/dep/tesseroids/test/CMakeLists.txt b/dep/tesseroids/test/CMakeLists.txt deleted file mode 100644 index c130f6e..0000000 --- a/dep/tesseroids/test/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -# 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm") -endif() - -# 设置可执行文件的输出地址 -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/test) - -# 添加可执行程序名称 -add_executable(test_all test_all.c) -# 链接动态库 -target_link_libraries(test_all PUBLIC tess) \ No newline at end of file diff --git a/dep/tesseroids/test/minunit.h b/dep/tesseroids/test/minunit.h deleted file mode 100755 index 76dcdda..0000000 --- a/dep/tesseroids/test/minunit.h +++ /dev/null @@ -1,112 +0,0 @@ -/* This is a modified version of the MinUnit testing tool. - -As with the original, you may use this code for any purpose, with the -understanding that it comes with NO WARRANTY. - -The original can be found at http://www.jera.com/techinfo/jtns/jtn002.html - -USAGE: -Simmply include minunit.h and implement the testing functions using the -assertions. To run the tests, call mu_run_test. It will run the tests, print -out the verbose and if the test passed or failed. Use mu_print_summary to -print out a summary of the tests (how many were run, how long it took, how many -failed and how many passed). - -Ex: - -#include "minunit.h" -#include "myfuncs.h" - -int tests_run = 0, tests_passed = 0, tests_failed = 0; - -char * test_func1() -{ - // Assert that func1 returns 3 when passed 1.2 - // assertion will return the fail message if fails - mu_assert(func1(1.2) == 3, "func1 did not return 3 when passed 1.2"); - - // If the assertion passed, return 0 - return 0; -} - -int main() -{ - mu_run_test(test_func1, "testing func1"); - - // If passed the time it took to run the tests will print it. Pass 0.0 to - // ommit the time - mu_print_summary(0.0); - - return 0; -} - -Simply compile and run the test program. - -Author: Leonardo Uieda -Date: 25 Jan 2011 -*/ - -#ifndef _MINUNIT_H_ -#define _MINUNIT_H_ - -#include -#include - -/* Global counters. WARNING: Don't forget to initialize in the main program -before running the tests! */ -extern int tests_run, tests_passed, tests_failed; - - -/* Basic assertion. If fails, returns msg. If passes, returns 0 */ -#define mu_assert(test, msg) do { if (!(test)) return msg; } while (0) - - -/* Assert if val equals expect within a certain precision prec */ -#define mu_assert_almost_equals(val, expect, prec, msg) do { \ - if(!(val <= expect + prec && val >= expect - prec)) { return msg; }\ - } while (0) - -/* Assert if val equals expect within a certain precision precision given in % */ -#define mu_assert_almost_equals_rel(val, expect, prec, msg) do { \ - if(fabs(val - expect) > 0.01*prec*fabs(expect)) { return msg; }\ - } while (0) - -/* Run a test case, print the verbose and check if passed or failed */ -int mu_run_test(char *(*test)(void), char *verbose) -{ - char *msg; - - printf("\n%s... ", verbose); - msg = test(); - tests_run++; - if(msg) - { - tests_failed++; - printf("FAIL:%s", msg); - return 1; - } - else - { - tests_passed++; - printf("pass"); - return 0; - } -} - - -/* Print a summary of the tests ran and how long it took */ -#define mu_print_summary(test_time) \ - printf("\n\n-----------------------------------------------------------"); \ - printf("\nRan %d test(s)", tests_run); \ - if(test_time) { printf(" in %g seconds", test_time); } \ - printf(". %d passed and %d failed.\n", tests_passed, tests_failed); - - -/* Utility for copying one array onto another */ -int mu_counter; -#define mu_arraycp(original, copy, size) \ - do {for(mu_counter=0; mu_counter -#include -#include "../lib/logger.h" -#include "minunit.h" -#include "test_glq.c" -#include "test_geometry.c" -#include "test_parsers.c" -#include "test_grav_prism.c" -#include "test_grav_prism_sph.c" -#include "test_grav_tess.c" - -int tests_run = 0, tests_passed = 0, tests_failed = 0; - -int main() -{ - clock_t start = clock(); - int failed = 0; - - log_init(LOG_INFO); - - failed += glq_run_all(); - failed += geometry_run_all(); - failed += parsers_run_all(); - failed += grav_prism_run_all(); - failed += grav_prism_sph_run_all(); - failed += grav_tess_run_all(); - - mu_print_summary((double)(clock() - start)/CLOCKS_PER_SEC); - - if(failed) - { - return 1; - } - else - { - return 0; - } -} diff --git a/dep/tesseroids/test/test_geometry.c b/dep/tesseroids/test/test_geometry.c deleted file mode 100755 index d524182..0000000 --- a/dep/tesseroids/test/test_geometry.c +++ /dev/null @@ -1,289 +0,0 @@ -/* -Unit tests for geometry module. -*/ - -#include -#include -#include "minunit.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" - -/* To store fail messages */ -char msg[1000]; - - -static char * test_split_tess() -{ - TESSEROID tess = {1, 2, 4, -1, 1, 5, 7}, - expect[] = {{1, 2, 3, -1, 0, 5, 6}, {1, 3, 4, -1, 0, 5, 6}, - {1, 2, 3, 0, 1, 5, 6}, {1, 3, 4, 0, 1, 5, 6}, - {1, 2, 3, -1, 0, 6, 7}, {1, 3, 4, -1, 0, 6, 7}, - {1, 2, 3, 0, 1, 6, 7}, {1, 3, 4, 0, 1, 6, 7}}, - res[8]; - int i, n; - - n = split_tess(tess, 2, 2, 2, res); - sprintf(msg, "splitting in %d instead of 8", n); - mu_assert(n == 8, msg); - for(i = 0; i < 8; i++) - { - sprintf(msg, "failed for split %d: %g %g %g %g %g %g %g", i, res[i].w, - res[i].e, res[i].s, res[i].n, res[i].r1, res[i].r2, - res[i].density); - mu_assert(res[i].w == expect[i].w && res[i].e == expect[i].e && - res[i].s == expect[i].s && res[i].n == expect[i].n && - res[i].r1 == expect[i].r1 && res[i].r2 == expect[i].r2 && - res[i].density == expect[i].density, msg); - } - return 0; -} - - -static char * test_split_uneven_tess() -{ - TESSEROID tess = {1, 2, 4, -1, 1, 5, 7}, - expect[] = {{1, 2, 3, -1, 0, 5, 7}, {1, 3, 4, -1, 0, 5, 7}, - {1, 2, 3, 0, 1, 5, 7}, {1, 3, 4, 0, 1, 5, 7}}, - res[4]; - int i, n; - - n = split_tess(tess, 2, 2, 1, res); - sprintf(msg, "splitting in %d instead of 4", n); - mu_assert(n == 4, msg); - for(i = 0; i < 4; i++) - { - sprintf(msg, "failed for split %d: %g %g %g %g %g %g %g", i, res[i].w, - res[i].e, res[i].s, res[i].n, res[i].r1, res[i].r2, - res[i].density); - mu_assert(res[i].w == expect[i].w && res[i].e == expect[i].e && - res[i].s == expect[i].s && res[i].n == expect[i].n && - res[i].r1 == expect[i].r1 && res[i].r2 == expect[i].r2 && - res[i].density == expect[i].density, msg); - } - return 0; -} - -static char * test_prism_volume() -{ - PRISM prisms[4] = { - {0,0,1,0,1,0,1,0,0,0}, - {0,0,2,0,1,0,1,0,0,0}, - {0,0,2,0,2,0,2,0,0,0}, - {0,1,2,-1,1,2,3,0,0,0}}; - double pvolumes[4] = {1, 2, 8, 2}; - double res; - int i; - - for(i = 0; i < 4; i++) - { - res = prism_volume(prisms[i]); - sprintf(msg, "(prism %d) expected %g, got %g", i, pvolumes[i], res); - mu_assert(res == pvolumes[i], msg); - } - - return 0; -} - - -static char * test_tess_volume() -{ - TESSEROID tesses[4] = {{0,0,360,-90,90,0,1}, {0,0,360,0,90,0,1}, - {0,180,360,0,90,0,1}, {0,0,90,-90,0,0,1}}; - double tvolumes[4] = {4.188790205, 2.094395102, 1.047197551, 0.523598776}; - double res; - int i; - - for(i = 0; i < 4; i++) - { - res = tess_volume(tesses[i]); - sprintf(msg, "(tess %d) expected %g, got %g", i, tvolumes[i], res); - mu_assert_almost_equals(res, tvolumes[i], pow(10, -8), msg); - } - - return 0; -} - - -static char * test_tess_total_mass() -{ - TESSEROID tesses[4] = {{1,0,360,-90,90,0,1}, {1,0,360,0,90,0,1}, - {1,180,360,0,90,0,1}, {1,0,90,-90,0,0,1}}; - double tvolumes[4] = {4.188790205, 2.094395102, 1.047197551, 0.523598776}; - double res, expect; - int i; - - res = tess_total_mass(tesses, 4); - - for(expect = 0, i = 0; i < 4; i++) - { - expect += tvolumes[i]; - } - - sprintf(msg, "(tess %d) expected %g, got %g", i, expect, res); - mu_assert_almost_equals(res, expect, pow(10, -6), msg); - - return 0; -} - - -static char * test_tess_range_mass() -{ - TESSEROID tesses[4] = {{1,0,360,-90,90,0,1}, {-1,0,360,0,90,0,1}, - {-1,180,360,0,90,0,1}, {1,0,90,-90,0,0,1}}; - double tvolumes[4] = {4.188790205, 2.094395102, 1.047197551, 0.523598776}; - double res, expect; - - res = tess_range_mass(tesses, 4, 0, 1); - expect = tvolumes[0] + tvolumes[3]; - sprintf(msg, "Expected %g, got %g", expect, res); - mu_assert_almost_equals(res, expect, pow(10, -6), msg); - - return 0; -} - - -static char * test_tess2prism() -{ - int i; - double expect, res; - double lons[4] = {0.5, 185, 180, -2.5}, - lats[4] = {0.5, 82.5, -80, 4}, - rs[4] = {6001000, 6301000, 6000000, 6505000}, - zs[4] = {1000, 1000, 500000, 5000}; - PRISM prism; - TESSEROID tesses[4] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,190,80,85,6300000,6301000}, - {1,160,200,-90,-70,5500000,6000000}, - {1,-10,5,-7,15,6500000,6505000}}; - - for(i = 0; i < 4; i++) - { - tess2prism(tesses[i], &prism); - /* check the volume */ - res = prism_volume(prism); - expect = tess_volume(tesses[i]); - sprintf(msg, "(tess %d) expected volume %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.01, msg); - /* check the mass */ - res *= prism.density; - expect *= tesses[i].density; - sprintf(msg, "(tess %d) expected mass %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.01, msg); - /* check the coordinates */ - res = prism.lon; - expect = lons[i]; - sprintf(msg, "(tess %d) expected lon %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.0001, msg); - res = prism.lat; - expect = lats[i]; - sprintf(msg, "(tess %d) expected lat %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.0001, msg); - res = prism.r; - expect = rs[i]; - sprintf(msg, "(tess %d) expected r %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.0001, msg); - res = prism.z1; - expect = 0.; - sprintf(msg, "(tess %d) expected z1 %g, got %g", i, expect, res); - mu_assert_almost_equals(res, 0., 0.000000000000001, msg); - res = prism.z2; - expect = zs[i]; - sprintf(msg, "(tess %d) expected z2 %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.0001, msg); - } - - return 0; -} - - -static char * test_tess2prism_flatten() -{ - double expect, res; - PRISM prism; - int i; - TESSEROID tesses[4] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,190,80,85,6300000,6301000}, - {1,160,200,-90,-70,5500000,6000000}, - {1,-10,5,-7,15,6500000,6505000}}; - - for(i = 0; i < 4; i++) - { - tess2prism_flatten(tesses[i], &prism); - res = prism_volume(prism)*prism.density; - expect = tess_volume(tesses[i])*tesses[i].density; - sprintf(msg, "(tess %d) expected mass %g, got %g", i, expect, res); - mu_assert_almost_equals((double)(res - expect)/expect, 0., 0.01, msg); - } - - return 0; -} - - -static char * test_tess2sphere() -{ - double expect, res; - SPHERE sphere; - int i; - TESSEROID tesses[4] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,190,80,85,6300000,6301000}, - {1,160,200,-90,-70,5500000,6000000}, - {1,-10,5,-7,15,6500000,6505000}}; - - for(i = 0; i < 4; i++) - { - tess2sphere(tesses[i], &sphere); - res = sphere_volume(sphere); - expect = tess_volume(tesses[i]); - sprintf(msg, "(tess %d) expected volume %g, got %g", i, expect, res); - mu_assert_almost_equals(res/expect, 1., 0.01, msg); - } - - return 0; -} - - -static char * test_prism2sphere() -{ - double expect, res; - SPHERE sphere; - int i; - PRISM prisms[4] = { - {1,0,1000,0,2000,100,2000,0,0,0}, - {1,-500,200,300,500,-1000,4000,0,0,0}, - {1,-10000000,5000000,5000000,8000000,0,3000000,0,0,0}, - {1,-1000000,50000,500000,800000,0,300000,0,0,0}}; - - for(i = 0; i < 4; i++) - { - prism2sphere(prisms[i], 0., 0., 0., &sphere); - res = sphere_volume(sphere); - expect = prism_volume(prisms[i]); - sprintf(msg, "(prism %d) expected volume %g, got %g", i, expect, res); - mu_assert_almost_equals(res/expect, 1., 0.001, msg); - } - - return 0; -} - - -int geometry_run_all() -{ - int failed = 0; - failed += mu_run_test(test_prism_volume, "prism_volume return correct results"); - failed += mu_run_test(test_tess_volume, "tess_volume return correct results"); - failed += mu_run_test(test_tess_total_mass, "tess_total_mass returns correct result"); - failed += mu_run_test(test_tess_range_mass, "tess_range_mass returns correct result"); - failed += mu_run_test(test_tess2prism, "tess2prism produces prism with right volume"); - failed += mu_run_test(test_tess2prism_flatten, - "tess2prism_flatten produces prism with right mass"); - failed += mu_run_test(test_tess2sphere, - "tess2sphere produces sphere with right volume"); - failed += mu_run_test(test_prism2sphere, - "prism2sphere produces sphere with right volume"); - failed += mu_run_test(test_split_tess, "split_tess returns correct results for 2, 2, 2 split"); - failed += mu_run_test(test_split_uneven_tess, "split_tess returns correct results for 2, 2, 1 split"); - return failed; -} diff --git a/dep/tesseroids/test/test_glq.c b/dep/tesseroids/test/test_glq.c deleted file mode 100755 index 2118ce7..0000000 --- a/dep/tesseroids/test/test_glq.c +++ /dev/null @@ -1,514 +0,0 @@ -/* -Unit tests for GLQ functions. -*/ - -#include -#include -#include -#include "minunit.h" -#include "../lib/glq.h" -#include "../lib/constants.h" - -/* Test data taken from: - http://mathworld.wolfram.com/Legendre-GaussQuadrature.html */ -double o2roots[2] = {-0.577350269, 0.577350269}, - o3roots[3] = {-0.774596669, 0., 0.774596669}, - o4roots[4] = {-0.861136312, -0.339981044, 0.339981044, 0.861136312}, - o5roots[5] = {-0.906179846, -0.53846931, 0., 0.53846931, 0.906179846}, - o19roots[19] = {-0.992406843843584350, - -0.960208152134830020, - -0.903155903614817900, - -0.822714656537142820, - -0.720966177335229390, - -0.600545304661680990, - -0.464570741375960940, - -0.316564099963629830, - -0.160358645640225370, - 0.000000000000000000, - 0.160358645640225370, - 0.316564099963629830, - 0.464570741375960940, - 0.600545304661680990, - 0.720966177335229390, - 0.822714656537142820, - 0.903155903614817900, - 0.960208152134830020, - 0.992406843843584350}; - -double o2weights[2] = {1., 1.}, - o3weights[3] = {0.555555556, 0.888888889, 0.555555556}, - o4weights[4] = {0.347854845, 0.652145155, 0.652145155, 0.347854845}, - o5weights[5] = {0.236926885, 0.47862867, 0.568888889, 0.47862867, - 0.236926885}; - -/* To store fail messages */ -char msg[1000]; - -/* UNIT TESTS */ - -static char * test_glq_next_root_fail() -{ - double roots[10]; - int i, order, rc; - - /* Test order fail */ - i = 1; - order = -1; - rc = glq_next_root(0.5, i, order, roots); - sprintf(msg, "(order %d) return code %d, expected 1", order, rc); - mu_assert(rc == 1, msg); - - order = 0; - rc = glq_next_root(-0.1, i, order, roots); - sprintf(msg, "(order %d) return code %d, expected 1", order, rc); - mu_assert(rc == 1, msg); - - order = 1; - rc = glq_next_root(1.1, i, order, roots); - sprintf(msg, "(order %d) return code %d, expected 1", order, rc); - mu_assert(rc == 1, msg); - - /* Test index fail */ - order = 5; - i = -1; - rc = glq_next_root(0.5, i, order, roots); - sprintf(msg, "(index %d, order %d) return code %d, expected 2", order, i, - rc); - mu_assert(rc == 2, msg); - - i = 5; - rc = glq_next_root(0.5, i, order, roots); - sprintf(msg, "(index %d, order %d) return code %d, expected 2", order, i, - rc); - mu_assert(rc == 2, msg); - - i = 10; - rc = glq_next_root(0.5, i, order, roots); - sprintf(msg, "(index %d, order %d) return code %d, expected 2", order, i, - rc); - mu_assert(rc == 2, msg); - - return 0; -} - - -static char * test_glq_next_root() -{ - double prec = pow(10, -9), root[19], initial; - int rc, i, order; - - /* Test order 2 */ - order = 2; - for(i = 0; i < order; i++) - { - initial = cos(PI*((order - i) - 0.25)/(order + 0.5)); - - rc = glq_next_root(initial, i, order, root); - - sprintf(msg, "(order %d, root %d) return code %d, expected 0", order, i, - rc); - mu_assert(rc == 0, msg); - - sprintf(msg, "(order %d, root %d) expected %.15f got %.15f", order, i, - o2roots[i], root[i]); - mu_assert_almost_equals(root[i], o2roots[i], prec, msg); - } - - /* Test order 3 */ - order = 3; - for(i = 0; i < order; i++) - { - initial = cos(PI*((order - i) - 0.25)/(order + 0.5)); - - rc = glq_next_root(initial, i, order, root); - - sprintf(msg, "(order %d, root %d) return code %d, expected 0", order, i, - rc); - mu_assert(rc == 0, msg); - - sprintf(msg, "(order %d, root %d) expected %.15f got %.15f", order, i, - o3roots[i], root[i]); - mu_assert_almost_equals(root[i], o3roots[i], prec, msg); - } - - /* Test order 4 */ - order = 4; - for(i = 0; i < order; i++) - { - initial = cos(PI*((order - i) - 0.25)/(order + 0.5)); - - rc = glq_next_root(initial, i, order, root); - - sprintf(msg, "(order %d, root %d) return code %d, expected 0", order, i, - rc); - mu_assert(rc == 0, msg); - - sprintf(msg, "(order %d, root %d) expected %.15f got %.15f", order, i, - o4roots[i], root[i]); - mu_assert_almost_equals(root[i], o4roots[i], prec, msg); - } - - /* Test order 5 */ - order = 5; - for(i = 0; i < order; i++) - { - initial = cos(PI*((order - i) - 0.25)/(order + 0.5)); - - rc = glq_next_root(initial, i, order, root); - - sprintf(msg, "(order %d, root %d) return code %d, expected 0", order, i, - rc); - mu_assert(rc == 0, msg); - - sprintf(msg, "(order %d, root %d) expected %.15f got %.15f", order, i, - o5roots[i], root[i]); - mu_assert_almost_equals(root[i], o5roots[i], prec, msg); - } - - /* Test order 19 */ - order = 19; - for(i = 0; i < order; i++) - { - initial = cos(PI*((order - i) - 0.25)/(order + 0.5)); - - rc = glq_next_root(initial, i, order, root); - - sprintf(msg, "(order %d, root %d) return code %d, expected 0", order, i, - rc); - mu_assert(rc == 0, msg); - - sprintf(msg, "(order %d, root %d) expected %.15f got %.15f", order, i, - o19roots[i], root[i]); - mu_assert_almost_equals(root[i], o19roots[i], prec, msg); - } - - return 0; -} - - -static char * test_glq_weights() -{ - double prec = pow(10, -9), weights[5]; - int rc, i, order; - - /* Test order 2 */ - order = 2; - - rc = glq_weights(order, o2roots, weights); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, weight %d) expected %.15f got %.15f", order, - i, o2weights[i], weights[i]); - mu_assert_almost_equals(weights[i], o2weights[i], prec, msg); - } - - /* Test order 3 */ - order = 3; - - rc = glq_weights(order, o3roots, weights); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, weight %d) expected %.15f got %.15f", order, - i, o3weights[i], weights[i]); - mu_assert_almost_equals(weights[i], o3weights[i], prec, msg); - } - - /* Test order 4 */ - order = 4; - - rc = glq_weights(order, o4roots, weights); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, weight %d) expected %.15f got %.15f", order, - i, o4weights[i], weights[i]); - mu_assert_almost_equals(weights[i], o4weights[i], prec, msg); - } - - /* Test order 5 */ - order = 5; - - rc = glq_weights(order, o5roots, weights); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, weight %d) expected %.15f got %.15f", order, - i, o5weights[i], weights[i]); - mu_assert_almost_equals(weights[i], o5weights[i], prec, msg); - } - - return 0; -} - - -static char * test_glq_nodes() -{ - double prec = pow(10, -9), nodes[19]; - int rc, i, order; - - /* Test order 2 */ - order = 2; - - rc = glq_nodes(order, nodes); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, node %d) expected %.15f got %.15f", order, - i, o2roots[i], nodes[i]); - mu_assert_almost_equals(nodes[i], o2roots[i], prec, msg); - } - - /* Test order 3 */ - order = 3; - - rc = glq_nodes(order, nodes); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, node %d) expected %.15f got %.15f", order, - i, o3roots[i], nodes[i]); - mu_assert_almost_equals(nodes[i], o3roots[i], prec, msg); - } - - /* Test order 4 */ - order = 4; - - rc = glq_nodes(order, nodes); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, node %d) expected %.15f got %.15f", order, - i, o4roots[i], nodes[i]); - mu_assert_almost_equals(nodes[i], o4roots[i], prec, msg); - } - - /* Test order 5 */ - order = 5; - - rc = glq_nodes(order, nodes); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, node %d) expected %.15f got %.15f", order, - i, o5roots[i], nodes[i]); - mu_assert_almost_equals(nodes[i], o5roots[i], prec, msg); - } - - /* Test order 19 */ - order = 19; - - rc = glq_nodes(order, nodes); - - sprintf(msg, "(order %d) return code %d, expected 0", order, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < order; i++) - { - sprintf(msg, "(order %d, node %d) expected %.15f got %.15f", order, - i, o19roots[i], nodes[i]); - mu_assert_almost_equals(nodes[i], o19roots[i], prec, msg); - } - - return 0; -} - - -static char * test_glq_set_limits() -{ - double prec = pow(10, -9), unscaled[5], scaled[5], a, b, correct; - int rc, i; - GLQ glq; - - glq.nodes_unscaled = unscaled; - glq.nodes = scaled; - - glq.order = 2; - a = -2.54; - b = 14.9; - mu_arraycp(o2roots, glq.nodes_unscaled, glq.order); - - rc = glq_set_limits(a, b, &glq); - sprintf(msg, "(order %d, a %g, b %g) return code %d, expected 0", glq.order, - a, b, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < glq.order; i++) - { - correct = 8.72*o2roots[i] + 6.18; - sprintf(msg, - "(order %d, index %d, a %g, b %g) expected %.15f, got %.15f", - glq.order, i, a, b, correct, glq.nodes[i]); - mu_assert_almost_equals(glq.nodes[i], correct, prec, msg); - } - - glq.order = 3; - a = 125.6; - b = 234.84; - mu_arraycp(o3roots, glq.nodes_unscaled, glq.order); - - rc = glq_set_limits(a, b, &glq); - sprintf(msg, "(order %d, a %g, b %g) return code %d, expected 0", glq.order, - a, b, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < glq.order; i++) - { - correct = 54.62*o3roots[i] + 180.22; - sprintf(msg, - "(order %d, index %d, a %g, b %g) expected %.15f, got %.15f", - glq.order, i, a, b, correct, glq.nodes[i]); - mu_assert_almost_equals(glq.nodes[i], correct, prec, msg); - } - - glq.order = 4; - a = 3.5; - b = -12.4; - mu_arraycp(o4roots, glq.nodes_unscaled, glq.order); - - rc = glq_set_limits(a, b, &glq); - sprintf(msg, "(order %d, a %g, b %g) return code %d, expected 0", glq.order, - a, b, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < glq.order; i++) - { - correct = -7.95*o4roots[i] - 4.45; - sprintf(msg, - "(order %d, index %d, a %g, b %g) expected %.15f, got %.15f", - glq.order, i, a, b, correct, glq.nodes[i]); - mu_assert_almost_equals(glq.nodes[i], correct, prec, msg); - } - - glq.order = 5; - a = 0.0; - b = 0.0; - mu_arraycp(o5roots, glq.nodes_unscaled, glq.order); - - rc = glq_set_limits(a, b, &glq); - sprintf(msg, "(order %d, a %g, b %g) return code %d, expected 0", glq.order, - a, b, rc); - mu_assert(rc == 0, msg); - - for(i = 0; i < glq.order; i++) - { - correct = 0.0; - sprintf(msg, - "(order %d, index %d, a %g, b %g) expected %.15f, got %.15f", - glq.order, i, a, b, correct, glq.nodes[i]); - mu_assert_almost_equals(glq.nodes[i], correct, prec, msg); - } - - return 0; -} - - -static char * test_glq_intcos() -{ - double result, expected; - double angles[6]; - int i, t, orders[6] = {2, 3, 5, 8, 15, 25}; - GLQ *glq; - - angles[0] = PI*0.1; - angles[1] = PI; - angles[2] = PI*1.2; - angles[3] = PI*1.9; - angles[4] = PI*4.3; - angles[5] = PI*6.9; - - for(t = 0; t < 6; t++) - { - glq = glq_new(orders[t], 0., angles[t]); - - if(glq == NULL) - { - sprintf(msg, - "(order %d, angle %g) failed to create new GLQ struct", - orders[t], angles[t]); - mu_assert(0, msg); - } - - for(i = 0, result = 0; i < orders[t]; i++) - { - result += glq->weights[i]*cos(glq->nodes[i]); - } - result *= 0.5*angles[t]; - - expected = sin(angles[t]); - - glq_free(glq); - - sprintf(msg, "(order %d, angle %g) expected %f, got %f", orders[t], - angles[t], expected, result); - mu_assert_almost_equals(result, expected, pow(10, -5), msg); - } - - return 0; -} - -static char * test_glq_sincos() -{ - GLQ *glq; - int i; - double result, d2r = PI/180.; - - glq = glq_new(10, 0, 90); - glq_precompute_sincos(glq); - - for(i = 0; i < glq->order; i++) - { - result = sin(d2r*glq->nodes[i]); - sprintf(msg, "expected sin(%g)=%g, got %g", glq->nodes[i], result, - glq->nodes_sin[i]); - mu_assert_almost_equals(result, glq->nodes_sin[i], pow(10, -15), msg); - result = cos(d2r*glq->nodes[i]); - sprintf(msg, "expected cos(%g)=%g, got %g", glq->nodes[i], result, - glq->nodes_cos[i]); - mu_assert_almost_equals(result, glq->nodes_cos[i], pow(10, -15), msg); - } - return 0; -} - - -int glq_run_all() -{ - int failed = 0; - failed += mu_run_test(test_glq_next_root_fail, - "glq_next_root returns correct fail code"); - failed += mu_run_test(test_glq_next_root, "glq_next_root produces correct results"); - failed += mu_run_test(test_glq_nodes, "glq_nodes produces correct results"); - failed += mu_run_test(test_glq_set_limits, - "glq_set_limits produces correct results"); - failed += mu_run_test(test_glq_weights, "glq_weights produces correct results"); - failed += mu_run_test(test_glq_intcos, - "glq cossine integration produces correct results"); - failed += mu_run_test(test_glq_sincos, - "glq precomputes sin and cos correctly"); - return failed; -} diff --git a/dep/tesseroids/test/test_grav_prism.c b/dep/tesseroids/test/test_grav_prism.c deleted file mode 100755 index feca691..0000000 --- a/dep/tesseroids/test/test_grav_prism.c +++ /dev/null @@ -1,888 +0,0 @@ -/* -Unit tests for grav_prism.c functions. -*/ - -#include -#include -#include "../lib/grav_sphere.h" -#include "../lib/grav_prism.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" - - -char msg[1000]; - -int sign(double x) -{ - if(x >= 0) - { - return 1; - } - else - { - return -1; - } -} - -static char * test_safe_atan2_sign() -{ - double res, - y[] = {1, -1, 1, -1}, - x[] = {1, 1, -1, -1}; - register int i; - - for(i = 0; i < 4; i++) - { - res = safe_atan2(y[i], x[i]); - sprintf(msg, "safe_atan2=%g for y=%g x=%g", res, y[i], x[i]); - mu_assert(sign(y[i]*x[i]) == sign(res), msg); - } - return 0; -} - -static char * test_safe_atan2_zero() -{ - double res, - x[] = {1, -1, 0}; - register int i; - for(i = 0; i < 3; i++) - { - res = safe_atan2(0, x[i]); - sprintf(msg, "safe_atan2=%g for x=%g", res, x[i]); - mu_assert(res == 0, msg); - } - return 0; -} - -static char * test_pot_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double planes[6], dist = 5000, i, j; - register int p, k; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - planes[0] = prism_pot(prism, i, j, -dist); - planes[1] = prism_pot(prism, i, j, dist); - planes[2] = prism_pot(prism, -dist, i, j); - planes[3] = prism_pot(prism, dist, i, j); - planes[4] = prism_pot(prism, i, -dist, j); - planes[5] = prism_pot(prism, i, dist, j); - for(p = 0; p < 5; p++) - { - for(k = p + 1; k < 6; k++) - { - sprintf(msg, "point (%g, %g) on planes %d n %d = (%.8f %.8f)", - i, j, p, k, planes[p], planes[k]); - mu_assert_almost_equals(planes[p], planes[k], 10E-10, msg); - } - } - } - } - return 0; -} - -static char * test_gx_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double gz, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gx(prism, i, j, -dist); - below = prism_gx(prism, i, j, dist); - north = prism_gx(prism, dist, i, j); - south = prism_gx(prism, -dist, i, j); - east = prism_gx(prism, i, dist, j); - west = prism_gx(prism, i, -dist, j); - gz = prism_gz(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, -south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "above", east, above); - mu_assert_almost_equals(east, above, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "gz", north, gz); - mu_assert_almost_equals(north, -gz, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "south", "gz", south, gz); - mu_assert_almost_equals(south, gz, 10E-10, msg); - } - } - return 0; -} - -static char * test_gy_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double gz, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gy(prism, i, j, -dist); - below = prism_gy(prism, i, j, dist); - north = prism_gy(prism, dist, j, i); - south = prism_gy(prism, -dist, j, i); - east = prism_gy(prism, i, dist, j); - west = prism_gy(prism, i, -dist, j); - gz = prism_gz(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, -west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "above", north, above); - mu_assert_almost_equals(north, above, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "gz", east, gz); - mu_assert_almost_equals(east, -gz, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "west", "gz", west, gz); - mu_assert_almost_equals(west, gz, 10E-10, msg); - } - } - return 0; -} - -static char * test_gz_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double gy, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gz(prism, i, j, -dist); - below = prism_gz(prism, i, j, dist); - north = prism_gz(prism, dist, i, j); - south = prism_gz(prism, -dist, i, j); - east = prism_gz(prism, i, dist, j); - west = prism_gz(prism, i, -dist, j); - gy = prism_gy(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, -below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "gy", north, gy); - mu_assert_almost_equals(north, gy, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "south", "gy", south, gy); - mu_assert_almost_equals(south, gy, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "gy", east, gy); - mu_assert_almost_equals(east, gy, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "west", "gy", west, gy); - mu_assert_almost_equals(west, gy, 10E-10, msg); - } - } - return 0; -} - -static char * test_gxx_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double gzz, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gxx(prism, i, j, -dist); - below = prism_gxx(prism, i, j, dist); - north = prism_gxx(prism, dist, i, j); - south = prism_gxx(prism, -dist, i, j); - east = prism_gxx(prism, i, dist, j); - west = prism_gxx(prism, i, -dist, j); - gzz = prism_gzz(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "above", east, above); - mu_assert_almost_equals(east, above, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "gzz", north, gzz); - mu_assert_almost_equals(north, gzz, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "south", "gzz", south, gzz); - mu_assert_almost_equals(south, gzz, 10E-10, msg); - } - } - return 0; -} - -static char * test_gxy_around() -{ - PRISM prism = {1000, -3000, 3000, -3000, 3000, -3000, 3000, 0, 0, 0}; - double gyz, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gxy(prism, i, j, -dist); - below = prism_gxy(prism, i, j, dist); - north = prism_gxy(prism, dist, j, i); - south = prism_gxy(prism, -dist, j, i); - east = prism_gxy(prism, j, dist, i); - west = prism_gxy(prism, j, -dist, i); - gyz = prism_gyz(prism, i, j, -dist); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "above", "below", above, below); - mu_assert_almost_equals(above, below, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "north", "south", north, south); - mu_assert_almost_equals(north, -south, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "east", "west", east, west); - mu_assert_almost_equals(east, -west, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "east", "north", east, north); - mu_assert_almost_equals(east, north, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "west", "south", west, south); - mu_assert_almost_equals(west, south, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "north", "gyz", north, gyz); - mu_assert_almost_equals(north, -gyz, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f n %.15f)", - i, j, dist, "south", "gyz", south, gyz); - mu_assert_almost_equals(south, gyz, 1e-5, msg); - } - } - - return 0; -} - -static char * test_gxz_around() -{ - PRISM prism = {3000, -3000, 3000, -3000, 3000, -3000, 3000, 0, 0, 0}; - double other, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gxz(prism, i, j, -dist); - below = prism_gxz(prism, i, j, dist); - north = prism_gxz(prism, dist, j, i); - south = prism_gxz(prism, -dist, j, i); - east = prism_gxz(prism, i, dist, j); - west = prism_gxz(prism, i, -dist, j); - other = prism_gxy(prism, i, j, -dist); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "above", "below", above, below); - mu_assert_almost_equals(above, -below, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "north", "south", north, south); - mu_assert_almost_equals(north, -south, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "east", "west", east, west); - mu_assert_almost_equals(east, west, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "below", "north", below, north); - mu_assert_almost_equals(below, north, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "above", "south", above, south); - mu_assert_almost_equals(above, south, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "east", "gxy", east, other); - mu_assert_almost_equals(east, other, 1e-5, msg); - sprintf(msg, " p (%g %g %g) on planes %s n %s = (%.15f %.15f)", - i, j, dist, "west", "gxy", west, other); - mu_assert_almost_equals(west, other, 1e-5, msg); - } - } - return 0; -} - -static char * test_gyy_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double other, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gyy(prism, i, j, -dist); - below = prism_gyy(prism, i, j, dist); - north = prism_gyy(prism, dist, j, i); - south = prism_gyy(prism, -dist, j, i); - east = prism_gyy(prism, i, dist, j); - west = prism_gyy(prism, i, -dist, j); - other = prism_gzz(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "north", above, north); - mu_assert_almost_equals(above, north, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "gzz", east, other); - mu_assert_almost_equals(east, other, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "west", "gzz", west, other); - mu_assert_almost_equals(west, other, 10E-10, msg); - } - } - return 0; -} - -static char * test_gyz_around() -{ - PRISM prism = {1000, -3000, 3000, -3000, 3000, -3000, 3000, 0, 0, 0}; - double other, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gyz(prism, i, j, -dist); - below = prism_gyz(prism, i, j, dist); - north = prism_gyz(prism, dist, j, i); - south = prism_gyz(prism, -dist, j, i); - east = prism_gyz(prism, i, dist, j); - west = prism_gyz(prism, i, -dist, j); - other = prism_gxy(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, -below, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, -west, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "below", "east", below, east); - mu_assert_almost_equals(below, east, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "west", above, west); - mu_assert_almost_equals(above, west, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "gxy", north, other); - mu_assert_almost_equals(north, other, 1e-5, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "south", "gxy", south, other); - mu_assert_almost_equals(south, other, 1e-5, msg); - } - } - return 0; -} - -static char * test_gzz_around() -{ - PRISM prism = {1000,-3000,3000,-3000,3000,-3000,3000,0,0,0}; - double other, above, below, north, south, east, west, dist = 5000, i, j; - - for(i = -10000; i <= 10000; i += 100) - { - for(j = -10000; j <= 10000; j += 100) - { - above = prism_gzz(prism, i, j, -dist); - below = prism_gzz(prism, i, j, dist); - north = prism_gzz(prism, dist, i, j); - south = prism_gzz(prism, -dist, i, j); - east = prism_gzz(prism, i, dist, j); - west = prism_gzz(prism, i, -dist, j); - other = prism_gyy(prism, i, j, -dist); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "above", "below", above, below); - mu_assert_almost_equals(above, below, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "south", north, south); - mu_assert_almost_equals(north, south, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "west", east, west); - mu_assert_almost_equals(east, west, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "east", north, east); - mu_assert_almost_equals(north, east, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "north", "gyy", north, other); - mu_assert_almost_equals(north, other, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "south", "gyy", south, other); - mu_assert_almost_equals(south, other, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "east", "gyy", east, other); - mu_assert_almost_equals(east, other, 10E-10, msg); - sprintf(msg, "point (%g, %g) on planes %s n %s = (%.8f %.8f)", - i, j, "west", "gyy", west, other); - mu_assert_almost_equals(west, other, 10E-10, msg); - } - } - return 0; -} - -static char * test_gxx_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gxx(prism, 0, 0,-dist); - resbelow = prism_gxx(prism, 0, 0, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals(resbelow, restop, 0.1, msg); - } - - return 0; -} - -static char * test_gxy_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gxy(prism, 5000, 5000, -dist); - resbelow = prism_gxy(prism, 5000, 5000, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals(resbelow, restop, 1, msg); - } - - return 0; -} - -static char * test_gxz_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gxz(prism, 5000, 0,-dist); - resbelow = prism_gxz(prism, 5000, 0, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals(resbelow, -restop, 0.1, msg); - } - - return 0; -} - -static char * test_gyy_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gyy(prism, 0, 0,-dist); - resbelow = prism_gyy(prism, 0, 0, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals_rel(resbelow, restop, 1, msg); - } - - return 0; -} - -static char * test_gyz_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gyz(prism, 0, 5000, -dist); - resbelow = prism_gyz(prism, 0, 5000, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals(resbelow, -restop, 0.1, msg); - } - - return 0; -} - -static char * test_gzz_below() -{ - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, restop, resbelow; - - for(dist=5010; dist <= 500000; dist += 100) - { - restop = prism_gzz(prism, 0, 0, -dist); - resbelow = prism_gzz(prism, 0, 0, dist); - - sprintf(msg, "(distance %g m) top = %.5f below = %.5f", dist, - restop, resbelow); - mu_assert_almost_equals(resbelow, restop, 0.1, msg); - } - - return 0; -} - -static char * test_prism2sphere_pot() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_pot(prism,0,0,-dist); - ressphere = sphere_pot(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.001, msg); - } - - return 0; -} - -static char * test_prism2sphere_gx() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=10000; dist <= 500000; dist += 500) - { - resprism = prism_gx(prism,0,0,-dist); - ressphere = sphere_gx(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.00000001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gy() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=10000; dist <= 500000; dist += 500) - { - resprism = prism_gy(prism,0,0,-dist); - ressphere = sphere_gy(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.00000001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gz() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gz(prism,0,0,-dist); - ressphere = sphere_gz(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, -1*ressphere, 0.01, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gxx() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gxx(prism,0,0,-dist); - ressphere = sphere_gxx(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gxy() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gxy(prism,0,0,-dist); - ressphere = sphere_gxy(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gxz() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gxz(prism,0,0,-dist); - ressphere = sphere_gxz(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, -1*ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gyy() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gyy(prism,0,0,-dist); - ressphere = sphere_gyy(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gyz() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=50000; dist <= 500000; dist += 500) - { - resprism = prism_gyz(prism,0,0,-dist); - ressphere = sphere_gyz(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, -1*ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_prism2sphere_gzz() -{ - SPHERE sphere; - PRISM prism = {3000,-5000,5000,-5000,5000,-5000,5000,0,0,0}; - double dist, resprism, ressphere; - - /* Make a sphere with the same mass as the prism and put it at the origin */ - prism2sphere(prism, 0, 0, 0, &sphere); - - for(dist=60000; dist <= 500000; dist += 500) - { - resprism = prism_gzz(prism,0,0,-dist); - ressphere = sphere_gzz(sphere,0,90,dist); - - sprintf(msg, "(distance %g m) prism = %.5f sphere = %.5f", dist, - resprism, ressphere); - mu_assert_almost_equals(resprism, ressphere, 0.001, msg); - } - - return 0; -} - -static char * test_prism_tensor_trace() -{ - #define N 4 - TESSEROID tesses[N] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,183,80,81.5,6300000,6302000}, - {1,200,203,-90,-88,5500000,5500100}, - {1,-10,-7,7,7.5,6500000,6505000}}; - PRISM prism; - int i; - double trace, dist, x, y; - - for(i = 0; i < N; i++) - { - tess2prism_flatten(tesses[i], &prism); - x = 0.5*(prism.x1 + prism.x2); - y = 0.5*(prism.y1 + prism.y2); - - for(dist=1000; dist <= 5000000; dist += 1000) - { - - trace = prism_gxx(prism, x, y, prism.z1 - dist) - + prism_gyy(prism, x, y, prism.z1 - dist) - + prism_gzz(prism, x, y, prism.z1 - dist); - - sprintf(msg, "(prism %d dist %g) trace %.10f", i, dist, trace); - mu_assert_almost_equals(trace, 0, 0.0000000001, msg); - } - } - #undef N - return 0; -} - -int grav_prism_run_all() -{ - int failed = 0; - failed += mu_run_test(test_safe_atan2_sign, - "safe_atan2 result has same sign as angle"); - failed += mu_run_test(test_safe_atan2_zero, - "safe_atan2 returns 0 for y == 0"); - failed += mu_run_test(test_pot_around, - "prism_pot results equal around the prism"); - failed += mu_run_test(test_gx_around, - "prism_gx results consistent around the prism"); - failed += mu_run_test(test_gy_around, - "prism_gy results consistent around the prism"); - failed += mu_run_test(test_gz_around, - "prism_gz results consistent around the prism"); - failed += mu_run_test(test_gxx_around, - "prism_gxx results consistent around the prism"); - failed += mu_run_test(test_gxy_around, - "prism_gxy results consistent around the prism"); - failed += mu_run_test(test_gxz_around, - "prism_gxz results consistent around the prism"); - failed += mu_run_test(test_gyy_around, - "prism_gyy results consistent around the prism"); - failed += mu_run_test(test_gyz_around, - "prism_gyz results consistent around the prism"); - failed += mu_run_test(test_gzz_around, - "prism_gzz results consistent around the prism"); - failed += mu_run_test(test_gxx_below, - "prism_gxx results equal above and below the prism"); - failed += mu_run_test(test_gxy_below, - "prism_gxy results equal above and below the prism"); - failed += mu_run_test(test_gxz_below, - "prism_gxz results equal above and below the prism"); - failed += mu_run_test(test_gyy_below, - "prism_gyy results equal above and below the prism"); - failed += mu_run_test(test_gyz_below, - "prism_gyz results equal above and below the prism"); - failed += mu_run_test(test_gzz_below, - "prism_gzz results equal above and below the prism"); - failed += mu_run_test(test_prism2sphere_pot, - "prism_pot results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gx, - "prism_gx results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gy, - "prism_gy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gz, - "prism_gz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gxx, - "prism_gxx results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gxy, - "prism_gxy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gxz, - "prism_gxz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gyy, - "prism_gyy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gyz, - "prism_gyz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism2sphere_gzz, - "prism_gzz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_prism_tensor_trace, - "trace of GGT for prism in Cartesian coordinates is zero"); - return failed; -} diff --git a/dep/tesseroids/test/test_grav_prism_sph.c b/dep/tesseroids/test/test_grav_prism_sph.c deleted file mode 100755 index 55c8178..0000000 --- a/dep/tesseroids/test/test_grav_prism_sph.c +++ /dev/null @@ -1,160 +0,0 @@ -/* -Unit tests for grav_prism.c functions. -*/ - -#include -#include -#include "../lib/grav_prism_sph.h" -#include "../lib/grav_prism.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" - - -char msg[1000]; - - -/* Test coordinate transformation */ -static char * test_global2local() -{ - #define R 6378137.0 - #define N 3 - PRISM prisms[N] = { - {3000,-5000,5000,-5000,5000,0,5000, 2.45, -36.32, R}, - {2000,-3000,3000,-2000,2000,0,800, -45.45, -103.1, R}, - {1000,-2000,2000,-1000,1000,0,234, -80.45, 183.2, R}}; - double x, y, z, newz[N] = {-3000, 1234, -2.3456}; - int i; - - for(i = 0; i < N; i++) - { - global2local(prisms[i].lon, prisms[i].lat, R - newz[i], prisms[i], - &x, &y, &z); - sprintf(msg, "(prism %d) x: expect %.10g got %.10g", i, 0., x); - mu_assert_almost_equals(x, 0., 0.00000001, msg); - sprintf(msg, "(prism %d) y: expect %.10g got %.10g", i, 0., y); - mu_assert_almost_equals(y, 0., 0.00000001, msg); - sprintf(msg, "(prism %d) z: expect %.10g got %.10g", i, newz[i], z); - mu_assert_almost_equals(z, newz[i], 0.00000001, msg); - } - #undef R - #undef N - return 0; -} - -/* Test agains grav_prism */ -static char * test_prism_pot_sph() -{ - #define R 6378137.0 - PRISM prism = {3000,-5000,5000,-5000,5000,0,5000,187,38,R}; - double res, expect; - int fix; - - fix = 1; - res = prism_pot_sph(prism, 187, 38, R + 1000); - expect = prism_pot(prism, 0, 0, -1000); - sprintf(msg, "(fixture %d) expect %.10g got %.10g", fix, expect, res); - mu_assert_almost_equals(res, expect, 0.0000000001, msg); - - #undef R - return 0; -} - - -static char * test_prism_g_sph() -{ - #define R 6378137.0 - PRISM prism = {3000,-5000,5000,-5000,5000,0,5000,27,-78,R}; - double resx, resy, resz, expectx, expecty, expectz; - int fix; - - fix = 1; - prism_g_sph(prism, 27, -78, R + 1000, &resx, &resy, &resz); - expectx = prism_gx(prism, 0, 0, -1000); - expecty = prism_gy(prism, 0, 0, -1000); - expectz = prism_gz(prism, 0, 0, -1000); - sprintf(msg, "(fixture %d) gx: expect %.10g got %.10g", fix, expectx, resx); - mu_assert_almost_equals(resx, expectx, 0.0000000001, msg); - sprintf(msg, "(fixture %d) gy: expect %.10g got %.10g", fix, expecty, resy); - mu_assert_almost_equals(resy, expecty, 0.0000000001, msg); - sprintf(msg, "(fixture %d) gz: expect %.10g got %.10g", fix, expectz, resz); - mu_assert_almost_equals(resz, expectz, 0.0000000001, msg); - - #undef R - return 0; -} - - -static char * test_prism_ggt_sph() -{ - #define R 6378137.0 - PRISM prism = {3000,-5000,5000,-5000,5000,0,5000,-7,8,R}; - double res[6], expect[6]; - int fix, i; - - fix = 1; - prism_ggt_sph(prism, -7, 8, R + 1000, res); - expect[0] = prism_gxx(prism, 0, 0, -1000); - expect[1] = prism_gxy(prism, 0, 0, -1000); - expect[2] = prism_gxz(prism, 0, 0, -1000); - expect[3] = prism_gyy(prism, 0, 0, -1000); - expect[4] = prism_gyz(prism, 0, 0, -1000); - expect[5] = prism_gzz(prism, 0, 0, -1000); - for(i = 0; i < 6; i++) - { - sprintf(msg, "(fixture %d) cmp %d: expect %.10f got %.10f", fix, i, - expect[i], res[i]); - mu_assert_almost_equals(res[i], expect[i], 0.000000001, msg); - } - #undef R - return 0; -} - -static char * test_prism_tensor_sph_trace() -{ - #define N 4 - #define GXX 0 - #define GYY 3 - #define GZZ 5 - TESSEROID tesses[N] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,183,80,81.5,6300000,6302000}, - {1,200,203,-90,-88,5500000,5500100}, - {1,-10,-7,7,7.5,6500000,6505000}}; - PRISM prism; - int i; - double trace, dist, tensor[6]; - - for(i = 0; i < N; i++) - { - tess2prism(tesses[i], &prism); - for(dist=1000; dist <= 5000000; dist += 1000) - { - prism_ggt_sph(prism, prism.lon, prism.lat, prism.r + dist, tensor); - trace = tensor[GXX] + tensor[GYY] + tensor[GZZ]; - - sprintf(msg, "(prism %d dist %g) trace %.10f", i, dist, trace); - mu_assert_almost_equals(trace, 0, 0.0000000001, msg); - } - } - #undef N - #undef GXX - #undef GYY - #undef GZZ - return 0; -} - -int grav_prism_sph_run_all() -{ - int failed = 0; - failed += mu_run_test(test_prism_pot_sph, - "prism_pot_sph results equal to prism_pot when on top of prism"); - failed += mu_run_test(test_prism_g_sph, - "prism_g_sph results equal to prism_gx, etc, when on top of prism"); - failed += mu_run_test(test_prism_ggt_sph, - "prism_ggt_sph results equal to prism_gxx, etc, when on top of prism"); - failed += mu_run_test(test_prism_tensor_sph_trace, - "trace of GGT for prism in spherical coordinates is zero"); - failed += mu_run_test(test_global2local, - "global2local returns correct result"); - return failed; -} diff --git a/dep/tesseroids/test/test_grav_tess.c b/dep/tesseroids/test/test_grav_tess.c deleted file mode 100755 index 347af29..0000000 --- a/dep/tesseroids/test/test_grav_tess.c +++ /dev/null @@ -1,633 +0,0 @@ -/* -Unit tests for grav_tess.c functions. -*/ - -#include -#include -#include -#include "../lib/grav_sphere.h" -#include "../lib/grav_tess.h" -#include "../lib/glq.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" - - -char msg[1000]; - - -static char * test_tess2sphere_pot() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - for(dist=1000000; dist <= 2000000; dist += 1000) - { - restess = tess_pot(tess,0,40,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_pot(sphere,0,40,radius+dist); - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.01, msg); - } - return 0; -} - - -static char * test_tess2sphere_gx() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1000000; dist <= 2000000; dist += 1000) - { - restess = tess_gx(tess,0,40,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gx(sphere,0,40,radius+dist); - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.1, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gy() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1000000; dist <= 2000000; dist += 1000) - { - restess = tess_gy(tess,5,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gy(sphere,5,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.1, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gz() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = -tess_gz(tess,0,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gz(sphere,0,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.1, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gxx() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1300000; dist <= 2000000; dist += 1000) - { - restess = tess_gxx(tess,0,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gxx(sphere,0,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gxy() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = tess_gxy(tess,5,50,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gxy(sphere,5,50,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gxz() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = tess_gxz(tess,0,50,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gxz(sphere,0,50,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gyy() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = tess_gyy(tess,0,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gyy(sphere,0,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gyz() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = tess_gyz(tess,5,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gyz(sphere,5,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess2sphere_gzz() -{ - SPHERE sphere; - TESSEROID tess; - double radius, dist, restess, ressphere; - GLQ *glqlon, *glqlat, *glqr; - - tess.density = 1000.; - tess.w = 44; - tess.e = 46; - tess.s = -1; - tess.n = 1; - tess.r1 = MEAN_EARTH_RADIUS - 100000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(8, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - glq_precompute_sincos(glqlat); - - radius = tess.r2; - - /* Make a sphere with the same mass as the tesseroid */ - tess2sphere(tess, &sphere); - - for(dist=1500000; dist <= 2000000; dist += 1000) - { - restess = tess_gzz(tess,0,45,radius+dist,*glqlon,*glqlat,*glqr); - ressphere = sphere_gzz(sphere,0,45,radius+dist); - - sprintf(msg, "(distance %g m) tess = %.5f sphere = %.5f", dist, - restess, ressphere); - mu_assert_almost_equals(restess, ressphere, 0.001, msg); - } - - return 0; -} - - -static char * test_tess_tensor_trace() -{ - #define N 4 - TESSEROID tesses[N] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,183,80,81.5,6300000,6302000}, - {1,200,203,-90,-88,5500000,5500100}, - {1,-10,-7,7,7.5,6500000,6505000}}; - GLQ *glqlon, *glqlat, *glqr; - int i; - double lon, lat, r, trace, dist; - - glqlon = glq_new(8, tesses[0].w, tesses[0].e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(8, tesses[0].s, tesses[0].n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(8, tesses[0].r1, tesses[0].r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - for(i = 0; i < N; i++) - { - lon = 0.5*(tesses[i].w + tesses[i].e); - lat = 0.5*(tesses[i].n + tesses[i].s); - r = tesses[i].r2; - - for(dist=100000; dist <= 5000000; dist += 5000) - { - trace = calc_tess_model_adapt(&tesses[i], 1, lon, lat, r + dist, - glqlon, glqlat, glqr, tess_gxx, - TESSEROID_GXX_SIZE_RATIO) + - calc_tess_model_adapt(&tesses[i], 1, lon, lat, r + dist, - glqlon, glqlat, glqr, tess_gyy, - TESSEROID_GYY_SIZE_RATIO) + - calc_tess_model_adapt(&tesses[i], 1, lon, lat, r + dist, - glqlon, glqlat, glqr, tess_gzz, - TESSEROID_GZZ_SIZE_RATIO); - - sprintf(msg, "(tess %d dist %g) trace %.10f", i, dist, trace); - mu_assert_almost_equals(trace, 0, 0.0000000001, msg); - } - } - - glq_free(glqlon); - glq_free(glqlat); - glq_free(glqr); - #undef N - return 0; -} - - -static char * test_adaptative() -{ - /* Check if the adaptative is dividing properly and returning the same thing - as the non-adaptative (do spliting by hand) */ - TESSEROID tess, - split[10000]; - GLQ *glqlon, *glqlat, *glqr; - double mindist, resadapt, resnormal; - double lon, lat; - int n; - - tess.density = 1000.; - tess.w = -0.5; - tess.e = 0.5; - tess.s = -0.5; - tess.n = 0.5; - tess.r1 = MEAN_EARTH_RADIUS - 10000; - tess.r2 = MEAN_EARTH_RADIUS; - - glqlon = glq_new(2, tess.w, tess.e); - if(glqlon == NULL) - mu_assert(0, "GLQ allocation error"); - - glqlat = glq_new(2, tess.s, tess.n); - if(glqlat == NULL) - mu_assert(0, "GLQ allocation error"); - - glqr = glq_new(2, tess.r1, tess.r2); - if(glqr == NULL) - mu_assert(0, "GLQ allocation error"); - - mindist = 100000; - - /* If at half mindist should only divide once */ - for(lon = -0.5; lon <= 0.5; lon += 0.05) - { - for(lat = -0.5; lat <= 0.5; lat += 0.05) - { - resadapt = calc_tess_model_adapt(&tess, 1, lon, lat, - 0.5*mindist + MEAN_EARTH_RADIUS, - glqlon, glqlat, glqr, - tess_gzz, - TESSEROID_GZZ_SIZE_RATIO); - n = split_tess(tess, 20, 20, 20, split); - sprintf(msg, "splitting in %d instead of 8000", n); - mu_assert(n == 8000, msg); - resnormal = calc_tess_model(split, n, lon, lat, - 0.5*mindist + MEAN_EARTH_RADIUS, glqlon, - glqlat, glqr, tess_gzz); - sprintf(msg, "adapt = %.10f normal = %.10f", resadapt, resnormal); - mu_assert_almost_equals(resadapt, resnormal, pow(10, -2), msg); - } - } - return 0; -} - - -int grav_tess_run_all() -{ - int failed = 0; - failed += mu_run_test(test_tess2sphere_pot, - "tess_pot results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gx, - "tess_gx results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gy, - "tess_gy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gz, - "tess_gz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gxx, - "tess_gxx results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gxy, - "tess_gxy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gxz, - "tess_gxz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gyy, - "tess_gyy results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gyz, - "tess_gyz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess2sphere_gzz, - "tess_gzz results equal to sphere of same mass at distance"); - failed += mu_run_test(test_tess_tensor_trace, "trace of GGT for tesseroid is zero"); - failed += mu_run_test(test_adaptative, - "calc_tess_model_adapt results as non-adapt with split by hand"); - return failed; -} diff --git a/dep/tesseroids/test/test_parsers.c b/dep/tesseroids/test/test_parsers.c deleted file mode 100755 index c8d09b2..0000000 --- a/dep/tesseroids/test/test_parsers.c +++ /dev/null @@ -1,229 +0,0 @@ -/* -Unit tests for I/O parser functions. -*/ - -#include -#include -#include "minunit.h" -#include "../lib/parsers.h" -#include "../lib/constants.h" - -/* To store fail messages */ -char msg[1000]; - - -/* UNIT TESTS */ - -static char * test_gets_tess() -{ - int i; - char str[1000]; - TESSEROID res; - TESSEROID tesses[4] = { - {1,0,1,0,1,6000000,6001000}, - {1,180,190,80,85,6300000,6301000}, - {1,160,200,-90,-70,5500000,6000000}, - {1,-10,5,-7,15,6500000,6505000}}; - - for(i = 0; i < 4; i++) - { - sprintf(str, "%15.5f %15.5f %15.5f %15.5f %15.5f %15.5f %15.5f", - tesses[i].w, tesses[i].e, tesses[i].s, tesses[i].n, - tesses[i].r2 - MEAN_EARTH_RADIUS, - tesses[i].r1 - MEAN_EARTH_RADIUS, - tesses[i].density); - - gets_tess(str, &res); - - sprintf(msg, "(tess %d) failed to read w. read=%g true=%g diff=%g", i, - res.w, tesses[i].w, res.w - tesses[i].w); - mu_assert_almost_equals(res.w, tesses[i].w, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read e. read=%g true=%g diff=%g", i, - res.e, tesses[i].e, res.e - tesses[i].e); - mu_assert_almost_equals(res.e, tesses[i].e, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read s. read=%g true=%g diff=%g", i, - res.s, tesses[i].s, res.s - tesses[i].s); - mu_assert_almost_equals(res.s, tesses[i].s, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read n. read=%g true=%g diff=%g", i, - res.n, tesses[i].n, res.n - tesses[i].n); - mu_assert_almost_equals(res.n, tesses[i].n, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read r2. read=%g true=%g diff=%g", - i, res.r2, tesses[i].r2, res.r2 - tesses[i].r2); - mu_assert_almost_equals(res.r2, tesses[i].r2, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read r1. read=%g true=%g diff=%g", - i, res.r1, tesses[i].r1, res.r1 - tesses[i].r1); - mu_assert_almost_equals(res.r1, tesses[i].r1, 10E-10, msg); - sprintf(msg, "(tess %d) failed to read dens. read=%g true=%g diff=%g", - i, res.density, tesses[i].density, - res.density - tesses[i].density); - mu_assert_almost_equals(res.density, tesses[i].density, 10E-10, msg); - } - return 0; -} - - -static char * test_gets_prism() -{ - int i; - char str[1000]; - PRISM res; - PRISM prisms[4] = { - {1,0,1000,0,2000,100,2000,0,0,0}, - {1,-500,200,300,500,-1000,4000,0,0,0}, - {1,-10000000,5000000,5000000,8000000,0,3000000,0,0,0}, - {1,-1000000,50000,500000,800000,0,300000,0,0,0}}; - - for(i = 0; i < 4; i++) - { - sprintf(str, "%g %g %g %g %g %g %g", prisms[i].x1, prisms[i].x2, - prisms[i].y1, prisms[i].y2, prisms[i].z1, prisms[i].z2, - prisms[i].density); - - if(gets_prism(str, &res)) - { - sprintf(msg, "(prism %d) gets_prism returned 1", i); - mu_assert(0, msg); - } - - sprintf(msg, "(prism %d) failed to read x1. read=%g true=%g", i, res.x1, - prisms[i].x1); - mu_assert(res.x1 == prisms[i].x1, msg); - sprintf(msg, "(prism %d) failed to read x2. read=%g true=%g", i, res.x2, - prisms[i].x2); - mu_assert(res.x2 == prisms[i].x2, msg); - sprintf(msg, "(prism %d) failed to read y1. read=%g true=%g", i, res.y1, - prisms[i].y1); - mu_assert(res.y1 == prisms[i].y1, msg); - sprintf(msg, "(prism %d) failed to read y2. read=%g true=%g", i, res.y2, - prisms[i].y2); - mu_assert(res.y2 == prisms[i].y2, msg); - sprintf(msg, "(prism %d) failed to read z1. read=%g true=%g", i, res.z1, - prisms[i].z1); - mu_assert(res.z1 == prisms[i].z1, msg); - sprintf(msg, "(prism %d) failed to read z2. read=%g true=%g", i, res.z2, - prisms[i].z2); - mu_assert(res.z2 == prisms[i].z2, msg); - sprintf(msg, "(prism %d) failed to read density. read=%g true=%g", i, - res.density, prisms[i].density); - mu_assert(res.density == prisms[i].density, msg); - } - return 0; -} - - -static char * test_gets_prism_sph() -{ - int i; - char str[1000]; - PRISM res; - PRISM prisms[4] = { - {1,-1000,1000,-2000,2000,0,2000,2,3,1}, - {1,-500,500,-500,500,0,4000,-3,1.2344,18.048}, - {1,-10000000,10000000,-8000000,8000000,0,3000000,2123.2,2,45.33}, - {1,-50000,50000,-800000,800000,0,300000,783.245,3.57,345}}; - - for(i = 0; i < 4; i++) - { - - sprintf(str, "%g %g %g %g %g %g %g", - prisms[i].x2 - prisms[i].x1, - prisms[i].y2 - prisms[i].y1, - prisms[i].z2 - prisms[i].z1, - prisms[i].density, - prisms[i].lon, prisms[i].lat, prisms[i].r); - - if(gets_prism_sph(str, &res)) - { - sprintf(msg, "(prism %d) gets_prism_sph returned 1", i); - mu_assert(0, msg); - } - - sprintf(msg, "(prism %d) failed to read x1. read=%g true=%g", i, res.x1, - prisms[i].x1); - mu_assert(res.x1 == prisms[i].x1, msg); - sprintf(msg, "(prism %d) failed to read x2. read=%g true=%g", i, res.x2, - prisms[i].x2); - mu_assert(res.x2 == prisms[i].x2, msg); - sprintf(msg, "(prism %d) failed to read y1. read=%g true=%g", i, res.y1, - prisms[i].y1); - mu_assert(res.y1 == prisms[i].y1, msg); - sprintf(msg, "(prism %d) failed to read y2. read=%g true=%g", i, res.y2, - prisms[i].y2); - mu_assert(res.y2 == prisms[i].y2, msg); - sprintf(msg, "(prism %d) failed to read z1. read=%g true=%g", i, res.z1, - prisms[i].z1); - mu_assert(res.z1 == prisms[i].z1, msg); - sprintf(msg, "(prism %d) failed to read z2. read=%g true=%g", i, res.z2, - prisms[i].z2); - mu_assert(res.z2 == prisms[i].z2, msg); - sprintf(msg, "(prism %d) failed to read density. read=%g true=%g", i, - res.density, prisms[i].density); - mu_assert(res.density == prisms[i].density, msg); - sprintf(msg, "(prism %d) failed to read lon. read=%g true=%g", i, - res.lon, prisms[i].lon); - mu_assert(res.lon == prisms[i].lon, msg); - sprintf(msg, "(prism %d) failed to read lat. read=%g true=%g", i, - res.lat, prisms[i].lat); - mu_assert(res.lat == prisms[i].lat, msg); - sprintf(msg, "(prism %d) failed to read r. read=%g true=%g", i, - res.r, prisms[i].r); - mu_assert(res.r == prisms[i].r, msg); - } - return 0; -} - - -static char * test_gets_prism_fail() -{ - int i = 0, j; - char str[1000]; - PRISM res; - PRISM prisms[4] = { - {1,0,1000,0,2000,100,2000,0,0,0}, - {1,-500,200,300,500,-1000,4000,0,0,0}, - {1,-10000000,5000000,5000000,8000000,0,3000000,0,0,0}, - {1,-1000000,50000,500000,800000,0,300000,0,0,0}}; - - j = 1; - sprintf(str, "%g %g %g %g %g %g %g 1", prisms[i].x1, prisms[i].x2, - prisms[i].y1, prisms[i].y2, prisms[i].z1, prisms[i].z2, - prisms[i].density); - sprintf(msg, "(test %d) gets_prism did not fail for bad input", j); - mu_assert(gets_prism(str, &res), msg); - - j = 2; - sprintf(str, "%g %g %g %g %g %g %g 1.3", prisms[i].x1, prisms[i].x2, - prisms[i].y1, prisms[i].y2, prisms[i].z1, prisms[i].z2, - prisms[i].density); - sprintf(msg, "(test %d) gets_prism did not fail for bad input", j); - mu_assert(gets_prism(str, &res), msg); - - j = 3; - sprintf(str, "%g %g %g %g %g %g %g meh", prisms[i].x1, prisms[i].x2, - prisms[i].y1, prisms[i].y2, prisms[i].z1, prisms[i].z2, - prisms[i].density); - sprintf(msg, "(test %d) gets_prism did not fail for bad input", j); - mu_assert(gets_prism(str, &res), msg); - - j = 4; - sprintf(str, "%g %g %g %g %g %g %g 1 4.5 234556 blablabla", - prisms[i].x1, prisms[i].x2, - prisms[i].y1, prisms[i].y2, prisms[i].z1, prisms[i].z2, - prisms[i].density); - sprintf(msg, "(test %d) gets_prism did not fail for bad input", j); - mu_assert(gets_prism(str, &res), msg); - - return 0; -} - - -int parsers_run_all() -{ - int failed = 0; - failed += mu_run_test(test_gets_tess, "gets_tess reads correctly from string"); - failed += mu_run_test(test_gets_prism, "gets_prism reads correctly from string"); - failed += mu_run_test(test_gets_prism_sph, - "gets_prism_sph reads correctly from string"); - failed += mu_run_test(test_gets_prism_fail, "gets_prism fails for bad input"); - return failed; -} diff --git a/dep/tesseroids/toolkits/CMakeLists.txt b/dep/tesseroids/toolkits/CMakeLists.txt deleted file mode 100644 index 6538e9c..0000000 --- a/dep/tesseroids/toolkits/CMakeLists.txt +++ /dev/null @@ -1,51 +0,0 @@ -# 设置编译选项 -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") -if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lm") -endif() - -# 设置可执行文件的输出地址 -set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin/toolkits) - -# 下面设置tools的编译命令 首先设置一个宏 -macro(add_tools name) - # 添加可执行程序名称 - add_executable(${name} ${name}.c) - # 设置安装后的动态库调用地址 - set_target_properties(${name} PROPERTIES INSTALL_RPATH /usr/local/lib) - # 链接动态库 - target_link_libraries(${name} PUBLIC tess) - # 将可执行程序安装到/opt/bin/tess - install(TARGETS ${name} RUNTIME DESTINATION sbin) -endmacro() - -# 添加tools -add_tools(prismgx) -add_tools(prismgy) -add_tools(prismgz) -add_tools(prismgxx) -add_tools(prismgxy) -add_tools(prismgxz) -add_tools(prismgyy) -add_tools(prismgyz) -add_tools(prismgzz) -add_tools(prismgs) -add_tools(prismpot) -add_tools(prismpots) -add_tools(prismggts) -add_tools(tessgx) -add_tools(tessgy) -add_tools(tessgz) -add_tools(tessgxx) -add_tools(tessgxy) -add_tools(tessgxz) -add_tools(tessgyy) -add_tools(tessgyz) -add_tools(tessgzz) -add_tools(tessdefaults) -add_tools(tess2prism) -add_tools(tessgrd) -add_tools(tesslayers) -add_tools(tessmass) -add_tools(tessmodgen) -add_tools(tesspot) \ No newline at end of file diff --git a/dep/tesseroids/toolkits/prismggts.c b/dep/tesseroids/toolkits/prismggts.c deleted file mode 100644 index 0019043..0000000 --- a/dep/tesseroids/toolkits/prismggts.c +++ /dev/null @@ -1,249 +0,0 @@ -/* -Program to calculate the potential of a rectangular prism model in spherical -coordinates. -*/ - - -#include -#include -#include -#include -#include "../lib/logger.h" -#include "../lib/version.h" -#include "../lib/grav_prism_sph.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" -#include "../lib/parsers.h" - - -/* Print the help message */ -void print_help() -{ - printf("Usage: prismggts MODELFILE [OPTIONS]\n\n"); - printf("Calculates the 6 component gravity gradient tensor due to a\n"); - printf("rectangular prism model on specified observation points using\n"); - printf("spherical coordinates.\n\n"); - printf("All input units are SI! Output is in Eotvos.\n\n"); - printf("Coordinate system:\n"); - printf(" The coordinate system used for the calculations is:\n"); - printf(" x->North, y->East, and z->Up\n"); - printf("Input:\n"); - printf(" Computation points are passed through standard input (stdin).\n"); - printf(" Reads 3 or more values per line and inteprets the first 3 as:\n"); - printf(" longitude latitude height \n"); - printf(" longitude and latitude should be in decimal degrees, and\n"); - printf(" height in meters.\n"); - printf(" Other values in the line are ignored.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the form:\n"); - printf(" lon lat height ... gxx gxy gxz gyy gyz gzz\n"); - printf(" ... represents any values that were read from input and\n"); - printf(" ignored. In other words, the result is appended to the last\n"); - printf(" column of the input. Use this to pipe prism* programs\n"); - printf(" together.\n\n"); - printf(" Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("MODELFILE: File containing the prism model\n"); - printf(" * Each prism is specified by the values of its dimensions,\n"); - printf(" density, and spherical coordinates of the center of its\n"); - printf(" top.\n"); - printf(" * The file should contain one prism per line\n"); - printf(" * If a line starts with # it will be considered a comment and\n"); - printf(" will be ignored.\n"); - printf(" * Each line should have the following column format:\n"); - printf(" DX DY DZ Density lon lat r\n"); - printf(" This is the format output by tess2prism.\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - printf("\nPart of the Tesseroids package.\n"); - printf("Project site: \n"); - printf("Report bugs at: "); - printf("\n"); -} - - -/* Run the main for a generic prismg* program */ -int main(int argc, char **argv) -{ - BASIC_ARGS args; - PRISM *model; - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0, i; - char buff[10000]; - char progname[] = "prismggts"; - double lon, lat, height, ggt[6], tmp[6]; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - log_init(LOG_INFO); - strcpy(progname, progname); - rc = parse_basic_args(argc, argv, progname, &args, &print_help); - if(rc == 3) - { - log_error("%s: missing input file", progname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* Read the model file */ - log_info("Reading prism model from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_prism_model(modelfile, 1, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("prism file %s is empty", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d prism(s) read", modelsize); - - /* Print a header on the output with provenance information */ - printf("# Gravity gradient tensor calculated in spherical coordinates with %s %s:\n", - progname, tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d prisms)\n", args.inputfname, modelsize); - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - if(sscanf(buff, "%lf %lf %lf", &lon, &lat, &height) != 3) - { - log_warning("bad/invalid computation point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - ggt[0] = 0; - ggt[1] = 0; - ggt[2] = 0; - ggt[3] = 0; - ggt[4] = 0; - ggt[5] = 0; - for(i = 0; i < modelsize; i++) - { - prism_ggt_sph(model[i], lon, lat, height + MEAN_EARTH_RADIUS, - tmp); - ggt[0] += tmp[0]; - ggt[1] += tmp[1]; - ggt[2] += tmp[2]; - ggt[3] += tmp[3]; - ggt[4] += tmp[4]; - ggt[5] += tmp[5]; - } - printf("%s %.15g %.15g %.15g %.15g %.15g %.15g\n", buff, - ggt[0], - ggt[1], - ggt[2], - ggt[3], - ggt[4], - ggt[5]); - points++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/prismgs.c b/dep/tesseroids/toolkits/prismgs.c deleted file mode 100644 index 5dfb3f7..0000000 --- a/dep/tesseroids/toolkits/prismgs.c +++ /dev/null @@ -1,239 +0,0 @@ -/* -Program to calculate the potential of a rectangular prism model in spherical -coordinates. -*/ - - -#include -#include -#include -#include -#include "../lib/logger.h" -#include "../lib/version.h" -#include "../lib/grav_prism_sph.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" -#include "../lib/parsers.h" - - -/* Print the help message */ -void print_help() -{ - printf("Usage: prismgs MODELFILE [OPTIONS]\n\n"); - printf("Calculates the 3 component gravity vector due to a rectangular\n"); - printf("prism model on specified observation points using spherical\n"); - printf("coordinates.\n\n"); - printf("All input units are SI! Output is in mGal.\n\n"); - printf("Coordinate system:\n"); - printf(" The coordinate system used for the calculations is:\n"); - printf(" x->North, y->East, and z->Up\n"); - printf("In order to maintain mainstream convention, component gz is\n"); - printf("calculated with z-> Down.\n\n"); - printf("Input:\n"); - printf(" Computation points are passed through standard input (stdin).\n"); - printf(" Reads 3 or more values per line and inteprets the first 3 as:\n"); - printf(" longitude latitude height \n"); - printf(" longitude and latitude should be in decimal degrees, and\n"); - printf(" height in meters.\n"); - printf(" Other values in the line are ignored.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the form:\n"); - printf(" lon lat height ... gx gy gz\n"); - printf(" ... represents any values that were read from input and\n"); - printf(" ignored. In other words, the result is appended to the last\n"); - printf(" column of the input. Use this to pipe prism* programs\n"); - printf(" together.\n\n"); - printf(" Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("MODELFILE: File containing the prism model\n"); - printf(" * Each prism is specified by the values of its dimensions,\n"); - printf(" density, and spherical coordinates of the center of its\n"); - printf(" top.\n"); - printf(" * The file should contain one prism per line\n"); - printf(" * If a line starts with # it will be considered a comment and\n"); - printf(" will be ignored.\n"); - printf(" * Each line should have the following column format:\n"); - printf(" DX DY DZ Density lon lat r\n"); - printf(" This is the format output by tess2prism.\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - printf("\nPart of the Tesseroids package.\n"); - printf("Project site: \n"); - printf("Report bugs at: "); - printf("\n"); -} - - -/* Run the main for a generic prismg* program */ -int main(int argc, char **argv) -{ - BASIC_ARGS args; - PRISM *model; - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0, i; - char buff[10000]; - char progname[] = "prismgs"; - double lon, lat, height, gx, gy, gz, tmpx, tmpy, tmpz; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - log_init(LOG_INFO); - strcpy(progname, progname); - rc = parse_basic_args(argc, argv, progname, &args, &print_help); - if(rc == 3) - { - log_error("%s: missing input file", progname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* Read the model file */ - log_info("Reading prism model from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_prism_model(modelfile, 1, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("prism file %s is empty", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d prism(s) read", modelsize); - - /* Print a header on the output with provenance information */ - printf("# Gravity vector calculated in spherical coordinates with %s %s:\n", - progname, tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d prisms)\n", args.inputfname, modelsize); - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - if(sscanf(buff, "%lf %lf %lf", &lon, &lat, &height) != 3) - { - log_warning("bad/invalid computation point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - gx = 0; - gy = 0; - gz = 0; - for(i = 0; i < modelsize; i++) - { - prism_g_sph(model[i], lon, lat, height + MEAN_EARTH_RADIUS, - &tmpx, &tmpy, &tmpz); - gx += tmpx; - gy += tmpy; - gz += tmpz; - } - printf("%s %.15g %.15g %.15g\n", buff, gx, gy, gz); - points++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/prismgx.c b/dep/tesseroids/toolkits/prismgx.c deleted file mode 100644 index 9e354de..0000000 --- a/dep/tesseroids/toolkits/prismgx.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gx of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgx", &prism_gx); -} diff --git a/dep/tesseroids/toolkits/prismgxx.c b/dep/tesseroids/toolkits/prismgxx.c deleted file mode 100644 index b8563e4..0000000 --- a/dep/tesseroids/toolkits/prismgxx.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gxx of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgxx", &prism_gxx); -} diff --git a/dep/tesseroids/toolkits/prismgxy.c b/dep/tesseroids/toolkits/prismgxy.c deleted file mode 100644 index 403fa2c..0000000 --- a/dep/tesseroids/toolkits/prismgxy.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gxy of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgxy", &prism_gxy); -} diff --git a/dep/tesseroids/toolkits/prismgxz.c b/dep/tesseroids/toolkits/prismgxz.c deleted file mode 100644 index 1754aa8..0000000 --- a/dep/tesseroids/toolkits/prismgxz.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gxz of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgxz", &prism_gxz); -} diff --git a/dep/tesseroids/toolkits/prismgy.c b/dep/tesseroids/toolkits/prismgy.c deleted file mode 100644 index b18c9c1..0000000 --- a/dep/tesseroids/toolkits/prismgy.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gy of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgy", &prism_gy); -} diff --git a/dep/tesseroids/toolkits/prismgyy.c b/dep/tesseroids/toolkits/prismgyy.c deleted file mode 100644 index ddc5074..0000000 --- a/dep/tesseroids/toolkits/prismgyy.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gyy of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgyy", &prism_gyy); -} diff --git a/dep/tesseroids/toolkits/prismgyz.c b/dep/tesseroids/toolkits/prismgyz.c deleted file mode 100644 index 86c5867..0000000 --- a/dep/tesseroids/toolkits/prismgyz.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gyz of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgyz", &prism_gyz); -} diff --git a/dep/tesseroids/toolkits/prismgz.c b/dep/tesseroids/toolkits/prismgz.c deleted file mode 100644 index 5eaabf9..0000000 --- a/dep/tesseroids/toolkits/prismgz.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gz of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgz", &prism_gz); -} diff --git a/dep/tesseroids/toolkits/prismgzz.c b/dep/tesseroids/toolkits/prismgzz.c deleted file mode 100644 index 9a27c3c..0000000 --- a/dep/tesseroids/toolkits/prismgzz.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate gzz of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismgzz", &prism_gzz); -} diff --git a/dep/tesseroids/toolkits/prismpot.c b/dep/tesseroids/toolkits/prismpot.c deleted file mode 100644 index a47cfec..0000000 --- a/dep/tesseroids/toolkits/prismpot.c +++ /dev/null @@ -1,14 +0,0 @@ -/* -Program to calculate potential of a rectangular prism model on a set of points. -*/ - - -#include "../lib/grav_prism.h" -#include "../lib/prismg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_prismg_main(argc, argv, "prismpot", &prism_pot); -} diff --git a/dep/tesseroids/toolkits/prismpots.c b/dep/tesseroids/toolkits/prismpots.c deleted file mode 100644 index 4461759..0000000 --- a/dep/tesseroids/toolkits/prismpots.c +++ /dev/null @@ -1,230 +0,0 @@ -/* -Program to calculate the potential of a rectangular prism model in spherical -coordinates. -*/ - - -#include -#include -#include -#include -#include "../lib/logger.h" -#include "../lib/version.h" -#include "../lib/grav_prism_sph.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" -#include "../lib/parsers.h" - - -/* Print the help message */ -void print_help() -{ - printf("Usage: prismpots MODELFILE [OPTIONS]\n\n"); - printf("Calculate the potential due to a rectangular prism model on\n"); - printf("specified observation points using spherical coordinates.\n\n"); - printf("All input and output units are SI!\n\n"); - printf("Coordinate system:\n"); - printf(" The coordinate system used for the calculations is:\n"); - printf(" x->North, y->East, and z->Up\n\n"); - printf("Input:\n"); - printf(" Computation points are passed through standard input (stdin).\n"); - printf(" Reads 3 or more values per line and inteprets the first 3 as:\n"); - printf(" longitude latitude height \n"); - printf(" longitude and latitude should be in decimal degrees, and\n"); - printf(" height in meters.\n"); - printf(" Other values in the line are ignored.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the form:\n"); - printf(" lon lat height ... potential\n"); - printf(" ... represents any values that were read from input and\n"); - printf(" ignored. In other words, the result is appended to the last\n"); - printf(" column of the input. Use this to pipe prism* programs\n"); - printf(" together.\n\n"); - printf(" Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("MODELFILE: File containing the prism model\n"); - printf(" * Each prism is specified by the values of its dimensions,\n"); - printf(" density, and spherical coordinates of the center of its\n"); - printf(" top.\n"); - printf(" * The file should contain one prism per line\n"); - printf(" * If a line starts with # it will be considered a comment and\n"); - printf(" will be ignored.\n"); - printf(" * Each line should have the following column format:\n"); - printf(" DX DY DZ Density lon lat r\n"); - printf(" This is the format output by tess2prism.\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - printf("\nPart of the Tesseroids package.\n"); - printf("Project site: \n"); - printf("Report bugs at: "); - printf("\n"); -} - - -/* Run the main for a generic prismg* program */ -int main(int argc, char **argv) -{ - BASIC_ARGS args; - PRISM *model; - int modelsize, rc, line, points = 0, error_exit = 0, bad_input = 0, i; - char buff[10000]; - char progname[] = "prismpots"; - double lon, lat, height, res; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - clock_t tstart; - struct tm * timeinfo; - - log_init(LOG_INFO); - strcpy(progname, progname); - rc = parse_basic_args(argc, argv, progname, &args, &print_help); - if(rc == 3) - { - log_error("%s: missing input file", progname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* Read the model file */ - log_info("Reading prism model from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open model file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - model = read_prism_model(modelfile, 1, &modelsize); - fclose(modelfile); - if(modelsize == 0) - { - log_error("prism file %s is empty", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - if(model == NULL) - { - log_error("failed to read model from file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - log_info("Total of %d prism(s) read", modelsize); - - /* Print a header on the output with provenance information */ - printf("# Potential calculated in spherical coordinates with %s %s:\n", - progname, tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# model file: %s (%d prisms)\n", args.inputfname, modelsize); - - /* Read each computation point from stdin and calculate */ - log_info("Calculating (this may take a while)..."); - tstart = clock(); - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - if(sscanf(buff, "%lf %lf %lf", &lon, &lat, &height) != 3) - { - log_warning("bad/invalid computation point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - /* Need to remove \n and \r from end of buff first to print the - result in the end */ - strstrip(buff); - for(res = 0, i = 0; i < modelsize; i++) - { - res += prism_pot_sph(model[i], lon, lat, - height + MEAN_EARTH_RADIUS); - } - printf("%s %.15g\n", buff, res); - points++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad computation points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Calculated on %d points in %.5g seconds", points, - (double)(clock() - tstart)/CLOCKS_PER_SEC); - } - /* Clean up */ - free(model); - log_info("Done"); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tess2prism.c b/dep/tesseroids/toolkits/tess2prism.c deleted file mode 100644 index 4fc1a63..0000000 --- a/dep/tesseroids/toolkits/tess2prism.c +++ /dev/null @@ -1,222 +0,0 @@ -/* -Convert a tesseroid model into a prism model in spherical coordinates -*/ - - -#include -#include -#include "../lib/version.h" -#include "../lib/parsers.h" -#include "../lib/logger.h" -#include "../lib/geometry.h" - - -/** Print the help message */ -void print_help() -{ - printf("Usage: tess2prim TESSFILE [OPTIONS]\n\n"); - printf("Convert a tesseroid model into a rectangular prism model\n"); - printf("(for use with the prism* programs).\n\n"); - printf("The converted prisms have the same mass as the tesseroids.\n\n"); - printf("Along with each prism are given the spherical coordinates of the\n"); - printf("center of the top face of the tesseroid (used as the origin of\n"); - printf("the prisms coordinate system). This is needed to compute the.\n"); - printf("effect of the prisms in spherical coordinates.\n\n"); - printf("If option --flatten is used, the tesseroids are converted by\n"); - printf("approximating 1 degree by 111.11km and no spherical coordinates\n"); - printf("are given. Use this option when you want to calculate in\n"); - printf("Cartesian coordinates.\n\n"); - printf("In both cases, the density of the prism is adjusted so that it\n"); - printf("has the same mass as the tesseroid.\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("Input:\n"); - printf(" If TESSFILE is omited, will read from standard input (stdin)\n"); - printf(" TESSFILE: File containing the tesseroid model\n"); - printf(" * Each tesseroid is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * The file should contain one tesseroid per line\n"); - printf(" * Each line should have the following column format:\n"); - printf(" West East South North Top Bottom Density\n"); - printf(" * Top and Bottom should be read as 'height to top' and \n"); - printf(" 'height to bottom' from the mean Earth radius. Use negative\n"); - printf(" values if bellow the surface, for example when modeling\n"); - printf(" deep structures, and positive if above the surface, for\n"); - printf(" example when modeling topography.\n"); - printf(" * If a line starts with # it will be considered a comment\n"); - printf(" and will be ignored\n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) one prism per line in the\n"); - printf(" format:\n"); - printf(" dx dy dz density lon lat r\n"); - printf(" lon, lat, r are the spherical coordinates of the center of\n"); - printf(" top face of the prism. This is used as the origin of the\n"); - printf(" local coordinate system of the prism.\n"); - printf(" If options --flatten is used, the output format is:\n"); - printf(" x1 x2 y1 y2 z1 z2 density\n"); - printf(" Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output.\n\n"); - printf("Options:\n"); - printf(" --flatten Convert the tesseroids by approximating 1 degree\n"); - printf(" by 111.11 km (for compatibility with prism*\n"); - printf(" programs).\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - char *progname = "tess2prism"; - TESS2PRISM_ARGS args; - int rc, line, converted = 0, error_exit = 0, bad_input = 0; - char buff[10000]; - TESSEROID tess; - PRISM prism; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - struct tm * timeinfo; - - log_init(LOG_INFO); - rc = parse_tess2prism_args(argc, argv, progname, &args, &print_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* If an input file is not given, read from stdin. Else open the file */ - if(rc == 3) - { - log_info("Reading tesseroids from stdin"); - modelfile = stdin; - } - else - { - log_info("Reading tesseroids from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - } - - /* Print provenance data to stdout */ - printf("# Prisms converted from tesseroid model with %s %s\n", progname, - tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# tesseroids file: %s\n", rc == 3 ? "stdin" : args.inputfname); - printf("# conversion type: %s\n", - args.flatten ? "equal mass|flatten" : - "equal mass|spherical coordinates"); - if(args.flatten) - { - printf("# format: x1 x2 y1 y2 z1 z2 density\n"); - } - else - { - printf("# format: dx dy dz density lon lat r\n"); - } - - /* Read the tesseroids, convert and print to stdout */ - for(line = 1; !feof(modelfile); line++) - { - if(fgets(buff, 10000, modelfile) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - printf("%s", buff); - continue; - } - /* Remove any trailing spaces or newlines */ - strstrip(buff); - if(gets_tess(buff, &tess)) - { - log_warning("bad/invalid tesseroid at line %d", line); - bad_input++; - continue; - } - if(args.flatten) - { - tess2prism_flatten(tess, &prism); - printf("%.15g %.15g %.15g %.15g %.15g %.15g %.15g\n", - prism.x1, prism.x2, prism.y1, prism.y2, prism.z1, - prism.z2, prism.density); - } - else - { - tess2prism(tess, &prism); - printf("%.15g %.15g %.15g %.15g %.15g %.15g %.15g\n", - prism.x2 - prism.x1, prism.y2 - prism.y1, - prism.z2 - prism.z1, prism.density, - prism.lon, prism.lat, prism.r); - } - converted++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad input line(s) which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Converted %d tesseroids", converted); - } - /* Clean up */ - fclose(modelfile); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tessdefaults.c b/dep/tesseroids/toolkits/tessdefaults.c deleted file mode 100644 index a099c75..0000000 --- a/dep/tesseroids/toolkits/tessdefaults.c +++ /dev/null @@ -1,123 +0,0 @@ -/* -Print the default values of the constants used in the calculations. -*/ - - -#include -#include -#include -#include "../lib/version.h" -#include "../lib/logger.h" -#include "../lib/constants.h" -#include "../lib/glq.h" - - -/** Print the help message */ -void print_help() -{ - printf("Usage: tessdefaults [OPTIONS]\n\n"); - printf("Print default values of constants used.\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("Output:\n"); - printf(" Constants are printed to standard output (stdout) in the form\n"); - printf(" CONST_NAME = VALUE\n"); - printf(" Lines that start with a # are treated as comments.\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - char progname[] = "tessdefaults"; - int i, bad_args = 0; - char *params; - - log_init(LOG_INFO); - - /* Parse arguments */ - for(i = 1; i < argc; i++) - { - if(argv[i][0] == '-') - { - switch(argv[i][1]) - { - case 'h': - if(argv[i][2] != '\0') - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - print_help(); - return 0; - case '-': - { - params = &argv[i][2]; - if(strcmp(params, "version")) - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - else - { - print_version(progname); - return 0; - } - break; - } - default: - log_error("invalid argument '%s'", argv[i]); - bad_args++; - break; - } - } - else - { - log_error("invalid argument '%s'", argv[i]); - bad_args++; - } - } - /* Check if parsing went well */ - if(bad_args > 0) - { - log_error("%d bad input argument(s)", bad_args); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Print the constants from constants.c */ - printf("# Mean Earth radius (m)\n"); - printf("MEAN_EARTH_RADIUS = %.1f\n\n", MEAN_EARTH_RADIUS); - printf("# Gravitational constant (m^3 kg^-1 s^-1)\n"); - printf("G = %.4g\n\n", G); - printf("# Conversion factor from SI units to Eotvos s^-2 = 10^9 Eotvos\n"); - printf("SI2EOTVOS = %g\n\n", SI2EOTVOS); - printf("# Conversion factor from SI units to mGal m s^-2} = 10^5 mGal\n"); - printf("SI2MGAL = %g\n\n", SI2MGAL); - printf("# Just pi\n"); - printf("PI = %.31f\n\n", PI); - printf("# Minimum distance/size ratio for computations to be\n"); - printf("# accurate. Used for knowing when to divide the tesseroids.\n"); - printf("TESSEROID_POT_SIZE_RATIO = %g\n", TESSEROID_POT_SIZE_RATIO); - printf("TESSEROID_GX_SIZE_RATIO = %g\n", TESSEROID_GX_SIZE_RATIO); - printf("TESSEROID_GY_SIZE_RATIO = %g\n", TESSEROID_GY_SIZE_RATIO); - printf("TESSEROID_GZ_SIZE_RATIO = %g\n", TESSEROID_GZ_SIZE_RATIO); - printf("TESSEROID_GXX_SIZE_RATIO = %g\n", TESSEROID_GXX_SIZE_RATIO); - printf("TESSEROID_GXY_SIZE_RATIO = %g\n", TESSEROID_GXY_SIZE_RATIO); - printf("TESSEROID_GXZ_SIZE_RATIO = %g\n", TESSEROID_GXZ_SIZE_RATIO); - printf("TESSEROID_GYY_SIZE_RATIO = %g\n", TESSEROID_GYY_SIZE_RATIO); - printf("TESSEROID_GYZ_SIZE_RATIO = %g\n", TESSEROID_GYZ_SIZE_RATIO); - printf("TESSEROID_GZZ_SIZE_RATIO = %g\n\n", TESSEROID_GZZ_SIZE_RATIO); - /* Print the constants from glq.c */ - printf("# Max iterations of the Legendre polynomial root-finder \ -algorithm\n"); - printf("GLQ_MAXIT = %d\n\n", GLQ_MAXIT); - printf("# Max error allowed for the Legendre polynomial root-finder \ -algorithm\n"); - printf("GLQ_MAXERROR = %g\n", GLQ_MAXERROR); - return 0; -} diff --git a/dep/tesseroids/toolkits/tessgrd.c b/dep/tesseroids/toolkits/tessgrd.c deleted file mode 100644 index cd6a636..0000000 --- a/dep/tesseroids/toolkits/tessgrd.c +++ /dev/null @@ -1,165 +0,0 @@ -/* -Program to generate a regular grid of points. -*/ - - -#include -#include -#include -#include "../lib/logger.h" -#include "../lib/version.h" -#include "../lib/parsers.h" - - -/* Print the help message for tessgrd program */ -void print_tessgrd_help() -{ - printf("Usage: tessgrd [PARAMS] [OPTIONS]\n\n"); - printf("Make a regular grid of points.\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in the format:\n"); - printf(" lon1 lat1 height\n"); - printf(" lon2 lat1 height\n"); - printf(" ... ... ...\n"); - printf(" lonNLON lat1 height\n"); - printf(" lon1 lat2 height\n"); - printf(" ... ... ...\n"); - printf(" ... ... ...\n"); - printf(" lonNLON latNLAT height\n\n"); - printf(" * Comments about the provenance of the data are inserted into\n"); - printf(" the top of the output\n\n"); - printf("Parameters:\n"); - printf(" -r W/E/S/N: Bounding region of the grid.\n"); - printf(" -b NLON/NLAT: Number of grid points in the\n"); - printf(" longitudinal and latitudinal directions.\n"); - printf(" -z HEIGHT: Height of the grid with respect to the\n"); - printf(" mean Earth radius.\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf("\nOptions:\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - TESSGRD_ARGS args; - char progname[] = "tessgrd"; - int rc; - FILE *logfile = NULL; - time_t rawtime; - struct tm * timeinfo; - double dlon, dlat; - double lon, lat; - /* Keep track of how many printed. Used to check if produced right amount */ - int lons = 0, lats = 0, total = 0; - - log_init(LOG_INFO); - - rc = parse_tessgrd_args(argc, argv, &args, &print_tessgrd_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(!logfile) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* CREATE THE GRID AND PRINT IT TO STDOUT */ - log_info("Generating regular grid in region: %g W / %g E / %g S / %g N", - args.w, args.e, args.s, args.n); - log_info("Grid size: %d lon X %d lat = %d points in total", args.nlon, - args.nlat, args.nlon*args.nlat); - - /* Define the grid spacing. used nlon or nlat -1 because the borders should - be in the grid */ - dlon = (args.e - args.w)/(args.nlon - 1); - dlat = (args.n - args.s)/(args.nlat - 1); - log_info("Grid spacing: %.10f lon / %.10f lat", dlon, dlat); - - /* Print a header on the output with provenance information */ - printf("# Grid generated with %s %s:\n", progname, tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# args: -r%g/%g/%g/%g -b%d/%d -z%g\n", args.w, args.e, args.s, - args.n, args.nlon, args.nlat, args.height); - printf("# grid spacing: %.10f lon / %.10f lat\n", dlon, dlat); - printf("# total %d points\n", args.nlon*args.nlat); - - /* Make the grid points. Print lon first as x */ - for(lat = args.s; lat <= args.n; lat += dlat) - { - lons = 0; - for(lon = args.w; lon <= args.e; lon += dlon) - { - printf("%.15g %.15g %.15g\n", lon, lat, args.height); - lons++; - total++; - } - /* Sometimes prints one less because of rounding errors */ - if(lons != args.nlon) - { - printf("%.15g %.15g %.15g\n", lon, lat, args.height); - lons++; - total++; - } - lats++; - printf("\n"); /* To ease plotting in Gnuplot */ - } - /* Sometimes prints one less because of rounding errors */ - if(lats != args.nlat) - { - lons = 0; - for(lon = args.w; lon <= args.e; lon += dlon) - { - printf("%.15g %.15g %.15g\n", lon, lat, args.height); - lons++; - total++; - } - if(lons != args.nlon) - { - printf("%.15g %.15g %.15g\n", lon, lat, args.height); - lons++; - total++; - } - } - if(total != args.nlat*args.nlon) - { - log_warning("%d total points made instead of required %d", total, - args.nlat*args.nlon); - } - log_info("Total points generated: %d", total); - /* Clean up */ - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tessgx.c b/dep/tesseroids/toolkits/tessgx.c deleted file mode 100644 index 88c64ae..0000000 --- a/dep/tesseroids/toolkits/tessgx.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gx of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgx", &tess_gx, - TESSEROID_GX_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgxx.c b/dep/tesseroids/toolkits/tessgxx.c deleted file mode 100644 index 4b9e4a4..0000000 --- a/dep/tesseroids/toolkits/tessgxx.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gxx of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgxx", &tess_gxx, - TESSEROID_GXX_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgxy.c b/dep/tesseroids/toolkits/tessgxy.c deleted file mode 100644 index 789c76d..0000000 --- a/dep/tesseroids/toolkits/tessgxy.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gxy of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgxy", &tess_gxy, - TESSEROID_GXY_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgxz.c b/dep/tesseroids/toolkits/tessgxz.c deleted file mode 100644 index 3be9950..0000000 --- a/dep/tesseroids/toolkits/tessgxz.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gxz of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgxz", &tess_gxz, - TESSEROID_GXZ_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgy.c b/dep/tesseroids/toolkits/tessgy.c deleted file mode 100644 index a648f6c..0000000 --- a/dep/tesseroids/toolkits/tessgy.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gy of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgy", &tess_gy, - TESSEROID_GY_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgyy.c b/dep/tesseroids/toolkits/tessgyy.c deleted file mode 100644 index dc041a4..0000000 --- a/dep/tesseroids/toolkits/tessgyy.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gyy of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgyy", &tess_gyy, - TESSEROID_GYY_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgyz.c b/dep/tesseroids/toolkits/tessgyz.c deleted file mode 100644 index b7eeb54..0000000 --- a/dep/tesseroids/toolkits/tessgyz.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gyz of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgyz", &tess_gyz, - TESSEROID_GYZ_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgz.c b/dep/tesseroids/toolkits/tessgz.c deleted file mode 100644 index a2af974..0000000 --- a/dep/tesseroids/toolkits/tessgz.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gz of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgz", &tess_gz, - TESSEROID_GZ_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tessgzz.c b/dep/tesseroids/toolkits/tessgzz.c deleted file mode 100644 index 0789e6c..0000000 --- a/dep/tesseroids/toolkits/tessgzz.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate gzz of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tessgzz", &tess_gzz, - TESSEROID_GZZ_SIZE_RATIO); -} diff --git a/dep/tesseroids/toolkits/tesslayers.c b/dep/tesseroids/toolkits/tesslayers.c deleted file mode 100644 index 3c01f53..0000000 --- a/dep/tesseroids/toolkits/tesslayers.c +++ /dev/null @@ -1,201 +0,0 @@ -/* -Generate tesseroid model of a series of layers given their thickness. -*/ - - -#include -#include -#include "../lib/version.h" -#include "../lib/parsers.h" -#include "../lib/logger.h" -#include "../lib/geometry.h" -#include "../lib/constants.h" - - -#define BUFFSIZE 1000 - -/** Print the help message */ -void print_help() -{ - printf("Usage: tesslayers [ARGUMENTS] [OPTIONS]\n\n"); - printf("Generate a tesseroid model of a series of stacked layers.\n\n"); - printf("All units are either SI or degrees!\n\n"); - printf("Input:\n"); - printf(" Regular grids passed through standard input (stdin).\n"); - printf(" Grids should be in a single file in xyz format, i.e., in\n"); - printf(" columns:\n"); - printf(" lon lat height thickness1 dens1 thickness2 dens2 ...\n"); - printf(" lon and lat are the longitude and latitude of a grid point,\n"); - printf(" height is the top of the first layer at the grid point\n"); - printf(" (e.g., the topography or relief of the first layer),\n"); - printf(" height should be read as 'height above the mean Earth radius'\n"); - printf(" (if bellow the Earth radius use negative heights),\n"); - printf(" thickness1 is the thickness of the first layer,\n"); - printf(" dens1 is the density of the first layer, and so forth.\n\n"); - printf(" Layers MUST be ordered from top-most to bottom-most\n"); - printf(" (i.e., thickness1 is of the top layer).\n\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Tesseroids that fill between the interfaces of the layers.\n"); - printf(" Tesseroids are printed to standard output (stdout.)\n"); - printf(" * Each tesseroid is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * Will print one tesseroid per line\n"); - printf(" * Each line has the following column format:\n"); - printf(" West East South North Top Bottom Density\n"); - printf(" * Top and Bottom should be read as 'height to top' and \n"); - printf(" 'height to bottom' from the mean Earth radius. Use negative\n"); - printf(" values if bellow the surface, for example when modeling\n"); - printf(" deep structures, and positive if above the surface, for\n"); - printf(" example when modeling topography.\n"); - printf(" * If a line starts with # it will be considered a comment\n"); - printf(" and will be ignored\n\n"); - printf("Arguments:\n"); - printf(" -sDLON/DLAT The grid spacing in the longitude and latitude\n"); - printf(" directions, respectively, in DECIMAL DEGREES.\n"); - printf(" Will be used as the size of the tesseroids.\n"); - printf(" WARNING: You may get wrong results if -s is \n"); - printf(" different from the grid spacing!\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - char *progname = "tesslayers"; - TESSLAYERS_ARGS args; - TESSEROID tessbuff[BUFFSIZE]; - int t, rc, line, error_exit = 0, bad_input = 0, size = 0, nlayers_old = -1, - nlayers_new; - char buff[10000]; - FILE *logfile = NULL; - time_t rawtime; - struct tm * timeinfo; - - log_init(LOG_INFO); - - rc = parse_tesslayers_args(argc, argv, progname, &args, &print_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - - return 1; - } - - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - log_info("Using grid spacing (size of tesseroids): %g lon / %g lat", - args.dlon, args.dlat); - - /* Print a header on the output with provenance information */ - printf("# Tesseroid model generated by %s %s:\n", progname, - tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# grid spacing (size of tesseroids): %g deg lon / %g deg lat\n", - args.dlon, args.dlat); - - /* Read each regular grid from stdin and generate the tesseroids */ - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - continue; - } - strstrip(buff); - - nlayers_new = gets_layers(buff, args.dlon, args.dlat, tessbuff, - BUFFSIZE); - if(nlayers_new == -1) - { - log_error("invalid input in line %d", line); - error_exit++; - break; - } - if(nlayers_old != -1 && nlayers_old != nlayers_new) - { - log_error("different number of layers in line %d than in previous lines", - line); - error_exit++; - break; - } - nlayers_old = nlayers_new; - - for(t = 0; t < nlayers_new; t++) - { - printf("%.15g %.15g %.15g %.15g %.15g %.15g %.15g\n", - tessbuff[t].w, - tessbuff[t].e, - tessbuff[t].s, - tessbuff[t].n, - tessbuff[t].r2 - MEAN_EARTH_RADIUS, - tessbuff[t].r1 - MEAN_EARTH_RADIUS, - tessbuff[t].density); - size++; - } - } - } - if(bad_input) - { - log_warning("Encountered %d bad grid points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Generated %d tesseroids.", size); - } - /* Clean up */ - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tessmass.c b/dep/tesseroids/toolkits/tessmass.c deleted file mode 100644 index e5e5450..0000000 --- a/dep/tesseroids/toolkits/tessmass.c +++ /dev/null @@ -1,193 +0,0 @@ -/* -Calculate the mass of a tesseroid model. -*/ - - -#include -#include -#include "../lib/version.h" -#include "../lib/parsers.h" -#include "../lib/logger.h" -#include "../lib/geometry.h" - - -/** Print the help message */ -void print_help() -{ - printf("Usage: tessmass TESSFILE [OPTIONS]\n\n"); - printf("Calculate the mass of a tesseroid model.\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("Input:\n"); - printf(" If TESSFILE is omited, will read from standard input (stdin)\n"); - printf(" TESSFILE: File containing the tesseroid model\n"); - printf(" * Each tesseroid is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * The file should contain one tesseroid per line\n"); - printf(" * Each line should have the following column format:\n"); - printf(" West East South North Top Bottom Density\n"); - printf(" * Top and Bottom should be read as 'depth to top' and \n"); - printf(" 'depth to bottom' from the mean Earth radius. Use negative\n"); - printf(" values if above the surface, for example when modeling\n"); - printf(" topography\n"); - printf(" * If a line starts with # it will be considered a comment\n"); - printf(" and will be ignored\n\n"); - printf("Output:\n"); - printf(" Printed to standard output (stdout) in same units as input\n\n"); - printf("Options:\n"); - printf(" -rLOW/HIGH Only take into account tesseroids with\n"); - printf(" density between LOW and HIGH\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - char *progname = "tessmass"; - TESSMASS_ARGS args; - TESSEROID tess; - double mass = 0; - int rc, line, size = 0, error_exit = 0, bad_input = 0; - FILE *logfile = NULL, *modelfile = NULL; - time_t rawtime; - struct tm * timeinfo; - char buff[10000]; - - log_init(LOG_INFO); - - rc = parse_tessmass_args(argc, argv, progname, &args, &print_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - - return 1; - } - - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* If an input file is not given, read from stdin. Else open the file */ - if(rc == 3) - { - log_info("Reading tesseroids from stdin"); - modelfile = stdin; - } - else - { - log_info("Reading tesseroids from file %s", args.inputfname); - modelfile = fopen(args.inputfname, "r"); - if(modelfile == NULL) - { - log_error("failed to open file %s", args.inputfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - if(args.logtofile) - fclose(logfile); - return 1; - } - } - - /* Read the tesseroids, convert and print to stdout */ - for(line = 1; !feof(modelfile); line++) - { - if(fgets(buff, 10000, modelfile) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - continue; - } - /* Remove any trailing spaces or newlines */ - strstrip(buff); - if(gets_tess(buff, &tess)) - { - log_warning("bad/invalid tesseroid at line %d", line); - bad_input++; - continue; - } - if(args.use_range) - { - mass += tess_range_mass(&tess, 1, args.low_dens, - args.high_dens); - size++; - } - else - { - mass += tess_total_mass(&tess, 1); - size++; - } - } - } - if(args.use_range) - { - log_info("Mass within density range %g/%g:", args.low_dens, - args.high_dens); - } - else - { - log_info("Total mass:"); - } - - printf("%.15g\n", mass); - - if(bad_input) - { - log_warning("Encountered %d bad input line(s) which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Mass calculated from %d tesseroids", size); - } - - /* Clean up */ - if(rc != 3) - fclose(modelfile); - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tessmodgen.c b/dep/tesseroids/toolkits/tessmodgen.c deleted file mode 100644 index 22ca376..0000000 --- a/dep/tesseroids/toolkits/tessmodgen.c +++ /dev/null @@ -1,230 +0,0 @@ -/* -Generate tesseroid model from a regular grid. -*/ - - -#include -#include -#include "../lib/version.h" -#include "../lib/parsers.h" -#include "../lib/logger.h" -#include "../lib/geometry.h" - - -/** Print the help message */ -void print_help() -{ - printf("Usage: tessmodgen [ARGUMENTS] [OPTIONS]\n\n"); - printf("Generate a tesseroid model of an interface, like topography,\n"); - printf("moho, sediment thickness, etc.\n\n"); - printf("Each tesseroid has its top face centered of the respective grid\n"); - printf("point. The top and bottom of the tesseroid are define as:\n"); - printf(" * top = height of grid point and bottom = reference level\n"); - printf(" if height of grid point > reference level\n"); - printf(" * other way around if otherwise\n\n"); - printf("All units either SI or degrees!\n\n"); - printf("Input:\n"); - printf(" REGULAR grid passed through standard input (stdin).\n"); - printf(" Reads 3 values per line: longitude latitude height\n"); - printf(" height should be read as 'height above the mean Earth radius'\n"); - printf(" If bellow the Earth radius use negative heights.\n"); - printf(" Lines that start with # are ignored as comments.\n"); - printf(" Lines should be no longer than 10000 (ten thousand) characters."); - printf(" \n\n"); - printf("Output:\n"); - printf(" Tesseroids printed to standard output (stdout)\n"); - printf(" * Each tesseroid is specified by the values of its borders\n"); - printf(" and density\n"); - printf(" * Will print one tesseroid per line\n"); - printf(" * Each line has the following column format:\n"); - printf(" West East South North Top Bottom Density\n"); - printf(" * Top and Bottom should be read as 'height to top' and \n"); - printf(" 'height to bottom' from the mean Earth radius. Use negative\n"); - printf(" values if bellow the surface, for example when modeling\n"); - printf(" deep structures, and positive if above the surface, for\n"); - printf(" example when modeling topography.\n"); - printf(" * If a line starts with # it will be considered a comment\n"); - printf(" and will be ignored\n\n"); - printf("Arguments:\n"); - printf(" -sDLON/DLAT The grid spacing in the longitude and latitude\n"); - printf(" directions, respectively, in DECIMAL DEGREES.\n"); - printf(" Will be used as the size of the tesseroids.\n"); - printf(" WARNING: You may get wrong results if -s is \n"); - printf(" different from the grid spacing!\n"); - printf(" -dDENS Density of the tesseroids. If ommited will expect\n"); - printf(" a 4th column on the input with DENS values for\n"); - printf(" each point. Tesseroids above the reference will\n"); - printf(" have density DENS, and bellow will have density\n"); - printf(" -DENS.\n"); - printf(" -zREF Height of the reference level with respect to the\n"); - printf(" mean Earth radius. If bellow the mean Earth\n"); - printf(" radius, use a negative value.\n\n"); - printf("Options:\n"); - printf(" -h Print instructions.\n"); - printf(" --version Print version and license information.\n"); - printf(" -v Enable verbose printing to stderr.\n"); - printf(" -lFILENAME Print log messages to file FILENAME.\n"); - print_copyright(); -} - - -/** Main */ -int main(int argc, char **argv) -{ - char *progname = "tessmodgen"; - TESSMODGEN_ARGS args; - int rc, line, error_exit = 0, bad_input = 0, size = 0, nchars, nread; - char buff[10000]; - double lon, lat, height, w, e, s, n, top, bot, dens; - FILE *logfile = NULL; - time_t rawtime; - struct tm * timeinfo; - - log_init(LOG_INFO); - - rc = parse_tessmodgen_args(argc, argv, progname, &args, &print_help); - if(rc == 2) - { - return 0; - } - if(rc == 1) - { - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - - return 1; - } - - /* Set the appropriate logging level and log to file if necessary */ - if(!args.verbose) - { - log_init(LOG_WARNING); - } - if(args.logtofile) - { - logfile = fopen(args.logfname, "w"); - if(logfile == NULL) - { - log_error("unable to create log file %s", args.logfname); - log_warning("Terminating due to bad input"); - log_warning("Try '%s -h' for instructions", progname); - return 1; - } - log_tofile(logfile, LOG_INFO); - } - - /* Print standard verbose */ - log_info("%s (Tesseroids project) %s", progname, tesseroids_version); - time(&rawtime); - timeinfo = localtime(&rawtime); - log_info("(local time) %s", asctime(timeinfo)); - - /* Print a header on the output with provenance information */ - printf("# Tesseroid model generated by %s %s:\n", progname, - tesseroids_version); - printf("# local time: %s", asctime(timeinfo)); - printf("# grid spacing (size of tesseroids): %g deg lon / %g deg lat\n", - args.dlon, args.dlat); - printf("# reference level (depth): %g\n", args.ref); - if(args.fix_density) - { - printf("# density: %g\n", args.dens); - log_info("Using fixed density value: %g", args.dens); - } - else - { - printf("# density: read from input\n"); - log_info("Reading density values from input grid"); - } - - /* Read each regular grid from stdin and generate the tesseroids */ - for(line = 1; !feof(stdin); line++) - { - if(fgets(buff, 10000, stdin) == NULL) - { - if(ferror(stdin)) - { - log_error("problem encountered reading line %d", line); - error_exit = 1; - break; - } - } - else - { - /* Check for comments and blank lines */ - if(buff[0] == '#' || buff[0] == '\r' || buff[0] == '\n') - { - continue; - } - strstrip(buff); - if(args.fix_density) - { - nread = sscanf(buff, "%lf %lf %lf%n", &lon, &lat, &height, - &nchars); - /* The lon != lon looks weird but this checks for NaN values */ - if(nread != 3 || buff[nchars] != '\0' || - lon != lon || lat != lat || height != height) - { - log_warning("bad/invalid grid point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - } - else - { - nread = sscanf(buff, "%lf %lf %lf %lf%n", &lon, &lat, &height, - &dens, &nchars); - if(nread != 4 || buff[nchars] != '\0' || - lon != lon || lat != lat || height != height || dens != dens) - { - log_warning("bad/invalid grid point at line %d", line); - log_warning("skipping this line and continuing"); - bad_input++; - continue; - } - } - w = lon - 0.5*args.dlon; - e = lon + 0.5*args.dlon; - s = lat - 0.5*args.dlat; - n = lat + 0.5*args.dlat; - if(height >= args.ref) - { - top = height; - bot = args.ref; - if(args.fix_density) - dens = args.dens; - } - else - { - top = args.ref; - bot = height; - if(args.fix_density) - dens = -args.dens; - else - dens *= -1; - } - printf("%.15g %.15g %.15g %.15g %.15g %.15g %.15g\n", w, e, s, n, - top, bot, dens); - size++; - } - } - if(bad_input) - { - log_warning("Encountered %d bad grid points which were skipped", - bad_input); - } - if(error_exit) - { - log_warning("Terminating due to error in input"); - log_warning("Try '%s -h' for instructions", progname); - } - else - { - log_info("Generated %d tesseroids.", size); - } - /* Clean up */ - if(args.logtofile) - fclose(logfile); - return 0; -} diff --git a/dep/tesseroids/toolkits/tesspot.c b/dep/tesseroids/toolkits/tesspot.c deleted file mode 100644 index 715d0d1..0000000 --- a/dep/tesseroids/toolkits/tesspot.c +++ /dev/null @@ -1,16 +0,0 @@ -/* -Program to calculate potential of a tesseroid model on a set of points. -*/ - - -#include "../lib/constants.h" -#include "../lib/grav_tess.h" -#include "../lib/tessg_main.h" - - -/** Main */ -int main(int argc, char **argv) -{ - return run_tessg_main(argc, argv, "tesspot", &tess_pot, - TESSEROID_POT_SIZE_RATIO); -} diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..eb27c62 --- /dev/null +++ b/install.sh @@ -0,0 +1,84 @@ +#!/bin/bash + +# 使用 uname 获取操作系统类型 +OS_TYPE=$(uname -s) + +# 根据操作系统类型安装外部依赖库 +case $OS_TYPE in + Linux) + # 判断是否是基于 Debian 的系统(如 Ubuntu) + if [ -f /etc/debian_version ]; then + echo "Detected Debian-based system (e.g., Ubuntu)." + # 安装 apt 包管理器(如果尚未安装) + sudo apt-get update + sudo apt-get install -y apt + # 使用 apt 安装依赖 + sudo apt-get install -y libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev + # 判断是否是基于 Red Hat 的系统(如 CentOS) + elif [ -f /etc/redhat-release ]; then + echo "Detected Red Hat-based system (e.g., CentOS)." + # 安装 yum 包管理器(CentOS 7)或 dnf 包管理器(CentOS 8 及以上) + if command -v yum &> /dev/null; then + sudo yum install -y yum + sudo yum install -y libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev + elif command -v dnf &> /dev/null; then + sudo dnf install -y dnf + sudo dnf install -y libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev + else + echo "Package manager not found. Please check your system configuration." + exit 1 + fi + else + echo "Unsupported Linux distribution." + exit 1 + fi + ;; + Darwin) + echo "Detected macOS." + # 安装 Homebrew(如果尚未安装) + if ! command -v brew &> /dev/null; then + echo "Installing Homebrew..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + fi + # 使用 Homebrew 安装 gcc + brew install fftw3 netcdf gmt gsl ncurses + ;; + *) + echo "Unsupported operating system: $OS_TYPE" + exit 1 + ;; +esac + +# 0. 拷贝cmake配置文件 +sudo mkdir /usr/local/lib/cmake && \ +sudo cp -r dep/cmake /usr/local/lib/cmake + +# 1. 编译安装EEMD +sudo mkdir /opt/stow/libeemd && \ +mkdir dep/libeemd/build && \ +cd dep/libeemd/build && \ +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/stow/libeemd && \ +make && make install + +sudo stow -d /opt/stow -t /usr/local -S libeemd + +# 2. 编译安装netcdfcxx_legacy +sudo mkdir /opt/stow/netcdfcpp && \ +mkdir dep/netcdfcxx_legacy/build && \ +cd dep/netcdfcxx_legacy/build && \ +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/stow/netcdfcpp && \ +make && make install + +sudo stow -d /opt/stow -t /usr/local -S netcdfcpp + +# 3. 拷贝partow模版文件 +sudo cp -r dep/partow /opt/stow + +# 4. 编译安装gctl +sudo mkdir /opt/stow/gctl && \ +mkdir build && \ +cd build && \ +cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/stow/gctl && \ +make && make install + +sudo stow -d /opt/stow -t /usr/local -S gctl \ No newline at end of file diff --git a/lib/io/netcdf_io.h b/lib/io/netcdf_io.h index 671bce0..38d572d 100644 --- a/lib/io/netcdf_io.h +++ b/lib/io/netcdf_io.h @@ -35,6 +35,7 @@ // netcdf cpp head file #include "netcdfcxx_legacy/netcdfcpp.h" #include "typeinfo" +#include "cstring" namespace gctl { diff --git a/manager.sh b/manager.sh new file mode 100755 index 0000000..0a0f2e1 --- /dev/null +++ b/manager.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +if [[ $# == 0 || ${1} == "help" ]]; then + echo "Compiles executables/libraries and maintains installed files. Two tools 'Cmake' and 'stow' are empolyed here. For more information, see https://cmake.org and https://www.gnu.org/software/stow/." + echo "" + echo "School of Earth Sciences, Zhejiang University" + echo "Yi Zhang (yizhang-geo@zju.edu.cn)" + echo "" + echo "Usage: ./manager.sh [option] [Cmake options]" + echo "" + echo "Options:" + echo "(1) configure: Configure Cmake project(s). This option could take extra Cmake options as in